Error executing template "Designs/junckers/_parsed/espresso.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_b4c51a54819a4d68ac004d51ee87bd3b.Execute() in E:\Dynamicweb.NET\Solutions\junckers.espresso4.dk\files\Templates\Designs\junckers\_parsed\espresso.parsed.cshtml:line 65
   at 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.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase 2 @using System.Web; 3 @using System.IO 4 @using Co3.Espresso.Website.Services 5 @using Dynamicweb.Content 6 @using Dynamicweb.Content.Items 7 @using Dynamicweb.Rendering 8 @using Dynamicweb.Frontend 9 @{ 10 string globalAreaLang = GetGlobalValue( "Global:Area.Lang" ); 11 string globalPageID = GetGlobalValue( "Global:Page.ID" ); 12 string baseUrl = GetGlobalValue( "Global:Request.Scheme" ) + "://" + GetGlobalValue( "Global:Request.Host" ); 13 string openGraphUrl = baseUrl + GetGlobalValue( "Global:Pageview.Url" ); 14 string openGraphImage = baseUrl + Espresso.OpenGraphImage; 15 string productIdParam = "" + HttpContext.Current.Request["productid"]; 16 bool isProductPage = string.IsNullOrEmpty(productIdParam) == false; 17 string pdfProductId = HttpUtility.HtmlAttributeEncode(productIdParam); 18 string pdfPageId = HttpUtility.HtmlAttributeEncode( globalPageID ); 19 string pageCanonical = PageView.Current().Page.MetaCanonical; 20 string globalValueUrl = GetGlobalValue("Global:Pageview.Url"); 21 string canonicalPageView = String.Format("{0}://{1}{2}", GetGlobalValue("Global:Request.Scheme"), GetGlobalValue("Global:Request.Host"), globalValueUrl); 22 bool isRequestingPDF = System.Web.HttpContext.Current.Request[ "pdfgeneratorworking" ] == "true" || System.Web.HttpContext.Current.Request[ "newpdf" ] == "true" || System.Web.HttpContext.Current.Request[ "newpdf" ] == "test"; 23 if ( isRequestingPDF ) 24 { 25 Espresso.Area.OptimizedLoading = false; 26 Espresso.StylesheetAttributeRel = Espresso.Area.OptimizedLoading ? "preload" : "stylesheet"; 27 Espresso.StylesheetAttributeMedia = Espresso.Area.OptimizedLoading ? "only x" : "all"; 28 } 29 30 string isUsingCookiebot = string.Empty; 31 32 if ( GetBoolean( "Item.Area.IsUsingCookiebot.Value" ) == false ) 33 { 34 isUsingCookiebot = "false"; 35 } 36 else 37 { 38 isUsingCookiebot = "true"; 39 } 40 } 41 <!DOCTYPE html> 42 <html lang="@globalAreaLang"> 43 <head> 44 @* @GetValue( "CopyRightNotice" ) *@ 45 <meta charset="utf-8"> 46 <meta content="width=device-width, initial-scale=1, shrink-to-fit=no, minimal-ui" name="viewport"> 47 <meta content="ie=edge" http-equiv="x-ua-compatible"> 48 49 @if ( isProductPage == false ) 50 { 51 <title>@GetValue("Title")</title> 52 @GetValue("MetaTags") 53 @GetValue("CopyRightNotice") 54 55 if ( string.IsNullOrEmpty(pageCanonical) == true ) 56 { 57 <link rel="canonical" href="@canonicalPageView"> 58 } 59 } 60 else 61 { 62 @RenderSnippet( "productMetaTags" ) 63 } 64 65 @if ( Espresso.Area.OptimizedLoading ) 66 { 67 @Espresso.CriticalCSS 68 } 69 <link crossorigin="" href="https://fonts.gstatic.com/" rel="preconnect"> 70 <link href="https://fonts.googleapis.com/css?family=Ubuntu:300,400,500%7CMaterial+Icons" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style"> 71 <link href="/Files/Templates/Designs/junckers/_assets/_dist/css/default.css?v=1.1.32" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style"> 72 @if ( isRequestingPDF ) 73 { 74 <link href="/Files/Templates/Designs/junckers/_assets/_dist/css/junckers-pdf.css?v=2.026" media="all" rel="stylesheet"> 75 } 76 77 @*if ( PageView.Current().Page.ID != 29515 ) 78 { 79 <script type='text/javascript' src='https://platform-api.sharethis.com/js/sharethis.js#property=601be95843bf770011180384&product=sop' async='async'></script> 80 }*@ 81 82 @if ( Espresso.Area.OptimizedLoading ) 83 { 84 @Espresso.CriticalJS 85 } 86 @* *@ 87 <link rel="shortcut icon" href="@Espresso.Area.Item.Favicon"> 88 @* @GetValue( "MetaTags" ) *@ 89 @if ( Espresso.IsStagingUrl == true ) 90 { 91 <meta content="noindex,nofollow" name="robots"> 92 } 93 <meta property="og:url" content="@openGraphUrl"> 94 <meta property="og:title" content="@Espresso.OpenGraphTitle"> 95 <meta property="og:description" content="@Espresso.OpenGraphDescription"> 96 <meta property="og:image" content="@openGraphImage"> 97 <meta content="website" property="og:type"> 98 @if ( string.IsNullOrEmpty( Espresso.Area.Item.GoogleSiteVerification ) == false ) 99 { 100 <meta name="google-site-verification" content="@Espresso.Area.Item.GoogleSiteVerification"> 101 } 102 @{ 103 if ( 1 == 2 ) 104 { 105 @GetValue( "Stylesheets" ) 106 } 107 } 108 @if ( string.IsNullOrEmpty( Espresso.Area.GoogleTagManagerID ) == false && Espresso.Area.GoogleTagManagerID != "GTM-XXXX" ) 109 { 110 <!-- Google Tag Manager --> 111 <script data-cookieconsent="ignore"> 112 (function(w, d, s, l, i) { 113 w[l] = w[l] || []; 114 w[l].push({ 115 'gtm.start': 116 new Date().getTime(), 117 event: 'gtm.js' 118 }); 119 var f = d.getElementsByTagName(s)[0], 120 j = d.createElement(s), 121 dl = l != 'dataLayer' ? '&l=' + l : ''; 122 j.async = true; 123 j.src = 124 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 125 f.parentNode.insertBefore(j, f); 126 })(window, document, 'script', 'dataLayer', '@Espresso.Area.GoogleTagManagerID'); 127 </script> 128 <!-- End Google Tag Manager --> 129 } 130 131 <!-- Hreflang --> 132 @{ 133 @* Get areas from service *@ 134 Dynamicweb.Content.AreaService areaService = new Dynamicweb.Content.AreaService(); 135 Dynamicweb.Ecommerce.Products.ProductService productService = new Dynamicweb.Ecommerce.Products.ProductService(); 136 IList< Area > areas = areaService.GetAreas(); 137 138 bool pageHasParams = HttpContext.Current.Request.QueryString.HasKeys(); 139 string[] expectedParams = new [] { "ID", "productid" }; 140 IEnumerable< string > additionalParams = HttpContext.Current.Request.QueryString.AllKeys.Where(k => !expectedParams.Contains(k)); 141 bool pageHasAllowedParams = true; 142 143 if ( pageHasParams == true ) 144 { 145 if ( additionalParams.Any()) 146 { 147 pageHasAllowedParams = false; 148 } 149 } 150 151 bool pageHasXDefault = false; 152 string fallbackXDefaultEnglishPageUrl = string.Empty; 153 string fallbackXDefaultPageUrl = string.Empty; 154 155 @* Get current page's relation-text from page-item *@ 156 string currentPageRelation = PageView.Current().Page.Item[ "PageRelation" ] != null ? PageView.Current().Page.Item[ "PageRelation" ].ToString() : string.Empty; 157 158 @* Frontpage must have 'frontpage' as relation-text *@ 159 string CONST_frontpageRelation = "frontpage"; 160 161 if ( pageHasAllowedParams == true ) 162 { 163 @* Iterate areas *@ 164 foreach ( Area area in areas.Where(a => a.Active) ) 165 { 166 bool excludeFromHrefLang = area.Item.Keys.Contains("ExcludeFromHrefLang") && area.Item["ExcludeFromHrefLang"] != null && area.Item["ExcludeFromHrefLang"].ToString() == "True"; 167 168 if ( !excludeFromHrefLang ) 169 { 170 @* Get current area's culture *@ 171 string culture = area.Culture; 172 @* Check for IsDefault Hreflang on area *@ 173 string isDefaultHrefLang = area.Item[ "IsDefaultHrefLang" ] != null ? area.Item[ "IsDefaultHrefLang" ].ToString() : string.Empty; 174 @* Check for override-culture text on area *@ 175 string hreflangCultureOverride = area.Item[ "HreflangLanguageOverride" ] != null ? area.Item[ "HreflangLanguageOverride" ].ToString() : string.Empty; 176 177 @* Get scheme and domain *@ 178 string scheme = GetGlobalValue( "Global:Request.Scheme" ); 179 180 string domain = area.DomainLock; 181 @* If we have a primary domain call pageservice and get pages *@ 182 if ( string.IsNullOrEmpty( currentPageRelation ) == false && string.IsNullOrEmpty( domain ) == false ) 183 { 184 Dynamicweb.Content.PageService pageService = new Dynamicweb.Content.PageService(); 185 IEnumerable< Dynamicweb.Content.Page > pages = pageService.GetPagesByAreaID( area.ID ); 186 187 @* Iterate pages in area - check if is active + has item + has item-pagerelation + item-pagerelation equals current pagerelation *@ 188 foreach ( Dynamicweb.Content.Page page in pages.Where( p => p.Published && !p.Hidden && p.Item != null && p.Item[ "PageRelation" ] != null && p.Item[ "PageRelation" ].ToString().Equals( currentPageRelation ) ) ) 189 { 190 string productId = HttpContext.Current.Request[ "productid" ]; 191 192 string url = string.Empty; 193 194 if ( string.IsNullOrEmpty( productId ) == false ) 195 { 196 @* Build url to area product page *@ 197 Dynamicweb.Ecommerce.Products.Product product = productService.GetProductById( productId, "", area.EcomLanguageId ); 198 if ( product != null && product.Active == true ) 199 { 200 string prodUrl = string.Format( "Default.aspx?ID={0}&ProductId={1}", page.ID, product.Id ); 201 url = string.Format( "{0}://{1}{2}", scheme, domain, SearchEngineFriendlyURLs.GetFriendlyUrl( prodUrl, area.EcomLanguageId) ); 202 } 203 } 204 else 205 { 206 @* Build url to area page *@ 207 url = string.Format( "{0}://{1}{2}", scheme, domain, SearchEngineFriendlyURLs.GetFriendlyUrl( page.GetPageHrefValue() ) ); 208 if ( string.IsNullOrEmpty( fallbackXDefaultPageUrl ) == true ) 209 { 210 fallbackXDefaultPageUrl = url; 211 } 212 if ( string.IsNullOrEmpty( fallbackXDefaultEnglishPageUrl ) == true && culture.ToLower().Contains( "en" ) == true ) 213 { 214 fallbackXDefaultEnglishPageUrl = url; 215 } 216 } 217 218 @* If our current page relation match frontpage - set link to domain only *@ 219 if ( currentPageRelation == CONST_frontpageRelation ) 220 { 221 url = string.Format( "{0}://{1}", scheme, domain ); 222 } 223 @* If our area item has checked in Default hreflang, we render x-default link *@ 224 if ( isDefaultHrefLang == "True" ) 225 { 226 <link rel="alternate" hreflang="x-default" href="@url"> 227 pageHasXDefault = true; 228 } 229 @* If we have a value in the area-item to overrule the culture, override the value here *@ 230 if ( string.IsNullOrEmpty( hreflangCultureOverride ) == false ) 231 { 232 culture = hreflangCultureOverride; 233 } 234 @* Render hreflang-link *@ 235 if ( string.IsNullOrEmpty( url ) == false ) 236 { 237 <link rel="alternate" hreflang="@culture.ToLower()" href="@url"> 238 } 239 240 } 241 } 242 } 243 } 244 if ( pageHasXDefault == false ) 245 { 246 if ( string.IsNullOrEmpty( fallbackXDefaultEnglishPageUrl ) ) 247 { 248 <link rel="alternate" hreflang="x-default" href="@fallbackXDefaultPageUrl"> 249 } 250 else 251 { 252 <link rel="alternate" hreflang="x-default" href="@fallbackXDefaultEnglishPageUrl"> 253 } 254 255 } 256 } 257 } 258 <!-- End Hreflang --> 259 260 @if ( string.IsNullOrEmpty( GetString( "Item.Area.MailchimpPopupScript.Value" ) ) == false ) 261 { 262 @GetString( "Item.Area.MailchimpPopupScript.Value" ) 263 } 264 265 @if ( string.IsNullOrEmpty( GetString( "Item.MailchimpPopupScript.Value" ) ) == false ) 266 { 267 @GetString( "Item.MailchimpPopupScript.Value" ) 268 } 269 270 271 @if ( PageView.Current().AreaID == 24 || PageView.Current().AreaID == 53 ) //Junckers Ireland OR Junckers UK 272 { 273 <script async="" type="text/javascript" src="https://userlike-cdn-widgets.s3-eu-west-1.amazonaws.com/3e5545a2110646dea90abdf87f41622f3abae299df2e41228670583cb9b746e2.js"></script> 274 } 275 276 277 @GetValue("Stylesheets") 278 @GetValue("Javascripts") 279 </head> 280 281 @{ 282 Item globalPageItem = null; 283 284 if ( string.IsNullOrWhiteSpace( Espresso.DynamicwebPage.ShortCut ) == false ) 285 { 286 globalPageItem = Co3.Junckers.Frontend.Services.EnglishLanguagesPageItemService.Instance.GetPageItem( Espresso.DynamicwebPage.ShortCut ); 287 } 288 289 string pdfLink = string.Format( "{0}&newpdf=true&gid={1}", GetGlobalValue( "Global:Pageview.Url.Raw" ).Replace( "&newpdf=true", string.Empty ).Replace( "&newpdf=test", string.Empty ), Guid.NewGuid().ToString( "N" ) ); 290 291 string junckersHasDocumentationPdfLink = string.Empty; 292 293 if ( globalAreaLang == "en" && globalPageItem != null ) 294 { 295 junckersHasDocumentationPdfLink = globalPageItem[ "DocumentationPdf" ] != null ? globalPageItem[ "DocumentationPdf" ].ToString() : string.Empty; 296 } 297 else 298 { 299 junckersHasDocumentationPdfLink = string.IsNullOrEmpty( GetString( "Item.DocumentationPdf.Value" ) ) == false ? GetString( "Item.DocumentationPdf.Value" ) : string.Empty; 300 } 301 } 302 303 <body class="@Espresso.Item.CustomClasses @Espresso.Area.OptimizedLoading" data-pdf="@junckersHasDocumentationPdfLink" data-cookiebot="@isUsingCookiebot"> 304 305 @SnippetStart( "PasswordProtectedPage" ) 306 @{ 307 string pwProtectedPageContent = ""; 308 } 309 @foreach ( LoopItem pwProtectedPage in GetLoop( "Item.Area.PasswordProtectedPage" ) ) 310 { 311 string pwProtectedPagePageID = pwProtectedPage.GetString( "Item.Area.PasswordProtectedPage.PasswordProtectedPage_PageID" ); 312 313 if ( globalPageID == pwProtectedPagePageID ) 314 { 315 pwProtectedPageContent = pwProtectedPage.GetString( "Item.Area.PasswordProtectedPage.PasswordProtectedPage_Content" ); 316 @pwProtectedPageContent 317 } 318 } 319 @if ( pwProtectedPageContent == "" ) 320 { 321 <h1>Login</h1> 322 <p class="lead">@Translate( "Junckers_PasswordPage_Text", "Input password" )</p> 323 } 324 @SnippetEnd( "PasswordProtectedPage" ) 325 326 @if ( string.IsNullOrEmpty( Espresso.Area.GoogleTagManagerID ) == false && Espresso.Area.GoogleTagManagerID != "GTM-XXXX" ) 327 { 328 <!-- Google Tag Manager (noscript) --> 329 <noscript> 330 <iframe src="https://www.googletagmanager.com/ns.html?id=@Espresso.Area.GoogleTagManagerID" height="0" width="0" style="display: none; visibility: hidden"></iframe> 331 </noscript> 332 <!-- End Google Tag Manager (noscript) --> 333 } 334 @using Co3.Espresso.Website.Models.FrontEnd 335 @{ 336 Espresso.Canvas.ClassList.AddClasses( "js-e-canvas is-loading" ); 337 if ( Espresso.Item.CanvasFullscreen == "True" ) 338 { 339 Espresso.Canvas.ClassList.AddClasses( "is-fullscreen" ); 340 } 341 if ( Espresso.Item.DisablePDFHeader != null && Espresso.Item.DisablePDFHeader == "True" ) 342 { 343 Espresso.ContentArea.ClassList.AddClasses( "pdf-header-disabled" ); 344 } 345 } 346 347 348 349 @using System.Globalization @using Co3.Espresso.Base.Extensions @using Co3.Espresso.DownloadManager.Models @using Co3.Espresso.Website.Models.FrontEnd @using Co3.Espresso.Website.Services @using Dynamicweb.Content @using Dynamicweb.Frontend @using Dynamicweb.Rendering @using EcomContext = Dynamicweb.Ecommerce.Common.Context @functions { public string getCountryCodeFromArea( Area area ) { RegionInfo regionInfo = new RegionInfo( area.CultureInfo.LCID ); return regionInfo.TwoLetterISORegionName; } public dynamic GetPriceInfo( string beforePrice = "", string basicPrice = "" ) { double vat = EcomContext.Country.Vat; double dblBeforePrice = 0; double.TryParse( beforePrice, out dblBeforePrice ); double dblBasicPrice = 0; double.TryParse( basicPrice, out dblBasicPrice ); double dblBeforePriceWithVat = 0; double dblDiffPrice = 0; int pct = 0; if ( dblBeforePrice > 0 ) { dblBeforePriceWithVat = dblBeforePrice * ( ( vat / 100d ) + 1 ); if ( dblBeforePriceWithVat > dblBasicPrice ) { dblDiffPrice = dblBeforePriceWithVat - dblBasicPrice; pct = (int)Math.Ceiling((( 100d / dblBeforePriceWithVat ) * dblDiffPrice)); } } dynamic returnValue = new { beforePriceWithVat = dblBeforePriceWithVat, beforePriceWithVatFormatted = ProductService.Instance.GetPriceFormatted(dblBeforePriceWithVat), basicPrice = dblBasicPrice, basicPriceFormatted = ProductService.Instance.GetPriceFormatted(dblBasicPrice), diffPrice = dblDiffPrice, diffPriceFormatted = ProductService.Instance.GetPriceFormatted(dblDiffPrice), pct = pct, vat = vat }; return returnValue; } } @helper ProductDescription(string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null) { if ( string.IsNullOrEmpty( content ) == false ) { ClassList headingClassList = new ClassList(); headingClassList.AddClasses( "col-12" ); ClassList contentClassList = new ClassList(); contentClassList.AddClasses( "col-12" ); @sectionStart( sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses ) if ( string.IsNullOrEmpty( heading ) == false ) { <div class="@headingClassList"> <h2>@heading</h2> </div> } <div class="@contentClassList"> @content </div> @sectionEnd() } } @helper ProductVideo(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null) { if ( string.IsNullOrEmpty( videoURL ) == false ) { ClassList headingClassList = new ClassList(); headingClassList.AddClasses( "col-12" ); ClassList contentClassList = new ClassList(); contentClassList.AddClasses( "col-12" ); @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses ) if ( string.IsNullOrEmpty( heading ) == false ) { <div class="@headingClassList"> <h2>@heading</h2> </div> } <div class="@contentClassList"> <div class="embed-responsive embed-responsive-16by9 mb-2"> <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe> </div> </div> @sectionEnd() } } @helper ProductRelatedProducts(string sectionClasses = "e-section p-section p-section-bg-white pt-3 border-bottom", string contentClasses = null, string heading = null, IEnumerable<RazorTemplateBase<RazorTemplateModel<Template>>.LoopItem> productLoop = null) { if ( productLoop != null && productLoop.Any() == true ) { ClassList headingClassList = new ClassList(); headingClassList.AddClasses( "col-10 mx-auto" ); ClassList contentClassList = new ClassList(); contentClassList.AddClasses( "col-10 mx-auto" ); @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses ) if ( string.IsNullOrEmpty( heading ) == false ) { <div class="@headingClassList"> <h2>@heading</h2> </div> } <div class="@contentClassList"> <div class="e-products mb-2"> <div class="row"> @{ string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth( null ).ToResponsiveClasses(); } @foreach ( RazorTemplateBase<RazorTemplateModel<Template>>.LoopItem product in productLoop ) { @ProductlistItem( product, productlistItemClassList ) } </div> </div> </div> @sectionEnd() } } @helper ProductlistItem(RazorTemplateBase<RazorTemplateModel<Template>>.LoopItem product, string productlistItemClassList = null) { if ( product != null ) { dynamic productData = new { id = product.GetString( "Ecom:Product.ID" ), url = ProductService.Instance.GetProductLink( product.GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), product.GetString( "Ecom:Product.ID" ) ), number = product.GetString( "Ecom:Product.Number" ), name = product.GetString( "Ecom:Product.Name" ), imageLarge = ImageService.Instance.GetImageURL( product.GetString( "Ecom:Product.ImageLarge.Clean" ), 450, 350, 5 ), price = ProductService.Instance.GetPriceFormatted( product.GetDouble( "Ecom:Product.Price.Price" ) ), descriptionShortExtra01 = product.GetString( "Ecom:Product:Field.DescriptionShortExtra01" ), descriptionShort = product.GetString( "Ecom:Product.ShortDescription" ), stock = new { id = product.GetString( "Ecom:Product:Stock.ID" ), quantity = product.GetString( "Ecom:Product.Stock" ), text = product.GetString( "Ecom:Product:Stock.Text" ), delivery = product.GetString( "Ecom:Product:Stock.DeliveryText" ) } }; <div class="@productlistItemClassList"> <div class="e-products-item js-e-products-item"> <div class="e-products-item-container"> <div class="junckers-relatedproducts-item-image-container" style="background: url(@productData.imageLarge)"> @if ( string.IsNullOrEmpty( productData.descriptionShort ) == false ) {<div class="junckers-relatedproducts-item-text-container py-1"> <p class="e-products-item-text mb-0 px-2 small"> <strong>Package Size</strong> </p> <p class="e-products-item-text mb-0 text-muted px-2 small"> @productData.descriptionShort </p> </div> } </div> <div class="e-products-item-text-container text-center"> <h3 class="e-products-item-name mb-0"> @productData.name </h3> @* <p class="e-products-item-text mb-0"> *@ @* <small class="e-products-item-price small text-muted"> *@ @* <a href="@productData.url"> *@ @* @productData.price *@ @* </a> *@ @* </small> *@ @* </p> *@ </div> </div> </div> </div> } } @helper sectionStart(string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string collapseToggleTextExpand = "Se mere", string collapseToggleTextCollapse = "Se mindre") { ClassList sectionClassList = new ClassList(); sectionClassList.AddClasses( sectionClasses ); ClassList contentClassList; string collapseId = Guid.NewGuid().ToString( "N" ); ClassList collapseToggleClassList = new ClassList(); if ( contentClasses == null ) { contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem( PageView.Current().Page.Item ); } else { contentClassList = new ClassList(); contentClassList.AddClasses( contentClasses ); } if ( sectionCollapse == true ) { sectionClassList.AddClasses( "p-section-collapse js-p-section-collapse" ); collapseToggleClassList.AddClasses( contentClasses ); collapseToggleClassList.AddClasses( "p-section-collapse-toggle collapsed order-last text-center" ); contentClassList.AddClasses( "p-section-collapse-content collapse is-md" ); } @:<section class="@sectionClassList"> @:<div class="container-fluid"> @:<div class="row"> if ( sectionCollapse == true ) // TODO: SplitPattern into seperate heler function { <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId"> <button class="btn btn-primary p-section-collapse-toggle-btn" type="button"> <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i> </button> <small class="p-section-collapse-toggle-text h4" data-expand-text="@collapseToggleTextExpand" data-collapse-text="@collapseToggleTextCollapse"></small> </div> } @:<div class="@contentClassList" id="@collapseId"> @:<div class="row"> } @helper sectionEnd() { @:</div> @:</div> @:</div> @:</div> @:</section> } 350 351 352 353 <div class="e-loading-overlay e-page-loading-overlay is-loading js-e-page-loading-overlay"> 354 <div class="e-loading-spinner"></div> 355 </div> 356 357 358 359 <div class="@Espresso.Canvas.ClassList"> 360 @{ 361 ClassList headerClassList = new ClassList(); 362 headerClassList.AddClasses( "e-header js-e-header is-sticky" ); 363 if ( Espresso.Item.HeaderTransparent == "True" ) 364 { 365 headerClassList.AddClasses( "is-transparent" ); 366 } 367 368 ClassList logoClassList = new ClassList(); 369 logoClassList.AddClasses( "e-logo" ); 370 371 string backButtonLink = Espresso.Item.BackButtonLink; 372 ClassList backButtonClassList = new ClassList(); 373 ClassList backButtonIconClassList = new ClassList(); 374 if ( Espresso.Item.BackButton == "True" ) 375 { 376 backButtonClassList.AddClasses( "btn btn-sm btn-secondary my-1 align-self-center" ); 377 if ( backButtonLink == "" || backButtonLink == "/" ) 378 { 379 backButtonLink = "/"; 380 backButtonClassList.AddClasses( "js-e-back-link" ); 381 } 382 backButtonIconClassList.AddClasses( "material-icons" ); 383 if ( Espresso.Item.BackButtonPosition == "right" ) 384 { 385 backButtonClassList.AddClasses( "order-last" ); 386 logoClassList.AddClasses( "order-first" ); 387 } 388 else 389 { 390 backButtonClassList.AddClasses( "order-first" ); 391 logoClassList.AddClasses( "mr-0 ml-auto order-last" ); 392 } 393 if ( Espresso.Item.BackButtonIcon == "arrow_back" ) 394 { 395 backButtonClassList.AddClasses( "arrow-left" ); 396 backButtonIconClassList.AddClasses( "d-none" ); 397 } 398 else if ( Espresso.Item.BackButtonIcon == "arrow_forward" ) 399 { 400 backButtonClassList.AddClasses( "arrow-right" ); 401 backButtonIconClassList.AddClasses( "d-none" ); 402 } 403 } 404 405 string logoPrimary = Espresso.Area.Item.LogoPrimary; 406 string logoSecondary = Espresso.Area.Item.LogoSecondary; 407 if ( string.IsNullOrEmpty( logoSecondary ) == true ) 408 { 409 logoSecondary = logoPrimary; 410 } 411 string tagline = Espresso.Area.Item.Tagline; 412 Dictionary< string, string > navigationHtml = new Dictionary< string, string > 413 { 414 { 415 "global", RenderNavigation( new 416 { 417 id = "dwnav-global", 418 template = "global.xslt", 419 startlevel = 1, 420 endlevel = 8, 421 expandmode = "all" 422 } ) 423 }, 424 { 425 "utilities-primary", RenderNavigation( new 426 { 427 id = "dwnav-utilities-primary", 428 template = "utilities.xslt", 429 startlevel = 4, 430 endlevel = 5, 431 expandmode = "all", 432 parenttag = "utilities-primary" 433 } ) 434 }, 435 { 436 "utilities-secondary", RenderNavigation( new 437 { 438 id = "dwnav-utilities-secondary", 439 template = "utilities.xslt", 440 startlevel = 4, 441 endlevel = 4, 442 expandmode = "all", 443 parenttag = "utilities-secondary" 444 } ) 445 }, 446 { 447 "hamburger-header", RenderNavigation( new 448 { 449 id = "dwnav-hamburger-header", 450 template = "utilities.xslt", 451 startlevel = 4, 452 endlevel = 4, 453 expandmode = "all", 454 parenttag = "hamburger-header" 455 } ) 456 }, 457 { 458 "hamburger-aside", RenderNavigation( new 459 { 460 id = "dwnav-hamburger-aside", 461 template = "utilities.xslt", 462 startlevel = 4, 463 endlevel = 4, 464 expandmode = "all", 465 parenttag = "hamburger-aside" 466 } ) 467 } 468 }; 469 } 470 @if ( Espresso.Item.HeaderHide != "True" ) 471 { 472 <header class="@headerClassList" data-autohide="true"> 473 474 <div class="e-header-hamburger"> 475 @sectionStart( "e-header-section e-section", "col-12" ) 476 <div class="col-12 e-header-section-content"> 477 <div class="@logoClassList"> 478 <a class="e-logo-link" href="/"> 479 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary"> 480 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary"> 481 @if ( string.IsNullOrEmpty( tagline ) == false ) 482 { 483 <p class="e-logo-tagline">@tagline</p> 484 } 485 </a> 486 </div> 487 @if ( Espresso.Item.NavigationHide != "True" ) 488 { 489 <section class="e-nav-hamburger-header"> 490 <ul class="nav"> 491 @navigationHtml[ "hamburger-header" ] 492 @* TODO: Move to xslt *@ 493 <li class="e-nav-item-hamburger-open nav-item"> 494 <a class="nav-link" data-target=".modal.e-nav" data-toggle="modal" href="#"> 495 <i class="e-nav-pageicon material-icons">menu</i> 496 <span class="e-nav-pagename">@Translate( "Header - Hamburger menu open - Button", "Menu" )</span> 497 </a> 498 </li> 499 </ul> 500 </section> 501 } 502 @if ( Espresso.Item.BackButton == "True" ) 503 { 504 <a class="@backButtonClassList" href="@backButtonLink"> 505 @if ( Espresso.Item.BackButtonIcon != "" ) 506 { 507 <i class="@backButtonIconClassList">@Espresso.Item.BackButtonIcon</i> 508 } 509 @Espresso.Item.BackButtonText 510 </a> 511 } 512 </div> 513 @sectionEnd() 514 </div> 515 <div class="e-nav js-e-nav modal p-0" data-backdrop="false"> 516 <div class="e-nav-container navbar"> 517 518 @sectionStart( "e-header-section e-section", "col-12" ) 519 <div class="col-12 e-header-section-content"> 520 <div class="@logoClassList"> 521 <a class="e-logo-link" href="/"> 522 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName"> 523 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary"> 524 @if ( string.IsNullOrEmpty( tagline ) == false ) 525 { 526 <p class="e-logo-tagline">@tagline</p> 527 } 528 </a> 529 </div> 530 531 @if ( Espresso.Item.NavigationHide != "True" ) 532 { 533 <nav class="e-nav-global js-e-nav-global"> 534 <ul class="nav"> 535 @navigationHtml[ "global" ] 536 </ul> 537 </nav> 538 539 <div class="e-nav-item-hamburger-close"> 540 <a class="nav-link" data-target=".modal.e-nav" data-toggle="modal" href="#"> 541 <i class="e-nav-pageicon material-icons">close</i> 542 <span class="e-nav-pagename">@Translate( "Header - Hamburger menu close - Button", "Close" )</span> 543 </a> 544 </div> 545 546 if ( string.IsNullOrEmpty( navigationHtml[ "utilities-primary" ] ) == false ) 547 { 548 @:</div> 549 @sectionEnd() 550 @sectionStart( "bg-tertiary e-header-section e-section", "col-12" ) 551 @:<div class="col-12 e-header-section-content"> 552 553 <nav class="e-nav-utilities-primary js-e-nav-utilities-primary"> 554 <ul class="nav"> 555 @navigationHtml[ "utilities-primary" ] 556 </ul> 557 </nav> 558 } 559 if ( string.IsNullOrEmpty( navigationHtml[ "utilities-secondary" ] ) == false ) 560 { 561 <nav class="e-nav-utilities-secondary"> 562 <ul class="nav"> 563 @navigationHtml[ "utilities-secondary" ] 564 </ul> 565 </nav> 566 } 567 if ( string.IsNullOrEmpty( navigationHtml[ "hamburger-aside" ] ) == false ) 568 { 569 <nav class="e-nav-hamburger-aside"> 570 <ul class="nav"> 571 @navigationHtml[ "hamburger-aside" ] 572 </ul> 573 </nav> 574 } 575 } 576 @if ( Espresso.Item.BackButton == "True" ) 577 { 578 <a class="@backButtonClassList" href="@backButtonLink"> 579 @if ( Espresso.Item.BackButtonIcon != "" ) 580 { 581 <i class="@backButtonIconClassList">@Espresso.Item.BackButtonIcon</i> 582 } 583 @Espresso.Item.BackButtonText 584 </a> 585 } 586 </div> 587 @sectionEnd() 588 589 </div> 590 </div> 591 592 </header> 593 } 594 595 596 597 @using Dynamicweb.Security.UserManagement 598 @{ 599 User currentUser = User.get_Current( PagePermissionLevels.Frontend ); 600 if ( currentUser != null ) 601 { 602 User currentSecondaryUser = currentUser.CurrentSecondaryUser; 603 if ( currentSecondaryUser != null ) 604 { 605 @sectionStart( "e-section bg-warning", "col-12" ) 606 <div class="align-self-center col-12 col-lg-9 col-md-8 my-1"> 607 <p class="line-height-sm mb-0 text-center text-md-left"> 608 <i class="material-icons material-icons-2x">supervisor_account</i> You are currently impersonating this user: <strong>@currentUser.Name</strong> 609 </p> 610 </div> 611 <div class="align-self-center col-12 col-lg-3 col-md-4 my-1"> 612 <form class="mb-0 small text-center text-md-right" method="post" action="@Espresso.Area.Item.ExtranetImpersonationPage"> 613 <button class="btn btn-primary" name="DwExtranetRemoveSecondaryUser" type="submit">Stop impersonation</button> 614 </form> 615 </div> 616 @sectionEnd() 617 } 618 } 619 } 620 621 622 <main class="e-content"> 623 @using Dynamicweb.Content; 624 @using Dynamicweb.Extensibility; 625 @{ 626 string eBreadcrumbClasslist = "e-breadcrumb js-e-breadcrumb d-none d-lg-block"; 627 if ( Espresso.Item.Breadcrumb != "auto" && Espresso.Item.Breadcrumb != "none" && String.IsNullOrEmpty( Espresso.Item.Breadcrumb ) == false ) 628 { 629 eBreadcrumbClasslist += string.Format( " e-breadcrumb-{0}", Espresso.Item.Breadcrumb ); 630 } 631 string navigationHtmlBreadcrumb = RenderNavigation( new 632 { 633 id = "dwnav-breadcrumb", 634 template = "breadcrumb.xslt", 635 startlevel = 1, 636 endlevel = 10, 637 expandmode = "pathonly" 638 } ); 639 } 640 641 @if ( string.IsNullOrEmpty( navigationHtmlBreadcrumb ) == false && Espresso.Item.Breadcrumb != "none" && string.IsNullOrEmpty( Espresso.Item.Breadcrumb ) == false ) 642 { 643 <section class="e-section @eBreadcrumbClasslist"> 644 <div class="container-fluid"> 645 <div class="row"> 646 <div class="col-12"> 647 <div class="row"> 648 649 <div class="col-12"> 650 <nav class="e-breadcrumb-container"> 651 <ol class="breadcrumb nav text-muted"> 652 <li class="breadcrumb-item m-0 p-0"> 653 <a class="arrow-left breadcrumb-back-link js-e-back-link px-0" href="/">@Translate( "Breadcrumb - Back link", "Back" )</a> 654 <span class="breadcrumb-prefix-text"> 655 @Translate( "Breadcrumb - Prefix - Text", "You are here:" ) 656 </span> 657 <a href="/"> 658 @ServiceLocator.Current.GetPageService().GetFirstPageForArea( GetInteger( "DwAreaID" ) ).MenuText 659 </a> 660 </li> 661 @navigationHtmlBreadcrumb 662 </ol> 663 </nav> 664 </div> 665 666 </div> 667 </div> 668 </div> 669 </div> 670 </section> 671 } 672 673 674 <article id="dwcontentmain" class="e-content-main @Espresso.ContentArea.ClassList"> 675 @{ 676 string NavigationLocalHorizontalClassList = "e-nav-local e-nav-local-horizontal js-e-nav-local-horizontal"; 677 string NavigationLocalHorizontalContainerClassList = "e-nav-local-container"; 678 if( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "horizontal" ) { 679 NavigationLocalHorizontalClassList += " " + Espresso.Item.NavigationLocalCustomClasses; 680 if( Espresso.Item.NavigationLocalSticky == "True" ) { 681 NavigationLocalHorizontalClassList += " is-sticky"; 682 } 683 if( Espresso.Item.NavigationLocalAbsolute == "True" ) { 684 NavigationLocalHorizontalClassList += " is-absolute"; 685 } 686 else{ 687 if( Espresso.Item.NavigationLocalMarginTop != "0" && Espresso.Item.NavigationLocalMarginTop != "" ) { 688 NavigationLocalHorizontalClassList += " mt-" + Espresso.Item.NavigationLocalMarginTop; 689 } 690 if( Espresso.Item.NavigationLocalMarginBottom != "0" && Espresso.Item.NavigationLocalMarginBottom != "" ) { 691 NavigationLocalHorizontalClassList += " mb-" + Espresso.Item.NavigationLocalMarginBottom; 692 } 693 } 694 } 695 } 696 @if( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "horizontal" ) { 697 <section class="e-section @NavigationLocalHorizontalClassList"> 698 <div class="container-fluid"> 699 <div class="row"> 700 <div class="col-12"> 701 <div class="row"> 702 703 <div class="col-12"> 704 <nav id="dwnav-local-@Espresso.DynamicwebPage.ID" class="@NavigationLocalHorizontalContainerClassList"> 705 <ul class="nav justify-content-start"> 706 @if( Espresso.Item.NavigationLocalHeading != "" ){ 707 <li class="e-nav-local-heading"><h2>@Espresso.Item.NavigationLocalHeading</h2></li> 708 } 709 @RenderNavigation( new { 710 id = "dwnav-local-" + Espresso.DynamicwebPage.ID, 711 parentid = string.IsNullOrEmpty( Espresso.Item.NavigationLocalParentPage ) == false ? Espresso.Item.NavigationLocalParentPage : Espresso.DynamicwebPage.ID, 712 template = string.IsNullOrEmpty( Espresso.Item.NavigationLocalTemplate ) == false ? Espresso.Item.NavigationLocalTemplate : "local-" + Espresso.Item.NavigationLocalLayout + ".xslt", 713 startlevel = Espresso.Item.NavigationLocalLevelStart, 714 endlevel = Espresso.Item.NavigationLocalLevelEnd, 715 expandmode = Espresso.Item.NavigationLocalPageTreeExpand == "True" ? "all" : "path", 716 } ) 717 </ul> 718 </nav> 719 </div> 720 721 </div> 722 </div> 723 </div> 724 </div> 725 </section> 726 } 727 728 729 @{ 730 string NavigationLocalVerticalClassList = "e-nav-local e-nav-local-vertical js-e-nav-local-vertical"; 731 string NavigationLocalVerticalContainerClassList = "e-nav-local-container"; 732 string NavigationLocalVerticalTemplate = "local-" + Espresso.Item.NavigationLocalLayout + ".xslt"; 733 if ( string.IsNullOrEmpty( Espresso.Item.NavigationLocalTemplate ) == false && Path.GetExtension( Espresso.Item.NavigationLocalTemplate ) == ".xslt" ) 734 { 735 NavigationLocalVerticalTemplate = Path.GetFileName( Espresso.Item.NavigationLocalTemplate ); 736 } 737 738 if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "vertical" ) 739 { 740 NavigationLocalVerticalClassList += " " + Espresso.Item.NavigationLocalCustomClasses; 741 //NavigationLocalVerticalClassList += " col-3"; 742 743 if ( Espresso.Item.NavigationLocalMarginTop != "0" && Espresso.Item.NavigationLocalMarginTop != "" ) 744 { 745 NavigationLocalVerticalClassList += " mt-" + Espresso.Item.NavigationLocalMarginTop; 746 } 747 if ( Espresso.Item.NavigationLocalMarginBottom != "0" && Espresso.Item.NavigationLocalMarginBottom != "" ) 748 { 749 NavigationLocalVerticalClassList += " mb-" + Espresso.Item.NavigationLocalMarginBottom; 750 } 751 752 if ( Espresso.Item.NavigationLocalSticky == "True" ) 753 { 754 NavigationLocalVerticalClassList += " is-sticky"; 755 } 756 757 if ( Espresso.Item.NavigationLocalAbsolute == "True" ) 758 { 759 NavigationLocalVerticalClassList += " is-absolute"; 760 } 761 else 762 { 763 Espresso.ContentSection.ClassList.Clear(); 764 Espresso.ContentSection.ClassList.AddClasses( "wtf col-12 col-lg-9 ml-auto" ); 765 } 766 } 767 } 768 769 @if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "vertical" ) 770 { 771 <section class="e-section @NavigationLocalVerticalClassList"> 772 <div class="container-fluid"> 773 <div class="row"> 774 <div class="col-12"> 775 <div class="row"> 776 777 <div class="col-3"> 778 <nav id="dwnav-local-@Espresso.DynamicwebPage.ID" class="@NavigationLocalVerticalContainerClassList"> 779 <ul class="flex-column nav"> 780 @if ( Espresso.Item.NavigationLocalHeading != "" ) 781 { 782 <li class="e-nav-local-heading"> 783 <h2>@Espresso.Item.NavigationLocalHeading</h2> 784 </li> 785 } 786 @RenderNavigation( new 787 { 788 id = "dwnav-local-" + Espresso.DynamicwebPage.ID, 789 parentid = string.IsNullOrEmpty( Espresso.Item.NavigationLocalParentPage ) == false ? Espresso.Item.NavigationLocalParentPage : Espresso.DynamicwebPage.ID, 790 template = NavigationLocalVerticalTemplate, 791 startlevel = Espresso.Item.NavigationLocalLevelStart, 792 endlevel = Espresso.Item.NavigationLocalLevelEnd, 793 expandmode = Espresso.Item.NavigationLocalPageTreeExpand == "True" ? "all" : "path", 794 } ) 795 </ul> 796 </nav> 797 </div> 798 799 </div> 800 </div> 801 </div> 802 </div> 803 </section> 804 } 805 806 807 @sectionStart() 808 @GetValue("DwContent(dwcontentmain)") 809 @sectionEnd() 810 </article> 811 </main> 812 @using System.Globalization @using Dynamicweb.Frontend @{ string FooterContentClassList = "e-footer-content e-section"; if( Espresso.Item.ContentAnimate == "True" ){ @* FooterContentClassList += " js-e-scroll-reveal"; *@ } } @if( Espresso.Item.FooterHide != "True" ){ <footer class="e-footer"> <article class="e-footer-wrapper"> <section class="@FooterContentClassList"> <div class="container-fluid"> <div class="row"> @if( string.IsNullOrEmpty( Espresso.Area.Item.FooterParagraphs ) == false ){ foreach( string paragraphID in Espresso.Area.Item.FooterParagraphs.Split( new char[]{','}, StringSplitOptions.None ) ){ @RenderParagraphContent( int.Parse( paragraphID ) ); } } @if( string.IsNullOrEmpty( GetString("DwNavigation(dwnavutilitiessecondaryfooter)") ) == false ){ <div class="col-12"> <aside class="e-nav-utilities-secondary"> <ul class="nav nav-inline"> @GetValue("DwNavigation(dwnavutilitiessecondaryfooter)") </ul> </aside> </div> } </div> </div> </section> <section class="e-footer-copyright e-section"> <div class="container-fluid"> <div class="row align-items-center"> <div class="col-12 col-sm-7"> <p class="e-copyright"> @Translate("Footer - Copyright - Text", "Copyright &copy;") @GetGlobalValue("Global:Server.Date.Year") @Espresso.Area.Item.CompanyName. @Translate("Footer - All Rights Reserved - Text", "All rights reserved.") </p> </div> <div class="col-12 col-sm-5 text-left text-sm-right"> <p class="website-by-co3"><a href="https://www.co3.dk/pim" target="_blank">Website: Co3</a></p> <p class="pdf-only">@Translate("Footer - PDF created - Text", "PDf created:") @DateTime.Now.ToString( PageView.Current().Area.CultureInfo )</p> </div> </div> </div> </section> </article> <script data-cookieconsent="statistics" type="text/plain"> (function(e,t,o,n,p,r,i){e.visitorGlobalObjectAlias=n;e[e.visitorGlobalObjectAlias]=e[e.visitorGlobalObjectAlias]||function(){(e[e.visitorGlobalObjectAlias].q=e[e.visitorGlobalObjectAlias].q||[]).push(arguments)};e[e.visitorGlobalObjectAlias].l=(new Date).getTime();r=t.createElement("script");r.src=o;r.async=true;i=t.getElementsByTagName("script")[0];i.parentNode.insertBefore(r,i)})(window,document,"https://diffuser-cdn.app-us1.com/diffuser/diffuser.js","vgo"); vgo('setAccount', '92226054'); vgo('setTrackByDefault', true); vgo('process'); </script> </footer> } 813 @if( string.IsNullOrEmpty( GetString("DwContent(dwcontentcta)") ) == false ) { 814 <aside id="dwcontentcta" class="js-e-cta e-cta is-hidden fixed-top"> 815 <section class="e-section"> 816 <div class="container-fluid"> 817 <div class="row no-gutters"> 818 <div class="col-12"> 819 <div class="row no-gutters justify-content-center align-items-center"> 820 @GetValue("DwContent(dwcontentcta)") 821 @* <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> *@ 822 </div> 823 </div> 824 </div> 825 </div> 826 </section> 827 </aside> 828 } 829 830 <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="m-0 js-e-cart-msg-heading modal-title"> <i class="material-icons material-icons-large text-black">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 d-none"> <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="{{imageLarge}}"> </a> </div> <div class="col-8"> <h3 class="mb-0"> <a href="{{url}}" class="text-decoration-none">{{name}}</a> </h3> <p class="mb-0"> <a href="{{url}}" class="text-auto text-decoration-none"> {{{price}}}<br> {{{stock.text}}}<br> {{{stock.delivery}}}<br> </a> </p> </div> </div> </div> {{/each}} </div> </script> </div> </div> <div class="bg-light e-cart-msg-footer modal-footer border-top-0"> <a class="btn btn-secondary mr-1" href="/shop/cart" data-dismiss="modal">@Translate( "eCom Checkout - Continue Shopping - Button","Continue Shopping" )</a> <a class="arrow-right btn btn-success" href="/shop/cart">@Translate( "eCom Checkout - Go to cart - Button","Go to cart" )</a> </div> </div> </div> </div> 831 </div> 832 833 <div class="modal fade e-search js-e-search js-e-search-modal modal-fullscreen" data-backdrop="false" data-keyboard="true" data-focus="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <a class="btn btn-sm btn-secondary js-e-back-link arrow-left" href="/" data-dismiss="modal"> @Translate("Search - Back button", "Back") </a> <div class="e-logo"> <a href="/" class="e-logo-link my-0"> <img src="@logoPrimary" class="e-logo-img e-logo-img-primary"> <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary"> </a> </div> </div> <div class="modal-body"> <div class="container-fluid"> <div class="e-search-form-container"> <div class="row justify-content-center"> <div class="col-12 col-md-10 col-lg-8 col-xl-6 mt-3"> <form action="" class="e-search-form js-e-search-form"> <div class="js-e-search-input-group e-search-input-group is-empty"> <label class="e-search-label" for="e-search-input"><i class="material-icons">search</i></label> @{ string Translate_Search_InputText = Translate("Search - Input Placeholder - Text", "Search"); } <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"> <span class="js-e-search-clear e-search-clear"><i class="material-icons">close</i></span> <button class="e-search-submit btn btn-primary" type="submit"><i class="material-icons">search</i></button> </div> </form> </div> </div> </div> <div class="js-e-search-result-container e-search-result-container"> <div class="row justify-content-center"> <div class="col-12 col-md-10 col-lg-8 col-xl-6"> <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> </div> </div> <div class="row justify-content-center"> <div class="col-12 col-xl-10"> <div class="js-e-search-result-products e-search-result-products is-empty mb-4"> <script id="js-e-handlebars-tmpl-search-result-item-product" type="text/x-handlebars-template"> <div class="e-products"> <div class="row"> {{#loop products}} <div class="col-6 col-sm-6 col-md-4 col-lg-4"> <div class="e-products-item"> <div class="e-products-item-container"> <div class="e-products-item-image-container"> <a class="e-products-item-image-wrapper" href="{{url}}"> <img src="{{imageMedium}}" alt="" class="e-products-item-image j-img-productcategory-{{category}}"> </a> </div> <div class="e-products-item-text-container text-center small"> <h3 class="e-products-item-name mb-0"><a href="{{url}}">{{name}}</a></h3> {{#if floorCategoryName}} <p>{{{floorCategoryName}}}</p> {{/if}} {{#if descriptionShortExtra01}} <p class="e-products-item-text mb-0 small"> <a href="{{url}}"> {{descriptionShortExtra01}} </a> </p> {{/if}} @* <p class="e-products-item-text mb-0 small"> *@ @* <span class="e-products-item-price"> *@ @* <a href="{{url}}"> *@ @* {{{price}}} *@ @* </a> *@ @* </span> *@ @* </p> *@ </div> </div> </div> </div> {{/loop}} </div> <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> </div> </script> </div> </div> </div> <div class="row justify-content-center"> <div class="col-12 col-md-10 col-lg-8 col-xl-6"> <div class="js-e-search-result-pages e-search-result-pages is-empty mb-3"> <script id="js-e-handlebars-tmpl-search-result-item-page" type="text/x-handlebars-template"> <div class="row"> {{#loop pages}} <div class="col-12"> <p class="mb-0"><a href="{{{url}}}" class="text-bold">{{{title}}}</a></p> <p class="mb-0 small text-truncate"> <a href="{{{url}}}" class="text-auto text-muted text-decoration-none"><span class="d-none d-sm-inline">@GetGlobalValue( "Global:Request.Host" )</span>{{{url}}}</a></p> <p class="small">{{{text}}}...</p> </div> {{/loop}} </div> </script> </div> </div> </div> <div class="js-e-search-loading-overlay e-loading-overlay e-search-loading-overlay"> <div class="e-loading-spinner"></div> </div> </div> </div> </div> </div> </div> </div> 834 @if( Espresso.Area.Item.BackToTopLink == "True" ){ 835 <a href="#top" class="e-back-to-top js-e-back-to-top"><i class="material-icons">keyboard_arrow_up</i></a> 836 } 837 838 839 840 841 <div class="d-none flex-column"> 842 <div class="bg-primary"> 843 <br> 844 </div> 845 <div class="bg-secondary"> 846 <br> 847 </div> 848 <div class="bg-tertiary"> 849 <br> 850 </div> 851 </div> 852 <script data-cookieconsent="ignore" async="" src="/Files/Templates/Designs/junckers/_assets/_dist/js/default.js?v=1.17.19"></script> 853 854 <a class="js-junckers-documentation-link junckers-documentation-pdf-link js-junckers-pdf-link pdf-hidden" href="#" target="_blank" data-product-id="@pdfProductId" data-page-id="@pdfPageId"> 855 <i class="material-icons">picture_as_pdf</i> 856 </a> 857 </body> 858 @GetValue( "CopyRightNotice" ) 859 </html> 860