private IHtmlContent SettingOverrideCheckboxInternal(StoreDependingSettingData data)
        {
            var fieldPrefix = HtmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix;
            var settingKey  = For.Name;

            if (fieldPrefix.HasValue())
            {
                settingKey = fieldPrefix + "." + settingKey;
            }
            else if (data.RootSettingClass.HasValue() && !settingKey.StartsWith(data.RootSettingClass + '.', StringComparison.OrdinalIgnoreCase))
            {
                settingKey = data.RootSettingClass + '.' + settingKey;
            }

            var overrideForStore = data.OverrideSettingKeys.Contains(settingKey);
            var fieldId          = settingKey.EnsureEndsWith("_OverrideForStore");

            var switchLabel = new TagBuilder("label");

            switchLabel.AppendCssClass("switch switch-blue multi-store-override-switch");

            var overrideInput = new TagBuilder("input");

            overrideInput.Attributes["class"]   = "multi-store-override-option";
            overrideInput.Attributes["type"]    = "checkbox";
            overrideInput.Attributes["id"]      = fieldId;
            overrideInput.Attributes["name"]    = fieldId;
            overrideInput.Attributes["onclick"] = "Smartstore.Admin.checkOverriddenStoreValue(this)";
            overrideInput.Attributes["data-parent-selector"] = ParentSelector.EmptyNull();

            if (overrideForStore)
            {
                overrideInput.Attributes["checked"] = "checked";
            }

            var toggleSpan = new TagBuilder("span");

            toggleSpan.AppendCssClass("switch-toggle");
            toggleSpan.Attributes.Add("data-on", T("Common.On").Value.Truncate(3));
            toggleSpan.Attributes.Add("data-off", T("Common.Off").Value.Truncate(3));

            switchLabel.InnerHtml.AppendHtml(overrideInput);
            switchLabel.InnerHtml.AppendHtml(toggleSpan);

            return(switchLabel);
        }
Пример #2
0
        protected override void ProcessCore(TagHelperContext context, TagHelperOutput output)
        {
            if (!ShowPaginator || ListItems == null || ListItems.TotalCount == 0 || ListItems.TotalPages <= 1)
            {
                output.SuppressOutput();
                return;
            }

            var items = CreateItemList();

            output.Attributes.Add("aria-label", "Page navigation");

            var itemsUl = new TagBuilder("ul");

            itemsUl.AppendCssClass("pagination");

            // Size
            if (Size == PagerSize.Large)
            {
                itemsUl.AppendCssClass("pagination-lg");
            }
            else if (Size == PagerSize.Small)
            {
                itemsUl.AppendCssClass("pagination-sm");
            }
            else if (Size == PagerSize.Mini)
            {
                itemsUl.AppendCssClass("pagination-xs");
            }

            // Alignment
            if (Alignment == PagerAlignment.Centered)
            {
                itemsUl.AppendCssClass("justify-content-center");
                output.AppendCssClass("text-center");
            }
            else if (Alignment == PagerAlignment.Right)
            {
                itemsUl.AppendCssClass("justify-content-end");
                output.AppendCssClass("text-right");
            }

            foreach (var item in items)
            {
                AppendItem(itemsUl, item);
            }

            output.TagName = "nav";
            output.TagMode = TagMode.StartTagAndEndTag;

            output.Content.AppendHtml(itemsUl);
        }
Пример #3
0
        protected override async Task ProcessCoreAsync(TagHelperContext context, TagHelperOutput output)
        {
            await output.LoadAndSetChildContentAsync();

            // TODO: (mh) (core) This should be a menu tag but is not displayed nice currently > Alter this when it's time to do some css.
            output.TagName = "div";

            var menu = await MenuService.GetMenuAsync(Id);

            var model = menu.CreateModel(Template, (ControllerContext)ActionContextAccessor.ActionContext);

            var root = model.Root;

            if (root == null)
            {
                return;
            }

            var isFirst   = true;
            var hasIcons  = root.Children.Any(x => x.Value.Icon.HasValue());
            var hasImages = root.Children.Any(x => x.Value.ImageUrl.HasValue());

            // TODO: (mh) (core) Respect rtl...
            //var rtl = WorkContext.WorkingLanguage.Rtl;

            // INFO: This is for testing only. Not the final impplementation!!! Please do not review yet.
            // TODO: (mh) (core) Finish the job...
            // TODO: (mh) (core) Implement seperate Taghelpers for each MenuType. Maybe according to MediaTagHelper...
            if (Template == "LinkList")
            {
                output.AppendCssClass("cms-menu cms-menu-linklist");
                output.Attributes.Add("data-menu-name", model.Name?.ToLower());

                var list = new TagBuilder("ul");
                list.AppendCssClass("list-unstyled");

                foreach (var node in root.Children)
                {
                    var item = node.Value;
                    if (!item.Visible)
                    {
                        continue;
                    }

                    var itemText = node.GetItemText(T);
                    var itemUrl  = item.GenerateUrl(ViewContext);

                    var li = new TagBuilder("li");

                    if (item.IsGroupHeader)
                    {
                        if (!isFirst)
                        {
                            var hr = new TagBuilder("hr");
                            hr.AppendCssClass("my-2");
                            li.InnerHtml.AppendHtml(hr);
                        }
                        if (itemText.HasValue() && item.Text != "[SKIP]")
                        {
                            li.AppendCssClass("menu-header h5 mt-2");
                            li.InnerHtml.Append(itemText);
                        }
                        isFirst = false;
                        list.InnerHtml.AppendHtml(li);
                        continue;
                    }

                    var attrs = item.GetCombinedAttributes().PrependCssClass("menu-link");

                    var a = new TagBuilder("a");
                    attrs.Add("href", itemUrl);
                    a.Attributes.AddRange(attrs);

                    // TODO: (mh) (core) Icons

                    var span = new TagBuilder("span");
                    span.InnerHtml.Append(itemText);

                    a.InnerHtml.AppendHtml(span);
                    li.InnerHtml.AppendHtml(a);
                    list.InnerHtml.AppendHtml(li);
                }

                output.Content.AppendHtml(list);
            }

            // INFO: This code can render views. Maybe this will come in handy for MegaMenu.
            //var sw = new StringWriter();
            //ViewDataDictionary viewData = new(ViewContext.ViewData);
            //viewData.Model = model;
            //var viewContext = new ViewContext(ViewContext, ViewContext.View, viewData, ViewContext.TempData, sw, new HtmlHelperOptions());
            //output.Content.AppendHtml(await RenderPartialView(viewContext, Template));
        }
Пример #4
0
        protected override void ProcessCore(TagHelperContext context, TagHelperOutput output)
        {
            output.SuppressOutput();

            if (!ShowPaginator || ListItems == null || ListItems.TotalCount == 0 || ListItems.TotalPages <= 1)
            {
                return;
            }

            var items = CreateItemList();

            // Alignment
            if (Alignment == PagerAlignment.Right)
            {
                output.AppendCssClass("text-right");
            }
            else if (Alignment == PagerAlignment.Centered)
            {
                output.AppendCssClass("text-center");
            }

            output.Attributes.Add("aria-label", "Page navigation");

            if (ShowSummary && ListItems.TotalPages > 1)
            {
                var summarDiv = new TagBuilder("div");
                summarDiv.AppendCssClass("pagination-summary float-left");
                summarDiv.InnerHtml.AppendHtml(Pager.CurrentPageText.FormatInvariant(ListItems.PageNumber, ListItems.TotalPages, ListItems.TotalCount));
                output.Content.AppendHtml(summarDiv);
            }

            var itemsUl = new TagBuilder("ul");

            itemsUl.AppendCssClass(Style == PagerStyle.Pagination ? "pagination" : "pagination");

            // Size
            if (Size == PagerSize.Large)
            {
                itemsUl.AppendCssClass("pagination-lg");
            }
            else if (Size == PagerSize.Small)
            {
                itemsUl.AppendCssClass("pagination-sm");
            }
            else if (Size == PagerSize.Mini)
            {
                itemsUl.AppendCssClass("pagination-xs");
            }

            // BS 4 alignment
            if (Alignment == PagerAlignment.Centered)
            {
                itemsUl.AppendCssClass("justify-content-center");
            }
            else if (Alignment == PagerAlignment.Right)
            {
                itemsUl.AppendCssClass("justify-content-end");
            }

            foreach (var item in items)
            {
                AppendItem(itemsUl, item);
            }

            output.TagName = "nav";
            output.TagMode = TagMode.StartTagAndEndTag;

            output.Content.AppendHtml(itemsUl);
        }