private void WriteItem(TreeViewItem item, IHtmlNode parentTag, ITreeViewHtmlBuilder builder) { if (ItemAction != null) { ItemAction(item); } if (item.Visible) { if (item.IsAccessible(Authorization, ViewContext)) { var hasAccessibleChildren = item.Items.Any(x => x.Visible) && item.Items.IsAccessible(Authorization, ViewContext); IHtmlNode itemTag = builder.ItemTag(item, hasAccessibleChildren).AppendTo(parentTag); builder.ItemInnerContent(item).AppendTo(itemTag.Children[0]); if (item.LoadOnDemand || ShowCheckBox || item.Value.HasValue()) { builder.ItemHiddenInputValue(item).AppendTo(itemTag.Children[0]); } if (item.Template.HasValue()) { builder.ItemContentTag(item).AppendTo(itemTag); } else if (hasAccessibleChildren) { IHtmlNode ul = builder.ChildrenTag(item).AppendTo(itemTag); item.Items.Each(child => WriteItem(child, ul, builder)); } } } }
public static TreeView CreateTreeView(HtmlTextWriter writer, ITreeViewHtmlBuilder renderer, IClientSideObjectWriter clientSideObjectWriter) { Mock <HttpContextBase> httpContext = TestHelper.CreateMockedHttpContext(); if (writer != null) { httpContext.Setup(c => c.Request.Browser.CreateHtmlTextWriter(It.IsAny <TextWriter>())).Returns(writer); } urlGenerator = new UrlGenerator(); authorization = new Mock <INavigationItemAuthorization>(); Mock <ITreeViewHtmlBuilderFactory> TreeViewRendererFactory = new Mock <ITreeViewHtmlBuilderFactory>(); 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 <IClientSideObjectWriterFactory> clientSideObjectWriterFactory = new Mock <IClientSideObjectWriterFactory>(); viewContext = TestHelper.CreateViewContext(); viewContext.ViewData = viewDataDinctionary; clientSideObjectWriterFactory.Setup(c => c.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <TextWriter>())).Returns(clientSideObjectWriter); viewContext = TestHelper.CreateViewContext(); viewContext.ViewData = viewDataDinctionary; authorization.Setup(a => a.IsAccessibleToUser(viewContext.RequestContext, It.IsAny <INavigatable>())).Returns(true); TreeView TreeView = new TreeView(viewContext, clientSideObjectWriterFactory.Object, urlGenerator, authorization.Object, TreeViewRendererFactory.Object); renderer = renderer ?? new TreeViewHtmlBuilder(TreeView, new Mock <IActionMethodCache>().Object); TreeViewRendererFactory.Setup(f => f.Create(It.IsAny <TreeView>())).Returns(renderer); return(TreeView); }
public static TreeView CreateTreeView(HtmlTextWriter writer, ITreeViewHtmlBuilder renderer, IClientSideObjectWriter clientSideObjectWriter) { Mock<HttpContextBase> httpContext = TestHelper.CreateMockedHttpContext(); if (writer != null) { httpContext.Setup(c => c.Request.Browser.CreateHtmlTextWriter(It.IsAny<TextWriter>())).Returns(writer); } urlGenerator = new UrlGenerator(); authorization = new Mock<INavigationItemAuthorization>(); Mock<ITreeViewHtmlBuilderFactory> TreeViewRendererFactory = new Mock<ITreeViewHtmlBuilderFactory>(); 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<IClientSideObjectWriterFactory> clientSideObjectWriterFactory = new Mock<IClientSideObjectWriterFactory>(); viewContext = TestHelper.CreateViewContext(); viewContext.ViewData = viewDataDinctionary; clientSideObjectWriterFactory.Setup(c => c.Create(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<TextWriter>())).Returns(clientSideObjectWriter); viewContext = TestHelper.CreateViewContext(); viewContext.ViewData = viewDataDinctionary; authorization.Setup(a => a.IsAccessibleToUser(viewContext.RequestContext, It.IsAny<INavigatable>())).Returns(true); TreeView TreeView = new TreeView(viewContext, clientSideObjectWriterFactory.Object, urlGenerator, authorization.Object, TreeViewRendererFactory.Object); renderer = renderer ?? new TreeViewHtmlBuilder(TreeView, new Mock<IActionMethodCache>().Object); TreeViewRendererFactory.Setup(f => f.Create(It.IsAny<TreeView>())).Returns(renderer); return TreeView; }
protected override void WriteHtml(HtmlTextWriter writer) { Guard.IsNotNull(writer, "writer"); if (DragAndDrop.Enabled) { ScriptFileNames.Insert(1, "telerik.draganddrop.js"); } ITreeViewHtmlBuilder builder = builderFactory.Create(this); IHtmlNode treeViewTag = builder.TreeViewTag(); if (Items.Any()) { if (SelectedIndex != -1 && Items.Count < SelectedIndex) { throw new ArgumentOutOfRangeException(TextResource.IndexOutOfRange); } //this loop is required because of SelectedIndex feature. if (HighlightPath) { Items.Each(HighlightSelectedItem); } Items.Each((item, index) => { if (!this.isPathHighlighted) { if (index == this.SelectedIndex) { item.Selected = true; if (item.Items.Any() || item.Template.HasValue()) { item.Expanded = true; } } } if (item.LoadOnDemand) { item.Expanded = false; } if (ExpandAll) { ExpandAllChildrens(item); } if (string.IsNullOrEmpty(item.Value)) { item.Value = item.Text; } WriteItem(item, treeViewTag.Children[0], builder); }); } treeViewTag.WriteTo(writer); base.WriteHtml(writer); }