protected override void WriteHtml(HtmlTextWriter writer) { Guard.IsNotNull(writer, "writer"); if (Items.Any()) { if (SelectedIndex != -1 && Items.Count < SelectedIndex) { throw new ArgumentOutOfRangeException(TextResource.IndexOutOfRange); } if (HighlightPath) { Items.Each(HighlightSelectedItem); } INavigationComponentHtmlBuilder <MenuItem> builder = rendererFactory.Create(this); IHtmlNode menuTag = builder.Build(); Items.Each(item => item.WriteItem <Menu, MenuItem>(this, menuTag, builder)); menuTag.WriteTo(writer); } base.WriteHtml(writer); }
public static PanelBar CreatePanelbar(HtmlTextWriter writer, INavigationComponentHtmlBuilder <PanelBarItem> renderer) { Mock <HttpContextBase> httpContext = TestHelper.CreateMockedHttpContext(); if (writer != null) { httpContext.Setup(c => c.Request.Browser.CreateHtmlTextWriter(It.IsAny <TextWriter>())).Returns(writer); } Mock <INavigationComponentHtmlBuilderFactory <PanelBar, PanelBarItem> > panelBarRendererFactory = new Mock <INavigationComponentHtmlBuilderFactory <PanelBar, PanelBarItem> >(); Mock <IViewDataContainer> viewDataContainer = new Mock <IViewDataContainer>(); var viewDataDinctionary = new ViewDataDictionary(); viewDataDinctionary.Add("sample", TestHelper.CreateXmlSiteMap()); viewDataContainer.SetupGet(container => container.ViewData).Returns(viewDataDinctionary); Mock <IClientSideObjectWriterFactory> clientSideObjectWriterFactory = new Mock <IClientSideObjectWriterFactory>(); clientSideObjectWriter = new Mock <IClientSideObjectWriter>(); IUrlGenerator urlGeneratorObject = new UrlGenerator(); Mock <INavigationItemAuthorization> authorization = new Mock <INavigationItemAuthorization>(); TestHelper.RegisterDummyRoutes(); ViewContext viewContext = TestHelper.CreateViewContext(); viewContext.ViewData = viewDataDinctionary; authorization.Setup(a => a.IsAccessibleToUser(viewContext.RequestContext, It.IsAny <INavigatable>())).Returns(true); clientSideObjectWriterFactory.Setup(c => c.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <TextWriter>())).Returns(clientSideObjectWriter.Object); PanelBar panelBar = new PanelBar(viewContext, clientSideObjectWriterFactory.Object, urlGeneratorObject, authorization.Object, panelBarRendererFactory.Object); renderer = renderer ?? new PanelBarHtmlBuilder(panelBar, new Mock <IActionMethodCache>().Object); panelBarRendererFactory.Setup(f => f.Create(It.IsAny <PanelBar>())).Returns(renderer); return(panelBar); }
protected override void WriteHtml(HtmlTextWriter writer) { Guard.IsNotNull(writer, "writer"); if (Items.Any()) { if (SelectedIndex != -1 && Items.Count < SelectedIndex) { throw new ArgumentOutOfRangeException(TextResource.IndexOutOfRange); } int itemIndex = 0; INavigationComponentHtmlBuilder <PanelBarItem> builder = builderFactory.Create(this); IHtmlNode panelbarTag = builder.Build(); //this loop is required because of SelectedIndex feature. if (HighlightPath) { Items.Each(HighlightSelectedItem); } this.Items.Each(item => { if (item.Enabled) { PrepareItem(item, itemIndex); } itemIndex++; item.WriteItem <PanelBar, PanelBarItem>(this, panelbarTag, builder); }); panelbarTag.WriteTo(writer); } base.WriteHtml(writer); }
public static Menu CreateMenu(HtmlTextWriter writer, INavigationComponentHtmlBuilder <MenuItem> renderer) { Mock <HttpContextBase> httpContext = TestHelper.CreateMockedHttpContext(); if (writer != null) { httpContext.Setup(c => c.Request.Browser.CreateHtmlTextWriter(It.IsAny <TextWriter>())).Returns(writer); } Mock <INavigationComponentHtmlBuilderFactory <Menu, MenuItem> > menuRendererFactory = new Mock <INavigationComponentHtmlBuilderFactory <Menu, MenuItem> >(); Mock <IViewDataContainer> viewDataContainer = new Mock <IViewDataContainer>(); var viewDataDinctionary = new ViewDataDictionary(); viewDataDinctionary.Add("sample", TestHelper.CreateXmlSiteMap()); viewDataContainer.SetupGet(container => container.ViewData).Returns(viewDataDinctionary); // needed for testing serialization Mock <ClientSideObjectWriterFactory> clientSideObjectWriterFactory = new Mock <ClientSideObjectWriterFactory>(); UrlGenerator urlGeneratorObject = new UrlGenerator(); Mock <INavigationItemAuthorization> authorization = new Mock <INavigationItemAuthorization>(); TestHelper.RegisterDummyRoutes(); ViewContext viewContext = TestHelper.CreateViewContext(); viewContext.ViewData = viewDataDinctionary; authorization.Setup(a => a.IsAccessibleToUser(viewContext.RequestContext, It.IsAny <INavigatable>())).Returns(true); Menu menu = new Menu(viewContext, clientSideObjectWriterFactory.Object, urlGeneratorObject, authorization.Object, menuRendererFactory.Object); renderer = renderer ?? new MenuHtmlBuilder(menu, new Mock <IActionMethodCache>().Object); menuRendererFactory.Setup(f => f.Create(It.IsAny <Menu>())).Returns(renderer); return(menu); }
public static PanelBar CreatePanelbar(HtmlTextWriter writer, INavigationComponentHtmlBuilder<PanelBarItem> renderer) { Mock<HttpContextBase> httpContext = TestHelper.CreateMockedHttpContext(); if (writer != null) { httpContext.Setup(c => c.Request.Browser.CreateHtmlTextWriter(It.IsAny<TextWriter>())).Returns(writer); } Mock<INavigationComponentHtmlBuilderFactory<PanelBar, PanelBarItem>> panelBarRendererFactory = new Mock<INavigationComponentHtmlBuilderFactory<PanelBar, PanelBarItem>>(); Mock<IViewDataContainer> viewDataContainer = new Mock<IViewDataContainer>(); var viewDataDinctionary = new ViewDataDictionary(); viewDataDinctionary.Add("sample", TestHelper.CreateXmlSiteMap()); viewDataContainer.SetupGet(container => container.ViewData).Returns(viewDataDinctionary); Mock<IClientSideObjectWriterFactory> clientSideObjectWriterFactory = new Mock<IClientSideObjectWriterFactory>(); clientSideObjectWriter = new Mock<IClientSideObjectWriter>(); IUrlGenerator urlGeneratorObject = new UrlGenerator(); Mock<INavigationItemAuthorization> authorization = new Mock<INavigationItemAuthorization>(); TestHelper.RegisterDummyRoutes(); ViewContext viewContext = TestHelper.CreateViewContext(); viewContext.ViewData = viewDataDinctionary; authorization.Setup(a => a.IsAccessibleToUser(viewContext.RequestContext, It.IsAny<INavigatable>())).Returns(true); clientSideObjectWriterFactory.Setup(c => c.Create(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<TextWriter>())).Returns(clientSideObjectWriter.Object); PanelBar panelBar = new PanelBar(viewContext, clientSideObjectWriterFactory.Object, urlGeneratorObject, authorization.Object, panelBarRendererFactory.Object); renderer = renderer ?? new PanelBarHtmlBuilder(panelBar, new Mock<IActionMethodCache>().Object); panelBarRendererFactory.Setup(f => f.Create(It.IsAny<PanelBar>())).Returns(renderer); return panelBar; }
public static Menu CreateMenu(HtmlTextWriter writer, INavigationComponentHtmlBuilder<MenuItem> renderer) { Mock<HttpContextBase> httpContext = TestHelper.CreateMockedHttpContext(); if (writer != null) { httpContext.Setup(c => c.Request.Browser.CreateHtmlTextWriter(It.IsAny<TextWriter>())).Returns(writer); } Mock<INavigationComponentHtmlBuilderFactory<Menu, MenuItem>> menuRendererFactory = new Mock<INavigationComponentHtmlBuilderFactory<Menu, MenuItem>>(); Mock<IViewDataContainer> viewDataContainer = new Mock<IViewDataContainer>(); var viewDataDinctionary = new ViewDataDictionary(); viewDataDinctionary.Add("sample", TestHelper.CreateXmlSiteMap()); viewDataContainer.SetupGet(container => container.ViewData).Returns(viewDataDinctionary); // needed for testing serialization Mock<ClientSideObjectWriterFactory> clientSideObjectWriterFactory = new Mock<ClientSideObjectWriterFactory>(); UrlGenerator urlGeneratorObject = new UrlGenerator(); Mock<INavigationItemAuthorization> authorization = new Mock<INavigationItemAuthorization>(); TestHelper.RegisterDummyRoutes(); ViewContext viewContext = TestHelper.CreateViewContext(); viewContext.ViewData = viewDataDinctionary; authorization.Setup(a => a.IsAccessibleToUser(viewContext.RequestContext, It.IsAny<INavigatable>())).Returns(true); Menu menu = new Menu(viewContext, clientSideObjectWriterFactory.Object, urlGeneratorObject, authorization.Object, menuRendererFactory.Object); renderer = renderer ?? new MenuHtmlBuilder(menu, new Mock<IActionMethodCache>().Object); menuRendererFactory.Setup(f => f.Create(It.IsAny<Menu>())).Returns(renderer); return menu; }
public static void WriteItem <TComponent, TItem>(this TItem item, TComponent component, IHtmlNode parentTag, INavigationComponentHtmlBuilder <TItem> builder) where TItem : NavigationItem <TItem>, IContentContainer, INavigationItemContainer <TItem> where TComponent : WidgetBase, INavigationItemComponent <TItem> { var accessible = true; if (component.SecurityTrimming.Enabled) { accessible = item.IsAccessible(component.Authorization, ((WidgetBase)component).ViewContext); } if (component.ItemAction != null) { component.ItemAction(item); } if (item.Visible && accessible) { var hasAccessibleChildren = item.Items.Any() && item.Items.Any(i => i.Visible); if (component.SecurityTrimming.Enabled && hasAccessibleChildren) { hasAccessibleChildren = item.Items.IsAccessible(component.Authorization, ((WidgetBase)component).ViewContext); if (component.SecurityTrimming.HideParent && !hasAccessibleChildren) { return; } } IHtmlNode itemTag = builder.ItemTag(item).AppendTo(parentTag); builder.ItemInnerContentTag(item, hasAccessibleChildren).AppendTo(itemTag); if (item.Template.HasValue() || (item is IAsyncContentContainer ? !string.IsNullOrEmpty(((IAsyncContentContainer)item).ContentUrl) : false)) { builder.ItemContentTag(item).AppendTo(itemTag); } else if (hasAccessibleChildren) { IHtmlNode ul = builder.ChildrenTag(item).AppendTo(itemTag); item.Items.Each(child => child.WriteItem(component, ul, builder)); } } }