PageRenderTime 39ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/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
  1. /// Originally from Microsoft, Sample released under
  2. /// MS Permissive License
  3. /// http://www.microsoft.com/resources/sharedsource/licensingbasics/permissivelicense.mspx
  4. /// (see license-ms-permissive.txt in the root of the solution)
  5. ///
  6. /// Original source urls:
  7. /// http://www.asp.net/cssadapters/
  8. /// http://www.asp.net/CSSAdapters/WhitePaper.aspx
  9. ///
  10. ///
  11. ///
  12. /// with modifications by Joe Audette
  13. /// Last Modified: 10/1/2006
  14. /// added removed style and javascript for just ul li sitemap
  15. using System;
  16. using System.IO;
  17. using System.Web;
  18. using System.Web.Configuration;
  19. using System.Web.UI;
  20. using System.Web.UI.WebControls;
  21. using System.Web.UI.WebControls.Adapters;
  22. using System.Web.UI.HtmlControls;
  23. using mojoPortal.Web.UI;
  24. namespace mojoPortal.Web
  25. {
  26. public class SiteMapMenuAdapter : System.Web.UI.WebControls.Adapters.MenuAdapter
  27. {
  28. private bool useMenuTooltipForCustomCss = false;
  29. private WebControlAdapterExtender _extender = null;
  30. private WebControlAdapterExtender Extender
  31. {
  32. get
  33. {
  34. if (((_extender == null) && (Control != null)) ||
  35. ((_extender != null) && (Control != _extender.AdaptedControl)))
  36. {
  37. _extender = new WebControlAdapterExtender(Control);
  38. }
  39. return _extender;
  40. }
  41. }
  42. public SiteMapMenuAdapter()
  43. {
  44. //
  45. }
  46. protected override void OnInit(EventArgs e)
  47. {
  48. base.OnInit(e);
  49. if (Extender.AdapterEnabled)
  50. {
  51. RegisterScripts();
  52. }
  53. }
  54. protected override void OnLoad(EventArgs e)
  55. {
  56. base.OnLoad(e);
  57. mojoSiteMapMenu smm = Control as mojoSiteMapMenu;
  58. if (smm != null) { useMenuTooltipForCustomCss = smm.UseMenuTooltipForCustomCss; }
  59. }
  60. private void RegisterScripts()
  61. {
  62. //Extender.RegisterScripts();
  63. //string folderPath = "~/ClientScript";
  64. //string filePath = folderPath.EndsWith("/") ? folderPath + "MenuAdapter.js" : folderPath + "/MenuAdapter.js";
  65. //Page.ClientScript.RegisterClientScriptInclude(GetType(), GetType().ToString(), Page.ResolveUrl(filePath));
  66. }
  67. protected override void RenderBeginTag(HtmlTextWriter writer)
  68. {
  69. if (Extender.AdapterEnabled)
  70. {
  71. //Extender.RenderBeginTag(writer, "AspNet-Menu-" + Control.Orientation.ToString());
  72. Extender.RenderBeginTag(writer, "sitemap");
  73. }
  74. else
  75. {
  76. base.RenderBeginTag(writer);
  77. }
  78. }
  79. protected override void RenderEndTag(HtmlTextWriter writer)
  80. {
  81. if (Extender.AdapterEnabled)
  82. {
  83. Extender.RenderEndTag(writer);
  84. }
  85. else
  86. {
  87. base.RenderEndTag(writer);
  88. }
  89. }
  90. protected override void RenderContents(HtmlTextWriter writer)
  91. {
  92. if (Extender.AdapterEnabled)
  93. {
  94. writer.Indent++;
  95. BuildItems(Control.Items, true, writer);
  96. writer.Indent--;
  97. writer.WriteLine();
  98. }
  99. else
  100. {
  101. base.RenderContents(writer);
  102. }
  103. }
  104. private void BuildItems(MenuItemCollection items, bool isRoot, HtmlTextWriter writer)
  105. {
  106. if (items.Count > 0)
  107. {
  108. writer.WriteLine();
  109. writer.WriteBeginTag("ul");
  110. if (isRoot)
  111. {
  112. //writer.WriteAttribute("class", "AspNet-Menu");
  113. }
  114. writer.Write(HtmlTextWriter.TagRightChar);
  115. writer.Indent++;
  116. foreach (MenuItem item in items)
  117. {
  118. BuildItem(item, writer);
  119. }
  120. writer.Indent--;
  121. writer.WriteLine();
  122. writer.WriteEndTag("ul");
  123. }
  124. }
  125. private void BuildItem(MenuItem item, HtmlTextWriter writer)
  126. {
  127. Menu menu = Control as Menu;
  128. if ((menu != null) && (item != null) && (writer != null))
  129. {
  130. writer.WriteLine();
  131. writer.WriteBeginTag("li");
  132. //writer.WriteAttribute("class", item.ChildItems.Count > 0 ? "AspNet-Menu-WithChildren" : "AspNet-Menu-Leaf");
  133. writer.Write(HtmlTextWriter.TagRightChar);
  134. writer.Indent++;
  135. writer.WriteLine();
  136. if (((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null)) ||
  137. ((item.Depth >= menu.StaticDisplayLevels) && (menu.DynamicItemTemplate != null)))
  138. {
  139. writer.WriteBeginTag("div");
  140. //writer.WriteAttribute("class", GetItemClass(menu, item));
  141. writer.Write(HtmlTextWriter.TagRightChar);
  142. writer.Indent++;
  143. writer.WriteLine();
  144. MenuItemTemplateContainer container = new MenuItemTemplateContainer(menu.Items.IndexOf(item), item);
  145. if ((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null))
  146. {
  147. menu.StaticItemTemplate.InstantiateIn(container);
  148. }
  149. else
  150. {
  151. menu.DynamicItemTemplate.InstantiateIn(container);
  152. }
  153. container.DataBind();
  154. container.RenderControl(writer);
  155. writer.Indent--;
  156. writer.WriteLine();
  157. writer.WriteEndTag("div");
  158. }
  159. else
  160. {
  161. if ((item.NavigateUrl.Length > 0) || item.Selectable)
  162. {
  163. writer.WriteBeginTag("a");
  164. if (item.NavigateUrl.Length > 0)
  165. {
  166. //writer.WriteAttribute("href", Page.Server.HtmlEncode(menu.ResolveUrl(item.NavigateUrl)));
  167. writer.WriteAttribute("href", menu.ResolveUrl(item.NavigateUrl));
  168. }
  169. else
  170. {
  171. writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(menu, "b" + item.ValuePath.Replace(menu.PathSeparator.ToString(), "\\"), true));
  172. }
  173. //writer.WriteAttribute("class", GetItemClass(menu, item));
  174. if (item.Target.Length > 0)
  175. {
  176. writer.WriteAttribute("target", item.Target);
  177. }
  178. if (item.ToolTip.Length > 0)
  179. {
  180. writer.WriteAttribute("title", item.ToolTip);
  181. }
  182. else if (menu.ToolTip.Length > 0)
  183. {
  184. writer.WriteAttribute("title", menu.ToolTip);
  185. }
  186. writer.Write(HtmlTextWriter.TagRightChar);
  187. writer.Indent++;
  188. writer.WriteLine();
  189. }
  190. else
  191. {
  192. writer.WriteBeginTag("span");
  193. //writer.WriteAttribute("class", GetItemClass(menu, item));
  194. writer.Write(HtmlTextWriter.TagRightChar);
  195. writer.Indent++;
  196. writer.WriteLine();
  197. }
  198. if (item.ImageUrl.Length > 0)
  199. {
  200. writer.WriteBeginTag("img");
  201. writer.WriteAttribute("src", menu.ResolveClientUrl(item.ImageUrl));
  202. writer.WriteAttribute("alt", item.ToolTip.Length > 0 ? item.ToolTip : (menu.ToolTip.Length > 0 ? menu.ToolTip : item.Text));
  203. writer.Write(HtmlTextWriter.SelfClosingTagEnd);
  204. writer.Write("&nbsp;");
  205. }
  206. writer.Write(item.Text);
  207. if ((item.NavigateUrl.Length > 0) || item.Selectable)
  208. {
  209. writer.Indent--;
  210. writer.WriteLine();
  211. writer.WriteEndTag("a");
  212. }
  213. else
  214. {
  215. writer.Indent--;
  216. writer.WriteLine();
  217. writer.WriteEndTag("span");
  218. }
  219. }
  220. if ((item.ChildItems != null) && (item.ChildItems.Count > 0))
  221. {
  222. BuildItems(item.ChildItems, false, writer);
  223. }
  224. writer.Indent--;
  225. writer.WriteLine();
  226. writer.WriteEndTag("li");
  227. }
  228. }
  229. private string GetItemClass(Menu menu, MenuItem item)
  230. {
  231. //string value = "AspNet-Menu-NonLink";
  232. string value = String.Empty;
  233. //if (item != null)
  234. //{
  235. // if (((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null)) ||
  236. // ((item.Depth >= menu.StaticDisplayLevels) && (menu.DynamicItemTemplate != null)))
  237. // {
  238. // //value = "AspNet-Menu-Template";
  239. // }
  240. // else if ((item.NavigateUrl.Length > 0) || item.Selectable)
  241. // {
  242. // //value = "AspNet-Menu-Link";
  243. // }
  244. // if (item.Selected)
  245. // {
  246. // //value += " AspNet-Menu-Selected";
  247. // }
  248. // else if (IsChildItemSelected(item))
  249. // {
  250. // //value += " AspNet-Menu-ChildSelected";
  251. // }
  252. // else if (IsParentItemSelected(item))
  253. // {
  254. // //value += " AspNet-Menu-ParentSelected";
  255. // }
  256. //}
  257. return value;
  258. }
  259. private bool IsChildItemSelected(MenuItem item)
  260. {
  261. bool bRet = false;
  262. if ((item != null) && (item.ChildItems != null))
  263. {
  264. bRet = IsChildItemSelected(item.ChildItems);
  265. }
  266. return bRet;
  267. }
  268. private bool IsChildItemSelected(MenuItemCollection items)
  269. {
  270. bool bRet = false;
  271. if (items != null)
  272. {
  273. foreach (MenuItem item in items)
  274. {
  275. if (item.Selected || IsChildItemSelected(item.ChildItems))
  276. {
  277. bRet = true;
  278. break;
  279. }
  280. }
  281. }
  282. return bRet;
  283. }
  284. private bool IsParentItemSelected(MenuItem item)
  285. {
  286. bool bRet = false;
  287. if ((item != null) && (item.Parent != null))
  288. {
  289. if (item.Parent.Selected)
  290. {
  291. bRet = true;
  292. }
  293. else
  294. {
  295. bRet = IsParentItemSelected(item.Parent);
  296. }
  297. }
  298. return bRet;
  299. }
  300. }
  301. }