/Web/Controls/Adapters/SiteMapMenuAdapter.cs
C# | 347 lines | 300 code | 23 blank | 24 comment | 32 complexity | ea7eddb15f3f7f7cddd4b620f65994b3 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause, CPL-1.0, CC-BY-SA-3.0, GPL-2.0
- /// Originally from Microsoft, Sample released under
- /// MS Permissive License
- /// http://www.microsoft.com/resources/sharedsource/licensingbasics/permissivelicense.mspx
- /// (see license-ms-permissive.txt in the root of the solution)
- ///
- /// Original source urls:
- /// http://www.asp.net/cssadapters/
- /// http://www.asp.net/CSSAdapters/WhitePaper.aspx
- ///
- ///
- ///
- /// with modifications by Joe Audette
- /// Last Modified: 10/1/2006
- /// added removed style and javascript for just ul li sitemap
-
- using System;
- using System.IO;
- using System.Web;
- using System.Web.Configuration;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.Adapters;
- using System.Web.UI.HtmlControls;
- using mojoPortal.Web.UI;
-
- namespace mojoPortal.Web
- {
-
- public class SiteMapMenuAdapter : System.Web.UI.WebControls.Adapters.MenuAdapter
- {
- private bool useMenuTooltipForCustomCss = false;
-
- private WebControlAdapterExtender _extender = null;
- private WebControlAdapterExtender Extender
- {
- get
- {
- if (((_extender == null) && (Control != null)) ||
- ((_extender != null) && (Control != _extender.AdaptedControl)))
- {
- _extender = new WebControlAdapterExtender(Control);
- }
- return _extender;
- }
- }
-
- public SiteMapMenuAdapter()
- {
- //
- }
-
- protected override void OnInit(EventArgs e)
- {
- base.OnInit(e);
-
- if (Extender.AdapterEnabled)
- {
- RegisterScripts();
- }
- }
-
- protected override void OnLoad(EventArgs e)
- {
- base.OnLoad(e);
-
- mojoSiteMapMenu smm = Control as mojoSiteMapMenu;
- if (smm != null) { useMenuTooltipForCustomCss = smm.UseMenuTooltipForCustomCss; }
- }
-
- private void RegisterScripts()
- {
- //Extender.RegisterScripts();
- //string folderPath = "~/ClientScript";
- //string filePath = folderPath.EndsWith("/") ? folderPath + "MenuAdapter.js" : folderPath + "/MenuAdapter.js";
- //Page.ClientScript.RegisterClientScriptInclude(GetType(), GetType().ToString(), Page.ResolveUrl(filePath));
-
-
- }
-
- protected override void RenderBeginTag(HtmlTextWriter writer)
- {
- if (Extender.AdapterEnabled)
- {
- //Extender.RenderBeginTag(writer, "AspNet-Menu-" + Control.Orientation.ToString());
- Extender.RenderBeginTag(writer, "sitemap");
- }
- else
- {
- base.RenderBeginTag(writer);
- }
- }
-
- protected override void RenderEndTag(HtmlTextWriter writer)
- {
- if (Extender.AdapterEnabled)
- {
- Extender.RenderEndTag(writer);
- }
- else
- {
- base.RenderEndTag(writer);
- }
- }
-
- protected override void RenderContents(HtmlTextWriter writer)
- {
- if (Extender.AdapterEnabled)
- {
- writer.Indent++;
- BuildItems(Control.Items, true, writer);
- writer.Indent--;
- writer.WriteLine();
- }
- else
- {
- base.RenderContents(writer);
- }
- }
-
- private void BuildItems(MenuItemCollection items, bool isRoot, HtmlTextWriter writer)
- {
- if (items.Count > 0)
- {
- writer.WriteLine();
-
- writer.WriteBeginTag("ul");
- if (isRoot)
- {
- //writer.WriteAttribute("class", "AspNet-Menu");
- }
- writer.Write(HtmlTextWriter.TagRightChar);
- writer.Indent++;
-
- foreach (MenuItem item in items)
- {
- BuildItem(item, writer);
- }
-
- writer.Indent--;
- writer.WriteLine();
- writer.WriteEndTag("ul");
- }
- }
-
- private void BuildItem(MenuItem item, HtmlTextWriter writer)
- {
- Menu menu = Control as Menu;
- if ((menu != null) && (item != null) && (writer != null))
- {
- writer.WriteLine();
- writer.WriteBeginTag("li");
- //writer.WriteAttribute("class", item.ChildItems.Count > 0 ? "AspNet-Menu-WithChildren" : "AspNet-Menu-Leaf");
- writer.Write(HtmlTextWriter.TagRightChar);
- writer.Indent++;
- writer.WriteLine();
-
- if (((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null)) ||
- ((item.Depth >= menu.StaticDisplayLevels) && (menu.DynamicItemTemplate != null)))
- {
- writer.WriteBeginTag("div");
- //writer.WriteAttribute("class", GetItemClass(menu, item));
- writer.Write(HtmlTextWriter.TagRightChar);
- writer.Indent++;
- writer.WriteLine();
-
- MenuItemTemplateContainer container = new MenuItemTemplateContainer(menu.Items.IndexOf(item), item);
- if ((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null))
- {
- menu.StaticItemTemplate.InstantiateIn(container);
- }
- else
- {
- menu.DynamicItemTemplate.InstantiateIn(container);
- }
- container.DataBind();
- container.RenderControl(writer);
-
- writer.Indent--;
- writer.WriteLine();
- writer.WriteEndTag("div");
- }
- else
- {
- if ((item.NavigateUrl.Length > 0) || item.Selectable)
- {
- writer.WriteBeginTag("a");
- if (item.NavigateUrl.Length > 0)
- {
- //writer.WriteAttribute("href", Page.Server.HtmlEncode(menu.ResolveUrl(item.NavigateUrl)));
- writer.WriteAttribute("href", menu.ResolveUrl(item.NavigateUrl));
- }
- else
- {
- writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(menu, "b" + item.ValuePath.Replace(menu.PathSeparator.ToString(), "\\"), true));
- }
-
- //writer.WriteAttribute("class", GetItemClass(menu, item));
-
- if (item.Target.Length > 0)
- {
- writer.WriteAttribute("target", item.Target);
- }
- if (item.ToolTip.Length > 0)
- {
- writer.WriteAttribute("title", item.ToolTip);
- }
- else if (menu.ToolTip.Length > 0)
- {
- writer.WriteAttribute("title", menu.ToolTip);
- }
- writer.Write(HtmlTextWriter.TagRightChar);
- writer.Indent++;
- writer.WriteLine();
- }
- else
- {
- writer.WriteBeginTag("span");
- //writer.WriteAttribute("class", GetItemClass(menu, item));
- writer.Write(HtmlTextWriter.TagRightChar);
- writer.Indent++;
- writer.WriteLine();
- }
-
- if (item.ImageUrl.Length > 0)
- {
- writer.WriteBeginTag("img");
- writer.WriteAttribute("src", menu.ResolveClientUrl(item.ImageUrl));
- writer.WriteAttribute("alt", item.ToolTip.Length > 0 ? item.ToolTip : (menu.ToolTip.Length > 0 ? menu.ToolTip : item.Text));
- writer.Write(HtmlTextWriter.SelfClosingTagEnd);
- writer.Write(" ");
- }
-
- writer.Write(item.Text);
-
- if ((item.NavigateUrl.Length > 0) || item.Selectable)
- {
- writer.Indent--;
- writer.WriteLine();
- writer.WriteEndTag("a");
- }
- else
- {
- writer.Indent--;
- writer.WriteLine();
- writer.WriteEndTag("span");
- }
-
- }
-
- if ((item.ChildItems != null) && (item.ChildItems.Count > 0))
- {
- BuildItems(item.ChildItems, false, writer);
- }
-
- writer.Indent--;
- writer.WriteLine();
- writer.WriteEndTag("li");
- }
- }
-
- private string GetItemClass(Menu menu, MenuItem item)
- {
- //string value = "AspNet-Menu-NonLink";
- string value = String.Empty;
- //if (item != null)
- //{
- // if (((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null)) ||
- // ((item.Depth >= menu.StaticDisplayLevels) && (menu.DynamicItemTemplate != null)))
- // {
- // //value = "AspNet-Menu-Template";
- // }
- // else if ((item.NavigateUrl.Length > 0) || item.Selectable)
- // {
- // //value = "AspNet-Menu-Link";
- // }
-
- // if (item.Selected)
- // {
- // //value += " AspNet-Menu-Selected";
- // }
- // else if (IsChildItemSelected(item))
- // {
- // //value += " AspNet-Menu-ChildSelected";
- // }
- // else if (IsParentItemSelected(item))
- // {
- // //value += " AspNet-Menu-ParentSelected";
- // }
- //}
- return value;
- }
-
- private bool IsChildItemSelected(MenuItem item)
- {
- bool bRet = false;
-
- if ((item != null) && (item.ChildItems != null))
- {
- bRet = IsChildItemSelected(item.ChildItems);
- }
-
- return bRet;
- }
-
- private bool IsChildItemSelected(MenuItemCollection items)
- {
- bool bRet = false;
-
- if (items != null)
- {
- foreach (MenuItem item in items)
- {
- if (item.Selected || IsChildItemSelected(item.ChildItems))
- {
- bRet = true;
- break;
- }
- }
- }
-
- return bRet;
- }
-
- private bool IsParentItemSelected(MenuItem item)
- {
- bool bRet = false;
-
- if ((item != null) && (item.Parent != null))
- {
- if (item.Parent.Selected)
- {
- bRet = true;
- }
- else
- {
- bRet = IsParentItemSelected(item.Parent);
- }
- }
-
- return bRet;
- }
- }
-
-
-
-
- }