Error executing template "Designs/kabooki-shop/_parsed/espresso.parsed.cshtml"System.ArgumentNullException: Value cannot be null.Parameter name: sourceat System.Linq.Enumerable.Where[TSource](IEnumerable`1 source, Func`2 predicate)at Dynamicweb.Frontend.XmlNavigation.FilterPages(IEnumerable`1 pages)at Dynamicweb.Frontend.XmlNavigation.MakeXml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, Int32 selectedAreaId)at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, String name, String xsltPath, Int32 selectedAreaId, Boolean sitemapMode, NameValueCollection settings, NameValueCollection attributes, IncludeMode mode)at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(NameValueCollection settings, NameValueCollection attributes)at CompiledRazorTemplates.Dynamic.RazorEngine_4941add6b7454448975ecca6109df276.Execute() in E:\Dynamicweb.NET\Solutions\kabooki.espresso4.dk\files\Templates\Designs\kabooki-shop\_parsed\espresso.parsed.cshtml:line 1436at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase 2 @using System.IO 3 @using System.Web 4 @using Dynamicweb.Core 5 @using Dynamicweb.Frontend 6 @using Dynamicweb.Ecommerce.Common 7 @{ 8 string globalAreaLang = PageView.Current().Area.CultureInfo.TwoLetterISOLanguageName; 9 //string currencySeparatorDecimal = PageView.Current().Area.CultureInfo.NumberFormat.CurrencyDecimalSeparator; 10 //string currencySeparatorInteger = PageView.Current().Area.CultureInfo.NumberFormat.CurrencyGroupSeparator; 11 string currencySeparatorDecimal = PageView.Current().Area.CultureInfo.NumberFormat.NumberDecimalSeparator; 12 string currencySeparatorInteger = PageView.Current().Area.CultureInfo.NumberFormat.NumberGroupSeparator; 13 string openGraphUrl = PageView.Current().SearchFriendlyUrl; 14 string openGraphImage = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + Espresso.OpenGraphImage; 15 bool isUserAuthenticated = PageView.Current().User != null; 16 string webfontsSnippetHtml = RenderSnippet( "webfonts" ).ToString().Trim(); 17 int areaID = PageView.Current().Area.ID; 18 bool isImageBankArea = PageView.Current().Area.ID == 24; 19 20 bool isProductPage = string.IsNullOrEmpty( HttpContext.Current.Request[ "productid" ] ) == false; 21 string globalValueUrl = GetGlobalValue( "Global:Pageview.Url" ); 22 23 string canonicalPageView = String.Format( "{0}://{1}{2}", GetGlobalValue( "Global:Request.Scheme" ), GetGlobalValue( "Global:Request.Host" ), globalValueUrl ); 24 string pageCanonical = PageView.Current().Page.MetaCanonical; 25 string eComCanonicalSnippetTag = RenderSnippet( "eComCanonical" ).ToString().Trim(); 26 27 28 if ( GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) > -1 ) 29 { 30 globalValueUrl = GetGlobalValue( "Global:Pageview.Url" ).Substring( 0, GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) ); 31 } 32 } 33 <!DOCTYPE html> 34 <html lang="@globalAreaLang" data-separator-integer="@currencySeparatorInteger" data-separator-decimal="@currencySeparatorDecimal"> 35 <head> 36 <script id="CookieConsent" src="https://policy.app.cookieinformation.com/uc.js" data-culture="@globalAreaLang" type="text/javascript"></script> 37 @GetValue( "CopyRightNotice" ) 38 <meta charset="utf-8"> 39 <meta content="width=device-width, initial-scale=1, shrink-to-fit=no, minimal-ui" name="viewport"> 40 <meta content="ie=edge" http-equiv="x-ua-compatible"> 41 @Espresso.CriticalCSS 42 @if ( webfontsSnippetHtml != "<!--@Snippet(webfonts)-->" ) 43 { 44 @webfontsSnippetHtml 45 } 46 <link href="/Files/Templates/Designs/kabooki-shop/_assets/_dist/css/default.css?v=1.1.2" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style"> 47 @Espresso.CriticalJS 48 49 <link rel="shortcut icon" href="@Espresso.Area.Item.Favicon"> 50 @GetValue( "MetaTags" ) 51 @if ( Espresso.IsStagingUrl ) 52 { 53 <meta content="noindex,nofollow" name="robots"> 54 } 55 <meta property="og:url" content="@openGraphUrl"> 56 @if ( isProductPage ) 57 { 58 <link rel="canonical" href="@eComCanonicalSnippetTag"> 59 } 60 else 61 { 62 <title>@GetValue("Title")</title> 63 @GetValue("MetaTags") 64 @GetValue("CopyRightNotice") 65 66 67 68 if ( string.IsNullOrEmpty( pageCanonical ) == true ) 69 { 70 if ( GetString( "DwPageID" ) == GetString( "DwAreaFirstPageID" ) ) 71 { 72 <link rel="canonical" href="/"> 73 } 74 else 75 { 76 <link rel="canonical" href="@canonicalPageView"> 77 } 78 } 79 else 80 { 81 <link rel="canonical" href="@pageCanonical"> 82 } 83 } 84 85 @if ( isProductPage ) 86 { 87 @RenderSnippet( "productSpecificData" ) 88 } 89 else 90 { 91 if ( !string.IsNullOrEmpty( Espresso.OpenGraphTitle ) ) 92 { 93 <meta property="og:title" content="@Espresso.OpenGraphTitle"> 94 } 95 else 96 { 97 <meta property="og:title" content="@Espresso.DynamicwebPage.MetaTitle"> 98 } 99100 if ( !string.IsNullOrEmpty( Espresso.OpenGraphDescription ) )101 {102 <meta property="og:description" content="@Espresso.OpenGraphDescription">103 }104 else105 {106 <meta property="og:description" content="@Espresso.DynamicwebPage.Description">107 }108 <meta property="og:image" content="@openGraphImage">109 <meta property="og:type" content="website">110 }111 @*<meta property="og:title" content="@Espresso.OpenGraphTitle">112 <meta property="og:description" content="@Espresso.OpenGraphDescription">113 <meta property="og:image" content="@openGraphImage">114 <meta property="og:type" content="website">*@115 @if ( string.IsNullOrEmpty( Espresso.Area.Item.GoogleSiteVerification ) == false )116 {117 <meta name="google-site-verification" content="@Espresso.Area.Item.GoogleSiteVerification">118 }119 @{120 if ( 1 == 2 )121 {122 @GetValue( "Stylesheets" )123 }124 }125126 @if ( GetString( "LongLang" ) == "da-DK" )127 {128 <script id="CookieConsent" src="https://policy.app.cookieinformation.com/uc.js" data-culture="DA" type="text/javascript"></script>129 <meta name="facebook-domain-verification" content="ucyk8feccxtvf93mlymvsp30hx7vmh">130 }131132 @if ( GetString( "LongLang" ) == "en-GB" )133 {134 <script id="CookieConsent" src="https://policy.app.cookieinformation.com/uc.js" data-culture="EN" type="text/javascript"></script>135 <meta name="facebook-domain-verification" content="xeo4pn8t7z8im5viijklcth2nyk9sb">136 }137138 @if ( GetString( "LongLang" ) == "de-DE" )139 {140 <meta name="facebook-domain-verification" content="ecng27y061tl8ntstvqm15v4ew2jty">141 }142143 @if ( string.IsNullOrEmpty( Espresso.Area.GoogleTagManagerID ) == false && Espresso.Area.GoogleTagManagerID != "GTM-XXXX" )144 {145 <!-- Google Tag Manager -->146 string gtmDomain = PageView.Current().Area.DomainLock?.Replace("www", "https://gtm");147148 <script>149 (function(w, d, s, l, i) {150 w[l] = w[l] || [];151 w[l].push({152 'gtm.start':153 new Date().getTime(),154 event: 'gtm.js'155 });156 var f = d.getElementsByTagName(s)[0],157 j = d.createElement(s),158 dl = l != 'dataLayer' ? '&l=' + l : '';159 j.async = true;160 j.src =161 '@(gtmDomain)/gtm.js?id=' + i + dl;162 f.parentNode.insertBefore(j, f);163 })(window, document, 'script', 'dataLayer', '@Espresso.Area.GoogleTagManagerID');164 </script>165 <!-- End Google Tag Manager -->166 }167168 @GetValue("Stylesheets")169 @GetValue("Javascripts")170 </head>171172 <body class="@Espresso.Item.CustomClasses" data-userauthenticated="@isUserAuthenticated.ToString().ToLower()" data-imagebank-area="@isImageBankArea.ToString().ToLower()">173 @if ( string.IsNullOrEmpty( Espresso.Area.GoogleTagManagerID ) == false && Espresso.Area.GoogleTagManagerID != "GTM-XXXX" )174 {175 <!-- Google Tag Manager (noscript) -->176 <noscript>177 <iframe src="https://www.googletagmanager.com/ns.html?id=@Espresso.Area.GoogleTagManagerID" height="0" width="0" style="display: none; visibility: hidden"></iframe>178 </noscript>179 <!-- End Google Tag Manager (noscript) -->180 }181182 @using Dynamicweb.Ecommerce.Common183 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase184 @{185 Espresso.Canvas.ClassList.AddClasses( "js-e-canvas is-loading" );186 if ( Espresso.Item.CanvasFullscreen == "True" )187 {188 Espresso.Canvas.ClassList.AddClasses( "is-fullscreen" );189 }190191 string daDomain = "//www.kabooki.dk/";192 string enDomain = "//www.kabooki.com/";193 string deDomain = "//www.kabooki.de/";194195 string contextCountryCode = Context.Country.Code2;196197 contextCountryCode = contextCountryCode == "GB" ? "IE" : contextCountryCode;198199 if ( Context.Cart != null )200 {201 if ( !string.IsNullOrEmpty( Context.Cart.DeliveryCountryCode ) )202 {203 contextCountryCode = Context.Cart.DeliveryCountryCode;204 }205 }206207 Dictionary< string, dynamic > selectorCountries = new Dictionary< string, dynamic >208 {209 {210 "DK", new211 {212 domain = daDomain,213 title = "Denmark",214 countrycode = "DK",215 currencycode = "DKK"216 }217 },218 {219 "SE", new220 {221 domain = daDomain,222 title = "Sweden",223 countrycode = "SE",224 currencycode = "SEK"225 }226 },227 {228 "IE", new229 {230 domain = enDomain,231 title = "Ireland",232 countrycode = "IE",233 currencycode = "EUR"234 }235 },236 {237 "FI", new238 {239 domain = enDomain,240 title = "Finland",241 countrycode = "FI",242 currencycode = "EUR"243 }244 },245 {246 "FR", new247 {248 domain = enDomain,249 title = "France",250 countrycode = "FR",251 currencycode = "EUR"252 }253 },254 {255 "PT", new256 {257 domain = enDomain,258 title = "Portugal",259 countrycode = "PT",260 currencycode = "EUR"261 }262 },263 {264 "IT", new265 {266 domain = enDomain,267 title = "Italy",268 countrycode = "IT",269 currencycode = "EUR"270 }271 },272 {273 "ES", new274 {275 domain = enDomain,276 title = "Spain",277 countrycode = "ES",278 currencycode = "EUR"279 }280 },281 {282 "NL", new283 {284 domain = enDomain,285 title = "Netherlands",286 countrycode = "NL",287 currencycode = "EUR"288 }289 },290 {291 "BE", new292 {293 domain = enDomain,294 title = "Belgium",295 countrycode = "BE",296 currencycode = "EUR"297 }298 },299 {300 "DE", new301 {302 domain = deDomain,303 title = "Germany",304 countrycode = "DE",305 currencycode = "EUR"306 }307 },308 {309 "AT", new310 {311 domain = deDomain,312 title = "Austria",313 countrycode = "AT",314 currencycode = "EUR"315 }316 }317 };318 dynamic JSONcountrySelector = new319 {320 contextCountryCode = contextCountryCode,321 selectorCountries = selectorCountries322 };323 }324325326327 @using System.Globalization328 @using System.Security.Cryptography.X509Certificates329 @using Co3.Espresso.Base.Extensions330 @using Co3.Espresso.Website.Models.FrontEnd331 @using Co3.Espresso.Website.Services332 @using Dynamicweb.Content333 @using Dynamicweb.Ecommerce.Stocks334 @using Dynamicweb.Frontend335 @using Dynamicweb.Rendering336 @using EcomContext = Dynamicweb.Ecommerce.Common.Context337 @using System.Web338 @using EspressoProductService = Co3.Espresso.Website.Services.ProductService339 @using Co3.Kabooki.Dw.Models340 @using Co3.Espresso.Website.Models.FrontEnd.Elements341 @using Dynamicweb.Rendering.Translation342343 @functions {344345 public string getCountryCodeFromArea( Area area )346 {347 RegionInfo regionInfo = new RegionInfo( area.CultureInfo.LCID );348 return regionInfo.TwoLetterISORegionName;349 }350351 public static string GetStandardCollapseToggleTextExpand()352 {353 return "Se mere";354 }355356 public static string GetStandardCollapseToggleTextCollapse()357 {358 return "Se mindre";359 }360361 public static string getProductlistItemImageColorDot( string variantColorImageName = "" )362 {363 string getImageSyntax = "/admin/public/getimage.ashx?Image={0}&Width=30&Height=140&Format=jpg&Quality=10&Crop=7&AlternativeImage={1}";364 string imagePath = string.Format( "/Files/Images/produkter/{0}_4.jpg", variantColorImageName );365 string altImagePath = string.Format( "/Files/Images/produkter/{0}_3.jpg", variantColorImageName );366 string image = string.Format( getImageSyntax, imagePath, altImagePath );367 return image;368 }369370 public static string getProductImageColorDot(string productNumber = "", string variantImageNumber = "" )371 {372 string getImageSyntax = "/admin/public/getimage.ashx?Image={0}&Width=80&Height=350&Format=jpg&Quality=10&Crop=7&AlternativeImage={1}";373 string imagePath = string.Format( "/Files/Images/produkter/{0}-{1}_4.jpg", productNumber, variantImageNumber );374 string altImagePath = string.Format( "/Files/Images/produkter/{0}-{1}_3.jpg", productNumber, variantImageNumber );375 string image = string.Format( getImageSyntax, imagePath, altImagePath );376 return image;377 }378379 public static string getKabookiProductImageColorDot(string productNumber = "", string variantImageNumber = "" )380 {381 //string getImageSyntax = "/admin/public/getimage.ashx?Image={0}&Width=200&Height=200&Format=jpg&Quality=10&Crop=3&AlternativeImage={1}";382 //string imagePath = string.Format( "/Files/Images/produkter/{0}-{1}_4.jpg", productNumber, variantImageNumber );383 //string altImagePath = string.Format( "/Files/Images/produkter/{0}-{1}_5.jpg", productNumber, variantImageNumber );384 string getImageSyntax = "/admin/public/getimage.ashx?Image={0}&Width=75&Format=jpg&Quality=10&Crop=0&AlternativeImage={1}";385 string imagePath = string.Format( "/Files/Images/produkter/{0}-{1}_01.jpg", productNumber, variantImageNumber );386 string altImagePath = imagePath;387 string image = string.Format( getImageSyntax, imagePath, altImagePath );388 return image;389 }390 }391392 @helper ProductDescription( string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null )393 {394 if ( string.IsNullOrEmpty( content ) == false )395 {396 ClassList headingClassList = new ClassList();397 headingClassList.AddClasses( "col-12" );398 ClassList contentClassList = new ClassList();399 contentClassList.AddClasses( "col-12" );400401 @sectionStart( sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses, collapseToggleTextCollapse: collapseToggleTextCollapse, collapseToggleTextExpand: collapseToggleTextExpand )402403 if ( string.IsNullOrEmpty( heading ) == false )404 {405 <div class="@headingClassList">406 <h2>@heading</h2>407 </div>408 }409 <div class="@contentClassList">410 @content411 </div>412413 @sectionEnd()414 }415 }416417418 @helper ProductVideo( string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null )419 {420 if ( string.IsNullOrEmpty( videoURL ) == false )421 {422 ClassList headingClassList = new ClassList();423 headingClassList.AddClasses( "col-12" );424 ClassList contentClassList = new ClassList();425 contentClassList.AddClasses( "col-12" );426427428 @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses )429430 if ( string.IsNullOrEmpty( heading ) == false )431 {432 <div class="@headingClassList">433 <h2>@heading</h2>434 </div>435 }436437 <div class="@contentClassList">438 <div class="embed-responsive embed-responsive-16by9 mb-2">439 <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>440 </div>441 </div>442 @sectionEnd()443 }444 }445446 @helper ProductRelatedProducts( string sectionClasses = "e-section", string contentClasses = null, string heading = null,447 IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null )448 {449 if ( productLoop != null && productLoop.Any() == true )450 {451 ClassList headingClassList = new ClassList();452 headingClassList.AddClasses( "col-12" );453 ClassList contentClassList = new ClassList();454 contentClassList.AddClasses( "col-12" );455456 @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses )457458 if ( string.IsNullOrEmpty( heading ) == false )459 {460 <div class="@headingClassList">461 <h2 class="text-center">@heading</h2>462 </div>463 }464 <div class="@contentClassList">465 <div class="e-products mb-2">466 <div class="row">467 @{468 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth( null ).ToResponsiveClasses();469 }470 @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop )471 {472 @ProductlistItem( product, productlistItemClassList )473 }474 </div>475 </div>476 </div>477478 @sectionEnd()479 }480 }481482 @helper ProductlistItem( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null )483 {484 if ( product != null )485 {486 Dynamicweb.Ecommerce.Products.Product dwProduct = Dynamicweb.Ecommerce.Services.Products.GetProductById( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ), EcomContext.LanguageID, false );487488 ProductPriceInfo variantPriceInfo = Co3.Kabooki.Dw.Services.ProductService.Instance.GetProductPriceInfo( dwProduct );489 EspressoPrice espressoPrice = new EspressoPrice(variantPriceInfo.Price.PriceWithVAT);490 EspressoPrice espressoListPrice = new EspressoPrice(variantPriceInfo.ListPrice.PriceWithVAT);491 bool hasDiscount = variantPriceInfo.Price.PriceWithVAT < variantPriceInfo.ListPrice.PriceWithVAT;492493 dynamic colorVariantImages = new List< dynamic >();494 int colorVariantImagesCount = 0;495 foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem variantCombination in product.GetLoop( "VariantCombinations" ) )496 {497 string variantColorImageName = variantCombination.GetString( "Ecom:Product:Field.VariantImage.Value.Clean" );498 //string imagePath = ImageService.Instance.GetImageURL( string.Format( "/Files/Images/produkter/{0}_3.jpg", variantColorImageName ), 80, 80, 5, 10, "png" );499 string imagePath = getProductlistItemImageColorDot( variantColorImageName );500 if ( JsonService.Instance.ToJson( colorVariantImages ).ToString().Contains( imagePath ) == false )501 {502 colorVariantImages.Add( new503 {504 path = imagePath505 } );506 ++colorVariantImagesCount;507 }508 }509510 string imageLarge = string.Empty;511 List< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > alternativeImages = product.GetLoop( "Ecom:Product.AlternativeImages" ).ToList();512513 if (alternativeImages.Any())514 {515 if (alternativeImages.Any( ai => ai.GetString("Ecom:Product.AlternativeImages.Image").Contains("_15." )) )516 {517 imageLarge = alternativeImages?.FirstOrDefault( ai => ai.GetString("Ecom:Product.AlternativeImages.Image").Contains("_15." )).GetString("Ecom:Product.AlternativeImages.Image");518 }519520 if (string.IsNullOrEmpty(imageLarge) && alternativeImages.Any( ai => ai.GetString("Ecom:Product.AlternativeImages.Image").Contains("_03." )) )521 {522 imageLarge = alternativeImages?.FirstOrDefault( ai => ai.GetString("Ecom:Product.AlternativeImages.Image").Contains("_03." )).GetString("Ecom:Product.AlternativeImages.Image");523 }524525 if (string.IsNullOrEmpty(imageLarge) && alternativeImages.Any( ai => ai.GetString("Ecom:Product.AlternativeImages.Image").Contains("_01." )) )526 {527 imageLarge = alternativeImages?.FirstOrDefault( ai => ai.GetString("Ecom:Product.AlternativeImages.Image").Contains("_01." )).GetString("Ecom:Product.AlternativeImages.Image");528 }529 }530531 if ( string.IsNullOrEmpty(imageLarge) )532 {533 imageLarge = product.GetString( "Ecom:Product.ImageDefault.Default.Clean" );534 }535536 dynamic productData = new537 {538 id = product.GetString( "Ecom:Product.ID" ),539 variantId = product.GetString( "Ecom:Product.VariantID" ),540 url = ProductService.Instance.GetProductLink( product.GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), product.GetString( "Ecom:Product.ID" ) ),541 number = product.GetString( "Ecom:Product.Number" ),542 name = ProductService.Instance.GetName( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ) ),543 typeRO = product.GetString( "Ecom:Product:Field.ProducttypeRO.Value.Clean" ),544 imageLarge = ImageService.Instance.GetImageURL( imageLarge, 400, 400, 5, 10, "png" ),545 price = espressoPrice,546 beforePrice = espressoListPrice,547 descriptionShortExtra01 = product.GetString( "Ecom:Product:Field.DescriptionShortExtra01" ),548 hasDiscount = hasDiscount,549 stock = dwProduct.Stock,550 stockStatus = dwProduct.get_StockStatus(EcomContext.LanguageID),551 colorVariantImagesCount = colorVariantImagesCount,552 colorVariantImages = colorVariantImages553 };554555 string labelColor = Translation.GetTranslation( "eCom Product - Color - Text" );556 if ( productData.colorVariantImagesCount > 1 )557 {558 labelColor = Translation.GetTranslation( "eCom Product - Colors - Text" );559 }560561 if (PageView.Current().Layout.Design.Name == "kabooki-shop")562 {563564 <div class="@productlistItemClassList">565 <div class="e-products-item js-e-products-item js-e-products-item-@productData.id js-e-block-link e-block-link" data-variant-id="@productData.variantId" style="background-image:url('@productData.imageLarge'); background-position:center; background-size: cover;">566 <div class="e-products-item-container">567 <div class="e-products-item-image-container">568 <a class="e-products-item-image-wrapper" href="@productData.url">569 @*<img src="@productData.imageLarge" alt="" class="e-products-item-image">*@570 @if (productData.hasDiscount)571 {572 <img src="/Files/Images/kabooki/system/lego_wear_badge_percentage.svg" alt="" class="custom-products-item-badge">573 }574 </a>575 </div>576577 </div>578 </div>579 <div class="e-products-item-text-container text-left small">580 <h3 class="e-products-item-name mb-0 mt-0">581 <a href="@productData.url">@productData.name @if(productData.typeRO != "") {<span>- @productData.typeRO</span>}</a>582 </h3>583 <p class="e-products-item-text mb-4">584 <span class="e-products-item-price">585 <a href="@productData.url">586 @productData.price587 @if (productData.hasDiscount)588 {589 <span class="custom-products-item-beforeprice">@productData.beforePrice</span>590 }591 </a>592 </span>593 </p>594 </div>595 </div>596 }597 else598 {599 <div class="@productlistItemClassList">600 <div class="e-products-item js-e-products-item js-e-products-item-@productData.id js-e-block-link e-block-link" data-variant-id="@productData.variantId">601 <div class="e-products-item-container">602 <div class="e-products-item-image-container">603 <a class="e-products-item-image-wrapper" href="@productData.url">604 <img src="@productData.imageLarge" alt="" class="e-products-item-image">605 @if (productData.hasDiscount)606 {607 <img src="/Files/Images/kabooki/system/lego_wear_badge_percentage.svg" alt="" class="custom-products-item-badge">608 }609 </a>610 </div>611612 <div class="e-products-item-text-container text-left small">613 <div class="custom-color-options-wrapper">614 <div class="custom-color-options-text">615 <p class="m-0 p-0">@productData.colorVariantImagesCount @labelColor</p>616 </div>617 <div class="custom-color-options-colors">618 @foreach (dynamic colorVariantImage in colorVariantImages)619 {620 <span class="custom-color-dot" style="background-image: url('@colorVariantImage.path');"></span>621 }622623 </div>624 </div>625626 <h3 class="e-products-item-name mb-0 mt-0">627 <a href="@productData.url">@productData.name @if(productData.typeRO != "") {<span>@productData.typeRO</span>}</a>628 </h3>629 <p class="e-products-item-text mb-0">630 <span class="e-products-item-price">631 <a href="@productData.url">632 @productData.price633 @if (productData.hasDiscount)634 {635 <span class="custom-products-item-beforeprice">@productData.beforePrice</span>636 }637 </a>638 </span>639 </p>640 </div>641 </div>642 </div>643 </div>644 }645 }646 }647648649 @helper sectionStart( string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string sectionId = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null )650 {651 sectionId = string.IsNullOrEmpty( sectionId ) ? Guid.NewGuid().ToString( "N" ) : sectionId;652 ClassList sectionClassList = new ClassList();653 sectionClassList.AddClasses( sectionClasses );654 ClassList contentClassList;655656 if ( contentClasses == null )657 {658 contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem( PageView.Current().Page.Item );659 }660 else661 {662 contentClassList = new ClassList();663 contentClassList.AddClasses( contentClasses );664 }665666 // TODO: Split collapse logic into separate helper function.667 string collapseId = Guid.NewGuid().ToString( "N" );668 ClassList collapseToggleClassList = new ClassList();669 if ( sectionCollapse )670 {671 sectionClassList.AddClasses( "p-section-collapse js-p-section-collapse" );672 collapseToggleClassList.AddClasses( contentClasses );673 collapseToggleClassList.AddClasses( "p-section-collapse-toggle collapsed order-last text-center" );674 contentClassList.AddClasses( "p-section-collapse-content collapse is-md" );675 }676677 @:<section class="@sectionClassList" id="@sectionId">678 @:<div class="container-fluid">679 @:<div class="row">680681 // TODO: Split collapse logic into separate helper function.682 if ( sectionCollapse )683 {684 <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId">685 <button class="btn btn-primary p-section-collapse-toggle-btn" type="button">686 <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i>687 </button>688 <small class="h4 p-section-collapse-toggle-text" data-expand-text="@( string.IsNullOrEmpty( collapseToggleTextExpand ) ? GetStandardCollapseToggleTextExpand() : collapseToggleTextExpand )" data-collapse-text="@( string.IsNullOrEmpty( collapseToggleTextCollapse ) ? GetStandardCollapseToggleTextCollapse() : collapseToggleTextCollapse )"></small>689 </div>690 }691692 @:<div class="@contentClassList" id="@collapseId">693 @:<div class="row">694 }695696 @helper sectionEnd()697 {698 @:</div>699 @:</div>700 @:</div>701 @:</div>702 @:</section>703 }704705706707708 <div class="e-loading-overlay e-page-loading-overlay is-loading js-e-page-loading-overlay">709 <div class="e-loading-spinner"></div>710 </div>711712713 @* https://medium.com/clio-calliope/making-google-fonts-faster-aadf3c02a36d *@714 @SnippetStart("webfonts")715 <link crossorigin="" href="https://fonts.gstatic.com/" rel="preconnect">716 <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:400,700|Material+Icons" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style">717 @SnippetEnd("webfonts")718719720721 <div class="@Espresso.Canvas.ClassList">722 @using System.Drawing723 @using Co3.Espresso.Website.Services724 @using Dynamicweb.Core725 @using Dynamicweb.Frontend;726 @using Dynamicweb.Ecommerce.Common727 @using Dynamicweb.Ecommerce.Orders728 @{729730 bool isExtranet = GetGlobalValue( "Global:Extranet.UserID" ) == "0" ? false : true;731 string imageBankLoginPage = Espresso.Area.Item.ImageBankLoginPage;732733 ClassList headerClassList = new ClassList();734 headerClassList.AddClasses( "e-header js-e-header is-sticky" );735 if ( Espresso.Item.HeaderTransparent == "True" )736 {737 headerClassList.AddClasses( "is-transparent" );738 }739740 ClassList logoClassList = new ClassList();741 logoClassList.AddClasses( "e-logo" );742743 string backButtonLink = Espresso.Item.BackButtonLink;744 ClassList backButtonClassList = new ClassList();745 ClassList backButtonIconClassList = new ClassList();746 if ( Espresso.Item.BackButton == "True" )747 {748 backButtonClassList.AddClasses( "btn btn-sm btn-secondary my-1 align-self-center" );749 if ( backButtonLink == "" || backButtonLink == "/" )750 {751 backButtonLink = "/";752 backButtonClassList.AddClasses( "js-e-back-link" );753 }754 backButtonIconClassList.AddClasses( "material-icons material-icons-large" );755 if ( Espresso.Item.BackButtonPosition == "right" )756 {757 backButtonClassList.AddClasses( "mr-0 ml-auto order-last" );758 logoClassList.AddClasses( "order-first" );759 }760 else761 {762 backButtonClassList.AddClasses( "order-first" );763 logoClassList.AddClasses( "mr-0 ml-auto order-last" );764 }765 if ( Espresso.Item.BackButtonIcon == "arrow_back" )766 {767 backButtonClassList.AddClasses( "arrow-left" );768 backButtonIconClassList.AddClasses( "d-none" );769 }770 else if ( Espresso.Item.BackButtonIcon == "arrow_forward" )771 {772 backButtonClassList.AddClasses( "arrow-right" );773 backButtonIconClassList.AddClasses( "d-none" );774 }775 }776777 string logoPrimary = Espresso.Area.Item.LogoPrimary;778 string logoSecondary = Espresso.Area.Item.LogoSecondary;779 if ( string.IsNullOrEmpty( logoSecondary ) == true )780 {781 logoSecondary = logoPrimary;782 }783 string tagline = Espresso.Area.Item.Tagline;784785 string checkoutPage = string.Empty;786 if ( !string.IsNullOrEmpty( Espresso.Area.Item.CheckoutPage ) )787 {788 checkoutPage = string.Format("Default.aspx?ID={0}", Espresso.Area.Item.CheckoutPage);789 checkoutPage = SearchEngineFriendlyURLs.GetFriendlyUrl( checkoutPage );790 }791792 string cartPage = string.Empty;793 if ( !string.IsNullOrEmpty( Espresso.Area.Item.CartPage ) )794 {795 cartPage = string.Format("Default.aspx?ID={0}", Espresso.Area.Item.CartPage);796 cartPage = SearchEngineFriendlyURLs.GetFriendlyUrl( cartPage );797 }798799 string customerServicePage = string.Empty;800 if ( !string.IsNullOrEmpty( Espresso.Area.Item.CustomerServicePage ) )801 {802 customerServicePage = string.Format("Default.aspx?ID={0}", Espresso.Area.Item.CustomerServicePage);803 customerServicePage = SearchEngineFriendlyURLs.GetFriendlyUrl( customerServicePage );804 }805806 Dictionary< string, string > navigationHtml = new Dictionary< string, string >807 {808 {809 "global", RenderNavigation( new810 {811 id = "dwnav-global",812 template = "global.xslt",813 startlevel = 1,814 endlevel = 8,815 expandmode = "all"816 } )817 },818 {819 "utilities-primary", RenderNavigation( new820 {821 id = "dwnav-utilities-primary",822 template = "utilities.xslt",823 startlevel = 4,824 endlevel = 5,825 expandmode = "all",826 parenttag = "utilities-primary"827 } )828 },829 {830 "utilities-secondary", RenderNavigation( new831 {832 id = "dwnav-utilities-secondary",833 template = "utilities.xslt",834 startlevel = 4,835 endlevel = 4,836 expandmode = "all",837 parenttag = "utilities-secondary"838 } )839 },840 {841 "hamburger-header", RenderNavigation( new842 {843 id = "dwnav-hamburger-header",844 template = "utilities.xslt",845 startlevel = 4,846 endlevel = 4,847 expandmode = "all",848 parenttag = "hamburger-header"849 } )850 },851 {852 "hamburger-aside", RenderNavigation( new853 {854 id = "dwnav-hamburger-aside",855 template = "utilities.xslt",856 startlevel = 4,857 endlevel = 4,858 expandmode = "all",859 parenttag = "hamburger-aside"860 } )861 }862 };863864 string logoLink = "/";865 if ( isExtranet )866 {867 logoLink = "/Default.asp?ID=6532";868 }869870871 // STREAMER872873 int pageId = PageView.Current().ID;874 string streamerActive = Espresso.Area.Item.StreamerActive;875 string streamerMarquee = Espresso.Area.Item.StreamerAsMarquee;876 string streamerMessage = Espresso.Area.Item.StreamerMessage;877 string streamerTextColor = Espresso.Area.Item.StreamerTextColor;878 string streamerBackgroundColor = Espresso.Area.Item.StreamerBackgroundColor;879 string streamerLink = Espresso.Area.Item.StreamerLink;880 }881882 @if ( Espresso.Item.HeaderHide != "True" )883 {884 <header class="@headerClassList" data-autohide="true" data-imagebank-area="@isImageBankArea">885886 <div class="e-header-hamburger">887 @sectionStart( "e-header-section e-section", "col-12" )888 <div class="col-12 e-header-section-content">889 <div class="@logoClassList">890 @if ( isImageBankArea == false )891 {892 <a class="e-logo-link" href="/">893 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">894 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">895 @if ( string.IsNullOrEmpty( tagline ) == false )896 {897 <p class="e-logo-tagline">@tagline</p>898 }899 </a>900 }901 else902 {903 <a class="e-logo-link" href="@logoLink">904 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">905 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">906 @if ( string.IsNullOrEmpty( tagline ) == false )907 {908 <p class="e-logo-tagline">@tagline</p>909 }910 </a>911 }912913 </div>914 @if ( Espresso.Item.NavigationHide != "True" )915 {916 <section class="e-nav-hamburger-header">917 <ul class="nav">918 @navigationHtml[ "hamburger-header" ]919 @* TODO: Move to xslt *@920 <li class="e-nav-item-hamburger-open nav-item">921 <a class="nav-link" data-target=".modal.e-nav" data-toggle="modal" href="#">922 <i class="e-nav-pageicon material-icons">menu</i>923 @*<span class="e-nav-pagename">@Translate( "Header - Hamburger menu open - Button", "Menu" )</span>*@924 </a>925 </li>926 </ul>927 </section>928929930931932933 }934 @if ( Espresso.Item.BackButton == "True" )935 {936 <a class="@backButtonClassList" href="@backButtonLink">937 @if ( Espresso.Item.BackButtonIcon != "" )938 {939 <i class="@backButtonIconClassList">@Espresso.Item.BackButtonIcon</i>940 }941 @Espresso.Item.BackButtonText942 </a>943 }944 </div>945 @sectionEnd()946947948 @if ( streamerActive != "False" )949 {950 <section class="e-header-section e-section kabooki-seasonal-streamer" style="background-color: @streamerBackgroundColor;">951952 @if ( streamerLink == "" )953 {954 <div class="container-fluid">955 <div class="row">956 <div class="col-12">957 <div class="row">958 <div class="col-12 d-flex pt-1 pb-1 small @streamerTextColor" style="min-height: 2em;">959 @if ( streamerMarquee == "True" )960 {961 <marquee>@streamerMessage</marquee>962 }963 else964 {965 @streamerMessage966 }967 </div>968 </div>969 </div>970 </div>971 </div>972 }973 else974 {975 <a href="@streamerLink">976 <div class="container-fluid">977 <div class="row">978 <div class="col-12">979 <div class="row">980 <div class="col-12 d-flex pt-1 pb-1 small @streamerTextColor" style="min-height: 2em;">981 @if ( streamerMarquee == "True" )982 {983 <marquee>@streamerMessage</marquee>984 }985 else986 {987 @streamerMessage988 }989 </div>990 </div>991 </div>992 </div>993 </div>994 </a>995 }996 </section>997 }998999 </div>1000 <div class="e-nav js-e-nav modal p-0" data-backdrop="false">1001 <div class="e-nav-container navbar">10021003 @if ( !string.IsNullOrEmpty( Espresso.Area.Item.HeaderPageID ) && isImageBankArea == false )1004 {1005 @sectionStart( "e-header-section p-section e-section custom-USP-bar bg-light order-4", "col-12" )10061007 @RenderPageContent( int.Parse( Espresso.Area.Item.HeaderPageID ) )10081009 @sectionEnd()1010 }10111012 @if ( string.IsNullOrEmpty( navigationHtml[ "utilities-primary" ] ) == false && isImageBankArea == false )1013 {1014 @sectionStart( "e-header-section e-section order-3 order-lg-1", "col-12" )1015 @:<div class="col-12 e-header-section-content">1016 <nav class="e-nav-utilities-primary js-e-nav-utilities-primary">1017 <ul class="nav">1018 <li class="dropdown nav-item mr-auto">1019 <a href="@selectorCountries[ contextCountryCode ].domain?countrycode=@selectorCountries[ contextCountryCode ].countrycode.ToLower()&currencycode=@selectorCountries[ contextCountryCode ].currencycode.ToLower()" class="dropdown-toggle nav-link icon-flag-@selectorCountries[ contextCountryCode ].countrycode.ToLower() nav-utility-bg-light-gray " data-toggle="dropdown" data-collapse-toggle="true" data-collapse-target="#countries">1020 <i class="e-nav-pageicon e-nav-pageicon-language js-e-nav-pageicon-language"></i><span class="e-nav-pagename ">@selectorCountries[ contextCountryCode ].title</span><i class="material-icons e-nav-pageicon-dropdown ">keyboard_arrow_down</i>1021 </a>1022 <div class="dropdown-menu collapse" id="countries">1023 <ul class="nav">1024 @foreach ( KeyValuePair< string, dynamic > selectorCountry in selectorCountries )1025 {1026 if ( selectorCountry.Value.countrycode.ToLower() != contextCountryCode.ToLower() )1027 {1028 <li class="dropdown-item nav-item ">1029 <form action="@selectorCountry.Value.domain.ToLower()" method="post">1030 <input type="hidden" name="countrycode" value="@selectorCountry.Value.countrycode">1031 <input type="hidden" name="currencycode" value="@selectorCountry.Value.currencycode">1032 <input type="hidden" name="EcomOrderDeliveryCountry" value="@selectorCountry.Value.countrycode">1033 <input type="hidden" name="EcomOrderDeliveryCountryCode" value="@selectorCountry.Value.countrycode">1034 <input type="hidden" name="EcomOrderCustomerCountry" value="@selectorCountry.Value.countrycode">1035 <input type="hidden" name="EcomOrderCustomerCountryCode" value="@selectorCountry.Value.countrycode">1036 <button class="nav-link border-0 bg-transparent icon-flag-@selectorCountry.Value.countrycode.ToLower()" type="submit"><i class="e-nav-pageicon e-nav-pageicon-language js-e-nav-pageicon-language"></i><span class="e-nav-pagename">@selectorCountry.Value.title</span></button>1037 </form>1038 </li>1039 }1040 }1041 </ul>1042 </div>1043 </li>1044 @navigationHtml[ "utilities-primary" ]1045 </ul>1046 </nav>1047 @:</div>1048 @sectionEnd()1049 }10501051 @sectionStart( "e-header-section e-header-section-primary e-section order-2 order-lg-1", "col-12" )1052 <div class="col-12 e-header-section-content">10531054 @if ( isImageBankArea == false )1055 {1056 <div class="@logoClassList">1057 <a class="e-logo-link" href="/">1058 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">1059 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">1060 @if ( string.IsNullOrEmpty( tagline ) == false )1061 {1062 <p class="e-logo-tagline">@tagline</p>1063 }1064 </a>1065 </div>1066 }1067 else1068 {1069 <div class="@logoClassList">1070 <a class="e-logo-link my-2 p-0" href="@logoLink">1071 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">1072 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">1073 @if ( string.IsNullOrEmpty( tagline ) == false )1074 {1075 <p class="e-logo-tagline">@tagline</p>1076 }1077 </a>1078 </div>1079 }108010811082 @if ( Espresso.Item.NavigationHide != "True" )1083 {1084 <nav class="e-nav-global mx-auto js-e-nav-global">1085 <ul class="nav">1086 @navigationHtml[ "global" ]1087 </ul>1088 </nav>10891090 <div class="e-nav-item-hamburger-close">1091 <a class="nav-link" data-target=".modal.e-nav" data-toggle="modal" href="#">1092 <i class="e-nav-pageicon material-icons">close</i>1093 <span class="e-nav-pagename">@Translate( "Header - Hamburger menu close - Button", "Close" )</span>1094 </a>1095 </div>109610971098 if ( isImageBankArea == false )1099 {11001101 }11021103 if ( string.IsNullOrEmpty( navigationHtml[ "hamburger-aside" ] ) == false )1104 {1105 <nav class="e-nav-hamburger-aside">1106 <ul class="nav">1107 @navigationHtml[ "hamburger-aside" ]1108 </ul>1109 </nav>1110 }1111 }1112 @if ( Espresso.Item.BackButton == "True" )1113 {1114 <a class="@backButtonClassList" href="@backButtonLink">1115 @if ( Espresso.Item.BackButtonIcon != "" )1116 {1117 <i class="@backButtonIconClassList">@Espresso.Item.BackButtonIcon</i>1118 }1119 @Espresso.Item.BackButtonText1120 </a>1121 }1122 </div>1123 @sectionEnd()1124112511261127 @if ( isExtranet )1128 {1129 @sectionStart( "e-header-section e-section bg-light", "col-12" )1130 @:<div class="col-12 e-header-section-content kabooki-imagebank-bar">11311132 <p>1133 <i class="material-icons">lock_open</i> @Translate( "Header - Imagebank login - Intro", "Du er logget ind i vores" ) <a href="@imageBankLoginPage">@Translate( "Header - Imagebank login - Imagebank", "image bank" )</a>1134 </p>1135 <p>1136 <a class="btn" href="/Admin/Public/extranetlogoff.aspx">@Translate( "Header - Imagebank login - button", "Log ud" )</a>1137 </p>1138 @:</div>1139 @sectionEnd()1140 }114111421143 @if ( streamerActive != "False" )1144 {1145 <section class="e-header-section e-section kabooki-seasonal-streamer" style="background-color: @streamerBackgroundColor;">11461147 @if ( streamerLink == "" )1148 {1149 <div class="container-fluid">1150 <div class="row">1151 <div class="col-12">1152 <div class="row">1153 <div class="col-12 d-flex pt-1 pb-1 @streamerTextColor" style="min-height: 2em;">1154 @if ( streamerMarquee == "True" )1155 {1156 <marquee>@streamerMessage</marquee>1157 }1158 else1159 {1160 @streamerMessage1161 }1162 </div>1163 </div>1164 </div>1165 </div>1166 </div>1167 }1168 else1169 {1170 <a href="@streamerLink">1171 <div class="container-fluid">1172 <div class="row">1173 <div class="col-12">1174 <div class="row">1175 <div class="col-12 d-flex pt-1 pb-1 @streamerTextColor" style="min-height: 2em;">1176 @if ( streamerMarquee == "True" )1177 {1178 <marquee>@streamerMessage</marquee>1179 }1180 else1181 {1182 @streamerMessage1183 }1184 </div>1185 </div>1186 </div>1187 </div>1188 </div>1189 </a>1190 }1191 </section>1192 }11931194119511961197 </div>1198 </div>11991200 </header>1201 }12021203 @using Dynamicweb.Frontend1204 @using Dynamicweb.Security.UserManagement1205 @{1206 User currentUser = PageView.Current().User;1207 if ( currentUser != null )1208 {1209 User currentSecondaryUser = currentUser.CurrentSecondaryUser;1210 if ( currentSecondaryUser != null )1211 {1212 @sectionStart( "e-section bg-warning e-text-dark js-e-section is-sticky zi-fixed py-1", "col-12 small" )1213 <div class="align-self-center col-12 col-lg-9 col-md-8">1214 <p class="line-height-sm mb-1 mb-md-0 text-center text-md-left">1215 <i class="material-icons material-icons-2x">supervisor_account</i>&nbsp;@Translate( "Extranet Impersonation - Active impersonation message - Text", "You are currently impersonating this user:" ) <strong>@currentUser.Name &mdash; @currentUser.Company </strong>1216 </p>1217 </div>1218 <div class="align-self-center col-12 col-lg-3 col-md-4">1219 <form class="mb-0 small text-center text-md-right" method="post" action="@Espresso.Area.Item.ExtranetImpersonationPage">1220 <button class="btn btn-primary" name="DwExtranetRemoveSecondaryUser" type="submit">@Translate( "Extranet Impersonation - Stop impersonation - Button", "Stop impersonation" )</button>1221 </form>1222 </div>1223 @sectionEnd()1224 }1225 }1226 }122712281229 <main id="dwcontentmain" class="e-content js-e-content @Espresso.ContentArea.ClassList">1230 @using Dynamicweb.Content;1231 @using Dynamicweb.Extensibility;1232 @{1233 string eBreadcrumbClasslist = "e-breadcrumb js-e-breadcrumb d-none d-lg-block";1234 if ( Espresso.Item.Breadcrumb != "auto" && Espresso.Item.Breadcrumb != "none" && String.IsNullOrEmpty( Espresso.Item.Breadcrumb ) == false )1235 {1236 eBreadcrumbClasslist += string.Format( " e-breadcrumb-{0}", Espresso.Item.Breadcrumb );1237 }1238 string navigationHtmlBreadcrumb = RenderNavigation( new1239 {1240 id = "dwnav-breadcrumb",1241 template = "breadcrumb.xslt",1242 startlevel = 1,1243 endlevel = 10,1244 expandmode = "pathonly",1245 sitemapmode = true1246 } );1247 }12481249 @if ( string.IsNullOrEmpty( navigationHtmlBreadcrumb ) == false && Espresso.Item.Breadcrumb != "none" && string.IsNullOrEmpty( Espresso.Item.Breadcrumb ) == false )1250 {1251 <section class="e-section @eBreadcrumbClasslist">1252 <div class="container-fluid">1253 <div class="row">1254 <div class="col-12">1255 <div class="row">12561257 <div class="col-12">1258 <nav class="e-breadcrumb-container">1259 <ol class="breadcrumb nav">1260 <li class="breadcrumb-item m-0 p-0">1261 <a class="arrow-left breadcrumb-back-link js-e-back-link px-0" href="/">@Translate( "Breadcrumb - Back link", "Back" )</a>1262 <span class="breadcrumb-prefix-text">1263 @Translate( "Breadcrumb - Prefix - Text", "You are here:" )1264 </span>1265 <a href="/">1266 @ServiceLocator.Current.GetPageService().GetFirstPageForArea( GetInteger( "DwAreaID" ) ).MenuText1267 </a>1268 </li>1269 @navigationHtmlBreadcrumb1270 </ol>1271 </nav>1272 </div>12731274 </div>1275 </div>1276 </div>1277 </div>1278 </section>1279 }12801281 <article class="e-content-article">1282 @{1283 int NavigationLocalHorizontalParentPageId = 0;1284 if ( !string.IsNullOrEmpty( Espresso.Item.NavigationLocalParentPage ) )1285 {1286 int.TryParse( Espresso.Item.NavigationLocalParentPage, out NavigationLocalHorizontalParentPageId );1287 }1288 if ( NavigationLocalHorizontalParentPageId == 0 )1289 {1290 NavigationLocalHorizontalParentPageId = PageView.Current().Page.ID;1291 if ( !Dynamicweb.Services.Pages.GetPagesByParentID( NavigationLocalHorizontalParentPageId ).Any() )1292 {1293 NavigationLocalHorizontalParentPageId = PageView.Current().Page.ParentPageId;1294 }1295 }1296 string NavigationLocalHorizontalClassList = "e-nav-local e-nav-local-horizontal js-e-nav-local-horizontal";1297 string NavigationLocalHorizontalContainerClassList = "e-nav-local-container";1298 string NavigationLocalHorizontalTemplate = "local-" + Espresso.Item.NavigationLocalLayout + ".xslt";1299 if ( string.IsNullOrEmpty( Espresso.Item.NavigationLocalTemplate ) == false && Path.GetExtension( Espresso.Item.NavigationLocalTemplate ) == ".xslt" )1300 {1301 NavigationLocalHorizontalTemplate = Path.GetFileName( Espresso.Item.NavigationLocalTemplate );1302 }13031304 if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "horizontal" )1305 {1306 NavigationLocalHorizontalClassList += " " + Espresso.Item.NavigationLocalCustomClasses;1307 if ( Espresso.Item.NavigationLocalSticky == "True" )1308 {1309 NavigationLocalHorizontalClassList += " is-sticky";1310 }1311 if ( Espresso.Item.NavigationLocalAbsolute == "True" )1312 {1313 NavigationLocalHorizontalClassList += " is-absolute";1314 }1315 else1316 {1317 if ( Espresso.Item.NavigationLocalMarginTop != "0" && Espresso.Item.NavigationLocalMarginTop != "" )1318 {1319 NavigationLocalHorizontalClassList += " mt-" + Espresso.Item.NavigationLocalMarginTop;1320 }1321 if ( Espresso.Item.NavigationLocalMarginBottom != "0" && Espresso.Item.NavigationLocalMarginBottom != "" )1322 {1323 NavigationLocalHorizontalClassList += " mb-" + Espresso.Item.NavigationLocalMarginBottom;1324 }1325 }1326 }1327 }1328 @if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "horizontal" )1329 {1330 <section class="e-section @NavigationLocalHorizontalClassList">1331 <div class="container-fluid">1332 <div class="row">1333 <div class="col-12">1334 <div class="row">13351336 <div class="col-12">1337 <nav id="dwnav-local-horizontal-@NavigationLocalHorizontalParentPageId" class="@NavigationLocalHorizontalContainerClassList">1338 <ul class="justify-content-start nav">1339 @if ( Espresso.Item.NavigationLocalHeading != "" )1340 {1341 <li class="e-nav-local-heading">1342 <h2>@Espresso.Item.NavigationLocalHeading</h2>1343 </li>1344 }1345 @RenderNavigation( new1346 {1347 id = "dwnav-local-horizontal-" + NavigationLocalHorizontalParentPageId,1348 parentid = NavigationLocalHorizontalParentPageId,1349 template = NavigationLocalHorizontalTemplate,1350 startlevel = Espresso.Item.NavigationLocalLevelStart,1351 endlevel = Espresso.Item.NavigationLocalLevelEnd,1352 expandmode = Espresso.Item.NavigationLocalPageTreeExpand == "True" ? "all" : "path"1353 } )1354 </ul>1355 </nav>1356 </div>13571358 </div>1359 </div>1360 </div>1361 </div>1362 </section>1363 }136413651366 @{1367 int NavigationLocalVerticalParentPageId = 0;1368 if ( !string.IsNullOrEmpty( Espresso.Item.NavigationLocalParentPage ) )1369 {1370 int.TryParse( Espresso.Item.NavigationLocalParentPage, out NavigationLocalVerticalParentPageId );1371 }1372 if ( NavigationLocalVerticalParentPageId == 0 )1373 {1374 NavigationLocalVerticalParentPageId = PageView.Current().Page.ID;1375 if ( !Dynamicweb.Services.Pages.GetPagesByParentID( NavigationLocalVerticalParentPageId ).Any() )1376 {1377 NavigationLocalVerticalParentPageId = PageView.Current().Page.ParentPageId;1378 }1379 }13801381 string NavigationLocalVerticalClassList = "e-nav-local e-nav-local-vertical js-e-nav-local-vertical";1382 string NavigationLocalVerticalContainerClassList = "e-nav-local-container";1383 string NavigationLocalVerticalTemplate = "local-" + Espresso.Item.NavigationLocalLayout + ".xslt";1384 if ( string.IsNullOrEmpty( Espresso.Item.NavigationLocalTemplate ) == false && Path.GetExtension( Espresso.Item.NavigationLocalTemplate ) == ".xslt" )1385 {1386 NavigationLocalVerticalTemplate = Path.GetFileName( Espresso.Item.NavigationLocalTemplate );1387 }13881389 if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "vertical" )1390 {1391 NavigationLocalVerticalClassList += " " + Espresso.Item.NavigationLocalCustomClasses;13921393 if ( Espresso.Item.NavigationLocalMarginTop != "0" && Espresso.Item.NavigationLocalMarginTop != "" )1394 {1395 NavigationLocalVerticalClassList += " mt-" + Espresso.Item.NavigationLocalMarginTop;1396 }1397 if ( Espresso.Item.NavigationLocalMarginBottom != "0" && Espresso.Item.NavigationLocalMarginBottom != "" )1398 {1399 NavigationLocalVerticalClassList += " mb-" + Espresso.Item.NavigationLocalMarginBottom;1400 }14011402 if ( Espresso.Item.NavigationLocalSticky == "True" )1403 {1404 NavigationLocalVerticalClassList += " is-sticky";1405 }14061407 if ( Espresso.Item.NavigationLocalAbsolute == "True" )1408 {1409 NavigationLocalVerticalClassList += " is-absolute";1410 }1411 else1412 {1413 Espresso.ContentSection.ClassList.Clear();1414 Espresso.ContentSection.ClassList.AddClasses( "wtf col-12 col-lg-9 ml-auto" );1415 }1416 }1417 }14181419 @if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "vertical" )1420 {1421 <section class="e-section @NavigationLocalVerticalClassList">1422 <div class="container-fluid">1423 <div class="row">1424 <div class="col-12">1425 <div class="row">14261427 <div class="col-3">1428 <nav id="dwnav-local-@NavigationLocalVerticalParentPageId" class="@NavigationLocalVerticalContainerClassList">1429 <ul class="flex-column nav">1430 @if ( Espresso.Item.NavigationLocalHeading != "" )1431 {1432 <li class="e-nav-local-heading">1433 <h2>@Espresso.Item.NavigationLocalHeading</h2>1434 </li>1435 }1436 @RenderNavigation( new1437 {1438 id = "dwnav-local-" + NavigationLocalVerticalParentPageId,1439 parentid = NavigationLocalVerticalParentPageId,1440 template = NavigationLocalVerticalTemplate,1441 startlevel = Espresso.Item.NavigationLocalLevelStart,1442 endlevel = Espresso.Item.NavigationLocalLevelEnd,1443 expandmode = Espresso.Item.NavigationLocalPageTreeExpand == "True" ? "all" : "path",1444 } )1445 </ul>1446 </nav>1447 </div>14481449 </div>1450 </div>1451 </div>1452 </div>1453 </section>1454 }145514561457 @sectionStart()1458 @GetValue("DwContent(dwcontentmain)")1459 @sectionEnd()1460 </article>1461 </main>1462 @using Dynamicweb.Frontend1463 @{1464 string FooterContentClassList = "e-footer-content e-section";1465 }1466 @if ( Espresso.Item.FooterHide != "True" )1467 {1468 <footer class="e-footer">1469 <article class="e-footer-wrapper">1470 <section class="@FooterContentClassList">1471 <div class="container-fluid">1472 <div class="row">1473 @if ( !string.IsNullOrEmpty( Espresso.Area.Item.FooterPageId ) )1474 {1475 @RenderPageContent( int.Parse( Espresso.Area.Item.FooterPageId ) )1476 }1477 @*1478 @if ( string.IsNullOrEmpty( GetString( "DwNavigation(dwnavutilitiessecondaryfooter)" ) ) == false )1479 {1480 <div class="col-12">1481 <aside class="e-nav-utilities-secondary">1482 <ul class="nav nav-inline">1483 @GetValue("DwNavigation(dwnavutilitiessecondaryfooter)")1484 </ul>1485 </aside>1486 </div>1487 }*@1488 </div>1489 </div>1490 </section>1491 <section class="e-footer-copyright e-section">1492 <div class="container-fluid">1493 <div class="align-items-center row">1494 <div class="col-12 col-sm-9">1495 <p class="e-copyright">1496 &copy; @DateTime.Now.Year.ToString()&nbsp;1497 @Translate( "Footer - Copyright - Text", "Copyright &copy;" )&nbsp;14981499 &nbsp;@Translate( "Footer - All Rights Reserved - Text", "All rights reserved." )1500 </p>1501 </div>1502 @if ( isImageBankArea == false )1503 {1504 string creditcardImage = "creditcards_DK.svg";1505 if ( areaID == 25 )1506 {1507 creditcardImage = "creditcards_EN.svg";1508 }1509 if ( areaID == 27 )1510 {1511 creditcardImage = "creditcards_DE.svg";1512 }1513 <div class="col-12 col-sm-3 text-left text-sm-right custom-creditcards-wrapper">1514 <img class="custom-creditcards" src="/Files/Templates/Designs/legowear/_assets/img/@creditcardImage" alt="">1515 </div>1516 }1517 </div>1518 </div>1519 </section>1520 </article>1521 </footer>1522 }15231524 @if( string.IsNullOrEmpty( GetString("DwContent(dwcontentcta)") ) == false ) {1525 <aside id="dwcontentcta" class="js-e-cta e-cta is-hidden fixed-top">1526 <section class="e-section">1527 <div class="container-fluid">1528 <div class="row no-gutters">1529 <div class="col-12">1530 <div class="row no-gutters justify-content-center align-items-center">1531 @GetValue("DwContent(dwcontentcta)")1532 @* <p><a class="d-flex align-items-center justify-content-center justify-content-lg-left text-black text-decoration-none small" href="/bliv-ringet-op"><i class="material-icons material-icons-large text-primary mr-1">phone</i>Bliv ringet op</a></p> *@1533 </div>1534 </div>1535 </div>1536 </div>1537 </section>1538 </aside>1539 }15401541 <div class="e-cart-msg modal fade small" id="js-e-cart-msg" data-backdrop="false"><div class="modal-dialog e-cart-msg-modal-dialog"><div class="modal-content"><div class="modal-header"><h4 class="js-e-cart-msg-heading modal-title"><i class="material-icons material-icons-large text-success">check_circle</i><span>@Translate( "eCom Cart - Product Added - Heading", "Added to your cart" )</span></h4><button class="close" data-dismiss="modal" type="button"><i class="material-icons">close</i></button></div><div class="modal-body"><div class="js-e-cart-msg-content"><script id="js-e-handlebars-tmpl-cart-msg-lastadded" type="text/x-handlebars-template"><div class="row">{{#each cart.lastAdded}}<div class="col-12 py-1"><div class="row"><div class="col-4"><a class="" href="{{url}}"><img alt="" class="img-fluid" src="{{alternativeImage}}"></a></div><div class="col-8"><h3 class="mb-0"><a href="{{url}}" class="text-decoration-none">{{name}} {{#if hasTypeRO}}<span>{{typeRO}}</span>{{/if}}</a></h3><p class="mb-0 text-muted">{{variantText}}</p><p class="mb-0"><a href="{{url}}" class="text-auto text-decoration-none">{{{cartMsgPrice}}}<br>{{{stock.text}}}<br>{{{stock.delivery}}}<br></a></p></div></div></div>{{/each}}</div></script></div></div><div class="bg-info e-cart-msg-footer modal-footer border-top-0"><a class="btn btn-secondary mr-1" href="/shop/cart" data-dismiss="modal">@Translate( "eCom Cart - Continue Shopping - Button", "Continue shopping" )</a><a class="arrow-right btn btn-primary" href="/shop/cart">@Translate( "eCom Cart - Checkout - Button", "Checkout" )</a></div></div></div></div>1542 @using Dynamicweb.Frontend1543 @{1544 string ecomOrderDeliveryCountry = HttpContext.Current.Request.Form[ "EcomOrderDeliveryCountry" ];1545 bool modalDeliveryCountryFormPosted = !string.IsNullOrEmpty(ecomOrderDeliveryCountry);1546 string currentDomain = "//" + PageView.GetAreaByDomain().DomainLock + "/";1547 string currentUrl = PageView.Current().SearchFriendlyUrl;1548 string formAction = "";1549 }15501551 <!-- Modal -->1552 <div class="modal fade js-modal-deliverycountry" data-form-posted="@modalDeliveryCountryFormPosted" data-param-ecomorderdeliverycountry="@ecomOrderDeliveryCountry" id="modalDeliveryCountry" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">1553 <div class="modal-dialog" role="document">1554 <div class="modal-content">1555 <div class="modal-body">1556 <div class="" id="countries">1557 <h3 class="text-center mb-0 text-uppercase">@Translate( "global Modal - Langauge select - Heading", "Select your country" )</h3>1558 <p class="text-center mb-2">@Translate( "global Modal - Langauge select - Text", "So we can easily deliver to you" )</p>1559 <div class="e-nav-utilities-primary kabooki-custom-language-select">15601561 @foreach (KeyValuePair<string, dynamic> selectorCountry in selectorCountries)1562 {1563 if (selectorCountry.Value.domain.ToLower() == currentDomain)1564 {1565 formAction = currentUrl;1566 }1567 else1568 {1569 formAction = selectorCountry.Value.domain.ToLower();1570 }1571 <div>1572 <form action="@formAction" method="post">1573 <input type="hidden" name="countrycode" value="@selectorCountry.Value.countrycode">1574 <input type="hidden" name="currencycode" value="@selectorCountry.Value.currencycode">1575 <input type="hidden" name="EcomOrderDeliveryCountry" value="@selectorCountry.Value.countrycode">1576 <input type="hidden" name="EcomOrderDeliveryCountryCode" value="@selectorCountry.Value.countrycode">1577 <input type="hidden" name="EcomOrderCustomerCountry" value="@selectorCountry.Value.countrycode">1578 <input type="hidden" name="EcomOrderCustomerCountryCode" value="@selectorCountry.Value.countrycode">1579 <button class="nav-link border-0 bg-transparent icon-flag-@selectorCountry.Value.countrycode.ToLower()" type="submit">1580 <i class="e-nav-pageicon e-nav-pageicon-language js-e-nav-pageicon-language"></i><span class="e-nav-pagename">@selectorCountry.Value.title</span>1581 </button>1582 </form>1583 </div>1584 }1585 </div>1586 </div>1587 </div>1588 </div>1589 </div>1590 </div>15911592 </div>15931594 @using Co3.Espresso.Base.Extensions1595 @using Co3.Espresso.Website.Services1596 <div class="modal fade e-search js-e-search js-e-search-modal modal-fullscreen" data-backdrop="false" data-keyboard="true" data-focus="true">1597 <div class="modal-dialog">1598 <div class="modal-content">15991600 <div class="modal-header">1601 <a class="btn btn-sm btn-secondary js-e-back-link arrow-left" href="/" data-dismiss="modal">1602 @Translate("Search - Back button", "Back")1603 </a>1604 <div class="e-logo">1605 <a href="/" class="e-logo-link my-0">1606 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">1607 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">1608 </a>1609 </div>1610 </div>16111612 <div class="modal-body">16131614 <div class="container-fluid">16151616 <div class="e-search-form-container">1617 <div class="row justify-content-center">1618 <div class="col-12 col-md-10 col-lg-8 col-xl-6 mt-3">1619 <form action="" class="e-search-form js-e-search-form">1620 <div class="js-e-search-input-group e-search-input-group is-empty">1621 <label class="e-search-label" for="e-search-input"><span class="search-custom-search-icon"></span></label>1622 @{ string Translate_Search_InputText = Translate("Search - Input Placeholder - Text", "Search"); }1623 <input type="text" class="js-e-search-input e-search-input form-control-plaintext border-0" name="q" id="e-search-input" placeholder="@Translate_Search_InputText">1624 <span class="js-e-search-clear e-search-clear"><i class="material-icons">close</i></span>1625 <button class="e-search-submit btn btn-primary" type="submit"><span class="search-custom-search-icon white"></span></button>1626 </div>1627 </form>1628 </div>1629 </div>1630 </div>16311632 <div class="js-e-search-result-container e-search-result-container">16331634 <div class="row justify-content-center">1635 <div class="col-12 col-md-10 col-lg-8 col-xl-6">1636 <p class="e-search-result-info small text-muted mt-1 mb-3"><span class="js-e-search-result-count">0</span> @Translate("Search - Result Count - Text", "results")</p>1637 </div>1638 </div>16391640 <div class="row justify-content-center">1641 <div class="col-12 col-xl-10">1642 <div class="js-e-search-result-products e-search-result-products is-empty mb-4">1643 @{string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth( null ).ToResponsiveClasses();}1644 <script id="js-e-handlebars-tmpl-search-result-item-product" type="text/x-handlebars-template">1645 <div class="e-products">1646 <div class="row justify-content-center">1647 {{#each products}}1648 <div class="@productlistItemClassList"">1649 <div class="e-products-item js-e-products-item js-e-products-item-{{id}} js-e-block-link e-block-link" data-variant-id="{{variantId}}" style="background-image:url('{{imageLarge}}'); background-position:center; background-size: cover;">1650 <div class="e-products-item-container">1651 <div class="e-products-item-image-container">1652 <a class="e-products-item-image-wrapper" href="{{{url}}}">1653 @*<img src="{{{imageLarge}}}" alt="" class="e-products-item-image">*@1654 {{#if hasDiscount}}1655 <img src="/Files/Images/kabooki/system/lego_wear_badge_percentage.svg" alt="" class="custom-products-item-badge">1656 {{/if}}1657 </a>1658 </div>1659 </div>1660 </div>16611662 <div class="e-products-item-text-container text-left small mb-2">1663 <h3 class="e-products-item-name mb-0 mt-0">1664 <a href="{{{url}}}">{{name}} {{#if hasTypeRO}}<span>{{typeRO}}</span>{{/if}}</a>1665 </h3>1666 <p class="e-products-item-text mb-0">1667 <span class="e-products-item-price">1668 <a href="{{{url}}}">1669 {{{price}}}1670 {{#if hasDiscount}}1671 <span class="custom-products-item-beforeprice">{{{priceBefore}}}</span>1672 {{/if}}1673 </a>1674 </span>1675 </p>1676 </div>16771678 </div>1679 {{/each}}1680 </div>1681 <p class="js-e-search-products-show-all text-center"><a href="" class="btn btn-secondary px-6">@Translate( "Search - View All Products - Button", "View All Products" )</a></p>1682 </div>1683 </script>1684 </div>1685 </div>1686 </div>16871688 <div class="row justify-content-center">1689 <div class="col-12 col-md-10 col-lg-8 col-xl-6">1690 <div class="js-e-search-result-pages e-search-result-pages is-empty mb-3">1691 <script id="js-e-handlebars-tmpl-search-result-item-page" type="text/x-handlebars-template">1692 <div class="row">1693 {{#each pages}}1694 <div class="col-12">1695 <p class="mb-0"><a href="{{{url}}}" class="text-bold">{{{title}}}</a></p>1696 <p class="mb-0 small text-truncate">1697 <a href="{{{url}}}" class="text-auto text-muted text-decoration-none"><span class="d-none d-sm-inline">@HttpContext.Current.Request.Url.Host</span>{{{url}}}</a></p>1698 <p class="small">{{{text}}}...</p>1699 </div>1700 {{/each}}1701 </div>1702 </script>1703 </div>1704 </div>1705 </div>17061707 <div class="js-e-search-loading-overlay e-loading-overlay e-search-loading-overlay">1708 <div class="e-loading-spinner"></div>1709 </div>17101711 </div>17121713 </div>1714 </div>1715 </div>1716 </div>1717 </div>17181719 @if( Espresso.Area.Item.BackToTopLink == "True" ){1720 <a href="#top" class="e-back-to-top js-e-back-to-top"><i class="material-icons">keyboard_arrow_up</i></a>1721 }172217231724 @*1725 @using System.Web;1726 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase17271728 @{1729 HttpCookie optInLevel = HttpContext.Current.Request.Cookies[ "Dynamicweb.CookieOptInLevel" ];1730 bool showCookieWarning = optInLevel == null;1731 if ( optInLevel != null )1732 {1733 showCookieWarning = optInLevel.Value != "2";1734 }1735 }17361737 @if ( showCookieWarning )1738 {1739 <div class="e-cookie js-e-cookie py-1" hidden="">1740 <aside class="e-cookie-wrapper">1741 <section class="e-section">1742 <div class="container-fluid">1743 <div class="align-items-center row">1744 <div class="col-12 col-lg-10 col-md-9 my-1">1745 <p class="line-height-sm mb-0 small text-center text-md-left">1746 <span class="d-md-inline d-none">1747 @Translate( "Cookie Warning - Message Long - Text", "This website uses cookies to provide necessary site functionality and improve your experience. By using our website, you agree to our" )1748 </span>1749 <span class="d-md-none">1750 @Translate( "Cookie Warning - Message Short - Text", "This website uses cookies to improve your experience. Learn more about our" )1751 </span>1752 &nbsp;1753 <a href="@Espresso.Area.Item.CookieMessage">@Translate( "Cookie Warning - Policy - Link", "cookie policy" )</a>1754 </p>1755 </div>1756 <div class="col-12 col-lg-2 col-md-3 my-1">1757 <p class="mb-0 text-center text-md-right">1758 <button class="btn e-cookie-accept-btn js-e-cookie-accept-btn" type="button">1759 @Translate( "Cookie Warning - Accept - Button", "OKAY" )1760 </button>1761 </p>1762 </div>1763 </div>1764 </div>1765 </section>1766 </aside>1767 </div>1768 }17691770 @if ( 1 == 2 )1771 {1772 @GetValue( "DwCookieWarning" )1773 }17741775 *@177617771778 <script async="" src="/Files/Templates/Designs/kabooki-shop/_assets/_dist/js/default.js?v=1.2.3"></script>17791780 @*<script type="text/javascript">var _lf_popup='00f7213ba4f7722d2117fd8747b47663';"undefined"!=typeof window.lf_popup_runtime?-1===window.lf_popup_runtime.indexOf(_lf_popup)&&window.lf_popup_runtime.push(_lf_popup):window.lf_popup_runtime=[_lf_popup],function(e,d,t){var i,o=e.getElementsByTagName(d)[0];e.getElementById(t)||(i=e.createElement(d),i.id=t,i.async=true,i.src="https://zone-1.cdn.leadfamly.com/campaign/sdk/popup.min.js",o.parentNode.insertBefore(i,o))}(document,"script","lf-popup");</script>*@17811782 <script type="text/javascript">var _lf_popup='00f7213ba4f7722d2117fd8747b47663';"undefined"!=typeof window.lf_popup_runtime?-1===window.lf_popup_runtime.indexOf(_lf_popup)&&window.lf_popup_runtime.push(_lf_popup):window.lf_popup_runtime=[_lf_popup],function(e,d,t){var i,o=e.getElementsByTagName(d)[0];e.getElementById(t)||(i=e.createElement(d),i.id=t,i.async=true,i.src="https://zone-1.cdn.leadfamly.com/campaign/sdk/popup.min.js",o.parentNode.insertBefore(i,o))}(document,"script","lf-popup");</script>1783 </body>17841785 @GetValue( "CopyRightNotice" )1786 </html>1787