/// <summary> /// Handle admin tabstrip created event /// </summary> /// <param name="eventMessage">Event message</param> public async void HandleEvent(AdminTabStripCreated eventMessage) { if (eventMessage?.Helper == null) { return; } //we need customer details page var tabsElementId = "customer-edit"; if (!eventMessage.TabStripName.Equals(tabsElementId)) { return; } //check whether the payment plugin is installed and is active var worldpayPaymentMethod = _paymentService.LoadPaymentMethodBySystemName(WorldpayPaymentDefaults.SystemName); if (!(worldpayPaymentMethod?.PluginDescriptor?.Installed ?? false) || !_paymentService.IsPaymentMethodActive(worldpayPaymentMethod)) { return; } //get the view model if (!(eventMessage.Helper.ViewData.Model is CustomerModel customerModel)) { return; } //check whether a customer exists and isn't guest var customer = _customerService.GetCustomerById(customerModel.Id); if (customer == null || customer.IsGuest()) { return; } //try to get stored in Vault customer var vaultCustomer = _worldpayPaymentManager.GetCustomer(_genericAttributeService.GetAttribute <string>(customer, WorldpayPaymentDefaults.CustomerIdAttribute)); //prepare model var model = new WorldpayCustomerModel { Id = customerModel.Id, CustomerExists = vaultCustomer != null, WorldpayCustomerId = vaultCustomer?.CustomerId }; //create a new tab var tabName = _localizationService.GetResource("Plugins.Payments.Worldpay.WorldpayCustomer"); var url = "~/Plugins/Payments.Worldpay/Views/Customer/_CreateOrUpdate.Worldpay.cshtml"; var contentModel = (await eventMessage.Helper.PartialAsync(url, model)).RenderHtmlContent() .Replace("</script>", "<\\/script>"); //we need escape a closing script tag to prevent terminating the script block early var worldpayCustomerTab = eventMessage.TabContentByModel("tab-worldpay", tabName, contentModel); //add this tab as a block to render on the customer details page eventMessage.BlocksToRender.Add(worldpayCustomerTab); }
/// <summary> /// Add a tab to TabStrip /// </summary> /// <param name="eventMessage">AdminTabStripCreated</param> /// <param name="tabId">Tab Id</param> /// <param name="tabName">Tab name</param> /// <param name="contentModel">Content model</param> /// <returns>Html content of new Tab</returns> public static IHtmlContent TabContentByModel(this AdminTabStripCreated eventMessage, string tabId, string tabName, string contentModel) { return(new HtmlString($@" <script> $(document).ready(function() {{ $(`<li><a data-tab-name='{tabId}' data-toggle='tab' href='#{tabId}'>{tabName}</a></li>`).appendTo('#{eventMessage.TabStripName} .nav-tabs:first'); $(`<div class='tab-pane' id='{tabId}'>{contentModel}</div>`).appendTo('#{eventMessage.TabStripName} .tab-content:first'); }}); </script>")); }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { ViewContext.ViewData[typeof(AdminTabContentTagHelper).FullName] = new List <string>(); var content = await output.GetChildContentAsync(); var list = (List <string>)ViewContext.ViewData[typeof(AdminTabContentTagHelper).FullName]; if (_resolver.Device.Type != DeviceType.Desktop && SetTabPos) { SetTabPos = false; } output.TagName = "div"; output.Attributes.SetAttribute("id", Name); output.Attributes.SetAttribute("style", "display:none"); var rnd = new Random().Next(0, 100); var sb = new StringBuilder(); sb.AppendLine("<script>"); sb.AppendLine("$(document).ready(function () {"); sb.AppendLine($"$('#{Name}').show();"); sb.AppendLine($"var tab_{rnd} = $('#{Name}').kendoTabStrip({{ "); sb.AppendLine($" tabPosition: '{(SetTabPos ? "left" : "top")}',"); sb.AppendLine($" animation: {{ open: {{ effects: 'fadeIn'}} }},"); sb.AppendLine(" select: tabstrip_on_tab_select"); sb.AppendLine(" }).data('kendoTabStrip');"); var eventMessage = new AdminTabStripCreated(Name); await _mediator.Publish(eventMessage); int i = 0; foreach (var eventBlock in eventMessage.BlocksToRender) { i++; sb.AppendLine($"tab_{rnd}.append({{"); sb.AppendLine($" text: '{eventBlock.tabname}',"); sb.AppendLine($" content: '{eventBlock.content}'"); sb.AppendLine("});"); } sb.AppendLine("})"); sb.AppendLine("</script>"); sb.AppendLine($"<input type='hidden' id='selected-tab-index' name='selected-tab-index' value='{GetSelectedTabIndex()}'>"); output.PostContent.AppendHtml(string.Concat(list)); output.PreElement.AppendHtml(sb.ToString()); }
/// <summary> /// Handle admin tabstrip created event /// </summary> /// <param name="eventMessage">Event message</param> public void HandleEvent(AdminTabStripCreated eventMessage) { if (eventMessage?.Helper == null) { return; } //we need customer details page var tabsElementId = "customer-edit"; if (!eventMessage.TabStripName.Equals(tabsElementId)) { return; } //check whether the payment plugin is installed and is active var worldpayPaymentMethod = _paymentService.LoadPaymentMethodBySystemName(WorldpayPaymentDefaults.SystemName); if (!(worldpayPaymentMethod?.PluginDescriptor?.Installed ?? false) || !worldpayPaymentMethod.IsPaymentMethodActive(_paymentSettings)) { return; } //get the view model if (!(eventMessage.Helper.ViewData.Model is CustomerModel customerModel)) { return; } //check whether a customer exists and isn't guest var customer = _customerService.GetCustomerById(customerModel.Id); if (customer == null || customer.IsGuest()) { return; } //try to get stored in Vault customer var vaultCustomer = _worldpayPaymentManager.GetCustomer(customer.GetAttribute <string>(WorldpayPaymentDefaults.CustomerIdAttribute)); //prepare model var model = new WorldpayCustomerModel { Id = customerModel.Id, CustomerExists = vaultCustomer != null, WorldpayCustomerId = vaultCustomer?.CustomerId }; //compose script to create a new tab var worldpayCustomerTabElementId = "tab-worldpay"; var worldpayCustomerTab = new HtmlString($@" <script> $(document).ready(function() {{ $(` <li> <a data-tab-name='{worldpayCustomerTabElementId}' data-toggle='tab' href='#{worldpayCustomerTabElementId}'> {_localizationService.GetResource("Plugins.Payments.Worldpay.WorldpayCustomer")} </a> </li> `).appendTo('#{tabsElementId} .nav-tabs:first'); $(` <div class='tab-pane' id='{worldpayCustomerTabElementId}'> { eventMessage.Helper.Partial("~/Plugins/Payments.Worldpay/Views/Customer/_CreateOrUpdate.Worldpay.cshtml", model).RenderHtmlContent() .Replace("</script>", "<\\/script>") //we need escape a closing script tag to prevent terminating the script block early } </div> `).appendTo('#{tabsElementId} .tab-content:first'); }}); </script>"); //add this tab as a block to render on the customer details page eventMessage.BlocksToRender.Add(worldpayCustomerTab); }
/// <summary> /// Handle admin tabstrip created event /// </summary> /// <param name="eventMessage">Event message</param> public async void HandleEvent(AdminTabStripCreated eventMessage) { if (eventMessage?.Helper == null) { return; } //we need vendor details page var tabsElementId = "vendor-edit"; if (!eventMessage.TabStripName.Equals(tabsElementId)) { return; } //check whether the plugin is installed and is active var pluginDescriptor = _pluginFinder.GetPluginDescriptorBySystemName("Nop.Plugin.Misc.VendorEnhanced"); if (pluginDescriptor == null) { return; } if (!pluginDescriptor?.Installed ?? false) { return; } //get the view model if (!(eventMessage.Helper.ViewData.Model is VendorModel vendorModel)) { return; } //check whether a vendor exists var vendor = _vendorService.GetVendorById(vendorModel.Id); var model = new Models.VendorModel(); if (vendor == null) { model.Id = 0; } else { model.Id = vendorModel.Id; } if (_vendorEnhancedSettings.EnableVendorQRCode) { //compose script to create a new tab for qrcode var vendorQRCodeTabElementId = "tab-qrcode"; var vendorQRCodeTab = new HtmlString($@" <script> $(document).ready(function() {{ $(` <li> <a data-tab-name='{vendorQRCodeTabElementId}' data-toggle='tab' href='#{vendorQRCodeTabElementId}'> {_localizationService.GetResource("VendorEnhanced.QRCode")} </a> </li> `).appendTo('#{tabsElementId} .nav-tabs:first'); $(` <div class='tab-pane' id='{vendorQRCodeTabElementId}'> { (await eventMessage.Helper.PartialAsync("~/Plugins/Nop.Plugin.Misc.VendorEnhanced/Views/_VendorQRCode.cshtml", model)).RenderHtmlContent() .Replace("</script>", "<\\/script>") //we need escape a closing script tag to prevent terminating the script block early } </div> `).appendTo('#{tabsElementId} .tab-content:first'); }}); </script>"); //add this tab as a block to render on the vendor details page eventMessage.BlocksToRender.Add(vendorQRCodeTab); } if (_vendorEnhancedSettings.EnableVendorPictures) { //compose script to create a new tab for pictures var vendorPicturesTabElementId = "tab-pictures"; var vendorPicturesTab = new HtmlString($@" <script> $(document).ready(function() {{ $(` <li> <a data-tab-name='{vendorPicturesTabElementId}' data-toggle='tab' href='#{vendorPicturesTabElementId}'> {_localizationService.GetResource("VendorEnhanced.Pictures")} </a> </li> `).appendTo('#{tabsElementId} .nav-tabs:first'); $(` <div class='tab-pane' id='{vendorPicturesTabElementId}'> { (await eventMessage.Helper.PartialAsync("~/Plugins/Nop.Plugin.Misc.VendorEnhanced/Views/_VendorPictures.cshtml", model)).RenderHtmlContent() .Replace("</script>", "<\\/script>") //we need escape a closing script tag to prevent terminating the script block early } </div> `).appendTo('#{tabsElementId} .tab-content:first'); }}); </script>"); //add this tab as a block to render on the vendor details page eventMessage.BlocksToRender.Add(vendorPicturesTab); } }