public TabFactory(TabStripTagHelper tabStrip, TagHelperContext context) { Guard.NotNull(tabStrip, nameof(tabStrip)); Guard.NotNull(context, nameof(context)); TabStrip = tabStrip; Context = context; }
public TabStripCreated(TabStripTagHelper tabStrip, TagHelperContext context) { Guard.NotNull(tabStrip, nameof(tabStrip)); TabStrip = tabStrip; TabFactory = new TabFactory(tabStrip, context); TabStripName = tabStrip.Id; Html = tabStrip.HtmlHelper; Model = tabStrip.ViewContext.ViewData.Model; }
public static IHtmlContent LocalizedEditor <TModel, TLocalizedModelLocal>(this IHtmlHelper <TModel> helper, string name, Func <int, HelperResult> localizedTemplate, Func <TModel, HelperResult> masterTemplate) where TModel : ILocalizedModel <TLocalizedModelLocal> where TLocalizedModelLocal : ILocalizedLocaleModel { var locales = helper.ViewData.Model.Locales; var hasMasterTemplate = masterTemplate != null; if (locales.Count > 1) { var services = helper.ViewContext.HttpContext.RequestServices; var db = services.GetRequiredService <SmartDbContext>(); var languageService = services.GetRequiredService <ILanguageService>(); var localizationService = services.GetRequiredService <ILocalizationService>(); var tabs = new List <TabItem>(locales.Count + 1); var languages = new List <Language>(locales.Count + 1); // Create the parent tabstrip var strip = new TabStripTagHelper { ViewContext = helper.ViewContext, Id = name, SmartTabSelection = false, Style = TabsStyle.Tabs, PublishEvent = false }; if (hasMasterTemplate) { var masterLanguage = db.Languages.FindById(languageService.GetMasterLanguageId(), false); languages.Add(masterLanguage); // Add the first default tab for the master template tabs.Add(new TabItem { Selected = true, Text = localizationService.GetResource("Admin.Common.Standard") }); } // Add all language specific tabs for (var i = 0; i < locales.Count; i++) { var locale = locales[i]; var language = db.Languages.FindById(locale.LanguageId, false); languages.Add(language); tabs.Add(new TabItem { Selected = !hasMasterTemplate && i == 0, Text = language.Name, ImageUrl = "~/images/flags/" + language.FlagImageFileName }); } // Create TagHelperContext for tabstrip. var stripContext = new TagHelperContext("tabstrip", new TagHelperAttributeList(), new Dictionary <object, object>(), CommonHelper.GenerateRandomDigitCode(10)); // Must init tabstrip, otherwise "Parent" is null inside tab helpers. strip.Init(stripContext); // Create tab factory var tabFactory = new TabFactory(strip, stripContext); // Create AttributeList for tabstrip var stripOutputAttrList = new TagHelperAttributeList { new TagHelperAttribute("class", "nav-locales") }; // Emulate tabstrip output var stripOutput = new TagHelperOutput("tabstrip", stripOutputAttrList, (_, _) => { // getChildContentAsync for tabstrip for (var i = 0; i < tabs.Count; i++) { var isMaster = hasMasterTemplate && i == 0; var language = languages[i]; tabFactory.AddAsync(builder => { builder.Item = tabs[i]; builder .Content(isMaster ? masterTemplate(helper.ViewData.Model) : localizedTemplate(i - 1)) .HtmlAttributes("title", language.Name, !isMaster) .ContentHtmlAttributes(new { @class = "locale-editor-content", data_lang = language.LanguageCulture, data_rtl = language.Rtl.ToString().ToLower() }); }).GetAwaiter().GetResult(); } // We don't need the child content for tabstrip. It builds everything without any child content. return(Task.FromResult <TagHelperContent>(new DefaultTagHelperContent())); }); // Process parent tabstrip strip.ProcessAsync(stripContext, stripOutput).GetAwaiter().GetResult(); var wrapper = new TagBuilder("div"); wrapper.Attributes.Add("class", "locale-editor"); return(stripOutput.WrapElementWith(wrapper)); } else if (hasMasterTemplate) { return(masterTemplate(helper.ViewData.Model)); } return(HtmlString.Empty); }