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 ©")
@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