private void RenderHead(DropDownMenuRenderingContext renderingContext)
        {
            //  Head-Div is used to group the title and the button, providing a single point of reference
            //  for the popup-div.
            renderingContext.Writer.AddStyleAttribute("position", "relative");
            renderingContext.Writer.AddAttribute("id", renderingContext.Control.ClientID + "_HeadDiv");
            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClassHead);
            renderingContext.Writer.AddAttribute("OnMouseOver", "DropDownMenu_OnHeadMouseOver (this)");
            renderingContext.Writer.AddAttribute("OnMouseOut", "DropDownMenu_OnHeadMouseOut (this)");
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Div); // Begin Drop Down Head-Div

            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
            renderingContext.Writer.AddStyleAttribute("display", "inline");
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Table); // Begin Drop Down Button table
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Tr);

            RenderHeadTitle(renderingContext);
            RenderHeadButton(renderingContext);

            renderingContext.Writer.RenderEndTag();
            renderingContext.Writer.RenderEndTag(); // End Drop Down Button table

            renderingContext.Writer.RenderEndTag(); // End Drop Down Head-Div
        }
        private void RenderHeadButton(DropDownMenuRenderingContext renderingContext)
        {
            renderingContext.Writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "0%");
            renderingContext.Writer.AddStyleAttribute("text-align", "center");
            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClassHeadButton);
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Td); // Begin td

            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Id, renderingContext.Control.ClientID + "_DropDownMenuButton");
            renderingContext.Writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "1em");
            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Href, "#");
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.A); // Begin anchor

            renderingContext.Writer.AddStyleAttribute("vertical-align", "middle");
            renderingContext.Writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "none");
            string url = ResourceUrlFactory.CreateResourceUrl(typeof(DropDownMenuQuirksModeRenderer), ResourceType.Image, c_dropDownIcon).GetUrl();

            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Src, url);
            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Alt, string.Empty);
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Img);
            renderingContext.Writer.RenderEndTag(); // End img

            renderingContext.Writer.RenderEndTag(); // End anchor

            renderingContext.Writer.RenderEndTag(); // End td
        }
        private void RegisterMenuItems(DropDownMenuRenderingContext renderingContext)
        {
            string key = renderingContext.Control.UniqueID;

            if (renderingContext.Control.Enabled && !renderingContext.Control.Page.ClientScript.IsStartupScriptRegistered(typeof(DropDownMenuQuirksModeRenderer), key))
            {
                StringBuilder script = new StringBuilder();
                script.Append("DropDownMenu_AddMenuInfo" + " (\r\n\t");
                script.AppendFormat("new DropDownMenu_MenuInfo ('{0}', new Array (\r\n", renderingContext.Control.ClientID);
                bool isFirstItem = true;

                WebMenuItem[] menuItems;
                if (renderingContext.Control.EnableGrouping)
                {
                    menuItems = renderingContext.Control.MenuItems.GroupMenuItems(true);
                }
                else
                {
                    menuItems = renderingContext.Control.MenuItems.ToArray();
                }

                string category          = null;
                bool   isCategoryVisible = false;
                for (int i = 0; i < menuItems.Length; i++)
                {
                    WebMenuItem menuItem = menuItems[i];
                    if (renderingContext.Control.EnableGrouping && category != menuItem.Category)
                    {
                        category          = menuItem.Category;
                        isCategoryVisible = false;
                    }
                    if (!menuItem.EvaluateVisible())
                    {
                        continue;
                    }
                    if (renderingContext.Control.EnableGrouping && menuItem.IsSeparator && !isCategoryVisible)
                    {
                        continue;
                    }
                    if (renderingContext.Control.EnableGrouping)
                    {
                        isCategoryVisible = true;
                    }
                    if (isFirstItem)
                    {
                        isFirstItem = false;
                    }
                    else
                    {
                        script.AppendFormat(",\r\n");
                    }
                    AppendMenuItem(renderingContext, script, menuItem, renderingContext.Control.MenuItems.IndexOf(menuItem));
                }
                script.Append(" )");  // Close Array
                script.Append(" )");  // Close new MenuInfo
                script.Append(" );"); // Close AddMenuInfo
                renderingContext.Control.Page.ClientScript.RegisterStartupScriptBlock(renderingContext.Control, typeof(DropDownMenuQuirksModeRenderer), key, script.ToString());
            }
        }
        public void RenderAsContextMenu(DropDownMenuRenderingContext renderingContext)
        {
            ArgumentUtility.CheckNotNull("renderingContext", renderingContext);

            RegisterMenuItems(renderingContext);

            RegisterEventHandlerScripts(renderingContext);
        }
        private void AppendMenuItem(DropDownMenuRenderingContext renderingContext, StringBuilder stringBuilder, WebMenuItem menuItem, int menuItemIndex)
        {
            string href   = "null";
            string target = "null";

            bool isCommandEnabled = true;

            if (menuItem.Command != null)
            {
                bool isActive = menuItem.Command.Show == CommandShow.Always ||
                                renderingContext.Control.IsReadOnly && menuItem.Command.Show == CommandShow.ReadOnly ||
                                !renderingContext.Control.IsReadOnly && menuItem.Command.Show == CommandShow.EditMode;

                isCommandEnabled = isActive && menuItem.Command.Type != CommandType.None;
                if (isCommandEnabled)
                {
                    bool isPostBackCommand = menuItem.Command.Type == CommandType.Event ||
                                             menuItem.Command.Type == CommandType.WxeFunction;
                    if (isPostBackCommand)
                    {
                        // Clientside script creates an anchor with href="#" and onclick=function
                        string argument = menuItemIndex.ToString();
                        href = renderingContext.Control.Page.ClientScript.GetPostBackClientHyperlink(renderingContext.Control, argument);
                        href = ScriptUtility.EscapeClientScript(href);
                        href = "'" + href + "'";
                    }
                    else if (menuItem.Command.Type == CommandType.Href)
                    {
                        href   = menuItem.Command.HrefCommand.FormatHref(menuItemIndex.ToString(), menuItem.ItemID);
                        href   = "'" + renderingContext.Control.ResolveClientUrl(href) + "'";
                        target = "'" + menuItem.Command.HrefCommand.Target + "'";
                    }
                }
            }

            bool showIcon = menuItem.Style == WebMenuItemStyle.Icon || menuItem.Style == WebMenuItemStyle.IconAndText;
            bool showText = menuItem.Style == WebMenuItemStyle.Text || menuItem.Style == WebMenuItemStyle.IconAndText;

            string icon         = GetIconUrl(renderingContext, menuItem, showIcon);
            string disabledIcon = GetDisabledIconUrl(renderingContext, menuItem, showIcon);
            string text         = showText ? "'" + menuItem.Text + "'" : "null";

            bool isDisabled = !menuItem.EvaluateEnabled() || !isCommandEnabled;

            stringBuilder.AppendFormat(
                "\t\tnew DropDownMenu_ItemInfo ('{0}', '{1}', {2}, {3}, {4}, {5}, {6}, {7}, {8})",
                menuItemIndex,
                menuItem.Category,
                text,
                icon,
                disabledIcon,
                (int)menuItem.RequiredSelection,
                isDisabled ? "true" : "false",
                href,
                target);
        }
        protected virtual string GetDisabledIconUrl(DropDownMenuRenderingContext renderingContext, WebMenuItem menuItem, bool showIcon)
        {
            string disabledIcon = "null";

            if (showIcon && menuItem.DisabledIcon.HasRenderingInformation)
            {
                string url = menuItem.DisabledIcon.Url;
                disabledIcon = "'" + renderingContext.Control.ResolveClientUrl(url) + "'";
            }
            return(disabledIcon);
        }
        private void RenderHeadTitle(DropDownMenuRenderingContext renderingContext)
        {
            bool hasHeadTitleContents = true;

            if (renderingContext.Control.RenderHeadTitleMethod == null)
            {
                bool hasTitleText = !string.IsNullOrEmpty(renderingContext.Control.TitleText);
                bool hasTitleIcon = renderingContext.Control.TitleIcon != null && !string.IsNullOrEmpty(renderingContext.Control.TitleIcon.Url);
                hasHeadTitleContents = hasTitleText || hasTitleIcon;

                if (hasHeadTitleContents)
                {
                    renderingContext.Writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "1%"); //"100%");
                    renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClassHeadTitle);
                    renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Td);               // Begin td

                    if (renderingContext.Control.Enabled)
                    {
                        renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.A); // Begin title tag
                    }
                    else
                    {
                        renderingContext.Writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "GrayText");
                        renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Span); // Begin title tag
                    }
                    RenderIcon(renderingContext, renderingContext.Control.TitleIcon);
                    renderingContext.Writer.Write(renderingContext.Control.TitleText);
                    renderingContext.Writer.RenderEndTag(); // End title tag

                    renderingContext.Writer.RenderEndTag(); // End td
                }
            }
            else
            {
                renderingContext.Control.RenderHeadTitleMethod(renderingContext.Writer);
            }

            if (hasHeadTitleContents)
            {
                renderingContext.Writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "0%");
                renderingContext.Writer.AddStyleAttribute("padding-right", "0.3em");
                renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Td); //  Begin td
                renderingContext.Writer.RenderEndTag();
            }
        }
        private void RenderIcon(DropDownMenuRenderingContext renderingContext, IconInfo icon)
        {
            if (icon == null || string.IsNullOrEmpty(icon.Url))
            {
                return;
            }

            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Src, icon.Url);
            if (!icon.Width.IsEmpty && !icon.Height.IsEmpty)
            {
                renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Width, icon.Width.ToString());
                renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Height, icon.Height.ToString());
            }
            renderingContext.Writer.AddStyleAttribute("vertical-align", "middle");
            renderingContext.Writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "none");
            renderingContext.Writer.AddStyleAttribute("margin-right", "0.3em");
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Img);
            renderingContext.Writer.RenderEndTag();
        }
        public void Render(DropDownMenuRenderingContext renderingContext)
        {
            ArgumentUtility.CheckNotNull("renderingContext", renderingContext);

            RegisterMenuItems(renderingContext);

            RegisterEventHandlerScripts(renderingContext);

            AddStandardAttributesToRender(renderingContext);
            renderingContext.Writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline-block");
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Div);

            //  Menu-Div filling the control's div is required to apply internal css attributes
            //  for position, width and height. This allows the Head and th popup-div to align themselves
            renderingContext.Writer.AddStyleAttribute("position", "relative");
            renderingContext.Writer.AddAttribute("id", renderingContext.Control.MenuHeadClientID);
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Div); // Begin Menu-Div

            RenderHead(renderingContext);

            renderingContext.Writer.RenderEndTag(); // End Menu-Div
            renderingContext.Writer.RenderEndTag(); // End outer div
        }
        private void RegisterEventHandlerScripts(DropDownMenuRenderingContext renderingContext)
        {
            string key = typeof(DropDownMenuQuirksModeRenderer).FullName + "_Startup";

            if (!renderingContext.Control.Page.ClientScript.IsStartupScriptRegistered(typeof(DropDownMenuQuirksModeRenderer), key))
            {
                string styleSheetUrl =
                    ResourceUrlFactory.CreateResourceUrl(typeof(DropDownMenuQuirksModeRenderer), ResourceType.Html, "DropDownMenu.css").GetUrl();
                string script = string.Format("DropDownMenu_InitializeGlobals ('{0}');", styleSheetUrl);
                renderingContext.Control.Page.ClientScript.RegisterStartupScriptBlock(renderingContext.Control, typeof(DropDownMenuQuirksModeRenderer), key, script);
            }

            if (renderingContext.Control.Enabled && renderingContext.Control.Visible && renderingContext.Control.Mode == MenuMode.DropDownMenu)
            {
                key = renderingContext.Control.ClientID + "_ClickEventHandlerBindScript";
                if (!renderingContext.Control.Page.ClientScript.IsStartupScriptRegistered(typeof(DropDownMenuQuirksModeRenderer), key))
                {
                    string elementReference = string.Format("document.getElementById('{0}')", renderingContext.Control.MenuHeadClientID);
                    string menuIDReference  = string.Format("'{0}'", renderingContext.Control.ClientID);
                    string script           = renderingContext.Control.GetBindOpenEventScript(elementReference, menuIDReference, false);
                    renderingContext.Control.Page.ClientScript.RegisterStartupScriptBlock(renderingContext.Control, typeof(DropDownMenuQuirksModeRenderer), key, script);
                }
            }
        }