| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517 |
- //
- // Authors:
- // Lluis Sanchez Gual ([email protected])
- // Igor Zelmanovich ([email protected])
- // Marek Habersack <[email protected]>
- //
- // (C) 2010 Novell, Inc (http://novell.com)
- //
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- namespace System.Web.UI.WebControls
- {
- sealed class MenuTableRenderer : BaseMenuRenderer
- {
- const string onPreRenderScript = "var {0} = new Object ();\n{0}.webForm = {1};\n{0}.disappearAfter = {2};\n{0}.vertical = {3};";
- public override HtmlTextWriterTag Tag {
- get { return HtmlTextWriterTag.Table; }
-
- }
-
- public MenuTableRenderer (Menu owner)
- : base (owner)
- {
- }
-
- public override void AddAttributesToRender (HtmlTextWriter writer)
- {
- writer.AddAttribute ("cellpadding", "0", false);
- writer.AddAttribute ("cellspacing", "0", false);
- writer.AddAttribute ("border", "0", false);
- base.AddAttributesToRender (writer);
- }
-
- public override void PreRender (Page page, HtmlHead head, ClientScriptManager csm, string cmenu, StringBuilder script)
- {
- Menu owner = Owner;
- MenuItemStyle staticMenuItemStyle = owner.StaticMenuItemStyleInternal;
- SubMenuStyle staticMenuStyle = owner.StaticMenuStyleInternal;
- MenuItemStyle dynamicMenuItemStyle = owner.DynamicMenuItemStyleInternal;
- SubMenuStyle dynamicMenuStyle = owner.DynamicMenuStyleInternal;
- MenuItemStyleCollection levelMenuItemStyles = owner.LevelMenuItemStyles;
- List<Style> levelMenuItemLinkStyles = owner.LevelMenuItemLinkStyles;
- SubMenuStyleCollection levelSubMenuStyles = owner.LevelSubMenuStylesInternal;
- MenuItemStyle staticSelectedStyle = owner.StaticSelectedStyleInternal;
- MenuItemStyle dynamicSelectedStyle = owner.DynamicSelectedStyleInternal;
- MenuItemStyleCollection levelSelectedStyles = owner.LevelSelectedStylesInternal;
- List<Style> levelSelectedLinkStyles = owner.LevelSelectedLinkStyles;
- Style staticHoverStyle = owner.StaticHoverStyleInternal;
- Style dynamicHoverStyle = owner.DynamicHoverStyleInternal;
-
- if (!csm.IsClientScriptIncludeRegistered (typeof (Menu), "Menu.js")) {
- string url = csm.GetWebResourceUrl (typeof (Menu), "Menu.js");
- csm.RegisterClientScriptInclude (typeof (Menu), "Menu.js", url);
- }
-
- script.AppendFormat (onPreRenderScript,
- cmenu,
- page.IsMultiForm ? page.theForm : "window",
- ClientScriptManager.GetScriptLiteral (owner.DisappearAfter),
- ClientScriptManager.GetScriptLiteral (owner.Orientation == Orientation.Vertical));
- if (owner.DynamicHorizontalOffset != 0)
- script.Append (String.Concat (cmenu, ".dho = ", ClientScriptManager.GetScriptLiteral (owner.DynamicHorizontalOffset), ";\n"));
- if (owner.DynamicVerticalOffset != 0)
- script.Append (String.Concat (cmenu, ".dvo = ", ClientScriptManager.GetScriptLiteral (owner.DynamicVerticalOffset), ";\n"));
- // The order in which styles are defined matters when more than one class
- // is assigned to an element
- RegisterStyle (owner.PopOutBoxStyle, head);
- RegisterStyle (owner.ControlStyle, owner.ControlLinkStyle, head);
-
- if (staticMenuItemStyle != null)
- RegisterStyle (owner.StaticMenuItemStyle, owner.StaticMenuItemLinkStyle, head);
- if (staticMenuStyle != null)
- RegisterStyle (owner.StaticMenuStyle, head);
-
- if (dynamicMenuItemStyle != null)
- RegisterStyle (owner.DynamicMenuItemStyle, owner.DynamicMenuItemLinkStyle, head);
- if (dynamicMenuStyle != null)
- RegisterStyle (owner.DynamicMenuStyle, head);
- if (levelMenuItemStyles != null && levelMenuItemStyles.Count > 0) {
- levelMenuItemLinkStyles = new List<Style> (levelMenuItemStyles.Count);
- foreach (Style style in levelMenuItemStyles) {
- Style linkStyle = new Style ();
- levelMenuItemLinkStyles.Add (linkStyle);
- RegisterStyle (style, linkStyle, head);
- }
- }
-
- if (levelSubMenuStyles != null)
- foreach (Style style in levelSubMenuStyles)
- RegisterStyle (style, head);
- if (staticSelectedStyle != null)
- RegisterStyle (staticSelectedStyle, owner.StaticSelectedLinkStyle, head);
-
- if (dynamicSelectedStyle != null)
- RegisterStyle (dynamicSelectedStyle, owner.DynamicSelectedLinkStyle, head);
- if (levelSelectedStyles != null && levelSelectedStyles.Count > 0) {
- levelSelectedLinkStyles = new List<Style> (levelSelectedStyles.Count);
- foreach (Style style in levelSelectedStyles) {
- Style linkStyle = new Style ();
- levelSelectedLinkStyles.Add (linkStyle);
- RegisterStyle (style, linkStyle, head);
- }
- }
-
- if (staticHoverStyle != null) {
- if (head == null)
- throw new InvalidOperationException ("Using Menu.StaticHoverStyle requires Page.Header to be non-null (e.g. <head runat=\"server\" />).");
- RegisterStyle (staticHoverStyle, owner.StaticHoverLinkStyle, head);
- script.Append (String.Concat (cmenu, ".staticHover = ", ClientScriptManager.GetScriptLiteral (staticHoverStyle.RegisteredCssClass), ";\n"));
- script.Append (String.Concat (cmenu, ".staticLinkHover = ", ClientScriptManager.GetScriptLiteral (owner.StaticHoverLinkStyle.RegisteredCssClass), ";\n"));
- }
-
- if (dynamicHoverStyle != null) {
- if (head == null)
- throw new InvalidOperationException ("Using Menu.DynamicHoverStyle requires Page.Header to be non-null (e.g. <head runat=\"server\" />).");
- RegisterStyle (dynamicHoverStyle, owner.DynamicHoverLinkStyle, head);
- script.Append (String.Concat (cmenu, ".dynamicHover = ", ClientScriptManager.GetScriptLiteral (dynamicHoverStyle.RegisteredCssClass), ";\n"));
- script.Append (String.Concat (cmenu, ".dynamicLinkHover = ", ClientScriptManager.GetScriptLiteral (owner.DynamicHoverLinkStyle.RegisteredCssClass), ";\n"));
- }
- }
- public override void RenderBeginTag (HtmlTextWriter writer, string skipLinkText)
- {
- Menu owner = Owner;
-
- // <a href="#ID_SkipLink">
- writer.AddAttribute (HtmlTextWriterAttribute.Href, "#" + owner.ClientID + "_SkipLink");
- writer.RenderBeginTag (HtmlTextWriterTag.A);
-
- // <img alt="" height="0" width="0" src="" style="border-width:0px;"/>
- writer.AddAttribute (HtmlTextWriterAttribute.Alt, skipLinkText);
- writer.AddAttribute (HtmlTextWriterAttribute.Height, "0");
- writer.AddAttribute (HtmlTextWriterAttribute.Width, "0");
-
- Page page = owner.Page;
- ClientScriptManager csm = page != null ? page.ClientScript : new ClientScriptManager (null);
-
- writer.AddAttribute (HtmlTextWriterAttribute.Src, csm.GetWebResourceUrl (typeof (SiteMapPath), "transparent.gif"));
- writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px");
- writer.RenderBeginTag (HtmlTextWriterTag.Img);
- writer.RenderEndTag ();
-
- writer.RenderEndTag (); // </a>
- }
-
- public override void RenderEndTag (HtmlTextWriter writer)
- {
- Menu owner = Owner;
- if (owner.StaticDisplayLevels == 1 && owner.MaximumDynamicDisplayLevels > 0)
- owner.RenderDynamicMenu (writer, owner.Items);
- }
- public override void RenderContents (HtmlTextWriter writer)
- {
- Menu owner = Owner;
- RenderMenuBody (writer, owner.Items, owner.Orientation == Orientation.Vertical, false, false);
- }
-
- void RenderMenuBeginTagAttributes (HtmlTextWriter writer, bool dynamic, int menuLevel)
- {
- writer.AddAttribute ("cellpadding", "0", false);
- writer.AddAttribute ("cellspacing", "0", false);
- writer.AddAttribute ("border", "0", false);
- if (!dynamic) {
- SubMenuStyle style = new SubMenuStyle ();
- FillMenuStyle (null, dynamic, menuLevel, style);
- style.AddAttributesToRender (writer);
- }
- }
-
- public override void RenderMenuBeginTag (HtmlTextWriter writer, bool dynamic, int menuLevel)
- {
- RenderMenuBeginTagAttributes (writer, dynamic, menuLevel);
- writer.RenderBeginTag (HtmlTextWriterTag.Table);
- }
- void RenderMenuItemSpacing (HtmlTextWriter writer, Unit itemSpacing, bool vertical)
- {
- if (vertical) {
- writer.AddStyleAttribute ("height", itemSpacing.ToString ());
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);
- writer.RenderBeginTag (HtmlTextWriterTag.Td);
- writer.RenderEndTag ();
- writer.RenderEndTag ();
- } else {
- writer.AddStyleAttribute ("width", itemSpacing.ToString ());
- writer.RenderBeginTag (HtmlTextWriterTag.Td);
- writer.RenderEndTag ();
- }
- }
-
- public override void RenderMenuBody (HtmlTextWriter writer, MenuItemCollection items, bool vertical, bool dynamic, bool notLast)
- {
- Menu owner = Owner;
- if (!vertical)
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);
- int count = items.Count;
- var oc = new OwnerContext (this);
-
- for (int n = 0; n < count; n++) {
- MenuItem item = items [n];
- Adapters.MenuAdapter adapter = owner.Adapter as Adapters.MenuAdapter;
- if (adapter != null)
- adapter.RenderItem (writer, item, n);
- else
- RenderMenuItem (writer, item, vertical, (n + 1) == count ? notLast : true, n == 0, oc);
- }
- if (!vertical)
- writer.RenderEndTag (); // TR
- }
- protected override void RenderMenuItem (HtmlTextWriter writer, MenuItem item, bool vertical, bool notLast, bool isFirst, OwnerContext oc)
- {
- Menu owner = Owner;
- string clientID = oc.ClientID;
- bool displayChildren = owner.DisplayChildren (item);
- bool dynamicChildren = displayChildren && (item.Depth + 1 >= oc.StaticDisplayLevels);
- bool isDynamicItem = IsDynamicItem (owner, item);
- bool isVertical = oc.IsVertical || isDynamicItem;
- Unit itemSpacing = owner.GetItemSpacing (item, isDynamicItem);
- if (itemSpacing != Unit.Empty && (item.Depth > 0 || !isFirst))
- RenderMenuItemSpacing (writer, itemSpacing, isVertical);
- if(!String.IsNullOrEmpty(item.ToolTip))
- writer.AddAttribute (HtmlTextWriterAttribute.Title, item.ToolTip);
- if (isVertical)
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);
- string parentId = isDynamicItem ? "'" + item.Parent.Path + "'" : "null";
- if (dynamicChildren) {
- writer.AddAttribute ("onmouseover",
- "javascript:Menu_OverItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
- writer.AddAttribute ("onmouseout",
- "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "')");
- } else if (isDynamicItem) {
- writer.AddAttribute ("onmouseover",
- "javascript:Menu_OverDynamicLeafItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
- writer.AddAttribute ("onmouseout",
- "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
- } else {
- writer.AddAttribute ("onmouseover",
- "javascript:Menu_OverStaticLeafItem ('" + clientID + "','" + item.Path + "')");
- writer.AddAttribute ("onmouseout",
- "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "')");
- }
- writer.RenderBeginTag (HtmlTextWriterTag.Td);
- // Top separator image
- if (isDynamicItem)
- RenderSeparatorImage (owner, writer, oc.DynamicTopSeparatorImageUrl, false);
- else
- RenderSeparatorImage (owner, writer, oc.StaticTopSeparatorImageUrl, false);
- // Menu item box
-
- MenuItemStyle style = new MenuItemStyle ();
-
- if (oc.Header != null) {
- // styles are registered
- if (!isDynamicItem && oc.StaticMenuItemStyle != null) {
- AddCssClass (style, oc.StaticMenuItemStyle.CssClass);
- AddCssClass (style, oc.StaticMenuItemStyle.RegisteredCssClass);
- }
- if (isDynamicItem && oc.DynamicMenuItemStyle != null) {
- AddCssClass (style, oc.DynamicMenuItemStyle.CssClass);
- AddCssClass (style, oc.DynamicMenuItemStyle.RegisteredCssClass);
- }
- if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth) {
- AddCssClass (style, oc.LevelMenuItemStyles [item.Depth].CssClass);
- AddCssClass (style, oc.LevelMenuItemStyles [item.Depth].RegisteredCssClass);
- }
- if (item == oc.SelectedItem) {
- if (!isDynamicItem && oc.StaticSelectedStyle != null) {
- AddCssClass (style, oc.StaticSelectedStyle.CssClass);
- AddCssClass (style, oc.StaticSelectedStyle.RegisteredCssClass);
- }
- if (isDynamicItem && oc.DynamicSelectedStyle != null) {
- AddCssClass (style, oc.DynamicSelectedStyle.CssClass);
- AddCssClass (style, oc.DynamicSelectedStyle.RegisteredCssClass);
- }
- if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth) {
- AddCssClass (style, oc.LevelSelectedStyles [item.Depth].CssClass);
- AddCssClass (style, oc.LevelSelectedStyles [item.Depth].RegisteredCssClass);
- }
- }
- } else {
- // styles are not registered
- if (!isDynamicItem && oc.StaticMenuItemStyle != null)
- style.CopyFrom (oc.StaticMenuItemStyle);
- if (isDynamicItem && oc.DynamicMenuItemStyle != null)
- style.CopyFrom (oc.DynamicMenuItemStyle);
- if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth)
- style.CopyFrom (oc.LevelMenuItemStyles [item.Depth]);
- if (item == oc.SelectedItem) {
- if (!isDynamicItem && oc.StaticSelectedStyle != null)
- style.CopyFrom (oc.StaticSelectedStyle);
- if (isDynamicItem && oc.DynamicSelectedStyle != null)
- style.CopyFrom (oc.DynamicSelectedStyle);
- if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth)
- style.CopyFrom (oc.LevelSelectedStyles [item.Depth]);
- }
- }
- style.AddAttributesToRender (writer);
- writer.AddAttribute ("id", GetItemClientId (clientID, item, "i"));
- writer.AddAttribute ("cellpadding", "0", false);
- writer.AddAttribute ("cellspacing", "0", false);
- writer.AddAttribute ("border", "0", false);
- writer.AddAttribute ("width", "100%", false);
- writer.RenderBeginTag (HtmlTextWriterTag.Table);
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);
- // Menu item text
- if (isVertical)
- writer.AddStyleAttribute (HtmlTextWriterStyle.Width, "100%");
- if (!owner.ItemWrap)
- writer.AddStyleAttribute ("white-space", "nowrap");
- writer.RenderBeginTag (HtmlTextWriterTag.Td);
- RenderItemHref (owner, writer, item);
-
- Style linkStyle = new Style ();
- if (oc.Header != null) {
- // styles are registered
- AddCssClass (linkStyle, oc.ControlLinkStyle.RegisteredCssClass);
- if (!isDynamicItem && oc.StaticMenuItemStyle != null) {
- AddCssClass (linkStyle, oc.StaticMenuItemStyle.CssClass);
- AddCssClass (linkStyle, oc.StaticMenuItemLinkStyle.RegisteredCssClass);
- }
- if (isDynamicItem && oc.DynamicMenuItemStyle != null) {
- AddCssClass (linkStyle, oc.DynamicMenuItemStyle.CssClass);
- AddCssClass (linkStyle, oc.DynamicMenuItemLinkStyle.RegisteredCssClass);
- }
- if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth) {
- AddCssClass (linkStyle, oc.LevelMenuItemStyles [item.Depth].CssClass);
- AddCssClass (linkStyle, oc.LevelMenuItemLinkStyles [item.Depth].RegisteredCssClass);
- }
- if (item == oc.SelectedItem) {
- if (!isDynamicItem && oc.StaticSelectedStyle != null) {
- AddCssClass (linkStyle, oc.StaticSelectedStyle.CssClass);
- AddCssClass (linkStyle, oc.StaticSelectedLinkStyle.RegisteredCssClass);
- }
- if (isDynamicItem && oc.DynamicSelectedStyle != null) {
- AddCssClass (linkStyle, oc.DynamicSelectedStyle.CssClass);
- AddCssClass (linkStyle, oc.DynamicSelectedLinkStyle.RegisteredCssClass);
- }
- if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth) {
- AddCssClass (linkStyle, oc.LevelSelectedStyles [item.Depth].CssClass);
- AddCssClass (linkStyle, oc.LevelSelectedLinkStyles [item.Depth].RegisteredCssClass);
- }
- }
- } else {
- // styles are not registered
- linkStyle.CopyFrom (oc.ControlLinkStyle);
- if (!isDynamicItem && oc.StaticMenuItemStyle != null)
- linkStyle.CopyFrom (oc.StaticMenuItemLinkStyle);
- if (isDynamicItem && oc.DynamicMenuItemStyle != null)
- linkStyle.CopyFrom (oc.DynamicMenuItemLinkStyle);
- if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth)
- linkStyle.CopyFrom (oc.LevelMenuItemLinkStyles [item.Depth]);
- if (item == oc.SelectedItem) {
- if (!isDynamicItem && oc.StaticSelectedStyle != null)
- linkStyle.CopyFrom (oc.StaticSelectedLinkStyle);
- if (isDynamicItem && oc.DynamicSelectedStyle != null)
- linkStyle.CopyFrom (oc.DynamicSelectedLinkStyle);
- if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth)
- linkStyle.CopyFrom (oc.LevelSelectedLinkStyles [item.Depth]);
- }
- linkStyle.AlwaysRenderTextDecoration = true;
- }
- linkStyle.AddAttributesToRender (writer);
- writer.AddAttribute ("id", GetItemClientId (clientID, item, "l"));
-
- if (item.Depth > 0 && !isDynamicItem) {
- double value;
- #if NET_4_0
- Unit unit = oc.StaticSubMenuIndent;
- if (unit == Unit.Empty)
- value = 16;
- else
- value = unit.Value;
- #else
- value = oc.StaticSubMenuIndent.Value;
- #endif
- Unit indent = new Unit (value * item.Depth, oc.StaticSubMenuIndent.Type);
- writer.AddStyleAttribute (HtmlTextWriterStyle.MarginLeft, indent.ToString ());
- }
- writer.RenderBeginTag (HtmlTextWriterTag.A);
- owner.RenderItemContent (writer, item, isDynamicItem);
- writer.RenderEndTag (); // A
- writer.RenderEndTag (); // TD
- // Popup image
- if (dynamicChildren) {
- string popOutImage = GetPopOutImage (owner, item, isDynamicItem);
- if (popOutImage != null) {
- writer.RenderBeginTag (HtmlTextWriterTag.Td);
- writer.AddAttribute ("src", owner.ResolveClientUrl (popOutImage));
- writer.AddAttribute ("border", "0");
- string toolTip = String.Format (isDynamicItem ? oc.DynamicPopOutImageTextFormatString : oc.StaticPopOutImageTextFormatString, item.Text);
- writer.AddAttribute (HtmlTextWriterAttribute.Alt, toolTip);
- writer.RenderBeginTag (HtmlTextWriterTag.Img);
- writer.RenderEndTag (); // IMG
- writer.RenderEndTag (); // TD
- }
- }
- writer.RenderEndTag (); // TR
- writer.RenderEndTag (); // TABLE
-
- writer.RenderEndTag (); // TD
- if (!isVertical && itemSpacing == Unit.Empty && (notLast || (displayChildren && !dynamicChildren))) {
- writer.AddStyleAttribute ("width", "3px");
- writer.RenderBeginTag (HtmlTextWriterTag.Td);
- writer.RenderEndTag ();
- }
-
- // Bottom separator image
- string separatorImg = item.SeparatorImageUrl;
- if (separatorImg.Length == 0) {
- if (isDynamicItem)
- separatorImg = oc.DynamicBottomSeparatorImageUrl;
- else
- separatorImg = oc.StaticBottomSeparatorImageUrl;
- }
-
- if (separatorImg.Length > 0) {
- if (!isVertical)
- writer.RenderBeginTag (HtmlTextWriterTag.Td);
- RenderSeparatorImage (owner, writer, separatorImg, false);
- if (!isVertical)
- writer.RenderEndTag (); // TD
- }
- if (isVertical)
- writer.RenderEndTag (); // TR
- if (itemSpacing != Unit.Empty)
- RenderMenuItemSpacing (writer, itemSpacing, isVertical);
- // Submenu
- if (displayChildren && !dynamicChildren) {
- if (isVertical)
- writer.RenderBeginTag (HtmlTextWriterTag.Tr);
- writer.RenderBeginTag (HtmlTextWriterTag.Td);
- writer.AddAttribute ("width", "100%");
- owner.RenderMenu (writer, item.ChildItems, vertical, false, item.Depth + 1, notLast);
- if (item.Depth + 2 == oc.StaticDisplayLevels)
- owner.RenderDynamicMenu (writer, item.ChildItems);
- writer.RenderEndTag (); // TD
- if (isVertical)
- writer.RenderEndTag (); // TR
- }
- }
- public override bool IsDynamicItem (Menu owner, MenuItem item)
- {
- if (owner == null)
- throw new ArgumentNullException ("owner");
- if (item == null)
- throw new ArgumentNullException ("item");
-
- return item.Depth + 1 > owner.StaticDisplayLevels;
- }
- }
- }
|