コード例 #1
0
        public void Render(WebTabStripRenderingContext renderingContext, IWebTab tab, bool isEnabled, bool isLast, WebTabStyle style)
        {
            ArgumentUtility.CheckNotNull("renderingContext", renderingContext);
            ArgumentUtility.CheckNotNull("style", style);

            ScriptUtility.Instance.RegisterElementForBorderSpans(renderingContext.Control, "#" + GetTabClientID(renderingContext, tab) + " > *:first");

            RenderTabBegin(renderingContext);
            RenderSeperator(renderingContext);
            RenderWrapperBegin(renderingContext, tab);

            var command = RenderBeginTagForCommand(renderingContext, tab, isEnabled, style);

            RenderContents(renderingContext, tab);
            RenderEndTagForCommand(renderingContext, command);

            renderingContext.Writer.RenderEndTag(); // End tab span
            renderingContext.Writer.RenderEndTag(); // End tab wrapper span

            if (isLast)
            {
                renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClassTabLast);
                renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Span);
                renderingContext.Writer.RenderEndTag();
            }

            renderingContext.Writer.RenderEndTag(); // End list item
        }
コード例 #2
0
        private void AssertAnchor(XmlNode link, IWebTab tab)
        {
            var anchorBody = link.GetAssertedChildElement("span", 0);

            anchorBody.AssertAttributeValueEquals("class", _renderer.CssClassTabAnchorBody);

            string text    = tab.Text ?? string.Empty;
            var    hasIcon = tab.Icon != null && !string.IsNullOrEmpty(tab.Icon.Url);

            if (hasIcon)
            {
                string url = tab.Icon.Url.TrimStart('~');
                string alt = tab.Icon.AlternateText ?? string.Empty;
                text = HtmlHelper.WhiteSpace + text;

                var image = anchorBody.GetAssertedChildElement("img", 0);
                image.AssertAttributeValueEquals("src", url);
                image.AssertAttributeValueEquals("alt", alt);
            }

            if (string.IsNullOrEmpty(text))
            {
                text = HtmlHelper.WhiteSpace;
            }

            anchorBody.AssertTextNode(text, hasIcon ? 1 : 0);
        }
コード例 #3
0
        private void AssertTabs(XmlNode list, bool isDesignMode)
        {
            var tabs      = _webTabStrip.GetVisibleTabs();
            int itemCount = list.ChildNodes.Count;

            if (!isDesignMode)
            {
                Assert.That(itemCount, Is.EqualTo(tabs.Count));
            }

            for (int i = 0; i < itemCount; i++)
            {
                IWebTab tab        = tabs[i];
                bool    isLastItem = (i == itemCount - 1);

                var item = list.GetAssertedChildElement("li", i);
                AssertItem(item, tab, isLastItem, isDesignMode);

                if (isLastItem)
                {
                    var lastSpan = item.GetAssertedChildElement("span", 1);
                    lastSpan.AssertAttributeValueEquals("class", "last");
                }
            }
        }
コード例 #4
0
        public WebTabRendererAdapter(IWebTabRenderer webTabRenderer, IWebTab webTab, bool isLast, bool isEnabled, WebTabStyle webTabStyle)
        {
            ArgumentUtility.CheckNotNull("webTabRenderer", webTabRenderer);
            ArgumentUtility.CheckNotNull("webTab", webTab);

            _webTabRenderer = webTabRenderer;
            _webTab         = webTab;
            _isLast         = isLast;
            _isEnabled      = isEnabled;
            _webTabStyle    = webTabStyle;
        }
コード例 #5
0
        private void AssertItem(XmlNode item, IWebTab webTab, bool isLastItem, bool isDesignMode)
        {
            if (isDesignMode)
            {
                item.AssertStyleAttribute("float", "left");
                item.AssertStyleAttribute("display", "block");
                item.AssertStyleAttribute("white-space", "nowrap");
            }
            item.AssertChildElementCount(isLastItem ? 2 : 1);

            var wrapper = item.GetAssertedChildElement("span", 0);

            wrapper.AssertAttributeValueEquals("class", _renderer.CssClassTabWrapper);

            var separator = wrapper.GetAssertedChildElement("span", 0);

            separator.AssertAttributeValueEquals("class", _renderer.CssClassSeparator);
            separator.AssertChildElementCount(1);

            var empty = separator.GetAssertedChildElement("span", 0);

            empty.AssertChildElementCount(0);

            var tab = wrapper.GetAssertedChildElement("span", 1);

            tab.AssertAttributeValueEquals("id", _webTabStrip.ClientID + "_" + webTab.ItemID);
            tab.AssertAttributeValueContains("class", webTab.IsSelected ? _renderer.CssClassTabSelected : _renderer.CssClassTab);
            if (!webTab.EvaluateEnabled())
            {
                tab.AssertAttributeValueContains("class", _renderer.CssClassDisabled);
            }
            var link = tab.GetAssertedChildElement("a", 0);

            bool isDisabledBySelection = webTab.IsSelected && !_webTabStrip.EnableSelectedTab;

            if (webTab.EvaluateEnabled())
            {
                link.AssertAttributeValueEquals("href", "#");
            }

            if (webTab.EvaluateEnabled() && !isDisabledBySelection)
            {
                string clickScript = _pageStub.ClientScript.GetPostBackClientHyperlink(_webTabStrip, webTab.ItemID);
                link.AssertAttributeValueEquals("onclick", clickScript);
            }

            AssertAnchor(link, webTab);
        }
コード例 #6
0
        private void PopulateTabStrip()
        {
            _tab0 = MockRepository.GenerateStub <IWebTab>();
            _tab0.Stub(stub => stub.ItemID).Return("Tab0");
            _tab0.Stub(stub => stub.Text).Return("First Tab");
            _tab0.Stub(stub => stub.Icon).Return(new IconInfo());
            _tab0.Stub(stub => stub.EvaluateEnabled()).Return(true);
            _tab0.Stub(stub => stub.GetPostBackClientEvent()).Return(_pageStub.ClientScript.GetPostBackClientHyperlink(_webTabStrip, _tab0.ItemID));
            _tab0.Stub(stub => stub.GetRenderer()).IgnoreArguments().Return(CreateWebTabRenderer());

            _tab1 = MockRepository.GenerateStub <IWebTab>();
            _tab1.Stub(stub => stub.ItemID).Return("Tab1");
            _tab1.Stub(stub => stub.Text).Return("Second Tab");
            _tab1.Stub(stub => stub.Icon).Return(new IconInfo("~/myImageUrl"));
            _tab1.Stub(stub => stub.EvaluateEnabled()).Return(true);
            _tab1.Stub(stub => stub.GetPostBackClientEvent()).Return(_pageStub.ClientScript.GetPostBackClientHyperlink(_webTabStrip, _tab1.ItemID));
            _tab1.Stub(stub => stub.GetRenderer()).IgnoreArguments().Return(CreateWebTabRenderer());

            _tab2 = MockRepository.GenerateStub <IWebTab>();
            _tab2.Stub(stub => stub.ItemID).Return("Tab2");
            _tab2.Stub(stub => stub.Text).Return("Third Tab");
            _tab2.Stub(stub => stub.Icon).Return(null);
            _tab2.Stub(stub => stub.EvaluateEnabled()).Return(true);
            _tab2.Stub(stub => stub.GetPostBackClientEvent()).Return(_pageStub.ClientScript.GetPostBackClientHyperlink(_webTabStrip, _tab2.ItemID));
            _tab2.Stub(stub => stub.GetRenderer()).IgnoreArguments().Return(CreateWebTabRenderer());

            _tab3 = MockRepository.GenerateStub <IWebTab>();
            _tab3.Stub(stub => stub.ItemID).Return("Tab3");
            _tab3.Stub(stub => stub.Text).Return(null);
            _tab3.Stub(stub => stub.Icon).Return(null);
            _tab3.Stub(stub => stub.EvaluateEnabled()).Return(true);
            _tab3.Stub(stub => stub.GetPostBackClientEvent()).Return(_pageStub.ClientScript.GetPostBackClientHyperlink(_webTabStrip, _tab3.ItemID));
            _tab3.Stub(stub => stub.GetRenderer()).IgnoreArguments().Return(CreateWebTabRenderer());

            _webTabStrip.GetVisibleTabs().Add(_tab0);
            _webTabStrip.GetVisibleTabs().Add(_tab1);
            _webTabStrip.GetVisibleTabs().Add(_tab2);
            _webTabStrip.GetVisibleTabs().Add(_tab3);
        }
コード例 #7
0
        protected override Command RenderBeginTagForCommand(WebTabStripRenderingContext renderingContext, IWebTab tab, bool isEnabled, WebTabStyle style)
        {
            ArgumentUtility.CheckNotNull("style", style);

            var menuTab = ((IMenuTab)tab).GetActiveTab();
            var command = GetRenderingCommand(isEnabled, menuTab);

            var additionalUrlParameters = menuTab.GetUrlParameters();
            var backupID        = command.ItemID;
            var backupAccessKey = command.AccessKey;

            try
            {
                if (string.IsNullOrEmpty(command.ItemID) && !string.IsNullOrEmpty(tab.ItemID))
                {
                    command.ItemID = tab.ItemID + "_Command";
                }

                if (string.IsNullOrEmpty(command.AccessKey))
                {
                    var textWithHotkey = HotkeyParser.Parse(tab.Text);
                    if (textWithHotkey.Hotkey.HasValue)
                    {
                        command.AccessKey = HotkeyFormatter.FormatHotkey(textWithHotkey);
                    }
                }

                command.RenderBegin(
                    renderingContext.Writer,
                    RenderingFeatures,
                    tab.GetPostBackClientEvent(),
                    new string[0],
                    string.Empty,
                    null,
                    additionalUrlParameters,
                    false,
                    style);

                return(command);
            }
            finally
            {
                command.ItemID    = backupID;
                command.AccessKey = backupAccessKey;
            }
        }
コード例 #8
0
        private void RenderWrapperBegin(WebTabStripRenderingContext renderingContext, IWebTab tab)
        {
            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Id, GetTabClientID(renderingContext, tab));
            string cssClass;

            if (tab.IsSelected)
            {
                cssClass = CssClassTabSelected;
            }
            else
            {
                cssClass = CssClassTab;
            }
            if (!tab.EvaluateEnabled())
            {
                cssClass += " " + CssClassDisabled;
            }
            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Class, cssClass);

            if (RenderingFeatures.EnableDiagnosticMetadata)
            {
                if (!string.IsNullOrEmpty(tab.ItemID))
                {
                    renderingContext.Writer.AddAttribute(DiagnosticMetadataAttributes.ItemID, tab.ItemID);
                }

                if (!string.IsNullOrEmpty(tab.Text))
                {
                    renderingContext.Writer.AddAttribute(DiagnosticMetadataAttributes.Content, HtmlUtility.StripHtmlTags(tab.Text));
                }
            }

            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Span); // Begin tab span
        }
コード例 #9
0
 private string GetTabClientID(WebTabStripRenderingContext renderingContext, IWebTab tab)
 {
     return(renderingContext.Control.ClientID + "_" + tab.ItemID);
 }
コード例 #10
0
        protected virtual void RenderContents(WebTabStripRenderingContext renderingContext, IWebTab tab)
        {
            ArgumentUtility.CheckNotNull("renderingContext", renderingContext);

            renderingContext.Writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClassTabAnchorBody);
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Span); // Begin anchor body span

            bool hasIcon = tab.Icon != null && tab.Icon.HasRenderingInformation;
            bool hasText = !string.IsNullOrEmpty(tab.Text);

            if (hasIcon)
            {
                tab.Icon.Render(renderingContext.Writer, renderingContext.Control);
            }
            if (hasIcon && hasText)
            {
                renderingContext.Writer.Write("&nbsp;");
            }
            if (hasText)
            {
                var textWithHotkey = HotkeyParser.Parse(tab.Text);
                renderingContext.Writer.Write(_hotkeyFormatter.FormatText(textWithHotkey, false)); // Do not HTML encode
            }
            if (!hasIcon && !hasText)
            {
                renderingContext.Writer.Write("&nbsp;");
            }

            renderingContext.Writer.RenderEndTag(); // End anchor body span
        }
コード例 #11
0
        protected virtual Command RenderBeginTagForCommand(WebTabStripRenderingContext renderingContext, IWebTab tab, bool isEnabled, WebTabStyle style)
        {
            ArgumentUtility.CheckNotNull("renderingContext", renderingContext);
            ArgumentUtility.CheckNotNull("style", style);

            var command = new Command();

            command.OwnerControl = renderingContext.Control;
            command.ItemID       = tab.ItemID + "_Command";
            if (isEnabled && tab.EvaluateEnabled())
            {
                command.Type = CommandType.Event;

                var textWithHotkey = HotkeyParser.Parse(tab.Text);
                if (textWithHotkey.Hotkey.HasValue)
                {
                    command.AccessKey = _hotkeyFormatter.FormatHotkey(textWithHotkey);
                }
            }
            else
            {
                command.Type = CommandType.None;
            }

            command.RenderBegin(
                renderingContext.Writer,
                RenderingFeatures,
                tab.GetPostBackClientEvent(),
                new string[0],
                string.Empty,
                null,
                new NameValueCollection(),
                false,
                style);

            return(command);
        }