Error executing template "Designs/innovationliving/_parsed/espresso.parsed.cshtml"System.NullReferenceException: Object reference not set to an instance of an object.at Dynamicweb.Ecommerce.Assortments.AssortmentService.GetAllCachedAssortments()at Dynamicweb.Ecommerce.Assortments.AssortmentService.HasActiveAssortments()at Dynamicweb.Ecommerce.Products.ProductService.GetProductById(String productId, String productVariantId, String productLanguageId)at CompiledRazorTemplates.Dynamic.RazorEngine_c327b72acf2846c2a521af7064fbf630.Execute() in D:\Sites\innovationliving.com\files\Templates\Designs\innovationliving\_parsed\espresso.parsed.cshtml:line 123at 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.Collections.Specialized 3 @using System.IO 4 @using System.Web 5 @using Co3.Espresso.Base.Extensions 6 @using Co3.Espresso.Website.Services 7 @using Co3.IL.Dw.Models.Frontend.User 8 @using Dynamicweb.Ecommerce.Common 9 @using Dynamicweb.Frontend 10 @{ 11 string globalAreaLang = PageView.Current().Area.CultureInfo.TwoLetterISOLanguageName; 12 string currencySeparatorDecimal = PageView.Current().Area.CultureInfo.NumberFormat.CurrencyDecimalSeparator; 13 string currencySeparatorInteger = PageView.Current().Area.CultureInfo.NumberFormat.CurrencyGroupSeparator; 14 string openGraphUrl = PageView.Current().SearchFriendlyUrl; 15 string openGraphImage = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + Espresso.OpenGraphImage; 16 bool isUserAuthenticated = PageView.Current().User != null; 17 string webfontsSnippetHtml = RenderSnippet( "webfonts" ).ToString().Trim(); 18 bool isProductPage = string.IsNullOrEmpty( HttpContext.Current.Request[ "productid" ] ) == false; 19 string mapsApiKey = Espresso.Area.DynamicwebArea.Item.GetValue<string>("GoogleMapsAPIkey"); 20 } 21 <!DOCTYPE html> 22 <html lang="@globalAreaLang" data-separator-integer="@currencySeparatorInteger" data-separator-decimal="@currencySeparatorDecimal"> 23 <head> 24 @GetValue( "CopyRightNotice" ) 25 <meta charset="utf-8"> 26 <meta content="width=device-width, initial-scale=1, shrink-to-fit=no, minimal-ui" name="viewport"> 27 <meta content="ie=edge" http-equiv="x-ua-compatible"> 28 <title>@GetValue("Title")</title> 29 @GetValue("MetaTags") 30 @GetValue("CopyRightNotice") 31 32 33 @Espresso.CriticalCSS 34 @if ( webfontsSnippetHtml != "<!--@Snippet(webfonts)-->" ) 35 { 36 @webfontsSnippetHtml 37 } 38 <link href="/Files/Templates/Designs/innovationliving/_assets/_dist/css/default.css?v=2.2.55" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style"> 39 @*<link href="//viewer.cylindo.com/3.x/v3.3.1/viewer.css" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style">*@ 40 41 <link href="//viewer.cylindo.com/v4/viewer.css" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style"> 42 43 @Espresso.CriticalJS 44 45 <link rel="shortcut icon" href="@Espresso.Area.Item.Favicon"> 46 47 @if ( Espresso.IsStagingUrl ) 48 { 49 <meta content="noindex,nofollow" name="robots"> 50 } 51 52 <meta property="og:url" content="@openGraphUrl"> 53 54 @if ( isProductPage ) 55 { 56 @RenderSnippet("productSpecificData") 57 } 58 else 59 { 60 <meta property="og:title" content="@Espresso.OpenGraphTitle"> 61 <meta property="og:description" content="@Espresso.OpenGraphDescription"> 62 <meta property="og:image" content="@openGraphImage"> 63 <meta property="og:type" content="website"> 64 } 65 66 67 @if ( string.IsNullOrEmpty( Espresso.Area.Item.GoogleSiteVerification ) == false ) 68 { 69 <meta name="google-site-verification" content="@Espresso.Area.Item.GoogleSiteVerification"> 70 } 71 @{ 72 if ( 1 == 2 ) 73 { 74 @GetValue( "Stylesheets" ) 75 } 76 } 77 <!-- Hreflang --> 78 @{ 79 @* Get areas from service *@ 80 Dynamicweb.Content.AreaService areaService = new Dynamicweb.Content.AreaService(); 81 Dynamicweb.Ecommerce.Products.ProductService productService = new Dynamicweb.Ecommerce.Products.ProductService(); 82 IList<Area> areas = areaService.GetAreas(); 83 84 @* Get current page's relation-text from page-item *@ 85 string currentPageRelation = PageView.Current().Page.Item["PageRelation"] != null ? PageView.Current().Page.Item["PageRelation"].ToString() : string.Empty; 86 87 @* Frontpage must have 'frontpage' as relation-text *@ 88 89 90 const string FRONTPAGERELATION = "frontpage"; 91 92 @* Iterate areas *@ 93 foreach ( Area area in areas ) 94 { 95 if ( area.Active == true ) 96 { 97 @* Get current area's culture *@ 98 string culture = area.Culture; 99 @* Check for IsDefault Hreflang on area *@100 string isDefaultHrefLang = area.Item[ "IsDefaultHrefLang" ] != null ? area.Item[ "IsDefaultHrefLang" ].ToString() : string.Empty;101 @* Check for override-culture text on area *@102 string hreflangCultureOverride = area.Item[ "HreflangLanguageOverride" ] != null ? area.Item[ "HreflangLanguageOverride" ].ToString() : string.Empty;103104 @* Get scheme and domain *@105 string scheme = GetGlobalValue("Global:Request.Scheme");106107 string domain = area.DomainLock;108 @* If we have a primary domain call pageservice and get pages *@109 if ( string.IsNullOrEmpty(currentPageRelation) == false && string.IsNullOrEmpty(domain) == false )110 {111 Dynamicweb.Content.PageService pageService = new Dynamicweb.Content.PageService();112 IEnumerable< Dynamicweb.Content.Page > pages = pageService.GetPagesByAreaID(area.ID);113114 @* Iterate pages in area - check if is active + has item + has item-pagerelation + item-pagerelation equals current pagerelation *@115 foreach ( Dynamicweb.Content.Page page in pages.Where(p => p.Published && p.Item != null && p.Item[ "PageRelation" ] != null && p.Item[ "PageRelation" ].ToString().Equals(currentPageRelation)) )116 {117 string productId = HttpContext.Current.Request[ "productid" ];118119 string url = string.Empty;120121 if ( string.IsNullOrEmpty(productId) == false )122 {123 Dynamicweb.Ecommerce.Products.Product product = productService.GetProductById( productId, string.Empty, (string)area.EcomLanguageId );124 if ( product != null && product.Active == true )125 {126 @* Build url to area product page *@127 string prodUrl = string.Format("Default.aspx?ID={0}&ProductId={1}", page.ID, productId);128 url = string.Format("{0}://{1}{2}", scheme, domain, SearchEngineFriendlyURLs.GetFriendlyUrl(prodUrl, area.EcomLanguageId));129 }130131 }132 else133 {134 @* Build url to area page *@135 url = string.Format("{0}://{1}{2}", scheme, domain, SearchEngineFriendlyURLs.GetFriendlyUrl(page.GetPageHrefValue()));136 }137138 @* If our current page relation match frontpage - set link to domain only *@139 if ( currentPageRelation == FRONTPAGERELATION )140 {141 url = string.Format("{0}://{1}", scheme, domain);142 }143 @* If our area item has checked in Default hreflang, we render x-default link *@144 if ( isDefaultHrefLang == "True" )145 {146 <link rel="alternate" hreflang="x-default" href="@url">147 }148 @* If we have a value in the area-item to overrule the culture, override the value here *@149 if ( string.IsNullOrEmpty(hreflangCultureOverride) == false )150 {151 culture = hreflangCultureOverride;152 }153 @* Render hreflang-link *@154 <link rel="alternate" hreflang="@culture.ToLower()" href="@url">155 }156 }157 }158159 }160161 }162 <!-- End Hreflang -->163 @if ( string.IsNullOrEmpty( Espresso.Area.GoogleTagManagerID ) == false && Espresso.Area.GoogleTagManagerID != "GTM-XXXX" )164 {165 <!-- Google Tag Manager -->166 <script data-cookieconsent="ignore">167 (function(w, d, s, l, i) {168 w[l] = w[l] || [];169 w[l].push({170 'gtm.start':171 new Date().getTime(),172 event: 'gtm.js'173 });174 var f = d.getElementsByTagName(s)[0],175 j = d.createElement(s),176 dl = l != 'dataLayer' ? '&l=' + l : '';177 j.async = true;178 j.src =179 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;180 f.parentNode.insertBefore(j, f);181 })(window, document, 'script', 'dataLayer', '@Espresso.Area.GoogleTagManagerID');182 </script>183 <!-- End Google Tag Manager -->184 }185186 @if ( Context.Language.Code2 == "US" )187 {188 <script id="Cookiebot" src="//consent.cookiebot.com/uc.js" data-cbid="ac4086ef-7180-4912-8721-81aa876b39d0" type="text/javascript" data-blockingmode="auto"></script>189 }190 else if ( Context.Language.Code2 == "PH" )191 {192 <script id="Cookiebot" src="//consent.cookiebot.com/uc.js" data-cbid="b1e8cfb1-3add-4eaf-a855-2ced67a63117" type="text/javascript" data-blockingmode="auto"></script>193 }194 else if (Context.Language.Code2 == "DK")195 {196 <script id="Cookiebot" src="//consent.cookiebot.com/uc.js" data-cbid="1593864e-9da7-4433-8c8d-0b27fd183b20" type="text/javascript" data-blockingmode="auto"></script>197 }198 else if (Context.Language.Code2 == "DE")199 {200 <script id="Cookiebot" src="//consent.cookiebot.com/uc.js" data-cbid="86a38cf1-f028-427d-84d8-b18f6f633e3a" type="text/javascript" data-blockingmode="auto"></script>201 }202 else203 {204 <script id="Cookiebot" src="//consent.cookiebot.com/uc.js" data-cbid="984610a4-c2df-4a3e-a018-f2a963b91f51" type="text/javascript" data-blockingmode="auto"></script>205 }206207 <!-- Facebook Pixel Code -->208 <script>209 !function(f,b,e,v,n,t,s)210 {if(f.fbq)return;n=f.fbq=function(){n.callMethod?211 n.callMethod.apply(n,arguments):n.queue.push(arguments)};212 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';213 n.queue=[];t=b.createElement(e);t.async=!0;214 t.src=v;s=b.getElementsByTagName(e)[0];215 s.parentNode.insertBefore(t,s)}(window,document,'script',216 'https://connect.facebook.net/en_US/fbevents.js');217 fbq('init', '702212463953492');218 fbq('track', 'PageView');219 </script>220 <noscript>221 <img height="1" width="1" src="https://www.facebook.com/tr?id=702212463953492&ev=PageView&noscript=1">222 </noscript>223 <!-- End Facebook Pixel Code -->224225 <!-- Hotjar Tracking Code for www.innovationliving.com -->226 <script>227 (function(h,o,t,j,a,r){228 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};229 h._hjSettings={hjid:1964104,hjsv:6};230 a=o.getElementsByTagName('head')[0];231 r=o.createElement('script');r.async=1;232 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;233 a.appendChild(r);234 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');235 </script>236237 @GetValue("Stylesheets")238 @GetValue("Javascripts")239 </head>240241 <body data-instoremode="@UserContext.Current.ShowRetailPrice" class="@Espresso.Item.CustomClasses" data-userauthenticated="@isUserAuthenticated.ToString().ToLower()">242243 <!-- MODAL -->244 <div class="fade modal" id="js-master-notice" data-mapsapikey="@mapsApiKey">245 <div class="modal-dialog">246 <div class="modal-content">247 <div class="modal-header">248 <h4 class="modal-title small">249 <i class="material-icons material-icons-large text-primary">info</i>250 <span>@Translate("Modal message - UK/Ireland visitors - Title", "Important notice")</span>251 </h4>252 <button class="close" data-dismiss="modal" type="button">253 <i class="material-icons">close</i>254 </button>255 </div>256 <div class="modal-body pb-0">257 <p class="lead">@Translate("Modal message - UK/Ireland visitors - Text", "Hi, we notice you are visiting our website from the UK/Ireland...")</p>258 </div>259 <div class="border-top-0 modal-footer">260 <a class="btn btn-primary" data-dismiss="modal">@Translate("Modal - Close - Button", "Got it")</a>261 </div>262 </div>263 </div>264 </div>265 <!-- MODAL END -->266267 @if (string.IsNullOrEmpty(Espresso.Area.GoogleTagManagerID) == false && Espresso.Area.GoogleTagManagerID != "GTM-XXXX")268 {269 <!-- Google Tag Manager (noscript) -->270 <noscript>271 <iframe src="https://www.googletagmanager.com/ns.html?id=@Espresso.Area.GoogleTagManagerID" height="0" width="0" style="display: none; visibility: hidden"></iframe>272 </noscript>273 <!-- End Google Tag Manager (noscript) -->274 }275276 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase277 @using Co3.IL.Dw.Services278279 @{280 Espresso.Canvas.ClassList.AddClasses( "js-e-canvas is-loading" );281 if ( Espresso.Item.CanvasFullscreen == "True" )282 {283 Espresso.Canvas.ClassList.AddClasses( "is-fullscreen" );284 }285 }286287288289 @using System.Globalization290 @using System.Security.Cryptography.X509Certificates291 @using Co3.Espresso.Base.Extensions292 @using Co3.Espresso.Website.Models.FrontEnd293 @using Co3.Espresso.Website.Services294 @using Dynamicweb.Content295 @using Dynamicweb.Ecommerce.Products296 @using Dynamicweb.Ecommerce.Products.Categories297 @using Dynamicweb.Frontend298 @using Dynamicweb.Rendering299 @using EcomContext = Dynamicweb.Ecommerce.Common.Context300 @using ProductService = Co3.Espresso.Website.Services.ProductService301 @using Co3.IL.Dw.Models302 @using System.Web303 @using Co3.IL.Dw.Models.Frontend.User304 @using Dynamicweb.Admin305 @using Dynamicweb.Content.Items306 @using Dynamicweb.Ecommerce.International307 @using Dynamicweb.Indexing.Notifications308 @using Dynamicweb.Rendering.Translation309 @using dwPrices = Dynamicweb.Ecommerce.Prices310311 @{312 ProductCategoryService productCategory = new ProductCategoryService();313 }314315316 @functions {317318 public string getCountryCodeFromArea(Area area)319 {320 RegionInfo regionInfo = new RegionInfo(area.CultureInfo.LCID);321 return regionInfo.TwoLetterISORegionName;322 }323324 public static string GetStandardCollapseToggleTextExpand()325 {326 return "Se mere";327 }328329 public static string GetStandardCollapseToggleTextCollapse()330 {331 return "Se mindre";332 }333334 public static string getAmountFormatted(double amount, Currency userCurrency, bool isUserAuthenticated)335 {336 string returnValue = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( amount );337 if ( isUserAuthenticated && !UserContext.Current.ShowRetailPrice )338 {339 returnValue = dwPrices.Price.GetDoublePriceInfo( amount, userCurrency ).PriceWithoutVATFormatted;340 }341 return returnValue;342 }343 }344345 @helper ProductDescription(string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null)346 {347 if ( string.IsNullOrEmpty(content) == false )348 {349 ClassList headingClassList = new ClassList();350 headingClassList.AddClasses("col-12");351 ClassList contentClassList = new ClassList();352 contentClassList.AddClasses("col-12");353354 @sectionStart(sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses, collapseToggleTextCollapse: collapseToggleTextCollapse, collapseToggleTextExpand: collapseToggleTextExpand)355356 if ( string.IsNullOrEmpty(heading) == false )357 {358 <div class="@headingClassList">359 <h2>@heading</h2>360 </div>361 }362 <div class="@contentClassList">363 @content364 </div>365366 @sectionEnd()367 }368 }369370371 @helper ProductVideo(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null)372 {373 if ( string.IsNullOrEmpty(videoURL) == false )374 {375 ClassList headingClassList = new ClassList();376 headingClassList.AddClasses("col-12");377 ClassList contentClassList = new ClassList();378 contentClassList.AddClasses("col-12");379380381 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)382383 if ( string.IsNullOrEmpty(heading) == false )384 {385 <div class="@headingClassList">386 <h2>@heading</h2>387 </div>388 }389390 <div class="@contentClassList">391 <div class="embed-responsive embed-responsive-16by9 mb-2">392 <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>393 </div>394 </div>395 @sectionEnd()396 }397 }398399 @helper ProductRelatedProducts(string sectionClasses = "e-section", string contentClasses = null, string heading = null,400 IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null)401 {402 if ( productLoop != null && productLoop.Any() == true )403 {404 ClassList headingClassList = new ClassList();405 headingClassList.AddClasses("col-12");406 ClassList contentClassList = new ClassList();407 contentClassList.AddClasses("col-12");408409 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)410411 if ( string.IsNullOrEmpty(heading) == false )412 {413 <div class="@headingClassList">414 <h2 class="text-center">@heading</h2>415 </div>416 }417 <div class="@contentClassList">418 <div class="e-products mb-2">419 <div class="row">420 @{421 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth(null).ToResponsiveClasses();422 }423 @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop )424 {425 @ProductlistItem(product, productlistItemClassList)426 }427 </div>428 </div>429 </div>430431 @sectionEnd()432 }433 }434435 @helper ProductRelatedComfortProducts(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string introduction = null,436 IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null, Product mainProduct = null)437 {438 if ( productLoop != null && productLoop.Any() == true )439 {440 ClassList headingClassList = new ClassList();441 headingClassList.AddClasses("col-12");442 ClassList contentClassList = new ClassList();443 contentClassList.AddClasses("col-12");444445 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)446447 if ( string.IsNullOrEmpty(heading) == false )448 {449 <div class="@headingClassList">450 <h2 class="mb-0 text-center">@heading</h2>451 @if ( string.IsNullOrEmpty(introduction) == false )452 {453 <h4 class="mb-1 mt-1 text-center">@introduction</h4>454 }455 </div>456 }457 <div class="@contentClassList">458 <div class="e-products mb-2">459 <div class="row">460 @{461 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth(null).ToResponsiveClasses();462 }463 @if ( mainProduct != null )464 {465 var comfortName = mainProduct.GetCategoryValue("FinalProduct", "RelComfortName");466 var comfortFirmRate = mainProduct.GetCategoryValue("FinalProduct", "RelComfortFirmRate");467 var comfortDesc = mainProduct.GetCategoryValue("FinalProduct", "RelComfortDesc").ToString().StripHtml();468 string comfortImage = ImageService.Instance.GetImageURL("/Files/Images/" + mainProduct.GetCategoryValue("FinalProduct", "RelComfortImage"), 400, 400, 1);469470 <div class="@productlistItemClassList il-comfort-related-group-item">471 <div class="active bg-white e-products-item">472 <div class="e-products-item-container">473 <div class="e-products-item-text-container text-center">474 <h3>475 @comfortName476 </h3>477 <p class="il-comfort-related-group-item-firmness mb-0">478 <strong>@Translation.GetTranslation("eCom Product - Firmness rating - Text"):</strong> @comfortFirmRate</p>479 <p>@comfortDesc</p>480 </div>481 <div class="e-products-item-image-container">482 <div class="e-products-item-image-wrapper">483 <img src="@comfortImage" alt="" class="e-products-item-image">484 </div>485 </div>486487 </div>488 </div>489 </div>490 }491492493494 @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop )495 {496 @ProductlistRelatedComfortItem(product, productlistItemClassList)497 }498 </div>499 </div>500 </div>501502 @sectionEnd()503 }504 }505506 @helper ProductlistItem(RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null)507 {508 if ( product != null )509 {510 string currentDomain = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host;511 //ProductDeliveryInfo productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo(product.GetString("Ecom:Product:Field.BaseSKU.Value"));512513 Dynamicweb.Ecommerce.Products.ProductService dwProductService = new Dynamicweb.Ecommerce.Products.ProductService();514 Dynamicweb.Ecommerce.Products.Product productObject = dwProductService.GetProductById( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ), Dynamicweb.Ecommerce.Common.Context.LanguageID, false );515516 bool isUserAuthenticated = PageView.Current().User != null;517 Dictionary<string, string> groups = new Dictionary< string, string >();518 List<string> userGroups = new List<string>();519 string textile = string.IsNullOrEmpty( product.GetString( "DefaultTextile" ) ) == false ? product.GetString( "DefaultTextile" ) : "521";520 ProductPrice prices = Co3.IL.Dw.Services.ProductService.Instance.GetProductPriceInfo(product.GetString( "Ecom:Product.Number" ), textile);521522 double resellerPrice;523 double.TryParse( prices.ResellerPrice.ToString(), out resellerPrice );524525 double retailPrice;526 double.TryParse( prices.RetailPrice.ToString(), out retailPrice );527528 bool isModeRetail = UserContext.Current.ShowRetailPrice;529 bool showPriceArea = isModeRetail;530531 if (isUserAuthenticated)532 {533 userGroups = PageView.Current().User.Groups.Select(g => g.Name).ToList();534535 foreach (Dynamicweb.Security.UserManagement.Group group in PageView.Current().User.Groups )536 {537 groups.Add(group.Name, group.ID.ToString());538 }539540 if ( groups.ContainsKey( "DM only" ) )541 {542 isUserAuthenticated = false;543 isModeRetail = false;544 }545 if ( groups.ContainsKey( "D" ) )546 {547 isUserAuthenticated = false;548 isModeRetail = false;549 }550 if ( groups.ContainsKey( "C" ) )551 {552 isUserAuthenticated = false;553 showPriceArea = true;554 }555 if ( groups.ContainsKey( "B" ) )556 {557 isUserAuthenticated = true;558 showPriceArea = true;559 }560 if ( groups.ContainsKey( "A" ) )561 {562 isUserAuthenticated = true;563 showPriceArea = true;564 }565 }566567 ProductDeliveryInfo productDeliveryInfo = null;568 if ( productObject != null )569 {570 productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo( productObject );571 }572 else573 {574 productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo(product.GetString("Ecom:Product:Field.BaseSKU.Value"));575 }576577578 List< Product > inStock = new List< Product >();579 List< dynamic > inStockTextiles = new List< dynamic >();580581 bool isBlackLabelProduct = false;582583 if ( productDeliveryInfo != null && productDeliveryInfo.InStock != null && productDeliveryInfo.InStock.Any() )584 {585 inStock = productDeliveryInfo.InStock;586 }587588 if ( productDeliveryInfo != null && productDeliveryInfo.BlackTextiles != null && productDeliveryInfo.BlackTextiles.Any() )589 {590 inStock = productDeliveryInfo.BlackTextiles;591 isBlackLabelProduct = true;592 }593594 if ( !isBlackLabelProduct )595 {596 isBlackLabelProduct = product.GetString( "Ecom:Product:Field.PIMGroup.Value" ) == "95B";597 }598599 if ( productDeliveryInfo != null && productDeliveryInfo.InStock != null)600 {601 inStock = productDeliveryInfo.InStock.Any() ? productDeliveryInfo.InStock : inStock;602 }603604 foreach ( Product productionProduct in inStock )605 {606 string textileImageClean = productionProduct.GetCategoryValue("Textile", "TextileColorImage")?.ToString();607 string textileImagePath = "/files/images/" + textileImageClean;608 inStockTextiles.Add(new609 {610 color = productionProduct.GetCategoryValue("Textile", "TextileColorHex")?.ToString()611 });612 }613614 string resellerPriceFormatted = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( resellerPrice );615 if ( isUserAuthenticated )616 {617 Currency userCurrency = new CurrencyService().GetCurrenciesForCode( PageView.Current().User.Currency ).FirstOrDefault(c => c.Code == PageView.Current().User.Currency );618 if ( userCurrency != null )619 {620 resellerPriceFormatted = getAmountFormatted( resellerPrice, userCurrency, true );621 }622 }623624 string position = "1";625 string hoverPosition = String.Empty;626 if ( string.IsNullOrEmpty( product.GetString( "Ecom:Product:Field.Positions.Value" ) ) == false )627 {628 position = product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' )[ 0 ];629 if ( product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' ).Last() != position )630 {631 hoverPosition = product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' ).Last();632 }633 }634635 dynamic productData = new636 {637 isModeRetail = isModeRetail || userGroups.Contains("C"),638 showPriceArea = showPriceArea,639 isUserAuthenticated = isUserAuthenticated,640 resellerPrice = resellerPrice,641 resellerPriceFormatted = resellerPriceFormatted,642 hideResellerPrice = userGroups.Contains("C") == true,643 retailPrice = retailPrice,644 retailPriceFormatted = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( retailPrice ),645 id = product.GetString("Ecom:Product.ID"),646 variantId = product.GetString("Ecom:Product.VariantID"),647 url = ProductService.Instance.GetProductLink(product.GetString("Ecom:Product.PrimaryOrFirstGroupID"), product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.VariantID")),648 number = product.GetString("Ecom:Product.Number"),649 name = ProductService.Instance.GetName(product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.VariantID")),650 imageDefault = ImageService.Instance.GetImageURL(product.GetString("Ecom:Product.ImageDefault.Clean"), 400, 400, 5),651 //Ecom:Product.ImageDefault.Clean652 price = "0",// ProductService.Instance.GetPrice(product.GetString("Ecom:Product.ID")),653 descriptionShortExtra01 = product.GetString("Ecom:Product:Field.DescriptionShortExtra01"),654 inStockTextiles = inStockTextiles,655 inStockTextilesTotal = inStockTextiles.Count,656 includePIMPacks = product.GetString("Ecom:Product.CategoryField.FinalProduct.IncludePIMPacks.Value.Clean") == "True",657 cylindo = new658 {659 sku = product.GetString("Ecom:Product:Field.BaseSKU.Value"),660 legFinish = product.GetString("Ecom:Product:Field.FeatureGroup1.Value"),661 fallbackImage = string.IsNullOrEmpty(product.GetString( "Ecom:Product.ImageDefault.Clean" )) == false ? string.Format( "{0}{1}", currentDomain, ImageService.Instance.GetImageURL( product.GetString( "Ecom:Product.ImageDefault.Clean" ), 400, 400, 5 ) ) : string.Empty,662 position = position,663 hoverPosition = hoverPosition,664 fabric = string.IsNullOrEmpty(product.GetString("DefaultTextile")) == false ? product.GetString("DefaultTextile") : "521"665 },666 stock = new667 {668 id = product.GetString("Ecom:Product:Stock.ID"),669 quantity = product.GetString("Ecom:Product.Stock"),670 text = product.GetString("Ecom:Product:Stock.Text"),671 delivery = product.GetString("Ecom:Product:Stock.DeliveryText")672 }673 };674675 string cssOpacity = string.Empty;676 if ( productData.inStockTextilesTotal == 0 )677 {678 cssOpacity = "opacity-zero";679 }680681 <div class="@productlistItemClassList">682 <div class="e-products-item js-e-products-item bg-white js-e-products-item-@productData.id js-e-block-link e-block-link" data-variant-id="@productData.variantId">683 <div class="e-products-item-container">684685 <div class="e-products-item-text-container text-center small">686 @*<h3 class="e-products-item-name mb-0"><a href="@productData.url">@productData.name</a></h3>687 <small class="il-colors-instock mt-1 mb-1 d-block @cssOpacity"><a href="@productData.url">@productData.inStockTextilesTotal colors in stock</a></small>688 <ul class="il-color-list @cssOpacity">689 @{690 int counter = 0;691 }692 @foreach ( var inStockTextile in productData.inStockTextiles )693 {694 if ( counter < 8) {695 <li style="background-color: #@inStockTextile.color;"></li>696 }697 counter++;698 }699 @if ( productData.inStockTextiles.Count > 8 )700 {701 <li class="morethanmax"></li>702 }703 </ul>*@704705 <div class="js-cylindo-viewer cylindo-viewer" id="@productData.id" data-use-pim-packs="@productData.includePIMPacks" data-sku="@productData.cylindo.sku" data-position="@productData.cylindo.position" data-hover-position="@productData.cylindo.hoverPosition" data-leg-finish="@productData.cylindo.legFinish" data-fabric="@productData.cylindo.fabric" data-fallback-image="@productData.cylindo.fallbackImage">706 <div class="hover"></div>707 </div>708709 @if ( isBlackLabelProduct )710 {711 <img src="/Files/Templates/Designs/innovationliving/_assets/img/black-label-logo.svg" class="il-black-label">712 }713714 <h3 class="e-products-item-name m-0"><a href="@productData.url">@productData.name</a></h3>715716 @*<p class="e-products-item-text mb-0 @cssOpacity">717 <a href="@productData.url">718 More colors available719 </a>720 </p>*@721 @if ( productData.showPriceArea )722 {723 if ( productData.isModeRetail )724 {725 <div class="e-product-price font-weight-bold h4 mb-0 mt-1">726 @productData.retailPriceFormatted727 </div>728 }729 else730 {731 if ( productData.isUserAuthenticated )732 {733 <div class="e-product-price font-weight-bold h4 mb-0 mt-1">734 @productData.retailPriceFormatted735 </div>736737 if ( !productData.hideResellerPrice )738 {739 @productData.resellerPriceFormatted740 }741 }742 }743 }744 </div>745 </div>746 </div>747 </div>748 }749 }750751752 @helper ProductlistRelatedComfortItem(RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null)753 {754 if ( product != null )755 {756 dynamic productData = new757 {758 id = product.GetString("Ecom:Product.ID"),759 variantId = product.GetString("Ecom:Product.VariantID"),760 url = ProductService.Instance.GetProductLink(product.GetString("Ecom:Product.PrimaryOrFirstGroupID"), product.GetString("Ecom:Product.ID")),761 name = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortName.Value.Clean"),762 imageDefault = ImageService.Instance.GetImageURL(product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortImage.Value.Clean"), 400, 400, 1),763 description = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortDesc.Value.Clean").StripHtml(),764 firmness = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortFirmRate.Value.Clean")765 };766767 <div class="@productlistItemClassList il-comfort-related-group-item">768 <div class="e-products-item js-e-products-item js-e-products-item-@productData.id js-e-block-link e-block-link bg-white" data-variant-id="@productData.variantId">769 <div class="e-products-item-container">770 <div class="e-products-item-text-container text-center">771 <h3>772 <a href="@productData.url">773 @productData.name774 </a>775 </h3>776 <p class="il-comfort-related-group-item-firmness mb-0">777 <strong>@Translation.GetTranslation("eCom Product - Firmness rating - Text"):</strong> @productData.firmness</p>778 <p>@productData.description</p>779 </div>780 <div class="e-products-item-image-container">781 <a class="e-products-item-image-wrapper" href="@productData.url">782 <img src="@productData.imageDefault" alt="" class="e-products-item-image">783 </a>784 </div>785786 </div>787 </div>788 </div>789 }790 }791792793 @helper sectionStart(string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string sectionId = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null)794 {795 sectionId = string.IsNullOrEmpty(sectionId) ? Guid.NewGuid().ToString("N") : sectionId;796 ClassList sectionClassList = new ClassList();797 sectionClassList.AddClasses(sectionClasses);798 ClassList contentClassList;799800 if ( contentClasses == null )801 {802 contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem(PageView.Current().Page.Item);803 }804 else805 {806 contentClassList = new ClassList();807 contentClassList.AddClasses(contentClasses);808 }809810 // TODO: Split collapse logic into separate helper function.811 string collapseId = Guid.NewGuid().ToString("N");812 ClassList collapseToggleClassList = new ClassList();813 if ( sectionCollapse )814 {815 sectionClassList.AddClasses("p-section-collapse js-p-section-collapse");816 collapseToggleClassList.AddClasses(contentClasses);817 collapseToggleClassList.AddClasses("p-section-collapse-toggle collapsed order-last text-center");818 contentClassList.AddClasses("p-section-collapse-content collapse is-md");819 }820821 @:<section class="@sectionClassList" id="@sectionId">822 @:<div class="container-fluid">823 @:<div class="row">824825 // TODO: Split collapse logic into separate helper function.826 if ( sectionCollapse )827 {828 <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId">829 <button class="btn btn-primary p-section-collapse-toggle-btn" type="button">830 <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i>831 </button>832 <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>833 </div>834 }835836 @:<div class="@contentClassList" id="@collapseId">837 @:<div class="row">838 }839840 @helper sectionEnd()841 {842 @:</div>843 @:</div>844 @:</div>845 @:</div>846 @:</section>847 }848849 @* Custom IL instock/production *@850 @helper getProductionStockAndProduction(List< Product > ProductList, ProductCategoryService productCategory, Dictionary<string,dynamic> jsonFabrics = null, IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > fieldLoop = null)851 {852 foreach ( Product productionProduct in ProductList )853 {854 string textileNumber = productionProduct.Number;855 string textileName = productionProduct.GetCategoryValue("Textile", "TextileName")?.ToString();856 string textileImageClean = productionProduct.GetCategoryValue("Textile", "TextileColorImage")?.ToString();857 string textileImagePath = "/files/images/" + textileImageClean;858 string textileImage = ImageService.Instance.GetImageURL(textileImagePath?.ToString(), 100, 100);859860 dynamic displayFields = new List< dynamic >();861862 foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem groupItem in fieldLoop )863 {864 if ( groupItem.GetLoop( "Fields" ).Count > 0 )865 {866 if ( groupItem.GetString( "Ecom:FieldDisplayGroup.ID" ) == "7" )867 {868 foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem fieldItem in groupItem.GetLoop( "Fields" ) )869 {870 if(!string.IsNullOrEmpty(productionProduct.GetCategoryValue("Textile", fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TemplateTag"))?.ToString()))871 {872 if(!string.IsNullOrEmpty(productionProduct.GetCategoryValue("Textile", fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TemplateTag"))?.ToString()))873 {874 //string value = productionProduct.GetCategoryValue( "Textile", fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) )?.ToString();875 string label = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );876 string value = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct(productionProduct, fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id"));877878 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" )879 {880 value = ImageService.Instance.GetImageURL(string.Format("/files/images/{0}", value), 300, 300);881 label = string.Empty;882 }883 displayFields.Add( new884 {885 label = label,886 type = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TypeName"),887 value = value888 } );889 }890 }891 }892 }893 }894 }895896 if ( productionProduct.Number != null && !string.IsNullOrEmpty(textileName) )897 {898 if ( !jsonFabrics.ContainsKey( textileNumber ) )899 {900 jsonFabrics[ textileNumber ] = new List< dynamic >();901 jsonFabrics[ textileNumber ].Add( new902 {903 number = textileNumber,904 name = textileName,905 paramValue = textileName.Replace(' ', '-'),906 displayFields = displayFields907 });908 }909 }910911 int loopCounter = 0;912913 <label>914 <input name="variant-color" type="radio" data-title="@textileName" data-fabric="@textileNumber" class="js-variant-color" value="variant-@productionProduct.Id"><span class="border select-option" style="background-image: url(@textileImage)"></span>915 <div class="desc-wrapper">916 <div class="desc-content">917 <h4>@textileName</h4>918 <p>919 @foreach ( dynamic displayField in displayFields )920 {921 if ( displayField.type != "Filemanager" && displayField.type != "Link" )922 {923 if ( loopCounter > 0 )924 {925 <span> / </span>926 }927 @displayField.label<span>: </span> @displayField.value928 loopCounter++;929 }930 }931 </p>932 </div>933 </div>934 </label>935 }936 }937938939940941 <div class="e-loading-overlay e-page-loading-overlay is-loading js-e-page-loading-overlay">942 <div class="e-loading-spinner"></div>943 </div>944945946 @* https://medium.com/clio-calliope/making-google-fonts-faster-aadf3c02a36d *@947 @SnippetStart("webfonts")948 <link crossorigin="" href="https://fonts.gstatic.com/" rel="preconnect">949 <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:400,700|Material+Icons" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style">950 @SnippetEnd("webfonts")951952953954 <div class="@Espresso.Canvas.ClassList">955 @using Co3.Espresso.Website.Models.FrontEnd956 @using Co3.IL.Dw.Models.Frontend.User957 @using Dynamicweb.Ecommerce.Common958 @using Dynamicweb.Frontend959 @using Dynamicweb.Security.UserManagement960 @{961 bool isLoggedIn = PageView.Current().User != null;962 bool isRetail = UserContext.Current.ShowRetailPrice;963 Dictionary<string, string> groups = new Dictionary< string, string >();964 if(isLoggedIn) {965 foreach (var group in PageView.Current().User.Groups )966 {967 groups.Add(group.Name, group.ID.ToString());968 }969 }970 bool isCUser = groups.ContainsKey( "C" );971 string websiteMode = "";972 if (isLoggedIn)973 {974 if (isRetail == false)975 {976 websiteMode = "b2b";977 }978 else979 {980 websiteMode = "retail";981 }982 }983 else if (isRetail)984 {985 websiteMode = "instore";986 }987 ClassList headerClassList = new ClassList();988 headerClassList.AddClasses( "e-header js-e-header is-sticky" );989 if ( Espresso.Item.HeaderTransparent == "True" )990 {991 headerClassList.AddClasses( "is-transparent" );992 }993994 ClassList logoClassList = new ClassList();995 logoClassList.AddClasses( "e-logo" );996997 string backButtonLink = Espresso.Item.BackButtonLink;998 ClassList backButtonClassList = new ClassList();999 ClassList backButtonIconClassList = new ClassList();1000 if ( Espresso.Item.BackButton == "True" )1001 {1002 backButtonClassList.AddClasses( "btn btn-sm btn-secondary my-1 align-self-center" );1003 if ( backButtonLink == "" || backButtonLink == "/" )1004 {1005 backButtonLink = "/";1006 backButtonClassList.AddClasses( "js-e-back-link" );1007 }1008 backButtonIconClassList.AddClasses( "material-icons material-icons-large" );1009 if ( Espresso.Item.BackButtonPosition == "right" )1010 {1011 backButtonClassList.AddClasses( "mr-0 ml-auto order-last" );1012 logoClassList.AddClasses( "order-first" );1013 }1014 else1015 {1016 backButtonClassList.AddClasses( "order-first" );1017 logoClassList.AddClasses( "mr-0 ml-auto order-last" );1018 }1019 if ( Espresso.Item.BackButtonIcon == "arrow_back" )1020 {1021 backButtonClassList.AddClasses( "arrow-left" );1022 backButtonIconClassList.AddClasses( "d-none" );1023 }1024 else if ( Espresso.Item.BackButtonIcon == "arrow_forward" )1025 {1026 backButtonClassList.AddClasses( "arrow-right" );1027 backButtonIconClassList.AddClasses( "d-none" );1028 }1029 }10301031 string logoPrimary = Espresso.Area.Item.LogoPrimary;1032 string logoSecondary = Espresso.Area.Item.LogoSecondary;1033 string logoLink = "/";10341035 if (Espresso.Item.IsBlackLabelPage == "True")1036 {1037 logoPrimary = Espresso.Area.Item.BlackLabelLogoPrimary;1038 logoSecondary = Espresso.Area.Item.BlackLabelLogoSecondary;1039 logoLink = "/black";1040 }1041 if ( string.IsNullOrEmpty( logoSecondary ) == true )1042 {1043 logoSecondary = logoPrimary;1044 }1045 string tagline = Espresso.Area.Item.Tagline;1046 Dictionary< string, string > navigationHtml = new Dictionary< string, string >1047 {1048 {1049 "global", RenderNavigation( new1050 {1051 id = "dwnav-global",1052 template = "global.xslt",1053 startlevel = 1,1054 endlevel = 8,1055 expandmode = "all"1056 } )1057 },1058 {1059 "utilities-primary", RenderNavigation( new1060 {1061 id = "dwnav-utilities-primary",1062 template = "utilities.xslt",1063 startlevel = 4,1064 endlevel = 6,1065 expandmode = "all",1066 parenttag = "utilities-primary"1067 } )1068 },1069 {1070 "utilities-secondary", RenderNavigation( new1071 {1072 id = "dwnav-utilities-secondary",1073 template = "utilities.xslt",1074 startlevel = 4,1075 endlevel = 4,1076 expandmode = "all",1077 parenttag = "utilities-secondary"1078 } )1079 },1080 {1081 "hamburger-header", RenderNavigation( new1082 {1083 id = "dwnav-hamburger-header",1084 template = "utilities.xslt",1085 startlevel = 4,1086 endlevel = 4,1087 expandmode = "all",1088 parenttag = "hamburger-header"1089 } )1090 },1091 {1092 "hamburger-aside", RenderNavigation( new1093 {1094 id = "dwnav-hamburger-aside",1095 template = "utilities.xslt",1096 startlevel = 4,1097 endlevel = 4,1098 expandmode = "all",1099 parenttag = "hamburger-aside"1100 } )1101 }1102 };1103 }1104 @if ( Espresso.Item.HeaderHide != "True" )1105 {1106 <header class="@headerClassList" data-autohide="true">1107 <div class="e-header-hamburger">1108 @sectionStart( "e-header-section e-section", "col-12" )1109 <div class="col-12 e-header-section-content">1110 <div class="@logoClassList">1111 @if(isProductPage) {1112 @RenderSnippet("prodinnologos")1113 }1114 else1115 {1116 <a class="e-logo-link" href="@logoLink">1117 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">1118 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">11191120 @if ( string.IsNullOrEmpty( tagline ) == false )1121 {1122 <p class="e-logo-tagline">@tagline</p>1123 }1124 </a>1125 }1126 </div>1127 @if ( Espresso.Item.NavigationHide != "True" )1128 {1129 <section class="e-nav-hamburger-header d-flex align-items-center h-100">1130 @if(!string.IsNullOrEmpty(websiteMode) && !isCUser) {1131 <div class="il-website-mode ml-1 d-block d-xl-none align-self-stretch d-flex align-items-center">1132 @(Translate("Header - Website Mode - " + websiteMode, websiteMode))1133 </div>1134 }1135 <ul class="nav">1136 @navigationHtml["hamburger-header"]1137 @* TODO: Move to xslt *@1138 <li class="e-nav-item-hamburger-open nav-item">1139 <a class="nav-link" data-target=".modal.e-nav" data-toggle="modal" href="#">1140 <i class="e-nav-pageicon material-icons">menu</i>1141 </a>1142 </li>1143 </ul>1144 </section>1145 }1146 @if ( Espresso.Item.BackButton == "True" )1147 {1148 <a class="@backButtonClassList" href="@backButtonLink">1149 @if ( Espresso.Item.BackButtonIcon != "" )1150 {1151 <i class="@backButtonIconClassList">@Espresso.Item.BackButtonIcon</i>1152 }1153 @Espresso.Item.BackButtonText1154 </a>1155 }1156 </div>1157 @sectionEnd()1158 </div>1159 <div class="e-nav js-e-nav modal p-0" data-backdrop="false">1160 <div class="e-nav-container navbar">116111621163 @if ( string.IsNullOrEmpty( navigationHtml[ "utilities-primary" ] ) == false )1164 {11651166 @sectionStart( "e-header-section e-header-section-secondary e-section order-2 order-xl-1", "col-12" )1167 @:<div class="col-12 e-header-section-content">1168 @*<p class="d-xl-block d-none text-primary innovationliving-anniversary-streamer">50 YEARS ANNIVERSARY</p>*@1169 <nav class="e-nav-utilities-primary js-e-nav-utilities-primary">1170 @if(!string.IsNullOrEmpty(websiteMode) && !isCUser) {1171 <div class="float-left il-website-mode d-none d-xl-block">@(Translate("Header - Website Mode - " + websiteMode, websiteMode))</div>1172 }1173 <ul class="nav">1174 @navigationHtml["utilities-primary"]1175 @*@if ( Context.Language.Code2 != "US" )1176 {1177 <li class="nav-item">1178 <form id="login_form_europe" action="https://photo.innovationliving.com/login" method="post" name="login_form_europe" target="_blank">1179 <input id="username" type="hidden" name="username" value="innovation">1180 <input id="password" type="hidden" name="password" value="living">1181 <button class="nav-link" type="submit" style="cursor: pointer;">1182 <i class="material-icons e-nav-pageicon ">file_download</i><span class="e-nav-pagename">@Translate( "Header - Nav utilityprimaryLinkDownload - Button", "Download" )</span>1183 </button>1184 </form>1185 </li>1186 }*@11871188 @*@using Co3.IL.Dw.Models.Frontend.User1189 @using System.Web1190 @using Dynamicweb.Frontend1191 @using Dynamicweb.Security.UserManagement1192 @{11931194 User user = PageView.Current().User;1195 bool isLoggedIn = user != null;1196 string retailModeInput = HttpContext.Current.Request[ "RetailMode" ];1197 bool retailMode = retailModeInput == "true";1198 bool modeRetailChecked = UserContext.Current.ShowRetailPrice;1199 if ( retailMode != modeRetailChecked && !string.IsNullOrEmpty(retailModeInput) )1200 {1201 UserContext.Current.ToggleShowRetailPrice();1202 }1203 modeRetailChecked = UserContext.Current.ShowRetailPrice;1204 }1205 @if ( isLoggedIn )1206 {1207 <li class="nav-item" data-retailmode="@retailMode">1208 <div class="js-il-retailmode-toggle nav-link" data-retailmode="@modeRetailChecked">1209 <form name="retailmode-toggle-form" id="retailmode-toggle-form" class="js-il-retailmode-toggle-form" method="post">1210 <input type="hidden" name="RetailMode">1211 <span class="name pr-1">Retail mode:</span>1212 <div class="switch-button switch-button-xs">1213 @if ( modeRetailChecked )1214 {1215 <input type="checkbox" class="js-il-checkbox-retailmode" name="RetailModeToggle" id="RetailModeToggle" value="1" checked/="">1216 }1217 else1218 {1219 <input type="checkbox" class="js-il-checkbox-retailmode" name="RetailModeToggle" id="RetailModeToggle" value="1">1220 }1221 <span><label for="RetailModeToggle"></label></span>1222 </div>1223 </form>1224 </div>1225 </li>1226 }1227 *@1228 </ul>1229 </nav>1230 <form id="login_form_europe" action="https://photo.innovationliving.com/login" method="post" name="login_form_europe" target="_blank">1231 <input id="username" type="hidden" name="username" value="innovation">1232 <input id="password" type="hidden" name="password" value="living">1233 </form>1234 @:</div>1235 @sectionEnd()1236 }12371238 @sectionStart( "e-header-section e-header-section-primary e-section order-1 order-xl-2", "col-12" )1239 <div class="col-12 e-header-section-content">1240 <div class="@logoClassList">1241 @if(isProductPage) {1242 @RenderSnippet("prodinnologos")1243 }1244 else1245 {1246 <a class="e-logo-link" href="@logoLink">1247 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">1248 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">12491250 @if ( string.IsNullOrEmpty( tagline ) == false )1251 {1252 <p class="e-logo-tagline">@tagline</p>1253 }1254 </a>1255 }1256 </div>12571258 @if ( Espresso.Item.NavigationHide != "True" )1259 {1260126112621263 <nav class="e-nav-global js-e-nav-global">1264 <ul class="nav">1265 @navigationHtml[ "global" ]1266 </ul>1267 </nav>12681269 <div class="mr-1 ml-2 d-none d-xl-block e-nav-search order-2 ml-auto">1270 <form action="/search" class="d-flex h-100 w-100 js-il-search-form">1271 <div class="e-search-input-group align-self-center w-100">1272 <input type="text" class="e-search-input form-control-plaintext border-0 js-il-search-input" name="q">1273 <button class="e-search-submit btn py-0 m-0" type="submit"></button>1274 </div>1275 </form>1276 </div>12771278 <div class="e-nav-item-hamburger-close">1279 <a class="nav-link" data-target=".modal.e-nav" data-toggle="modal" href="#">1280 <i class="e-nav-pageicon material-icons">close</i>1281 <span class="e-nav-pagename">@Translate( "Header - Hamburger menu close - Button", "Close" )</span>1282 </a>1283 </div>128412851286 if ( string.IsNullOrEmpty( navigationHtml[ "utilities-secondary" ] ) == false )1287 {1288 <nav class="e-nav-utilities-secondary">1289 <ul class="nav">1290 @navigationHtml[ "utilities-secondary" ]1291 </ul>1292 </nav>1293 }1294 if ( string.IsNullOrEmpty( navigationHtml[ "hamburger-aside" ] ) == false )1295 {1296 <nav class="e-nav-hamburger-aside">1297 <ul class="nav">1298 @navigationHtml[ "hamburger-aside" ]1299 </ul>1300 </nav>1301 }1302 }1303 @if ( Espresso.Item.BackButton == "True" )1304 {1305 <a class="@backButtonClassList" href="@backButtonLink">1306 @if ( Espresso.Item.BackButtonIcon != "" )1307 {1308 <i class="@backButtonIconClassList">@Espresso.Item.BackButtonIcon</i>1309 }1310 @Espresso.Item.BackButtonText1311 </a>1312 }1313 </div>1314 @sectionEnd()13151316 </div>1317 </div>13181319 </header>1320 }1321 @using Co3.Espresso.Base.Extensions1322 @using Dynamicweb.Frontend1323 @using Dynamicweb.Security.UserManagement1324 @using Dynamicweb.Security.UserManagement.Common.CustomFields1325 @{1326 User currentUser = PageView.Current().User;1327 if ( currentUser != null )1328 {1329 User currentSecondaryUser = currentUser.CurrentSecondaryUser;1330 if ( currentSecondaryUser != null )1331 {1332 List<string> strings = new List<string>();1333 CustomFieldValue cfvAccountNo = currentUser.CustomFieldValues.FirstOrDefault( c => c.CustomField.SystemName == "AccessUser_accountnumber" );1334 CustomFieldValue cfvFullName = currentUser.CustomFieldValues.FirstOrDefault( c => c.CustomField.SystemName == "AccessUser_b2busername" );1335 if (cfvAccountNo != null && !string.IsNullOrEmpty("" + cfvAccountNo.Value))1336 {1337 strings.Add("" + cfvAccountNo.Value);1338 }1339 strings.Add(currentUser.Name);1340 if (cfvFullName != null && !string.IsNullOrEmpty("" + cfvFullName.Value))1341 {1342 strings.Add("" + cfvFullName.Value);1343 }1344 string finalString = string.Join(" - ", strings.ToArray());13451346 @sectionStart( "e-section bg-warning e-text-dark js-e-section is-sticky py-1", "col-12 small" )1347 <div class="align-self-center col-12 col-lg-9 col-md-8">1348 <p class="line-height-sm mb-1 mb-md-0 text-center text-md-left">1349 <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>@finalString</strong>1350 </p>1351 </div>1352 <div class="align-self-center col-12 col-lg-3 col-md-4">1353 <form class="mb-0 small text-center text-md-right" method="post" action="@Espresso.Area.Item.ExtranetImpersonationPage">1354 <button class="btn btn-primary" name="DwExtranetRemoveSecondaryUser" type="submit">@Translate( "Extranet Impersonation - Stop impersonation - Button", "Stop impersonation" )</button>1355 </form>1356 </div>1357 @sectionEnd()1358 }1359 }1360 }1361 <main id="dwcontentmain" class="e-content js-e-content @Espresso.ContentArea.ClassList">1362 @*Include("/files/system/espresso/design/_inc/breadcrumb.cshtml")*@1363 @using Dynamicweb.Content;1364 @using Dynamicweb.Extensibility;1365 @{1366 string eBreadcrumbClasslist = "e-breadcrumb js-e-breadcrumb d-none d-lg-block";1367 if ( Espresso.Item.Breadcrumb != "auto" && Espresso.Item.Breadcrumb != "none" && String.IsNullOrEmpty( Espresso.Item.Breadcrumb ) == false )1368 {1369 eBreadcrumbClasslist += string.Format( " e-breadcrumb-{0}", Espresso.Item.Breadcrumb );1370 }1371 string navigationHtmlBreadcrumb = RenderNavigation( new1372 {1373 id = "dwnav-breadcrumb",1374 template = "breadcrumb.xslt",1375 startlevel = 1,1376 endlevel = 10,1377 expandmode = "pathonly",1378 sitemapmode = true1379 } );1380 }13811382 @if ( string.IsNullOrEmpty( navigationHtmlBreadcrumb ) == false && Espresso.Item.Breadcrumb != "none" && string.IsNullOrEmpty( Espresso.Item.Breadcrumb ) == false )1383 {1384 <section class="e-section @eBreadcrumbClasslist">1385 <div class="container-fluid">1386 <div class="row">1387 <div class="col-12">1388 <div class="row">13891390 <div class="col-12">1391 <nav class="e-breadcrumb-container">1392 <ol class="breadcrumb nav py-0 text-muted" itemscope="" itemtype="https://schema.org/BreadcrumbList">1393 <li class="breadcrumb-item m-0 p-0">1394 <a class="arrow-left breadcrumb-back-link js-e-back-link px-0" href="/">@Translate( "Breadcrumb - Back link", "Back" )</a>1395 <span class="breadcrumb-prefix-text">1396 @Translate( "Breadcrumb - Prefix - Text", "You are here:" )1397 </span>1398 <a href="/">1399 @ServiceLocator.Current.GetPageService().GetFirstPageForArea( GetInteger( "DwAreaID" ) ).MenuText1400 </a>1401 </li>1402 @navigationHtmlBreadcrumb1403 </ol>1404 </nav>1405 </div>14061407 </div>1408 </div>1409 </div>1410 </div>1411 </section>1412 }141314141415 <article class="e-content-article">1416 @{1417 int NavigationLocalHorizontalParentPageId = 0;1418 if ( !string.IsNullOrEmpty( Espresso.Item.NavigationLocalParentPage ) )1419 {1420 int.TryParse( Espresso.Item.NavigationLocalParentPage, out NavigationLocalHorizontalParentPageId );1421 }1422 if ( NavigationLocalHorizontalParentPageId == 0 )1423 {1424 NavigationLocalHorizontalParentPageId = PageView.Current().Page.ID;1425 if ( !Dynamicweb.Services.Pages.GetPagesByParentID( NavigationLocalHorizontalParentPageId ).Any() )1426 {1427 NavigationLocalHorizontalParentPageId = PageView.Current().Page.ParentPageId;1428 }1429 }1430 string NavigationLocalHorizontalClassList = "e-nav-local e-nav-local-horizontal js-e-nav-local-horizontal";1431 string NavigationLocalHorizontalContainerClassList = "e-nav-local-container";1432 string NavigationLocalHorizontalTemplate = "local-" + Espresso.Item.NavigationLocalLayout + ".xslt";1433 if ( string.IsNullOrEmpty( Espresso.Item.NavigationLocalTemplate ) == false && Path.GetExtension( Espresso.Item.NavigationLocalTemplate ) == ".xslt" )1434 {1435 NavigationLocalHorizontalTemplate = Path.GetFileName( Espresso.Item.NavigationLocalTemplate );1436 }14371438 if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "horizontal" )1439 {1440 NavigationLocalHorizontalClassList += " " + Espresso.Item.NavigationLocalCustomClasses;1441 if ( Espresso.Item.NavigationLocalSticky == "True" )1442 {1443 NavigationLocalHorizontalClassList += " is-sticky";1444 }1445 if ( Espresso.Item.NavigationLocalAbsolute == "True" )1446 {1447 NavigationLocalHorizontalClassList += " is-absolute";1448 }1449 else1450 {1451 if ( Espresso.Item.NavigationLocalMarginTop != "0" && Espresso.Item.NavigationLocalMarginTop != "" )1452 {1453 NavigationLocalHorizontalClassList += " mt-" + Espresso.Item.NavigationLocalMarginTop;1454 }1455 if ( Espresso.Item.NavigationLocalMarginBottom != "0" && Espresso.Item.NavigationLocalMarginBottom != "" )1456 {1457 NavigationLocalHorizontalClassList += " mb-" + Espresso.Item.NavigationLocalMarginBottom;1458 }1459 }1460 }1461 }1462 @if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "horizontal" )1463 {1464 <section class="e-section @NavigationLocalHorizontalClassList">1465 <div class="container-fluid">1466 <div class="row">1467 <div class="col-12">1468 <div class="row">14691470 <div class="col-12">1471 <nav id="dwnav-local-horizontal-@NavigationLocalHorizontalParentPageId" class="@NavigationLocalHorizontalContainerClassList">1472 <ul class="justify-content-start nav">1473 @if ( Espresso.Item.NavigationLocalHeading != "" )1474 {1475 <li class="e-nav-local-heading">1476 <h2>@Espresso.Item.NavigationLocalHeading</h2>1477 </li>1478 }1479 @RenderNavigation( new1480 {1481 id = "dwnav-local-horizontal-" + NavigationLocalHorizontalParentPageId,1482 parentid = NavigationLocalHorizontalParentPageId,1483 template = NavigationLocalHorizontalTemplate,1484 startlevel = Espresso.Item.NavigationLocalLevelStart,1485 endlevel = Espresso.Item.NavigationLocalLevelEnd,1486 expandmode = Espresso.Item.NavigationLocalPageTreeExpand == "True" ? "all" : "path"1487 } )1488 </ul>1489 </nav>1490 </div>14911492 </div>1493 </div>1494 </div>1495 </div>1496 </section>1497 }149814991500 @{1501 int NavigationLocalVerticalParentPageId = 0;1502 if ( !string.IsNullOrEmpty( Espresso.Item.NavigationLocalParentPage ) )1503 {1504 int.TryParse( Espresso.Item.NavigationLocalParentPage, out NavigationLocalVerticalParentPageId );1505 }1506 if ( NavigationLocalVerticalParentPageId == 0 )1507 {1508 NavigationLocalVerticalParentPageId = PageView.Current().Page.ID;1509 if ( !Dynamicweb.Services.Pages.GetPagesByParentID( NavigationLocalVerticalParentPageId ).Any() )1510 {1511 NavigationLocalVerticalParentPageId = PageView.Current().Page.ParentPageId;1512 }1513 }15141515 string NavigationLocalVerticalClassList = "e-nav-local e-nav-local-vertical js-e-nav-local-vertical";1516 string NavigationLocalVerticalContainerClassList = "e-nav-local-container";1517 string NavigationLocalVerticalTemplate = "local-" + Espresso.Item.NavigationLocalLayout + ".xslt";1518 if ( string.IsNullOrEmpty( Espresso.Item.NavigationLocalTemplate ) == false && Path.GetExtension( Espresso.Item.NavigationLocalTemplate ) == ".xslt" )1519 {1520 NavigationLocalVerticalTemplate = Path.GetFileName( Espresso.Item.NavigationLocalTemplate );1521 }15221523 if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "vertical" )1524 {1525 NavigationLocalVerticalClassList += " " + Espresso.Item.NavigationLocalCustomClasses;15261527 if ( Espresso.Item.NavigationLocalMarginTop != "0" && Espresso.Item.NavigationLocalMarginTop != "" )1528 {1529 NavigationLocalVerticalClassList += " mt-" + Espresso.Item.NavigationLocalMarginTop;1530 }1531 if ( Espresso.Item.NavigationLocalMarginBottom != "0" && Espresso.Item.NavigationLocalMarginBottom != "" )1532 {1533 NavigationLocalVerticalClassList += " mb-" + Espresso.Item.NavigationLocalMarginBottom;1534 }15351536 if ( Espresso.Item.NavigationLocalSticky == "True" )1537 {1538 NavigationLocalVerticalClassList += " is-sticky";1539 }15401541 if ( Espresso.Item.NavigationLocalAbsolute == "True" )1542 {1543 NavigationLocalVerticalClassList += " is-absolute";1544 }1545 else1546 {1547 Espresso.ContentSection.ClassList.Clear();1548 Espresso.ContentSection.ClassList.AddClasses( "wtf col-12 col-lg-9 ml-auto" );1549 }1550 }1551 }15521553 @if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "vertical" )1554 {1555 <section class="e-section @NavigationLocalVerticalClassList">1556 <div class="container-fluid">1557 <div class="row">1558 <div class="col-12">1559 <div class="row">15601561 <div class="col-3">1562 <nav id="dwnav-local-@NavigationLocalVerticalParentPageId" class="@NavigationLocalVerticalContainerClassList">1563 <ul class="flex-column nav">1564 @if ( Espresso.Item.NavigationLocalHeading != "" )1565 {1566 <li class="e-nav-local-heading">1567 <h2>@Espresso.Item.NavigationLocalHeading</h2>1568 </li>1569 }1570 @RenderNavigation( new1571 {1572 id = "dwnav-local-" + NavigationLocalVerticalParentPageId,1573 parentid = NavigationLocalVerticalParentPageId,1574 template = NavigationLocalVerticalTemplate,1575 startlevel = Espresso.Item.NavigationLocalLevelStart,1576 endlevel = Espresso.Item.NavigationLocalLevelEnd,1577 expandmode = Espresso.Item.NavigationLocalPageTreeExpand == "True" ? "all" : "path",1578 } )1579 </ul>1580 </nav>1581 </div>15821583 </div>1584 </div>1585 </div>1586 </div>1587 </section>1588 }158915901591 @sectionStart()1592 @GetValue("DwContent(dwcontentmain)")1593 @sectionEnd()1594 </article>1595 </main>1596 @{1597 string FooterContentClassList = "e-footer-content e-section";1598 }1599 @if ( Espresso.Item.FooterHide != "True" )1600 {1601 <footer class="e-footer">1602 <article class="e-footer-wrapper">1603 <section class="@FooterContentClassList">1604 <div class="container-fluid">1605 <div class="row">1606 @if ( !string.IsNullOrEmpty( Espresso.Area.Item.FooterPageId ) )1607 {1608 @RenderPageContent( int.Parse( Espresso.Area.Item.FooterPageId ) )1609 }1610 @if ( string.IsNullOrEmpty( GetString( "DwNavigation(dwnavutilitiessecondaryfooter)" ) ) == false )1611 {1612 <div class="col-12">1613 <aside class="e-nav-utilities-secondary">1614 <ul class="nav nav-inline">1615 @GetValue("DwNavigation(dwnavutilitiessecondaryfooter)")1616 </ul>1617 </aside>1618 </div>1619 }1620 </div>1621 </div>1622 </section>16231624 </article>1625 </footer>1626 }16271628 @if( string.IsNullOrEmpty( GetString("DwContent(dwcontentcta)") ) == false ) {1629 <aside id="dwcontentcta" class="js-e-cta e-cta is-hidden fixed-top">1630 <section class="e-section">1631 <div class="container-fluid">1632 <div class="row no-gutters">1633 <div class="col-12">1634 <div class="row no-gutters justify-content-center align-items-center">1635 @GetValue("DwContent(dwcontentcta)")1636 @* <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> *@1637 </div>1638 </div>1639 </div>1640 </div>1641 </section>1642 </aside>1643 }16441645 <div class="e-cart-msg modal fade small" id="js-e-cart-msg" data-backdrop="false">1646 <div class="modal-dialog e-cart-msg-modal-dialog">1647 <div class="modal-content">1648 <div class="modal-header">1649 <h4 class="js-e-cart-msg-heading modal-title">1650 <i class="material-icons material-icons-large text-success">check_circle</i>1651 <span>@Translate( "eCom Cart - Product Added - Heading", "Added to your cart" )</span>1652 </h4>1653 <button class="close" data-dismiss="modal" type="button">1654 <i class="material-icons">close</i>1655 </button>1656 </div>1657 <div class="modal-body">1658 <div class="js-e-cart-msg-content">1659 <script id="js-e-handlebars-tmpl-cart-msg-lastadded" type="text/x-handlebars-template">1660 <div class="row">1661 {{#each cart.lastAdded}}1662 <div class="col-12 py-1 js-cart-orderlines-cylindo">1663 <div class="row">1664 <div class="col-4">1665 <a class="" href="{{url}}">1666 <img class="js-cylindo-image cylindo-image w-100" id="dm-orderline-{{id}}" data-use-pim-packs="{{includePIMPacks}}" data-sku="{{cylindo.sku}}" data-position="{{cylindo.position}}" data-leg-finish="{{cylindo.legFinish}}" data-fabric="{{cylindo.fabric}}" data-fallback-image="{{cylindo.fallbackImage}}"/>1667 </a>1668 </div>1669 <div class="col-8">1670 <h3 class="e-product-name m-0">1671 <a href="{{{url}}}" tabindex="-1">{{name}}</a>1672 </h3>1673 {{#if textileName}}1674 <p class="e-product-number mb-1 small">1675 {{textileName}}1676 </p>1677 {{/if}}1678 <p class="small">1679 {{number}}1680 </p>1681 <p class="mb-0">1682 <a href="{{url}}" class="text-auto text-decoration-none">1683 {{{price}}}1684 </a>1685 </p>1686 </div>1687 </div>1688 </div>1689 {{/each}}1690 </div>1691 </script>1692 </div>1693 </div>1694 <div class="bg-light e-cart-msg-footer modal-footer border-top-0">1695 <a class="btn px-1 mr-1" href="/shop/cart" data-dismiss="modal">@Translate( "eCom Cart - Continue Shopping - Button", "Continue shopping" )</a>1696 <a class="arrow-right btn-secondary btn" href="/shop/cart">@Translate( "eCom Cart - Checkout - Button", "Checkout" )</a>1697 </div>1698 </div>1699 </div>1700 </div>17011702 </div>17031704 @using Co3.Espresso.Base.Extensions1705 @using Co3.Espresso.Website.Services1706 <div class="modal fade e-search js-e-search js-e-search-modal modal-fullscreen" data-backdrop="false" data-keyboard="true" data-focus="true">1707 <div class="modal-dialog">1708 <div class="modal-content">17091710 <div class="modal-header">1711 <a class="btn btn-sm btn-secondary js-e-back-link arrow-left" href="/" data-dismiss="modal">1712 @Translate("Search - Back button", "Back")1713 </a>1714 <div class="e-logo">1715 <a href="/" class="e-logo-link my-0">1716 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">1717 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">1718 </a>1719 </div>1720 </div>17211722 <div class="modal-body">17231724 <div class="container-fluid">17251726 <div class="e-search-form-container">1727 <div class="row justify-content-center">1728 <div class="col-12 col-md-10 col-lg-8 col-xl-6 mt-3">1729 <form action="" class="e-search-form js-e-search-form il-custom-search-page-form">1730 <div class="js-e-search-input-group e-search-input-group is-empty">1731 @*<label class="e-search-label" for="e-search-input"><i class="material-icons">search</i></label>*@1732 @{ string Translate_Search_InputText = Translate("Search - Input Placeholder - Text", "Search"); }1733 <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">1734 <button class="e-search-submit search-page-submit btn btn-primary" type="submit"></button>1735 <span class="js-e-search-clear e-search-clear"><i class="material-icons">close</i></span>1736 </div>1737 </form>1738 </div>1739 </div>1740 </div>17411742 <div class="js-e-search-result-container e-search-result-container">17431744 <div class="row justify-content-center">1745 <div class="col-12 col-md-10 col-lg-8 col-xl-6">1746 <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>1747 </div>1748 </div>17491750 <div class="row justify-content-center">1751 <div class="col-12 col-xl-10">1752 <div class="js-e-search-result-products e-search-result-products is-empty mb-4">1753 @{string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth( null ).ToResponsiveClasses();}1754 <script id="js-e-handlebars-tmpl-search-result-item-product" type="text/x-handlebars-template">1755 <div class="e-products js-productlist-cylindo">1756 <div class="row justify-content-left">17571758 {{#each products}}1759 <div class="@productlistItemClassList">1760 <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}}">1761 <div class="e-products-item-container">1762 <div class="e-products-item-text-container text-center small">1763 @*<h3 class="e-products-item-name mb-0"><a href="{{url}}">{{name}} {{producttype}}</a></h3>1764 <small class="il-colors-instock mt-1 mb-1 d-block {{#unless inStockTextilesTotal}}opacity-zero{{/unless}}"><a href="{{url}}">{{inStockTextilesTotal}} colors in stock</a></small>1765 <ul class="il-color-list {{#unless inStockTextilesTotal}}opacity-zero{{/unless}}">1766 {{#each inStockTextiles}}1767 {{#compare @@index '<' 8}}1768 <li style="background-color: #{{color}};"></li>1769 {{/compare}}1770 {{/each}}1771 {{#compare inStockTextiles.length '>' 8}}<li class="morethanmax"></li>{{/compare}}1772 </ul>*@1773 <div class="js-cylindo-viewer cylindo-viewer" id="search-item-{{id}}" data-cylindooverrideurl="{{varelisteThumbnailBillede01}}" data-use-pim-packs="{{includePIMPacks}}" data-sku="{{cylindo.sku}}" data-position="{{cylindo.position}}" data-leg-finish="{{cylindo.legFinish}}" data-fabric="{{cylindo.fabric}}" data-fallback-image="{{cylindo.fallbackImage}}"></div>1774 {{#if isBlackLabelProduct }}1775 <img src="/Files/Templates/Designs/innovationliving/_assets/img/black-label-logo.svg" class="il-black-label"/>1776 {{/if}}1777 @*<p class="e-products-item-text mb-0 {{#unless inStockTextilesTotal}}opacity-zero{{/unless}}">1778 <a href="{{url}}">1779 More colors available1780 </a>1781 </p>*@1782 <h3 class="e-products-item-name mb-0"><a href="{{url}}">{{name}} {{producttype}}</a></h3>1783 {{#if showPriceArea}}1784 {{#if isModeRetail}}1785 <div class="e-product-price font-weight-bold h4 mb-0 mt-1">1786 {{{retailPriceFormatted}}}1787 </div>1788 {{else}}1789 {{#if isUserAuthenticated}}1790 <div class="e-product-price font-weight-bold h4 mb-0 mt-1">1791 {{{retailPriceFormatted}}}1792 </div>1793 {{#unless hideResellerPrice}}1794 {{{resellerPriceFormatted}}}1795 {{/unless}}1796 {{/if}}1797 {{/if}}1798 {{/if}}1799 </div>1800 </div>1801 </div>1802 </div>180318041805 @*<div class="@productlistItemClassList">1806 <div class="e-products-item">1807 <div class="e-products-item-container">1808 <div class="e-products-item-image-container">1809 <a class="e-products-item-image-wrapper" href="{{url}}">1810 <img src="{{imageLarge}}" alt="" class="e-products-item-image">1811 </a>1812 </div>1813 <div class="e-products-item-text-container text-center small">1814 <h3 class="e-products-item-name mb-0"><a href="{{url}}">{{name}}</a></h3>1815 {{#if descriptionShortExtra01}}1816 <p class="e-products-item-text mb-0 small">1817 <a href="{{url}}">1818 {{descriptionShortExtra01}}1819 </a>1820 </p>1821 {{/if}}1822 <p class="e-products-item-text mb-0 small">1823 <span class="e-products-item-price">1824 <a href="{{url}}">1825 {{{price}}}1826 </a>1827 </span>1828 </p>1829 </div>1830 </div>1831 </div>1832 </div>*@1833 {{/each}}183418351836 </div>1837 <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>1838 </div>1839 </script>1840 </div>1841 </div>1842 </div>18431844 <div class="row justify-content-center">1845 <div class="col-12 col-md-10 col-lg-8 col-xl-6">1846 <div class="js-e-search-result-pages e-search-result-pages is-empty mb-3">1847 <script id="js-e-handlebars-tmpl-search-result-item-page" type="text/x-handlebars-template">1848 <div class="row">1849 {{#each pages}}1850 <div class="col-12">1851 <p class="mb-0"><a href="{{{url}}}" class="text-bold">{{{title}}}</a></p>1852 <p class="mb-0 small text-truncate">1853 <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>1854 <p class="small">{{{text}}}...</p>1855 </div>1856 {{/each}}1857 </div>1858 </script>1859 </div>1860 </div>1861 </div>18621863 <div class="js-e-search-loading-overlay e-loading-overlay e-search-loading-overlay">1864 <div class="e-loading-spinner"></div>1865 </div>18661867 </div>18681869 </div>1870 </div>1871 </div>1872 </div>1873 </div>187418751876 @if( Espresso.Area.Item.BackToTopLink == "True" ){1877 <a href="#top" class="e-back-to-top js-e-back-to-top"><i class="material-icons">keyboard_arrow_up</i></a>1878 }187918801881 @if (Espresso.DynamicwebPage.Item["CustomClasses"]?.ToString() != "is-download-checkout")1882 {1883188418851886 <div class="modal fade" id="js-active-campaign-list-download-form-modal" tabindex="-1" role="dialog" aria-hidden="true">1887 @using Co3.Espresso.Base.Extensions18881889 @{1890 string globalUserName = string.Empty;1891 string globalUseremail = string.Empty;1892 string globalUserCompany = string.Empty;1893 string globalUserCountry = string.Empty;1894 string globalUserSortiment = string.Empty;18951896 Dynamicweb.Security.UserManagement.User globalUser = Dynamicweb.Security.UserManagement.User.GetCurrentUser();18971898 if (globalUser != null)1899 {1900 bool globalIsBlack = globalUser.GetCustomFieldValue<bool>("Black");1901 bool globalIsPremium = globalUser.GetCustomFieldValue<bool>("Premium");1902 bool globalIsRetail = globalUser.GetCustomFieldValue<bool>("Retail");1903 bool globalIsOnline = globalUser.GetCustomFieldValue<bool>("Online");19041905 List<string> globalSortimentList = new List<string>();1906 if (globalIsBlack)1907 {1908 globalSortimentList.Add("Black");1909 }1910 if (globalIsPremium)1911 {1912 globalSortimentList.Add("Premium");1913 }1914 if (globalIsRetail)1915 {1916 globalSortimentList.Add("Retail");1917 }1918 if (globalIsOnline)1919 {1920 globalSortimentList.Add("Online");1921 }19221923 globalUserName = string.Format("{0} {1} {2}", globalUser.FirstName, globalUser.MiddleName, globalUser.LastName);1924 globalUseremail = globalUser.Email;1925 globalUserCompany = globalUser.Name;1926 globalUserCountry = globalUser.CountryCode;1927 globalUserSortiment = globalSortimentList.Any() ? string.Join(", ", globalSortimentList) : string.Empty;1928 }1929 }19301931 <div class="modal-dialog" role="document">1932 <div class="modal-content">1933 <div class="modal-header">1934 <button type="button" class="close" data-dismiss="modal" aria-label="Close">1935 <span aria-hidden="true">&times;</span>1936 </button>1937 </div>1938 <div class="modal-body">1939 <div class="_form_3 d-none"></div>1940 <script>1941 document.addEventListener( 'DOMContentLoaded', function () {1942 var script = document.createElement("script");1943 script.type = "text/javascript";1944 script.onload = function() {1945 script.onload = null;1946 };1947 document.getElementsByTagName( "head" )[ 0 ].appendChild( script );1948 script.src = "//inno1711.activehosted.com/f/embed.php?id=3";1949 } );195019511952 /*( function () {1953 'use strict';1954 jQuery( function () {1955 var objScript = {1956 url: '//inno1711.activehosted.com/f/embed.php?id=3',1957 callback: null1958 };1959 if (document.querySelector("._form_5") === null) {1960 e4.util.require.js( objScript, function() { });1961 }1962 } );1963 }() );*/19641965 var formElm = document.querySelector("._form_3");1966 var observer = null;19671968 if (document.querySelector("._form_5") === null) {1969 observer = new MutationObserver(function (mutations){1970 mutations.forEach(function ( mutation ) {1971 if ( mutation.addedNodes.length > 0 ){1972 updateFields();1973 formElm.classList.remove("d-none");1974 }1975 });1976 });1977 observer.observe(formElm, {1978 childList: true,1979 attributes: true1980 });1981 }19821983 function updateFields() {1984 var fullnameDomElm = document.getElementById("fullname"),1985 emailDomElm = document.getElementById("email"),1986 companyDomElm = document.getElementById("field[4]"),1987 countryDomElm = document.getElementById("field[1]"),1988 sortimentDomElm = document.getElementById("field[3]");19891990 fullnameDomElm.value = "@globalUserName";1991 emailDomElm.value = "@globalUseremail";1992 companyDomElm.value = "@globalUserCompany";1993 companyDomElm.type = "hidden";1994 companyDomElm.closest("._form_element").style.display = "none";1995 countryDomElm.value = "@globalUserCountry";1996 countryDomElm.type = "hidden";1997 countryDomElm.closest("._form_element").style.display = "none";1998 sortimentDomElm.value = "@globalUserSortiment";1999 sortimentDomElm.type = "hidden";2000 sortimentDomElm.closest("._form_element").style.display = "none";2001 }2002 </script>2003 </div>2004 </div>2005 </div>2006 </div>20072008 }200920102011 @using System.Web;2012 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase20132014 @{2015 HttpCookie optInLevel = HttpContext.Current.Request.Cookies[ "Dynamicweb.CookieOptInLevel" ];2016 bool showCookieWarning = optInLevel == null;2017 if ( optInLevel != null )2018 {2019 showCookieWarning = optInLevel.Value != "2";2020 }2021 }20222023 @if ( showCookieWarning )2024 {2025 <div class="e-cookie js-e-cookie py-1" hidden="">2026 <aside class="e-cookie-wrapper">2027 <section class="e-section">2028 <div class="container-fluid">2029 <div class="align-items-center row">2030 <div class="col-12 col-lg-10 col-md-9 my-1">2031 <p class="line-height-sm mb-0 small text-center text-md-left">2032 <span class="d-md-inline d-none">2033 @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" )2034 </span>2035 <span class="d-md-none">2036 @Translate( "Cookie Warning - Message Short - Text", "This website uses cookies to improve your experience. Learn more about our" )2037 </span>2038 &nbsp;2039 <a href="@Espresso.Area.Item.CookieMessage">@Translate( "Cookie Warning - Policy - Link", "cookie policy" )</a>2040 </p>2041 </div>2042 <div class="col-12 col-lg-2 col-md-3 my-1">2043 <p class="mb-0 text-center text-md-right">2044 <button class="btn e-cookie-accept-btn js-e-cookie-accept-btn" type="button">2045 @Translate( "Cookie Warning - Accept - Button", "OKAY" )2046 </button>2047 </p>2048 </div>2049 </div>2050 </div>2051 </section>2052 </aside>2053 </div>2054 }20552056 @if ( 1 == 2 )2057 {2058 @GetValue( "DwCookieWarning" )2059 }206020612062 @RenderingService.Instance.PartialView( "_partials/redirect.cshtml" )206320642065 <script async="" src="/Files/Templates/Designs/innovationliving/_assets/_dist/js/default.js?v=2.2.72" data-cookieconsent="ignore"></script>2066 @* NOT in USE on STAGING2067 *@20682069 <script src="//rum-static.pingdom.net/pa-5e42bf7211c07000080003fc.js" async=""></script>2070 </body>2071 @GetValue( "CopyRightNotice" )2072 </html>2073