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_dd081c1cf8384741a9b9ed0089e5e3ca.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 @GetValue("Stylesheets") 272 @GetValue("Javascripts") 273 </head> 274 275 @{ 276 Item globalPageItem = null; 277 278 if ( string.IsNullOrWhiteSpace( Espresso.DynamicwebPage.ShortCut ) == false ) 279 { 280 globalPageItem = Co3.Junckers.Frontend.Services.EnglishLanguagesPageItemService.Instance.GetPageItem( Espresso.DynamicwebPage.ShortCut ); 281 } 282 283 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" ) ); 284 285 string junckersHasDocumentationPdfLink = string.Empty; 286 287 if ( globalAreaLang == "en" && globalPageItem != null ) 288 { 289 junckersHasDocumentationPdfLink = globalPageItem[ "DocumentationPdf" ] != null ? globalPageItem[ "DocumentationPdf" ].ToString() : string.Empty; 290 } 291 else 292 { 293 junckersHasDocumentationPdfLink = string.IsNullOrEmpty( GetString( "Item.DocumentationPdf.Value" ) ) == false ? GetString( "Item.DocumentationPdf.Value" ) : string.Empty; 294 } 295 } 296 297 <body class="@Espresso.Item.CustomClasses @Espresso.Area.OptimizedLoading" data-pdf="@junckersHasDocumentationPdfLink" data-cookiebot="@isUsingCookiebot"> 298 299 @SnippetStart( "PasswordProtectedPage" ) 300 @{ 301 string pwProtectedPageContent = ""; 302 } 303 @foreach ( LoopItem pwProtectedPage in GetLoop( "Item.Area.PasswordProtectedPage" ) ) 304 { 305 string pwProtectedPagePageID = pwProtectedPage.GetString( "Item.Area.PasswordProtectedPage.PasswordProtectedPage_PageID" ); 306 307 if ( globalPageID == pwProtectedPagePageID ) 308 { 309 pwProtectedPageContent = pwProtectedPage.GetString( "Item.Area.PasswordProtectedPage.PasswordProtectedPage_Content" ); 310 @pwProtectedPageContent 311 } 312 } 313 @if ( pwProtectedPageContent == "" ) 314 { 315 <h1>Login</h1> 316 <p class="lead">@Translate( "Junckers_PasswordPage_Text", "Input password" )</p> 317 } 318 @SnippetEnd( "PasswordProtectedPage" ) 319 320 @if ( string.IsNullOrEmpty( Espresso.Area.GoogleTagManagerID ) == false && Espresso.Area.GoogleTagManagerID != "GTM-XXXX" ) 321 { 322 <!-- Google Tag Manager (noscript) --> 323 <noscript> 324 <iframe src="https://www.googletagmanager.com/ns.html?id=@Espresso.Area.GoogleTagManagerID" height="0" width="0" style="display: none; visibility: hidden"></iframe> 325 </noscript> 326 <!-- End Google Tag Manager (noscript) --> 327 } 328 @using Co3.Espresso.Website.Models.FrontEnd 329 @{ 330 Espresso.Canvas.ClassList.AddClasses( "js-e-canvas is-loading" ); 331 if ( Espresso.Item.CanvasFullscreen == "True" ) 332 { 333 Espresso.Canvas.ClassList.AddClasses( "is-fullscreen" ); 334 } 335 if ( Espresso.Item.DisablePDFHeader != null && Espresso.Item.DisablePDFHeader == "True" ) 336 { 337 Espresso.ContentArea.ClassList.AddClasses( "pdf-header-disabled" ); 338 } 339 } 340 341 342 343 @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> } 344 345 346 347 <div class="e-loading-overlay e-page-loading-overlay is-loading js-e-page-loading-overlay"> 348 <div class="e-loading-spinner"></div> 349 </div> 350 351 352 353 <div class="@Espresso.Canvas.ClassList"> 354 @{ 355 ClassList headerClassList = new ClassList(); 356 headerClassList.AddClasses( "e-header js-e-header is-sticky" ); 357 if ( Espresso.Item.HeaderTransparent == "True" ) 358 { 359 headerClassList.AddClasses( "is-transparent" ); 360 } 361 362 ClassList logoClassList = new ClassList(); 363 logoClassList.AddClasses( "e-logo" ); 364 365 string backButtonLink = Espresso.Item.BackButtonLink; 366 ClassList backButtonClassList = new ClassList(); 367 ClassList backButtonIconClassList = new ClassList(); 368 if ( Espresso.Item.BackButton == "True" ) 369 { 370 backButtonClassList.AddClasses( "btn btn-sm btn-secondary my-1 align-self-center" ); 371 if ( backButtonLink == "" || backButtonLink == "/" ) 372 { 373 backButtonLink = "/"; 374 backButtonClassList.AddClasses( "js-e-back-link" ); 375 } 376 backButtonIconClassList.AddClasses( "material-icons" ); 377 if ( Espresso.Item.BackButtonPosition == "right" ) 378 { 379 backButtonClassList.AddClasses( "order-last" ); 380 logoClassList.AddClasses( "order-first" ); 381 } 382 else 383 { 384 backButtonClassList.AddClasses( "order-first" ); 385 logoClassList.AddClasses( "mr-0 ml-auto order-last" ); 386 } 387 if ( Espresso.Item.BackButtonIcon == "arrow_back" ) 388 { 389 backButtonClassList.AddClasses( "arrow-left" ); 390 backButtonIconClassList.AddClasses( "d-none" ); 391 } 392 else if ( Espresso.Item.BackButtonIcon == "arrow_forward" ) 393 { 394 backButtonClassList.AddClasses( "arrow-right" ); 395 backButtonIconClassList.AddClasses( "d-none" ); 396 } 397 } 398 399 string logoPrimary = Espresso.Area.Item.LogoPrimary; 400 string logoSecondary = Espresso.Area.Item.LogoSecondary; 401 if ( string.IsNullOrEmpty( logoSecondary ) == true ) 402 { 403 logoSecondary = logoPrimary; 404 } 405 string tagline = Espresso.Area.Item.Tagline; 406 Dictionary< string, string > navigationHtml = new Dictionary< string, string > 407 { 408 { 409 "global", RenderNavigation( new 410 { 411 id = "dwnav-global", 412 template = "global.xslt", 413 startlevel = 1, 414 endlevel = 8, 415 expandmode = "all" 416 } ) 417 }, 418 { 419 "utilities-primary", RenderNavigation( new 420 { 421 id = "dwnav-utilities-primary", 422 template = "utilities.xslt", 423 startlevel = 4, 424 endlevel = 5, 425 expandmode = "all", 426 parenttag = "utilities-primary" 427 } ) 428 }, 429 { 430 "utilities-secondary", RenderNavigation( new 431 { 432 id = "dwnav-utilities-secondary", 433 template = "utilities.xslt", 434 startlevel = 4, 435 endlevel = 4, 436 expandmode = "all", 437 parenttag = "utilities-secondary" 438 } ) 439 }, 440 { 441 "hamburger-header", RenderNavigation( new 442 { 443 id = "dwnav-hamburger-header", 444 template = "utilities.xslt", 445 startlevel = 4, 446 endlevel = 4, 447 expandmode = "all", 448 parenttag = "hamburger-header" 449 } ) 450 }, 451 { 452 "hamburger-aside", RenderNavigation( new 453 { 454 id = "dwnav-hamburger-aside", 455 template = "utilities.xslt", 456 startlevel = 4, 457 endlevel = 4, 458 expandmode = "all", 459 parenttag = "hamburger-aside" 460 } ) 461 } 462 }; 463 } 464 @if ( Espresso.Item.HeaderHide != "True" ) 465 { 466 <header class="@headerClassList" data-autohide="true"> 467 468 <div class="e-header-hamburger"> 469 @sectionStart( "e-header-section e-section", "col-12" ) 470 <div class="col-12 e-header-section-content"> 471 <div class="@logoClassList"> 472 <a class="e-logo-link" href="/"> 473 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary"> 474 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary"> 475 @if ( string.IsNullOrEmpty( tagline ) == false ) 476 { 477 <p class="e-logo-tagline">@tagline</p> 478 } 479 </a> 480 </div> 481 @if ( Espresso.Item.NavigationHide != "True" ) 482 { 483 <section class="e-nav-hamburger-header"> 484 <ul class="nav"> 485 @navigationHtml[ "hamburger-header" ] 486 @* TODO: Move to xslt *@ 487 <li class="e-nav-item-hamburger-open nav-item"> 488 <a class="nav-link" data-target=".modal.e-nav" data-toggle="modal" href="#"> 489 <i class="e-nav-pageicon material-icons">menu</i> 490 <span class="e-nav-pagename">@Translate( "Header - Hamburger menu open - Button", "Menu" )</span> 491 </a> 492 </li> 493 </ul> 494 </section> 495 } 496 @if ( Espresso.Item.BackButton == "True" ) 497 { 498 <a class="@backButtonClassList" href="@backButtonLink"> 499 @if ( Espresso.Item.BackButtonIcon != "" ) 500 { 501 <i class="@backButtonIconClassList">@Espresso.Item.BackButtonIcon</i> 502 } 503 @Espresso.Item.BackButtonText 504 </a> 505 } 506 </div> 507 @sectionEnd() 508 </div> 509 <div class="e-nav js-e-nav modal p-0" data-backdrop="false"> 510 <div class="e-nav-container navbar"> 511 512 @sectionStart( "e-header-section e-section", "col-12" ) 513 <div class="col-12 e-header-section-content"> 514 <div class="@logoClassList"> 515 <a class="e-logo-link" href="/"> 516 <img src="@logoPrimary" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName"> 517 <img src="@logoSecondary" class="e-logo-img e-logo-img-secondary"> 518 @if ( string.IsNullOrEmpty( tagline ) == false ) 519 { 520 <p class="e-logo-tagline">@tagline</p> 521 } 522 </a> 523 </div> 524 525 @if ( Espresso.Item.NavigationHide != "True" ) 526 { 527 <nav class="e-nav-global js-e-nav-global"> 528 <ul class="nav"> 529 @navigationHtml[ "global" ] 530 </ul> 531 </nav> 532 533 <div class="e-nav-item-hamburger-close"> 534 <a class="nav-link" data-target=".modal.e-nav" data-toggle="modal" href="#"> 535 <i class="e-nav-pageicon material-icons">close</i> 536 <span class="e-nav-pagename">@Translate( "Header - Hamburger menu close - Button", "Close" )</span> 537 </a> 538 </div> 539 540 if ( string.IsNullOrEmpty( navigationHtml[ "utilities-primary" ] ) == false ) 541 { 542 @:</div> 543 @sectionEnd() 544 @sectionStart( "bg-tertiary e-header-section e-section", "col-12" ) 545 @:<div class="col-12 e-header-section-content"> 546 547 <nav class="e-nav-utilities-primary js-e-nav-utilities-primary"> 548 <ul class="nav"> 549 @navigationHtml[ "utilities-primary" ] 550 </ul> 551 </nav> 552 } 553 if ( string.IsNullOrEmpty( navigationHtml[ "utilities-secondary" ] ) == false ) 554 { 555 <nav class="e-nav-utilities-secondary"> 556 <ul class="nav"> 557 @navigationHtml[ "utilities-secondary" ] 558 </ul> 559 </nav> 560 } 561 if ( string.IsNullOrEmpty( navigationHtml[ "hamburger-aside" ] ) == false ) 562 { 563 <nav class="e-nav-hamburger-aside"> 564 <ul class="nav"> 565 @navigationHtml[ "hamburger-aside" ] 566 </ul> 567 </nav> 568 } 569 } 570 @if ( Espresso.Item.BackButton == "True" ) 571 { 572 <a class="@backButtonClassList" href="@backButtonLink"> 573 @if ( Espresso.Item.BackButtonIcon != "" ) 574 { 575 <i class="@backButtonIconClassList">@Espresso.Item.BackButtonIcon</i> 576 } 577 @Espresso.Item.BackButtonText 578 </a> 579 } 580 </div> 581 @sectionEnd() 582 583 </div> 584 </div> 585 586 </header> 587 } 588 589 590 591 @using Dynamicweb.Security.UserManagement 592 @{ 593 User currentUser = User.get_Current( PagePermissionLevels.Frontend ); 594 if ( currentUser != null ) 595 { 596 User currentSecondaryUser = currentUser.CurrentSecondaryUser; 597 if ( currentSecondaryUser != null ) 598 { 599 @sectionStart( "e-section bg-warning", "col-12" ) 600 <div class="align-self-center col-12 col-lg-9 col-md-8 my-1"> 601 <p class="line-height-sm mb-0 text-center text-md-left"> 602 <i class="material-icons material-icons-2x">supervisor_account</i> You are currently impersonating this user: <strong>@currentUser.Name</strong> 603 </p> 604 </div> 605 <div class="align-self-center col-12 col-lg-3 col-md-4 my-1"> 606 <form class="mb-0 small text-center text-md-right" method="post" action="@Espresso.Area.Item.ExtranetImpersonationPage"> 607 <button class="btn btn-primary" name="DwExtranetRemoveSecondaryUser" type="submit">Stop impersonation</button> 608 </form> 609 </div> 610 @sectionEnd() 611 } 612 } 613 } 614 615 616 <main class="e-content"> 617 @using Dynamicweb.Content; 618 @using Dynamicweb.Extensibility; 619 @{ 620 string eBreadcrumbClasslist = "e-breadcrumb js-e-breadcrumb d-none d-lg-block"; 621 if ( Espresso.Item.Breadcrumb != "auto" && Espresso.Item.Breadcrumb != "none" && String.IsNullOrEmpty( Espresso.Item.Breadcrumb ) == false ) 622 { 623 eBreadcrumbClasslist += string.Format( " e-breadcrumb-{0}", Espresso.Item.Breadcrumb ); 624 } 625 string navigationHtmlBreadcrumb = RenderNavigation( new 626 { 627 id = "dwnav-breadcrumb", 628 template = "breadcrumb.xslt", 629 startlevel = 1, 630 endlevel = 10, 631 expandmode = "pathonly" 632 } ); 633 } 634 635 @if ( string.IsNullOrEmpty( navigationHtmlBreadcrumb ) == false && Espresso.Item.Breadcrumb != "none" && string.IsNullOrEmpty( Espresso.Item.Breadcrumb ) == false ) 636 { 637 <section class="e-section @eBreadcrumbClasslist"> 638 <div class="container-fluid"> 639 <div class="row"> 640 <div class="col-12"> 641 <div class="row"> 642 643 <div class="col-12"> 644 <nav class="e-breadcrumb-container"> 645 <ol class="breadcrumb nav text-muted"> 646 <li class="breadcrumb-item m-0 p-0"> 647 <a class="arrow-left breadcrumb-back-link js-e-back-link px-0" href="/">@Translate( "Breadcrumb - Back link", "Back" )</a> 648 <span class="breadcrumb-prefix-text"> 649 @Translate( "Breadcrumb - Prefix - Text", "You are here:" ) 650 </span> 651 <a href="/"> 652 @ServiceLocator.Current.GetPageService().GetFirstPageForArea( GetInteger( "DwAreaID" ) ).MenuText 653 </a> 654 </li> 655 @navigationHtmlBreadcrumb 656 </ol> 657 </nav> 658 </div> 659 660 </div> 661 </div> 662 </div> 663 </div> 664 </section> 665 } 666 667 668 <article id="dwcontentmain" class="e-content-main @Espresso.ContentArea.ClassList"> 669 @{ 670 string NavigationLocalHorizontalClassList = "e-nav-local e-nav-local-horizontal js-e-nav-local-horizontal"; 671 string NavigationLocalHorizontalContainerClassList = "e-nav-local-container"; 672 if( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "horizontal" ) { 673 NavigationLocalHorizontalClassList += " " + Espresso.Item.NavigationLocalCustomClasses; 674 if( Espresso.Item.NavigationLocalSticky == "True" ) { 675 NavigationLocalHorizontalClassList += " is-sticky"; 676 } 677 if( Espresso.Item.NavigationLocalAbsolute == "True" ) { 678 NavigationLocalHorizontalClassList += " is-absolute"; 679 } 680 else{ 681 if( Espresso.Item.NavigationLocalMarginTop != "0" && Espresso.Item.NavigationLocalMarginTop != "" ) { 682 NavigationLocalHorizontalClassList += " mt-" + Espresso.Item.NavigationLocalMarginTop; 683 } 684 if( Espresso.Item.NavigationLocalMarginBottom != "0" && Espresso.Item.NavigationLocalMarginBottom != "" ) { 685 NavigationLocalHorizontalClassList += " mb-" + Espresso.Item.NavigationLocalMarginBottom; 686 } 687 } 688 } 689 } 690 @if( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "horizontal" ) { 691 <section class="e-section @NavigationLocalHorizontalClassList"> 692 <div class="container-fluid"> 693 <div class="row"> 694 <div class="col-12"> 695 <div class="row"> 696 697 <div class="col-12"> 698 <nav id="dwnav-local-@Espresso.DynamicwebPage.ID" class="@NavigationLocalHorizontalContainerClassList"> 699 <ul class="nav justify-content-start"> 700 @if( Espresso.Item.NavigationLocalHeading != "" ){ 701 <li class="e-nav-local-heading"><h2>@Espresso.Item.NavigationLocalHeading</h2></li> 702 } 703 @RenderNavigation( new { 704 id = "dwnav-local-" + Espresso.DynamicwebPage.ID, 705 parentid = string.IsNullOrEmpty( Espresso.Item.NavigationLocalParentPage ) == false ? Espresso.Item.NavigationLocalParentPage : Espresso.DynamicwebPage.ID, 706 template = string.IsNullOrEmpty( Espresso.Item.NavigationLocalTemplate ) == false ? Espresso.Item.NavigationLocalTemplate : "local-" + Espresso.Item.NavigationLocalLayout + ".xslt", 707 startlevel = Espresso.Item.NavigationLocalLevelStart, 708 endlevel = Espresso.Item.NavigationLocalLevelEnd, 709 expandmode = Espresso.Item.NavigationLocalPageTreeExpand == "True" ? "all" : "path", 710 } ) 711 </ul> 712 </nav> 713 </div> 714 715 </div> 716 </div> 717 </div> 718 </div> 719 </section> 720 } 721 722 723 @{ 724 string NavigationLocalVerticalClassList = "e-nav-local e-nav-local-vertical js-e-nav-local-vertical"; 725 string NavigationLocalVerticalContainerClassList = "e-nav-local-container"; 726 string NavigationLocalVerticalTemplate = "local-" + Espresso.Item.NavigationLocalLayout + ".xslt"; 727 if ( string.IsNullOrEmpty( Espresso.Item.NavigationLocalTemplate ) == false && Path.GetExtension( Espresso.Item.NavigationLocalTemplate ) == ".xslt" ) 728 { 729 NavigationLocalVerticalTemplate = Path.GetFileName( Espresso.Item.NavigationLocalTemplate ); 730 } 731 732 if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "vertical" ) 733 { 734 NavigationLocalVerticalClassList += " " + Espresso.Item.NavigationLocalCustomClasses; 735 //NavigationLocalVerticalClassList += " col-3"; 736 737 if ( Espresso.Item.NavigationLocalMarginTop != "0" && Espresso.Item.NavigationLocalMarginTop != "" ) 738 { 739 NavigationLocalVerticalClassList += " mt-" + Espresso.Item.NavigationLocalMarginTop; 740 } 741 if ( Espresso.Item.NavigationLocalMarginBottom != "0" && Espresso.Item.NavigationLocalMarginBottom != "" ) 742 { 743 NavigationLocalVerticalClassList += " mb-" + Espresso.Item.NavigationLocalMarginBottom; 744 } 745 746 if ( Espresso.Item.NavigationLocalSticky == "True" ) 747 { 748 NavigationLocalVerticalClassList += " is-sticky"; 749 } 750 751 if ( Espresso.Item.NavigationLocalAbsolute == "True" ) 752 { 753 NavigationLocalVerticalClassList += " is-absolute"; 754 } 755 else 756 { 757 Espresso.ContentSection.ClassList.Clear(); 758 Espresso.ContentSection.ClassList.AddClasses( "wtf col-12 col-lg-9 ml-auto" ); 759 } 760 } 761 } 762 763 @if ( Espresso.Item.NavigationLocalShow == "True" && Espresso.Item.NavigationLocalLayout == "vertical" ) 764 { 765 <section class="e-section @NavigationLocalVerticalClassList"> 766 <div class="container-fluid"> 767 <div class="row"> 768 <div class="col-12"> 769 <div class="row"> 770 771 <div class="col-3"> 772 <nav id="dwnav-local-@Espresso.DynamicwebPage.ID" class="@NavigationLocalVerticalContainerClassList"> 773 <ul class="flex-column nav"> 774 @if ( Espresso.Item.NavigationLocalHeading != "" ) 775 { 776 <li class="e-nav-local-heading"> 777 <h2>@Espresso.Item.NavigationLocalHeading</h2> 778 </li> 779 } 780 @RenderNavigation( new 781 { 782 id = "dwnav-local-" + Espresso.DynamicwebPage.ID, 783 parentid = string.IsNullOrEmpty( Espresso.Item.NavigationLocalParentPage ) == false ? Espresso.Item.NavigationLocalParentPage : Espresso.DynamicwebPage.ID, 784 template = NavigationLocalVerticalTemplate, 785 startlevel = Espresso.Item.NavigationLocalLevelStart, 786 endlevel = Espresso.Item.NavigationLocalLevelEnd, 787 expandmode = Espresso.Item.NavigationLocalPageTreeExpand == "True" ? "all" : "path", 788 } ) 789 </ul> 790 </nav> 791 </div> 792 793 </div> 794 </div> 795 </div> 796 </div> 797 </section> 798 } 799 800 801 @sectionStart() 802 @GetValue("DwContent(dwcontentmain)") 803 @sectionEnd() 804 </article> 805 </main> 806 @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> } 807 @if( string.IsNullOrEmpty( GetString("DwContent(dwcontentcta)") ) == false ) { 808 <aside id="dwcontentcta" class="js-e-cta e-cta is-hidden fixed-top"> 809 <section class="e-section"> 810 <div class="container-fluid"> 811 <div class="row no-gutters"> 812 <div class="col-12"> 813 <div class="row no-gutters justify-content-center align-items-center"> 814 @GetValue("DwContent(dwcontentcta)") 815 @* <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> *@ 816 </div> 817 </div> 818 </div> 819 </div> 820 </section> 821 </aside> 822 } 823 824 <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> 825 </div> 826 827 <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> 828 @if( Espresso.Area.Item.BackToTopLink == "True" ){ 829 <a href="#top" class="e-back-to-top js-e-back-to-top"><i class="material-icons">keyboard_arrow_up</i></a> 830 } 831 832 833 834 835 <div class="d-none flex-column"> 836 <div class="bg-primary"> 837 <br> 838 </div> 839 <div class="bg-secondary"> 840 <br> 841 </div> 842 <div class="bg-tertiary"> 843 <br> 844 </div> 845 </div> 846 <script data-cookieconsent="ignore" async="" src="/Files/Templates/Designs/junckers/_assets/_dist/js/default.js?v=1.17.18"></script> 847 848 <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"> 849 <i class="material-icons">picture_as_pdf</i> 850 </a> 851 </body> 852 @GetValue( "CopyRightNotice" ) 853 </html> 854