Beispiel #1
0
        protected override void OnStart(TextWriter writer)
        {
            // Check if we're in a navbar, and if so, make sure we're in a navbar nav
            if (GetComponent <INavbar>() != null && GetComponent <INavbarNav>() == null)
            {
                new NavbarNav <THelper>(Helper).Start(writer);
            }

            // Check if we're in a nav
            if (GetComponent <INav>(true) != null || GetComponent <INavbarNav>(true) != null)
            {
                TagName = "li";
                Link <THelper> link = Helper.Link(null);
                link.AddCss(Css.DropdownToggle);
                link.AddAttribute("data-toggle", "dropdown");
                _toggle = link;
            }
            else
            {
                // Create a button and copy over any button classes and text
                Button <THelper> button = Helper.Button();
                button.RemoveCss(Css.BtnDefault);
                button.AddCss(Css.DropdownToggle);
                button.AddAttribute("data-toggle", "dropdown");
                foreach (string buttonClass in CssClasses.Where(x => x.StartsWith("btn")))
                {
                    button.CssClasses.Add(buttonClass);
                }
                _toggle = button;
            }
            CssClasses.RemoveWhere(x => x.StartsWith("btn"));

            // Add the text and caret
            if (!string.IsNullOrWhiteSpace(TextContent))
            {
                _toggle.AddChild(new Content <THelper>(Helper, TextContent + " "));
            }
            else
            {
                Element <THelper> element = new Element <THelper>(Helper, "span").AddCss(Css.SrOnly);
                element.AddChild(new Content <THelper>(Helper, "Toggle Dropdown"));
                _toggle.AddChild(element);
            }
            TextContent = null;
            if (_caret)
            {
                _toggle.AddChild(Helper.Caret());
            }

            // Check if we're in a IDropdownButton or IInputGroupButton, then
            // Check if we're in a button group, and if so change the outer CSS class
            // Do this after copying over the btn classes so this doesn't get copied
            if (GetComponent <IDropdownButton>(true) != null || GetComponent <IInputGroupButton>(true) != null)
            {
                _dropdownButton = true;
            }
            else if (GetComponent <IButtonGroup>(true) != null)
            {
                ToggleCss(Css.BtnGroup, true, Css.Dropdown);
            }

            // Create the list
            _list = Helper.List(ListType.Unordered);
            _list.AddCss(Css.DropdownMenu);
            _list.MergeAttribute("role", "menu");
            if (_menuRight)
            {
                _list.AddCss(Css.DropdownMenuRight);
            }
            if (_menuLeft)
            {
                _list.AddCss(Css.DropdownMenuLeft);
            }

            // Start this component
            base.OnStart(_dropdownButton ? new SuppressOutputWriter() : writer);

            // Output the button
            _toggle.StartAndFinish(writer);

            // Output the start of the list
            _list.Start(writer);
        }