Пример #1
0
        private void RenderVerb(HtmlTextWriter writer, WebPart webPart, WebPartVerb verb)
        {
            WebControl verbControl;
            bool       isEnabled = Zone.IsEnabled && verb.Enabled;

            ButtonType verbButtonType = Zone.TitleBarVerbButtonType;

            if (verb == Zone.HelpVerb)
            {
                //
                string resolvedHelpUrl = Zone.ResolveClientUrl(webPart.HelpUrl);

                //
                if (verbButtonType == ButtonType.Button)
                {
                    ZoneButton button = new ZoneButton(Zone, null);

                    if (isEnabled)
                    {
                        if (Zone.RenderClientScript)
                        {
                            button.OnClientClick = "__wpm.ShowHelp('" +
                                                   Util.QuoteJScriptString(resolvedHelpUrl) +
                                                   "', " +
                                                   ((int)webPart.HelpMode).ToString(CultureInfo.InvariantCulture) +
                                                   ");return;";
                        }
                        else
                        {
                            if (webPart.HelpMode != WebPartHelpMode.Navigate)
                            {
                                button.OnClientClick = "window.open('" +
                                                       Util.QuoteJScriptString(resolvedHelpUrl) +
                                                       "', '_blank', 'scrollbars=yes,resizable=yes,status=no,toolbar=no,menubar=no,location=no');return;";
                            }
                            else
                            {
                                button.OnClientClick = "window.location.href='" +
                                                       Util.QuoteJScriptString(resolvedHelpUrl) +
                                                       "';return;";
                            }
                        }
                    }
                    button.Text = verb.Text;
                    verbControl = button;
                }
                else
                {
                    HyperLink hyperLink = new HyperLink();

                    switch (webPart.HelpMode)
                    {
                    case WebPartHelpMode.Modal:
                        if (!Zone.RenderClientScript)
                        {
                            goto case WebPartHelpMode.Modeless;
                        }
                        hyperLink.NavigateUrl = "javascript:__wpm.ShowHelp('" +
                                                Util.QuoteJScriptString(resolvedHelpUrl) +
                                                "', 0)";
                        break;

                    case WebPartHelpMode.Modeless:
                        hyperLink.NavigateUrl = resolvedHelpUrl;
                        hyperLink.Target      = "_blank";
                        break;

                    case WebPartHelpMode.Navigate:
                        hyperLink.NavigateUrl = resolvedHelpUrl;
                        break;
                    }

                    hyperLink.Text = verb.Text;
                    if (verbButtonType == ButtonType.Image)
                    {
                        hyperLink.ImageUrl = verb.ImageUrl;
                    }
                    verbControl = hyperLink;
                }
            }
            else if (verb == Zone.ExportVerb)
            {
                string exportUrl = _manager.GetExportUrl(webPart);
                if (verbButtonType == ButtonType.Button)
                {
                    ZoneButton button = new ZoneButton(Zone, String.Empty);
                    button.Text = verb.Text;

                    if (isEnabled)
                    {
                        if ((webPart.ExportMode == WebPartExportMode.All) &&
                            (_personalizationScope == PersonalizationScope.User))
                        {
                            if (Zone.RenderClientScript)
                            {
                                button.OnClientClick = "__wpm.ExportWebPart('" +
                                                       Util.QuoteJScriptString(exportUrl) +
                                                       "', true, false);return false;";
                            }
                            else
                            {
                                button.OnClientClick = "if(__wpmExportWarning.length == 0 || "
                                                       + "confirm(__wpmExportWarning)){window.location='" +
                                                       Util.QuoteJScriptString(exportUrl) +
                                                       "';}return false;";
                            }
                        }
                        else
                        {
                            button.OnClientClick = "window.location='" +
                                                   Util.QuoteJScriptString(exportUrl) +
                                                   "';return false;";
                        }
                    }

                    verbControl = button;
                }
                else
                {
                    // Special case for export which must be a plain HyperLink
                    // (href=javascript:void(0) would ruin any redirecting script)
                    HyperLink link = new HyperLink();
                    link.Text = verb.Text;
                    if (verbButtonType == ButtonType.Image)
                    {
                        link.ImageUrl = verb.ImageUrl;
                    }
                    link.NavigateUrl = exportUrl;
                    if (webPart.ExportMode == WebPartExportMode.All)
                    {
                        // Confirm before exporting
                        if (Zone.RenderClientScript)
                        {
                            link.Attributes.Add("onclick", "return __wpm.ExportWebPart('', true, true)");
                        }
                        else
                        {
                            string onclick = "return (__wpmExportWarning.length == 0 || confirm(__wpmExportWarning))";
                            link.Attributes.Add("onclick", onclick);
                        }
                    }
                    verbControl = link;
                }
            }
            else
            {
                string eventArgument      = verb.GetEventArgument(webPart.ID);
                string clientClickHandler = verb.ClientClickHandler;

                if (verbButtonType == ButtonType.Button)
                {
                    ZoneButton button = new ZoneButton(Zone, eventArgument);
                    button.Text = verb.Text;
                    if (!String.IsNullOrEmpty(clientClickHandler) && isEnabled)
                    {
                        button.OnClientClick = clientClickHandler;
                    }
                    verbControl = button;
                }
                else
                {
                    ZoneLinkButton linkButton = new ZoneLinkButton(Zone, eventArgument);
                    linkButton.Text = verb.Text;
                    if (verbButtonType == ButtonType.Image)
                    {
                        linkButton.ImageUrl = verb.ImageUrl;
                    }
                    if (!String.IsNullOrEmpty(clientClickHandler) && isEnabled)
                    {
                        linkButton.OnClientClick = clientClickHandler;
                    }
                    verbControl = linkButton;
                }

                if (_manager != null && isEnabled)
                {
                    if (verb == Zone.CloseVerb)
                    {
                        // PERF: First check if this WebPart even has provider connection points
                        ProviderConnectionPointCollection connectionPoints = _manager.GetProviderConnectionPoints(webPart);
                        if (connectionPoints != null && connectionPoints.Count > 0 &&
                            Connections.ContainsProvider(webPart))
                        {
                            string onclick = "if (__wpmCloseProviderWarning.length >= 0 && " +
                                             "!confirm(__wpmCloseProviderWarning)) { return false; }";
                            verbControl.Attributes.Add("onclick", onclick);
                        }
                    }
                    else if (verb == Zone.DeleteVerb)
                    {
                        string onclick = "if (__wpmDeleteWarning.length >= 0 && !confirm(__wpmDeleteWarning)) { return false; }";
                        verbControl.Attributes.Add("onclick", onclick);
                    }
                }
            }

            verbControl.ApplyStyle(Zone.TitleBarVerbStyle);
            verbControl.ToolTip = String.Format(CultureInfo.CurrentCulture, verb.Description, webPart.DisplayTitle);
            verbControl.Enabled = verb.Enabled;
            verbControl.Page    = _page;
            verbControl.RenderControl(writer);
        }
Пример #2
0
        private void RenderMenuPopup(HtmlTextWriter writer, ICollection verbs, string clientID, WebPart associatedWebPart, WebPartManager webPartManager)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Id, clientID + "Menu");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            bool             isEmpty        = true;
            WebPartMenuStyle menuPopupStyle = this._menuUser.MenuPopupStyle;

            if (menuPopupStyle != null)
            {
                menuPopupStyle.AddAttributesToRender(writer, this._menuUser as WebControl);
                isEmpty = menuPopupStyle.Width.IsEmpty;
            }
            else
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
                writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "1");
                writer.AddStyleAttribute(HtmlTextWriterStyle.BorderCollapse, "collapse");
            }
            if (isEmpty)
            {
                writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            }
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddStyleAttribute(HtmlTextWriterStyle.WhiteSpace, "nowrap");
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            bool isEnabled = associatedWebPart.Zone.IsEnabled;

            foreach (WebPartVerb verb in verbs)
            {
                string description;
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                if (associatedWebPart != null)
                {
                    description = string.Format(CultureInfo.CurrentCulture, verb.Description, new object[] { associatedWebPart.DisplayTitle });
                }
                else
                {
                    description = verb.Description;
                }
                if (description.Length != 0)
                {
                    writer.AddAttribute(HtmlTextWriterAttribute.Title, description);
                }
                bool flag3 = isEnabled && verb.Enabled;
                if (verb is WebPartHelpVerb)
                {
                    string str2 = associatedWebPart.ResolveClientUrl(associatedWebPart.HelpUrl);
                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (flag3)
                    {
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "document.body.__wpm.ShowHelp('" + Util.QuoteJScriptString(str2) + "', " + ((int)associatedWebPart.HelpMode).ToString(CultureInfo.InvariantCulture) + ")");
                    }
                }
                else if (verb is WebPartExportVerb)
                {
                    string exportUrl = webPartManager.GetExportUrl(associatedWebPart);
                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (flag3)
                    {
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "document.body.__wpm.ExportWebPart('" + Util.QuoteJScriptString(exportUrl) + ((associatedWebPart.ExportMode == WebPartExportMode.All) ? "', true, false)" : "', false, false)"));
                    }
                }
                else
                {
                    string postBackTarget = this._menuUser.PostBackTarget;
                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (flag3)
                    {
                        string eventArgument = verb.EventArgument;
                        if (associatedWebPart != null)
                        {
                            eventArgument = verb.GetEventArgument(associatedWebPart.ID);
                        }
                        string str6 = null;
                        if (!string.IsNullOrEmpty(eventArgument))
                        {
                            str6 = "document.body.__wpm.SubmitPage('" + Util.QuoteJScriptString(postBackTarget) + "', '" + Util.QuoteJScriptString(eventArgument) + "');";
                            this._menuUser.Page.ClientScript.RegisterForEventValidation(postBackTarget, eventArgument);
                        }
                        string str7 = null;
                        if (!string.IsNullOrEmpty(verb.ClientClickHandler))
                        {
                            str7 = "document.body.__wpm.Execute('" + Util.QuoteJScriptString(Util.EnsureEndWithSemiColon(verb.ClientClickHandler)) + "')";
                        }
                        string str8 = string.Empty;
                        if ((str6 != null) && (str7 != null))
                        {
                            str8 = "if(" + str7 + "){" + str6 + "}";
                        }
                        else if (str6 != null)
                        {
                            str8 = str6;
                        }
                        else if (str7 != null)
                        {
                            str8 = str7;
                        }
                        if (verb is WebPartCloseVerb)
                        {
                            ProviderConnectionPointCollection providerConnectionPoints = webPartManager.GetProviderConnectionPoints(associatedWebPart);
                            if (((providerConnectionPoints != null) && (providerConnectionPoints.Count > 0)) && webPartManager.Connections.ContainsProvider(associatedWebPart))
                            {
                                str8 = "if(document.body.__wpmCloseProviderWarning.length == 0 || confirm(document.body.__wpmCloseProviderWarning)){" + str8 + "}";
                            }
                        }
                        else if (verb is WebPartDeleteVerb)
                        {
                            str8 = "if(document.body.__wpmDeleteWarning.length == 0 || confirm(document.body.__wpmDeleteWarning)){" + str8 + "}";
                        }
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick, str8);
                    }
                }
                string str9 = "menuItem";
                if (!verb.Enabled)
                {
                    if (associatedWebPart.Zone.RenderingCompatibility < VersionUtil.Framework40)
                    {
                        writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
                    }
                    else if (!string.IsNullOrEmpty(WebControl.DisabledCssClass))
                    {
                        str9 = WebControl.DisabledCssClass + " " + str9;
                    }
                }
                writer.AddAttribute(HtmlTextWriterAttribute.Class, str9);
                writer.RenderBeginTag(HtmlTextWriterTag.A);
                string imageUrl = verb.ImageUrl;
                if (imageUrl.Length != 0)
                {
                    imageUrl = this._menuUser.UrlResolver.ResolveClientUrl(imageUrl);
                }
                else if (verb.Checked)
                {
                    imageUrl = this._menuUser.CheckImageUrl;
                    if (imageUrl.Length == 0)
                    {
                        imageUrl = DefaultCheckImageUrl;
                    }
                }
                else
                {
                    imageUrl = webPartManager.SpacerImageUrl;
                }
                writer.AddAttribute(HtmlTextWriterAttribute.Src, imageUrl);
                writer.AddAttribute(HtmlTextWriterAttribute.Alt, description, true);
                writer.AddAttribute(HtmlTextWriterAttribute.Width, "16");
                writer.AddAttribute(HtmlTextWriterAttribute.Height, "16");
                writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "none");
                writer.AddStyleAttribute("vertical-align", "middle");
                if (verb.Checked)
                {
                    Style checkImageStyle = this._menuUser.CheckImageStyle;
                    if (checkImageStyle != null)
                    {
                        checkImageStyle.AddAttributesToRender(writer, this._menuUser as WebControl);
                    }
                }
                writer.RenderBeginTag(HtmlTextWriterTag.Img);
                writer.RenderEndTag();
                writer.Write("&nbsp;");
                writer.Write(verb.Text);
                writer.Write("&nbsp;");
                writer.RenderEndTag();
                writer.RenderEndTag();
            }
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
        }
 private void RenderMenuPopup(HtmlTextWriter writer, ICollection verbs, string clientID, WebPart associatedWebPart, WebPartManager webPartManager)
 {
     writer.AddAttribute(HtmlTextWriterAttribute.Id, clientID + "Menu");
     writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
     writer.RenderBeginTag(HtmlTextWriterTag.Div);
     bool isEmpty = true;
     WebPartMenuStyle menuPopupStyle = this._menuUser.MenuPopupStyle;
     if (menuPopupStyle != null)
     {
         menuPopupStyle.AddAttributesToRender(writer, this._menuUser as WebControl);
         isEmpty = menuPopupStyle.Width.IsEmpty;
     }
     else
     {
         writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
         writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "1");
         writer.AddStyleAttribute(HtmlTextWriterStyle.BorderCollapse, "collapse");
     }
     if (isEmpty)
     {
         writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
     }
     writer.RenderBeginTag(HtmlTextWriterTag.Table);
     writer.RenderBeginTag(HtmlTextWriterTag.Tr);
     writer.AddStyleAttribute(HtmlTextWriterStyle.WhiteSpace, "nowrap");
     writer.RenderBeginTag(HtmlTextWriterTag.Td);
     bool isEnabled = associatedWebPart.Zone.IsEnabled;
     foreach (WebPartVerb verb in verbs)
     {
         string description;
         writer.RenderBeginTag(HtmlTextWriterTag.Div);
         if (associatedWebPart != null)
         {
             description = string.Format(CultureInfo.CurrentCulture, verb.Description, new object[] { associatedWebPart.DisplayTitle });
         }
         else
         {
             description = verb.Description;
         }
         if (description.Length != 0)
         {
             writer.AddAttribute(HtmlTextWriterAttribute.Title, description);
         }
         bool flag3 = isEnabled && verb.Enabled;
         if (verb is WebPartHelpVerb)
         {
             string str2 = associatedWebPart.ResolveClientUrl(associatedWebPart.HelpUrl);
             writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
             if (flag3)
             {
                 writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "document.body.__wpm.ShowHelp('" + Util.QuoteJScriptString(str2) + "', " + ((int) associatedWebPart.HelpMode).ToString(CultureInfo.InvariantCulture) + ")");
             }
         }
         else if (verb is WebPartExportVerb)
         {
             string exportUrl = webPartManager.GetExportUrl(associatedWebPart);
             writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
             if (flag3)
             {
                 writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "document.body.__wpm.ExportWebPart('" + Util.QuoteJScriptString(exportUrl) + ((associatedWebPart.ExportMode == WebPartExportMode.All) ? "', true, false)" : "', false, false)"));
             }
         }
         else
         {
             string postBackTarget = this._menuUser.PostBackTarget;
             writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
             if (flag3)
             {
                 string eventArgument = verb.EventArgument;
                 if (associatedWebPart != null)
                 {
                     eventArgument = verb.GetEventArgument(associatedWebPart.ID);
                 }
                 string str6 = null;
                 if (!string.IsNullOrEmpty(eventArgument))
                 {
                     str6 = "document.body.__wpm.SubmitPage('" + Util.QuoteJScriptString(postBackTarget) + "', '" + Util.QuoteJScriptString(eventArgument) + "');";
                     this._menuUser.Page.ClientScript.RegisterForEventValidation(postBackTarget, eventArgument);
                 }
                 string str7 = null;
                 if (!string.IsNullOrEmpty(verb.ClientClickHandler))
                 {
                     str7 = "document.body.__wpm.Execute('" + Util.QuoteJScriptString(Util.EnsureEndWithSemiColon(verb.ClientClickHandler)) + "')";
                 }
                 string str8 = string.Empty;
                 if ((str6 != null) && (str7 != null))
                 {
                     str8 = "if(" + str7 + "){" + str6 + "}";
                 }
                 else if (str6 != null)
                 {
                     str8 = str6;
                 }
                 else if (str7 != null)
                 {
                     str8 = str7;
                 }
                 if (verb is WebPartCloseVerb)
                 {
                     ProviderConnectionPointCollection providerConnectionPoints = webPartManager.GetProviderConnectionPoints(associatedWebPart);
                     if (((providerConnectionPoints != null) && (providerConnectionPoints.Count > 0)) && webPartManager.Connections.ContainsProvider(associatedWebPart))
                     {
                         str8 = "if(document.body.__wpmCloseProviderWarning.length == 0 || confirm(document.body.__wpmCloseProviderWarning)){" + str8 + "}";
                     }
                 }
                 else if (verb is WebPartDeleteVerb)
                 {
                     str8 = "if(document.body.__wpmDeleteWarning.length == 0 || confirm(document.body.__wpmDeleteWarning)){" + str8 + "}";
                 }
                 writer.AddAttribute(HtmlTextWriterAttribute.Onclick, str8);
             }
         }
         string str9 = "menuItem";
         if (!verb.Enabled)
         {
             if (associatedWebPart.Zone.RenderingCompatibility < VersionUtil.Framework40)
             {
                 writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
             }
             else if (!string.IsNullOrEmpty(WebControl.DisabledCssClass))
             {
                 str9 = WebControl.DisabledCssClass + " " + str9;
             }
         }
         writer.AddAttribute(HtmlTextWriterAttribute.Class, str9);
         writer.RenderBeginTag(HtmlTextWriterTag.A);
         string imageUrl = verb.ImageUrl;
         if (imageUrl.Length != 0)
         {
             imageUrl = this._menuUser.UrlResolver.ResolveClientUrl(imageUrl);
         }
         else if (verb.Checked)
         {
             imageUrl = this._menuUser.CheckImageUrl;
             if (imageUrl.Length == 0)
             {
                 imageUrl = DefaultCheckImageUrl;
             }
         }
         else
         {
             imageUrl = webPartManager.SpacerImageUrl;
         }
         writer.AddAttribute(HtmlTextWriterAttribute.Src, imageUrl);
         writer.AddAttribute(HtmlTextWriterAttribute.Alt, description, true);
         writer.AddAttribute(HtmlTextWriterAttribute.Width, "16");
         writer.AddAttribute(HtmlTextWriterAttribute.Height, "16");
         writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "none");
         writer.AddStyleAttribute("vertical-align", "middle");
         if (verb.Checked)
         {
             Style checkImageStyle = this._menuUser.CheckImageStyle;
             if (checkImageStyle != null)
             {
                 checkImageStyle.AddAttributesToRender(writer, this._menuUser as WebControl);
             }
         }
         writer.RenderBeginTag(HtmlTextWriterTag.Img);
         writer.RenderEndTag();
         writer.Write("&nbsp;");
         writer.Write(verb.Text);
         writer.Write("&nbsp;");
         writer.RenderEndTag();
         writer.RenderEndTag();
     }
     writer.RenderEndTag();
     writer.RenderEndTag();
     writer.RenderEndTag();
     writer.RenderEndTag();
 }
Пример #4
0
        private void RenderMenuPopup(HtmlTextWriter writer, ICollection verbs, string clientID, WebPart associatedWebPart,
                                     WebPartManager webPartManager) {
            writer.AddAttribute(HtmlTextWriterAttribute.Id, clientID + "Menu");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            bool popupSpansFullExtent = true;
            WebPartMenuStyle menuStyle = _menuUser.MenuPopupStyle;
            if (menuStyle != null) {
                menuStyle.AddAttributesToRender(writer, _menuUser as WebControl);
                popupSpansFullExtent = menuStyle.Width.IsEmpty;
            }
            else {
                // generate attributes corresponding to defaults on WebPartMenuStyle
                writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
                writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "1");
                writer.AddStyleAttribute(HtmlTextWriterStyle.BorderCollapse, "collapse");
            }
            if (popupSpansFullExtent) {
                writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            }
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddStyleAttribute(HtmlTextWriterStyle.WhiteSpace, "nowrap");
            writer.RenderBeginTag(HtmlTextWriterTag.Td);

            bool isParentEnabled = associatedWebPart.Zone.IsEnabled;
            foreach (WebPartVerb verb in verbs) {
                Debug.Assert(verb != null);
                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                string alt;
                if (associatedWebPart != null) {
                    alt = String.Format(CultureInfo.CurrentCulture, verb.Description, associatedWebPart.DisplayTitle);
                }
                else {
                    alt = verb.Description;
                }
                if (alt.Length != 0) {
                    writer.AddAttribute(HtmlTextWriterAttribute.Title, alt);
                }
                bool isEnabled = isParentEnabled && verb.Enabled;

                // Special case help, export, etc.
                if (verb is WebPartHelpVerb) {
                    Debug.Assert(associatedWebPart != null);

                    string resolvedHelpUrl =
                        ((IUrlResolutionService)associatedWebPart).ResolveClientUrl(associatedWebPart.HelpUrl);

                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (isEnabled) {
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick,
                                            "document.body.__wpm.ShowHelp('" +
                                            Util.QuoteJScriptString(resolvedHelpUrl) +
                                            "', " +
                                            ((int)associatedWebPart.HelpMode).ToString(CultureInfo.InvariantCulture) + ")");
                    }
                }
                else if (verb is WebPartExportVerb) {
                    Debug.Assert(associatedWebPart != null);

                    string exportUrl = webPartManager.GetExportUrl(associatedWebPart);

                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (isEnabled) {
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick,
                                            "document.body.__wpm.ExportWebPart('" +
                                            Util.QuoteJScriptString(exportUrl) +
                                            ((associatedWebPart.ExportMode == WebPartExportMode.All) ?
                                                "', true, false)" :
                                                "', false, false)"));
                    }
                }
                else {
                    string target = _menuUser.PostBackTarget;
                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (isEnabled) {
                        string eventArgument = verb.EventArgument;
                        if (associatedWebPart != null) {
                            eventArgument = verb.GetEventArgument(associatedWebPart.ID);
                        }

                        string submitScript = null;
                        if (!String.IsNullOrEmpty(eventArgument)) {
                            submitScript = "document.body.__wpm.SubmitPage('" +
                                Util.QuoteJScriptString(target) +
                                "', '" +
                                Util.QuoteJScriptString(eventArgument) +
                                "');";

                            _menuUser.Page.ClientScript.RegisterForEventValidation(target, eventArgument);
                        }

                        string clientClickScript = null;
                        if (!String.IsNullOrEmpty(verb.ClientClickHandler)) {
                            clientClickScript = "document.body.__wpm.Execute('" +
                                Util.QuoteJScriptString(Util.EnsureEndWithSemiColon(verb.ClientClickHandler)) +
                                "')";
                        }

                        // There must be either an EventArgument or a ClientClickHandler
                        Debug.Assert(submitScript != null || clientClickScript != null);

                        string onclick = String.Empty;
                        if (submitScript != null && clientClickScript != null) {
                            onclick = "if(" + clientClickScript + "){" + submitScript + "}";
                        }
                        else if (submitScript != null) {
                            onclick = submitScript;
                        }
                        else if (clientClickScript != null) {
                            onclick = clientClickScript;
                        }

                        if (verb is WebPartCloseVerb) {
                            Debug.Assert(associatedWebPart != null);

                            // PERF: First check if this WebPart even has provider connection points
                            ProviderConnectionPointCollection connectionPoints =
                                webPartManager.GetProviderConnectionPoints(associatedWebPart);
                            if (connectionPoints != null && connectionPoints.Count > 0 &&
                                webPartManager.Connections.ContainsProvider(associatedWebPart)) {
                                onclick = "if(document.body.__wpmCloseProviderWarning.length == 0 || " +
                                    "confirm(document.body.__wpmCloseProviderWarning)){" + onclick + "}";
                            }
                        }
                        else if (verb is WebPartDeleteVerb) {
                            onclick = "if(document.body.__wpmDeleteWarning.length == 0 || " +
                                "confirm(document.body.__wpmDeleteWarning)){" + onclick + "}";
                        }
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick, onclick);
                    }
                }

                string disabledClass = "menuItem";
                if (!verb.Enabled) {
                    if (associatedWebPart.Zone.RenderingCompatibility < VersionUtil.Framework40) {
                        writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
                    }
                    else if (!String.IsNullOrEmpty(WebControl.DisabledCssClass)) {
                        disabledClass = WebControl.DisabledCssClass + " " + disabledClass;
                    }
                }
                writer.AddAttribute(HtmlTextWriterAttribute.Class, disabledClass);
                writer.RenderBeginTag(HtmlTextWriterTag.A);

                string img = verb.ImageUrl;
                if (img.Length != 0) {
                    img = _menuUser.UrlResolver.ResolveClientUrl(img);
                }
                else {
                    if (verb.Checked) {
                        img = _menuUser.CheckImageUrl;
                        if (img.Length == 0) {
                            img = DefaultCheckImageUrl;
                        }
                    }
                    else {
                        img = webPartManager.SpacerImageUrl;
                    }
                }
                writer.AddAttribute(HtmlTextWriterAttribute.Src, img);
                writer.AddAttribute(HtmlTextWriterAttribute.Alt, alt, true);
                writer.AddAttribute(HtmlTextWriterAttribute.Width, "16");
                writer.AddAttribute(HtmlTextWriterAttribute.Height, "16");
                writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "none");
                writer.AddStyleAttribute("vertical-align", "middle");
                if (verb.Checked) {
                    Style checkImageStyle = _menuUser.CheckImageStyle;
                    if (checkImageStyle != null) {
                        checkImageStyle.AddAttributesToRender(writer, _menuUser as WebControl);
                    }
                }
                writer.RenderBeginTag(HtmlTextWriterTag.Img);
                writer.RenderEndTag();  // Img

                writer.Write("&nbsp;");
                writer.Write(verb.Text);
                writer.Write("&nbsp;");

                writer.RenderEndTag();  // A

                writer.RenderEndTag();  // Div
            }

            writer.RenderEndTag();  // Td
            writer.RenderEndTag();  // Tr
            writer.RenderEndTag();  // Table

            writer.RenderEndTag();  // Div
        }
        private void RenderMenuPopup(HtmlTextWriter writer, ICollection verbs, string clientID, WebPart associatedWebPart,
                                     WebPartManager webPartManager)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Id, clientID + "Menu");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            bool             popupSpansFullExtent = true;
            WebPartMenuStyle menuStyle            = _menuUser.MenuPopupStyle;

            if (menuStyle != null)
            {
                menuStyle.AddAttributesToRender(writer, _menuUser as WebControl);
                popupSpansFullExtent = menuStyle.Width.IsEmpty;
            }
            else
            {
                // generate attributes corresponding to defaults on WebPartMenuStyle
                writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
                writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "1");
                writer.AddStyleAttribute(HtmlTextWriterStyle.BorderCollapse, "collapse");
            }
            if (popupSpansFullExtent)
            {
                writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            }
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddStyleAttribute(HtmlTextWriterStyle.WhiteSpace, "nowrap");
            writer.RenderBeginTag(HtmlTextWriterTag.Td);

            bool isParentEnabled = associatedWebPart.Zone.IsEnabled;

            foreach (WebPartVerb verb in verbs)
            {
                Debug.Assert(verb != null);
                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                string alt;
                if (associatedWebPart != null)
                {
                    alt = String.Format(CultureInfo.CurrentCulture, verb.Description, associatedWebPart.DisplayTitle);
                }
                else
                {
                    alt = verb.Description;
                }
                if (alt.Length != 0)
                {
                    writer.AddAttribute(HtmlTextWriterAttribute.Title, alt);
                }
                bool isEnabled = isParentEnabled && verb.Enabled;

                // Special case help, export, etc.
                if (verb is WebPartHelpVerb)
                {
                    Debug.Assert(associatedWebPart != null);

                    string resolvedHelpUrl =
                        ((IUrlResolutionService)associatedWebPart).ResolveClientUrl(associatedWebPart.HelpUrl);

                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (isEnabled)
                    {
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick,
                                            "document.body.__wpm.ShowHelp('" +
                                            Util.QuoteJScriptString(resolvedHelpUrl) +
                                            "', " +
                                            ((int)associatedWebPart.HelpMode).ToString(CultureInfo.InvariantCulture) + ")");
                    }
                }
                else if (verb is WebPartExportVerb)
                {
                    Debug.Assert(associatedWebPart != null);

                    string exportUrl = webPartManager.GetExportUrl(associatedWebPart);

                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (isEnabled)
                    {
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick,
                                            "document.body.__wpm.ExportWebPart('" +
                                            Util.QuoteJScriptString(exportUrl) +
                                            ((associatedWebPart.ExportMode == WebPartExportMode.All) ?
                                             "', true, false)" :
                                             "', false, false)"));
                    }
                }
                else
                {
                    string target = _menuUser.PostBackTarget;
                    writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");
                    if (isEnabled)
                    {
                        string eventArgument = verb.EventArgument;
                        if (associatedWebPart != null)
                        {
                            eventArgument = verb.GetEventArgument(associatedWebPart.ID);
                        }

                        string submitScript = null;
                        if (!String.IsNullOrEmpty(eventArgument))
                        {
                            submitScript = "document.body.__wpm.SubmitPage('" +
                                           Util.QuoteJScriptString(target) +
                                           "', '" +
                                           Util.QuoteJScriptString(eventArgument) +
                                           "');";

                            _menuUser.Page.ClientScript.RegisterForEventValidation(target, eventArgument);
                        }

                        string clientClickScript = null;
                        if (!String.IsNullOrEmpty(verb.ClientClickHandler))
                        {
                            clientClickScript = "document.body.__wpm.Execute('" +
                                                Util.QuoteJScriptString(Util.EnsureEndWithSemiColon(verb.ClientClickHandler)) +
                                                "')";
                        }

                        // There must be either an EventArgument or a ClientClickHandler
                        Debug.Assert(submitScript != null || clientClickScript != null);

                        string onclick = String.Empty;
                        if (submitScript != null && clientClickScript != null)
                        {
                            onclick = "if(" + clientClickScript + "){" + submitScript + "}";
                        }
                        else if (submitScript != null)
                        {
                            onclick = submitScript;
                        }
                        else if (clientClickScript != null)
                        {
                            onclick = clientClickScript;
                        }

                        if (verb is WebPartCloseVerb)
                        {
                            Debug.Assert(associatedWebPart != null);

                            // PERF: First check if this WebPart even has provider connection points
                            ProviderConnectionPointCollection connectionPoints =
                                webPartManager.GetProviderConnectionPoints(associatedWebPart);
                            if (connectionPoints != null && connectionPoints.Count > 0 &&
                                webPartManager.Connections.ContainsProvider(associatedWebPart))
                            {
                                onclick = "if(document.body.__wpmCloseProviderWarning.length == 0 || " +
                                          "confirm(document.body.__wpmCloseProviderWarning)){" + onclick + "}";
                            }
                        }
                        else if (verb is WebPartDeleteVerb)
                        {
                            onclick = "if(document.body.__wpmDeleteWarning.length == 0 || " +
                                      "confirm(document.body.__wpmDeleteWarning)){" + onclick + "}";
                        }
                        writer.AddAttribute(HtmlTextWriterAttribute.Onclick, onclick);
                    }
                }

                string disabledClass = "menuItem";
                if (!verb.Enabled)
                {
                    if (associatedWebPart.Zone.RenderingCompatibility < VersionUtil.Framework40)
                    {
                        writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
                    }
                    else if (!String.IsNullOrEmpty(WebControl.DisabledCssClass))
                    {
                        disabledClass = WebControl.DisabledCssClass + " " + disabledClass;
                    }
                }
                writer.AddAttribute(HtmlTextWriterAttribute.Class, disabledClass);
                writer.RenderBeginTag(HtmlTextWriterTag.A);

                string img = verb.ImageUrl;
                if (img.Length != 0)
                {
                    img = _menuUser.UrlResolver.ResolveClientUrl(img);
                }
                else
                {
                    if (verb.Checked)
                    {
                        img = _menuUser.CheckImageUrl;
                        if (img.Length == 0)
                        {
                            img = DefaultCheckImageUrl;
                        }
                    }
                    else
                    {
                        img = webPartManager.SpacerImageUrl;
                    }
                }
                writer.AddAttribute(HtmlTextWriterAttribute.Src, img);
                writer.AddAttribute(HtmlTextWriterAttribute.Alt, alt, true);
                writer.AddAttribute(HtmlTextWriterAttribute.Width, "16");
                writer.AddAttribute(HtmlTextWriterAttribute.Height, "16");
                writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "none");
                writer.AddStyleAttribute("vertical-align", "middle");
                if (verb.Checked)
                {
                    Style checkImageStyle = _menuUser.CheckImageStyle;
                    if (checkImageStyle != null)
                    {
                        checkImageStyle.AddAttributesToRender(writer, _menuUser as WebControl);
                    }
                }
                writer.RenderBeginTag(HtmlTextWriterTag.Img);
                writer.RenderEndTag();  // Img

                writer.Write("&nbsp;");
                writer.Write(verb.Text);
                writer.Write("&nbsp;");

                writer.RenderEndTag();  // A

                writer.RenderEndTag();  // Div
            }

            writer.RenderEndTag();  // Td
            writer.RenderEndTag();  // Tr
            writer.RenderEndTag();  // Table

            writer.RenderEndTag();  // Div
        }