Error executing template "Designs/Rapido/_parsed/NZShopPage.parsed.cshtml"
System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
at System.Runtime.InteropServices.Marshal.AllocHGlobal(IntPtr cb)
at System.Reflection.Internal.NativeHeapMemoryBlock.DisposableData..ctor(Int32 size)
at System.Reflection.Internal.StreamMemoryBlockProvider.ReadMemoryBlockNoLock(Stream stream, Boolean isFileStream, Int64 start, Int32 size)
at System.Reflection.Internal.StreamMemoryBlockProvider.GetMemoryBlockImpl(Int32 start, Int32 size)
at System.Reflection.Internal.MemoryBlockProvider.GetMemoryBlock(Int32 start, Int32 size)
at System.Reflection.PortableExecutable.PEReader.GetMetadataBlock()
at System.Reflection.Metadata.PEReaderExtensions.GetMetadataReader(PEReader peReader, MetadataReaderOptions options, MetadataStringDecoder utf8Decoder)
at Microsoft.CodeAnalysis.PEModule.InitializeMetadataReader()
at Microsoft.CodeAnalysis.PEModule.get_MetadataReader()
at Microsoft.CodeAnalysis.PEAssembly..ctor(AssemblyMetadata owner, ImmutableArray`1 modules)
at Microsoft.CodeAnalysis.AssemblyMetadata.GetOrCreateData()
at Microsoft.CodeAnalysis.AssemblyMetadata.GetModules()
at Microsoft.CodeAnalysis.AssemblyMetadata.IsValidAssembly()
at Microsoft.CodeAnalysis.CommonReferenceManager`2.GetMetadata(PortableExecutableReference peReference, CommonMessageProvider messageProvider, Location location, DiagnosticBag diagnostics)
at Microsoft.CodeAnalysis.CommonReferenceManager`2.ResolveMetadataReferences(TCompilation compilation, Dictionary`2 assemblyReferencesBySimpleName, ImmutableArray`1& references, IDictionary`2& boundReferenceDirectiveMap, ImmutableArray`1& boundReferenceDirectives, ImmutableArray`1& assemblies, ImmutableArray`1& modules, DiagnosticBag diagnostics)
at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.ReferenceManager.CreateAndSetSourceAssemblyFullBind(CSharpCompilation compilation)
at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.ReferenceManager.CreateSourceAssemblyForCompilation(CSharpCompilation compilation)
at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetRuntimeMetadataVersion(EmitOptions emitOptions)
at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetRuntimeMetadataVersion(EmitOptions emitOptions, DiagnosticBag diagnostics)
at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CreateModuleBuilder(EmitOptions emitOptions, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, IEnumerable`1 manifestResources, CompilationTestData testData, DiagnosticBag diagnostics, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Compilation.CheckOptionsAndCreateModuleBuilder(DiagnosticBag diagnostics, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, CompilationTestData testData, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream metadataPEStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, CompilationTestData testData, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, Stream metadataPEStream, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, CancellationToken cancellationToken)
at RazorEngine.Roslyn.CSharp.RoslynCompilerServiceBase.CompileType(TypeContext context)
at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType)
at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType)
at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType)
at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.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 RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
2 @using Dynamicweb.Frontend.Devices
3 @using Dynamicweb.Extensibility
4 @using System.Web.UI
5 @using Dynamicweb.Content
6 @using Dynamicweb.Security
7 @using System
8 @using System.Linq
9 @using System.Web
10 @using System.IO
11 @using Dynamicweb.Security.UserManagement;
12 @{
13 //General settings
14 string favicon = Model.Area.Item.GetFile("LogoFavicon") != null ? Model.Area.Item.GetFile("LogoFavicon").Path : "/Files/Images/favicon.ico";
15 string logo = Model.Area.Item.GetFile("LogoImage") != null ? Model.Area.Item.GetFile("LogoImage").Path : "/Files/Images/logo-dynamicweb.png";
16 string logoAltText = Model.Area.Item.GetString("LogoAltText");
17
18 //Tracking
19 string gatagTrackingId = Model.Area.Item.GetItem("CustomSettings").GetField("GATrackingID").GetString();
20
21 if (Path.GetExtension(logo).ToLower() != ".svg")
22 {
23 logo = "/Admin/Public/GetImage.ashx?height=40&crop=5&Compression=75&image=" + @logo;
24 }
25
26 string searchPlaceholder = Translate("Search products", "Search products");
27 string searchValue = HttpContext.Current.Request.QueryString.Get("Search") != null ? HttpContext.Current.Request.QueryString.Get("Search") : "";
28 string wireframeMode = Model.Area.Item.GetBoolean("WireframeMode").ToString();
29
30 //Font settings
31 string navigationFont = Model.Area.Item.GetItem("NavigationFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+");
32 string mobileNavigationFont = Model.Area.Item.GetItem("MobileNavigationFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+");
33 string headerFont = Model.Area.Item.GetItem("ContentLayoutHeaderFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+");
34 string subHeaderFont = Model.Area.Item.GetItem("ContentLayoutSubheaderFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+");
35 string contentFont = Model.Area.Item.GetItem("ContentLayoutBodyText").GetGoogleFont("FontFamily").Family.Replace(" ", "+");
36 string newStickersFont = Model.Area.Item.GetItem("NewStickersFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+");
37 string customStickersFont = Model.Area.Item.GetItem("CustomStickersFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+");
38 string toolsMenuFont = Model.Area.Item.GetItem("ToolsMenuFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+");
39
40
41 //Page IDs for use in the template
42 int pageId = Model.TopPage.ID;
43 string firstPageId = Model.Area.FirstActivePage.ID.ToString();
44 bool firstPageIdBool = Model.Area.FirstActivePage.ID.Equals("GroupdID");
45 string test = HttpContext.Current.Request.Url.ToString();
46
47 int cartPageId = GetPageIdByNavigationTag("CartPage");
48 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
49 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed");
50 int productsPageId = GetPageIdByNavigationTag("ProductsPage");
51 int productsSearchFeedId = productsPageId;
52 int productGroupsPageId = GetPageIdByNavigationTag("ProductGroupsFeed");
53 int impersonationPageId = GetPageIdByNavigationTag("Impersonation");
54
55 bool stickyMenu = Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet" ? true : Model.Area.Item.GetBoolean("NavigationStickyMenu");
56 string stickyTop = stickyMenu ? "top-container--sticky" : "";
57 string pagePos = stickyMenu ? "js-page-pos" : "";
58 string topLayout = Model.Area.Item.GetList("LayoutTop").SelectedValue;
59 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar");
60 string toolbarText = Model.Area.Item.GetString("ToolbarText");
61 string toolbarIcon = Model.Area.Item.GetFile("ToolbarIcon") != null ? Model.Area.Item.GetFile("ToolbarIcon").Path : "";
62 string toolbarTextSecond = Model.Area.Item.GetString("ToolbarTextSecond");
63 string toolbarIconSecond = Model.Area.Item.GetFile("ToolbarIconSecond") != null ? Model.Area.Item.GetFile("ToolbarIconSecond").Path : "";
64 string toolbarTextThird = Model.Area.Item.GetString("ToolbarTextThird");
65 string toolbarIconThird = Model.Area.Item.GetFile("ToolbarIconThird") != null ? Model.Area.Item.GetFile("ToolbarIconThird").Path : "";
66 string toolbarTextFourth = Model.Area.Item.GetString("ToolbarTextFourth");
67 string toolbarIconFourth = Model.Area.Item.GetFile("ToolbarIconFourth") != null ? Model.Area.Item.GetFile("ToolBarIconFourth").Path : "";
68 string navigationText = Model.Area.Item.GetString("NavigationPhoneText");
69 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : "";
70 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : "";
71 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : "";
72 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : "";
73 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : "";
74 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink");
75 bool onlyPreviewForAnonymousUsers = Model.Area.Item.GetBoolean("OnlyPreviewForAnonymous");
76 bool onlyPreview = onlyPreviewForAnonymousUsers ? Model.CurrentUser.ID == 0 : false;
77
78 string autoCssLink = "/Files/Templates/Designs/Rapido/css/rapido/rapido_" + Model.Area.ID.ToString() + ".min.css?ticks=" + Model.Area.UpdatedDate.Ticks;
79
80 string userInitials = Model.CurrentUser.Name;
81
82 string siteURL = Pageview.SearchFriendlyUrl.ToString();
83 string businessPhotoPath = Model.Area.Item.GetFile("BusinessPhoto") != null ? Model.Area.Item.GetFile("BusinessPhoto").Path : "";
84 string businessName = Model.Area.Item.GetString("BusinessName");
85 var address = Model.Area.Item.GetItem("Address");
86 string streetAddress = "";
87 string addressLocality = "";
88 string addressRegion = "";
89 string postalCode = "";
90 string addressCountry = "";
91
92 if (address != null)
93 {
94 streetAddress = address.GetString("StreetAddress");
95 addressLocality = address.GetString("City");
96 addressRegion = address.GetString("Region");
97 postalCode = address.GetString("PostalCode");
98 addressCountry = address.GetString("Country");
99 }
100 string contactEmail = Model.Area.Item.GetString("ContactEmail");
101 string contactNumber = Model.Area.Item.GetString("ContactNumber");
102
103 string testurls = Dynamicweb.Context.Current.Request.Url.ToString();
104 bool isLrtSite = Model.Area.Item.GetBoolean("LRT_Theme");
105 var noFollowBool = Pageview.Page.Nofollow;
106 var noIndexBool = Pageview.Page.Noindex;
107 string assetsVersion = "20";
108 }
109 <!DOCTYPE html>
110 <html lang="@Pageview.Area.CultureInfo">
111 <head>
112 <meta charset="utf-8" />
113
114 @if (isLrtSite)
115 {
116 <meta name="facebook-domain-verification" content="jkwhlhfmivuttu6z964lvpuc65mfjk" />
117 }
118 else
119 {
120 <meta name="facebook-domain-verification" content="f4udlfxqt2oxgqksxhwxnjo93plfi2" />
121 }
122
123 <title>@Model.Title</title>
124 <meta name="description" content="@Model.Description" />
125 <meta name="keywords" content="@Model.Keywords" />
126
127 @if (testurls.Contains("groupid") || testurls.Contains("productid"))
128 {
129 @RenderSnippet("canonical")
130 }
131
132 else
133 {
134 <link rel="canonical" href="@siteURL">
135
136 }
137
138 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
139 @if (Dynamicweb.Context.Current.Request.Url.Host.EndsWith("nozebrahosting.dk"))
140 {
141 <meta name="robots" content="noindex, nofollow">
142 }
143
144 @if (noIndexBool && noFollowBool)
145 {
146 <meta name="robots" content="noindex, nofollow">
147 }
148 else if (noFollowBool)
149 {
150 <meta name="robots" content="nofollow">
151
152 }
153 else if (noIndexBool)
154 {
155 <meta name="robots" content="noindex">
156 }
157 <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
158 <!-- Favicon -->
159 <link href="@favicon" rel="icon" type="image/png">
160 <!-- Font awesome -->
161 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/rapido/font-awesome.min.css" type="text/css">
162 <!-- Base (Default, wireframe) styles -->
163 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/base/base.min.css" type="text/css">
164 <!-- Rapido Css from Website Settings -->
165 <link id="rapidoCss" rel="stylesheet" href="@autoCssLink" type="text/css">
166 <!-- Ignite Css (Custom site specific styles) -->
167 @if (isLrtSite)
168 {
169 <link id="igniteCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/ignite/lrt.min.css?v=@assetsVersion" rel="stylesheet">
170 }
171
172 else
173 {
174 <link id="igniteCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/ignite/ignite.min.css?v=@assetsVersion" rel="stylesheet">
175 }
176
177 <!-- Google fonts -->
178 @{
179 var fonts = new string[8] { navigationFont, mobileNavigationFont, headerFont, subHeaderFont, contentFont, newStickersFont, customStickersFont, toolsMenuFont };
180 var family = string.Join("%7C", fonts.Distinct().Select(x => string.Format("{0}:100,200,300,400,500,600,700,800,900", x)));
181
182 }
183 <link href="https://fonts.googleapis.com/css?family=@family" rel="stylesheet">
184 @if (!string.IsNullOrEmpty(businessPhotoPath) && !string.IsNullOrEmpty(businessName) && !string.IsNullOrEmpty(streetAddress) && !string.IsNullOrEmpty(addressLocality) && !string.IsNullOrEmpty(addressRegion) && !string.IsNullOrEmpty(postalCode) && !string.IsNullOrEmpty(addressCountry))
185 {
186 var baseURl = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host;
187 var logoUrl = baseURl + logo;
188
189 <script type="application/ld+json">
190
191 {
192
193 "@@context":"https://schema.org/",
194 "@@type": ["Organization", "LocalBusiness"],
195 "url": "@baseURl",
196 "mainEntityOfPage": {
197 "@@type": "WebPage",
198 "id": "@baseURl"
199 },
200 "name": "@businessName",
201 "legalName": "@businessName",
202 "logo": "@logoUrl",
203 "image": [
204 "@baseURl/Admin/Public/GetImage.ashx?width=2509&height=1100&crop=0&Compression=85&DoNotUpscale=true&image=/Files/Images/Lauridsen/img/4026092007839.w293.h293.fill.jpg",
205 "@baseURl/Admin/Public/GetImage.ashx?width=2509&height=1100&crop=0&Compression=85&DoNotUpscale=true&image=/Files/Images/Lauridsen/img/about-bg-img.png",
206 "@baseURl/Admin/Public/GetImage.ashx?width=2500&height=1100&crop=0&Compression=85&DoNotUpscale=true&image=/Files/Images/Lauridsen/img/hero-img.png"
207 ],
208 "openingHours": ["Mo, Tu, We, Th 07:30-16:00", "Fr 07:30-14:30"],
209
210 @if (!string.IsNullOrEmpty(contactNumber))
211 {
212 <text>"telephone": "@Model.Area.Item.GetString("ContactNumber")",</text>
213 }
214
215 @if (!string.IsNullOrEmpty(contactEmail))
216 {
217 <text>"email": "@Model.Area.Item.GetString("ContactEmail")",</text>
218 }
219
220 @if (Model.Area.Item.GetItems("FooterSocialLinks").Count > 0)
221 {
222
223 <text>
224 "sameAs": [
225 </text>
226
227 foreach (var socialitem in Model.Area.Item.GetItems("FooterSocialLinks"))
228 {
229
230 string socialLink = socialitem.GetString("Link");
231 <text>"@socialLink"@(socialitem != Model.Area.Item.GetItems("FooterSocialLinks").Last() ? "," : "")</text>
232 }
233
234 <text>],</text>
235
236 }
237
238 "address": {
239
240 "@@type": "PostalAddress",
241 "streetAddress": "@streetAddress",
242 "addressLocality": "@addressLocality",
243 "addressRegion": "@addressRegion",
244 "postalCode": "@postalCode",
245 "addressCountry": "@addressCountry"
246
247 },
248
249 "contactPoint": [
250
251 {
252 "@@type": "ContactPoint",
253
254 @if (!string.IsNullOrEmpty(contactNumber))
255 {
256 <text>"telephone": "@Model.Area.Item.GetString("ContactNumber")",</text>
257 }
258
259 @if (!string.IsNullOrEmpty(contactEmail))
260 {
261 <text>"email": "@Model.Area.Item.GetString("ContactEmail")",</text>
262 }
263
264 "contactType": "customer service",
265 "areaServed": "DK",
266 "hoursAvailable": [
267 {
268
269 "@@type": "OpeningHoursSpecification",
270 "opens": "07:30:00",
271 "closes": "16:00:00",
272 "dayOfWeek": [
273 "http://schema.org/Monday",
274 "http://schema.org/Tuesday",
275 "http://schema.org/Wednesday",
276 "http://schema.org/Thursday"
277 ]
278 },
279 {
280 "@@type": "OpeningHoursSpecification",
281 "opens": "07:30:00",
282 "closes": "14:30:00",
283 "dayOfWeek": "http://schema.org/Friday"
284 }
285 ]
286 }
287 ]
288 }
289
290 </script>
291
292 }
293
294 @*START GOOGLE TAG MANAGER*@
295
296 <script>
297 (function (w, d, s, l, i) {
298 w[l] = w[l] || []; w[l].push({
299 'gtm.start':
300 new Date().getTime(), event: 'gtm.js'
301 }); var f = d.getElementsByTagName(s)[0],
302 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
303 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
304 })(window, document, 'script', 'dataLayer', '@gatagTrackingId');</script>
305
306 @*END GOOGLE TAG MANAGER*@
307 <script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="48ec1431-21ad-425d-bd0a-bd07fe0e0b96" type="text/javascript"></script>
308
309
310 </head>
311 <body class="@isLrtSite">
312 <!-- Google Tag Manager (noscript) -->
313 <noscript>
314 <iframe src="https://www.googletagmanager.com/ns.html?id=@gatagTrackingId"
315 height="0" width="0" style="display:none;visibility:hidden"></iframe>
316 </noscript>
317 <!-- End Google Tag Manager (noscript) -->
318 @*
319 <p>@testurls @pageId @test</p>
320 *@
321 @MobileNavigation(userInitials)
322 @LoginModal()
323 @{
324 string getCurrentUserCurrency = "";
325
326 string parameter = HttpContext.Current.Request.QueryString.Get("LoggedIn");
327 if (User.IsExtranetUserLoggedIn())
328 {
329 var user = User.GetCurrentUser();
330 if (parameter == "true")
331 {
332 if (user != null)
333 {
334 foreach (var value in user.CustomFieldValues)
335 {
336 if (value != null && value.CustomField.SystemName.Equals("AccessUserCurrencyCharacter"))
337 {
338 getCurrentUserCurrency = value.Value.ToString();
339 }
340 }
341 }
342
343 foreach (var item in Dynamicweb.Ecommerce.Common.Application.Currencies)
344 {
345 if (item.Code == getCurrentUserCurrency)
346 {
347 Dynamicweb.Ecommerce.Common.Context.Currency = item;
348 }
349 }
350 }
351 }
352 }
353 <main class="site dw-mod">
354 <header class="top-container @stickyTop dw-mod js-header" id="Top">
355 @if (renderPagesInToolBar && Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
356 {
357 <div class="tools-navigation dw-mod d-none d-lg-block">
358 <div class="center-container header-nav grid top-container__center-container dw-mod">
359 <div class="grid grid--align-center grid--justify-space-between u-margin-top u-margin-bottom">
360 <div class="grid__cell--align-middle-left"><img src="@toolbarIcon" class="grid__cell-img" alt="@toolbarText"><span class="u-margin-left">@toolbarText</span></div>
361 <div class="grid__cell--align-middle-left"><img src="@toolbarIconSecond" class="grid__cell-img" alt="@toolbarTextSecond"><span class="u-margin-left">@toolbarTextSecond</span></div>
362 <div class="grid__cell--align-middle-left"><img src="@toolbarIconThird" class="grid__cell-img" alt="@toolbarTextThird"><span class="u-margin-left">@toolbarTextThird</span></div>
363 <div class="grid__cell--align-middle-left"><img src="@toolbarIconFourth" class="grid__cell-img" alt="@toolbarTextFourth"><span class="u-margin-left">@toolbarTextFourth</span></div>
364 </div>
365 </div>
366 </div>
367 }
368 @if (topLayout == "normal")
369 {
370 <!-- Header -->
371 <div class="header header-top dw-mod">
372 <div class="center-container top-container__center-container dw-mod">
373 <div class="grid">
374 @* Logo *@
375 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
376 {
377 <div class="logo d-inline-block dw-mod">
378 <a href="/Default.aspx?ID=@firstPageId">
379 <img class="d-inline-block" src="@logo" alt="@logoAltText" />
380 </a>
381 </div>
382 }
383
384 @if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet")
385 {
386 <div class="grid__col-12">
387 <div class="grid__cell">
388 <div class="logo u-max-w220px u-middle u-margin-bottom dw-mod">
389 <a href="/Default.aspx?ID=@firstPageId">
390 <img class="grid__cell-img" src="@logo" alt="@logoAltText" />
391 </a>
392 </div>
393 </div>
394 </div>
395 }
396
397 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
398 {
399 @* Search *@
400 <div class="grid__col-6 grid__col--bleed-y grid--align-self-center">
401 <div class="typeahead u-margin u-color-inherit js-typeahead" data-page-size="10" id="TopProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId" data-groups-page-id="@productGroupsPageId">
402 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button>
403 <ul class="dropdown dropdown--absolute-position js-handlebars-root js-typeahead-groups-content u-min-w220px dw-mod" id="TopProductSearchGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@productGroupsPageId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul>
404 <input type="text" class="typeahead-search-field u-no-margin js-typeahead-search-field" placeholder="@searchPlaceholder" value="@searchValue">
405 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content u-full-width dw-mod" id="TopProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false" data-preloader="minimal"></ul>
406 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="fa fa-search"></i></button>
407 </div>
408 </div>
409
410 <div class="grid__cell grid__cell--align-middle-right">
411 <ul class="menu dw-mod u-pull--right">
412 @RenderSignIn("outsideNavigation", userInitials)
413 @RenderLanguageSelector("outsideNavigation")
414 @RenderFavorites("outsideNavigation")
415 @if (!onlyPreview)
416 {
417 @RenderMiniCart("outsideNavigation")
418 }
419 </ul>
420 </div>
421 }
422
423 @* Mobile search *@
424 @if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet")
425 {
426 <div class="grid__col-12 grid__col--bleed-y grid--align-self-center">
427 <div class="grid__cell">
428 <div class="js-typeahead" data-page-size="10" id="MobileProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId">
429 <input type="text" class="u-full-width js-typeahead-search-field" placeholder="@searchPlaceholder" value="@searchValue">
430 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul>
431 </div>
432 </div>
433 </div>
434 }
435 </div>
436 </div>
437 </div>
438
439 <!-- Main navigation -->
440 <nav class="main-navigation dw-mod">
441 <div class="center-container top-container__center-container dw-mod">
442 <div class="grid">
443 <div class="grid__col-12 grid--align-self-center grid__col--bleed">
444 <div class="grid__cell">
445 @MobileNavigationTrigger()
446 @if ((Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") && !onlyPreview)
447 {
448 <ul class="menu dw-mod u-pull--right">
449 @RenderMiniCart()
450 </ul>
451 }
452 </div>
453 </div>
454 </div>
455 </div>
456 </nav>
457 }
458 @if (topLayout == "splitted")
459 {
460 <!-- Header -->
461 <div class="header header-top dw-mod">
462 <div class="center-container top-container__center-container dw-mod">
463 <div class="grid">
464 @* Logo *@
465 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
466 {
467 <div class="grid__col-md-3 grid__col-sm-3 grid--align-self-center grid__col--bleed-y">
468 <div class="logo dw-mod">
469 <a href="/Default.aspx?ID=@firstPageId">
470 <img class="grid__cell-img" src="@logo" alt="@logoAltText" />
471 </a>
472 </div>
473 </div>
474 }
475 else
476 {
477 <div class="grid__col-xs-6">
478 <div class="grid__cell">
479 <div class="logo u-max-w220px dw-mod">
480 <a href="/Default.aspx?ID=@firstPageId">
481 <img class="grid__cell-img" src="@logo" alt="@logoAltText" />
482 </a>
483 </div>
484 </div>
485 </div>
486 }
487 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
488 {
489 @* Search *@
490 <div class="grid__cell grid__cell--align-middle-right">
491 <div class="grid__col-sm-8 grid__col--bleed">
492 <div class="typeahead u-margin u-color-inherit js-typeahead" data-page-size="3" id="TopProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId" data-groups-page-id="@productGroupsPageId">
493 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button>
494 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-groups-content dw-mod" id="TopProductSearchGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@productGroupsPageId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul>
495 <input type="text" class="typeahead-search-field u-no-margin js-typeahead-search-field" placeholder="@searchPlaceholder" value="@searchValue">
496 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content u-full-width dw-mod" id="TopProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false" data-preloader="minimal"></ul>
497 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="fa fa-search"></i></button>
498 </div>
499 </div>
500 </div>
501 }
502 else
503 {
504 @* Mobile search *@
505 <div class="grid__col-xs-6">
506 <div class="grid__cell">
507 <div class="js-typeahead" data-page-size="10" id="MobileProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId">
508 <input type="text" class="u-full-width js-typeahead-search-field u-no-margin" placeholder="@searchPlaceholder" value="@searchValue">
509 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul>
510 </div>
511 </div>
512 </div>
513 }
514 </div>
515 </div>
516 </div>
517
518 <!-- Main navigation -->
519 <nav class="main-navigation dw-mod">
520 <div class="center-container top-container__center-container dw-mod">
521 <div class="grid">
522 <div class="u-pull--left">
523 @MobileNavigationTrigger()
524 </div>
525 <div class="grid__cell grid__cell--align-middle-right">
526 <ul class="menu dw-mod u-pull--right">
527 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
528 {
529 @RenderSignIn("inNavigation", userInitials)
530 @RenderLanguageSelector()
531 @RenderFavorites()
532 }
533 @if (!onlyPreview)
534 {
535 @RenderMiniCart()
536 }
537 </ul>
538 </div>
539 </div>
540 </div>
541 </nav>
542 }
543
544 @if (topLayout == "condensed")
545 {
546 <!-- Main navigation -->
547 <nav class="main-navigation dw-mod">
548 <div class="center-container top-container__center-container dw-mod">
549 <div class="grid">
550 @* Navigation *@
551 @MobileNavigationTrigger()
552 <div class="logo d-inline-block dw-mod">
553 <a href="/Default.aspx?ID=@firstPageId">
554 <img class="grid__cell-img d-inline-block" src="@logo" alt="@logoAltText" />
555 </a>
556 </div>
557 <div class="grid__cell grid__cell--align-middle-right">
558 <ul class="menu dw-mod u-pull--right">
559 @RenderSignIn("inNavigation", userInitials)
560 @RenderLanguageSelector()
561 @RenderFavorites()
562 @if (!onlyPreview)
563 {
564 @RenderMiniCart()
565 }
566 </ul>
567 </div>
568 </div>
569 </div>
570 </nav>
571
572 <!-- Searchbar -->
573 <div class="u-box-shadow u-color-light-gray--bg u-inline-block u-full-width">
574 <div class="center-container top-container__center-container dw-mod">
575 <div class="typeahead typeahead--centered u-color-inherit js-typeahead dw-mod" data-page-size="10" id="ProductSearchBar" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId" data-groups-page-id="@productGroupsPageId">
576 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button>
577 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-groups-content dw-mod" id="ProductSearchBarGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@productGroupsPageId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul>
578 <div class="typeahead-search-field">
579 <input type="text" class="u-no-margin js-typeahead-search-field font-weight-normal" placeholder="@searchPlaceholder" value="@searchValue">
580 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="ProductSearchBarContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul>
581 </div>
582 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="fa fa-search"></i></button>
583 </div>
584 </div>
585 </div>
586 }
587
588 @if (topLayout == "minimal")
589 {
590 <!-- Main navigation -->
591 <nav class="main-navigation dw-mod">
592 <div class="center-container header-nav top-container__center-container dw-mod">
593 <div class="grid">
594 @* Navigation *@
595 @MobileNavigationTrigger()
596 <div class="logo d-inline-block dw-mod">
597 <a href="/Default.aspx?ID=@firstPageId">
598 <img class="header-logo d-inline-block" src="@logo" alt="@logoAltText" />
599 </a>
600 </div>
601
602 <div class="grid__cell grid__cell--align-middle-right">
603 <ul class="menu dw-mod u-pull--right">
604 <li class="menu__item menu__item--horizontal menu__item--top-level u-hidden-xxs dw-mod">
605 <div class="menu__link d-none d-md-block">
606 <a href="@navigationIconFifthLink">
607 <img src="@navigationIconFifth" class="d-inline-block align-text-top" alt="">
608 </a>
609 </div>
610 </li>
611 <!-- HEADSET ICON -->
612 <li class="menu__item menu__item--horizontal menu__item--top-level u-hidden-xxs dw-mod">
613 <div class="menu__link d-none d-md-block">
614 <a href="tel:@contactNumber">
615 <img src="@navigationIcon" class="d-inline-block align-text-top" alt="@navigationText">
616 <span class="small d-inline-block text-black font-weight-semi-bold align-middle">@navigationText</span>
617 </a>
618 </div>
619 </li>
620 <!-- END HEADSET ICON -->
621 @* Search *@
622 <li class="menu__item menu__item--horizontal menu__item--top-level search-icon-navigation menu__item--icon u-hidden-xxs is-dropdown is-dropdown--no-icon dw-mod js-header-nav-item">
623 <a class="openbtn js-toggle-overlay menu__link is-dropdown is-dropdown--no-icon dw-mod">
624 <div class="js-openBtn" style="display:block;">
625 <img src="/Files/Images/Lauridsen/icons/navigation-icons/icon-search.svg" class="d-inline-block align-text-top" alt="">
626 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Search")</span>
627 </div>
628 <div class="js-closeBtn" style="display:none;">
629 <div class="closebtn small d-inline-block text-black text-uppercase font-weight-semi-bold" id="closebtn" title="Close Overlay"><span class="modal__close"></span> @Translate("Close")</div>
630 </div>
631 </a>
632 <div id="myOverlay" class="overlay js-overlay">
633 <div class="overlay-content">
634 <div class="menu menu--dropdown-right u-no-padding u-w380px grid__cell dw-mod">
635 <div class="typeahead u-margin u-color-inherit js-typeahead" data-page-size="10" id="ProductSearchBar" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId" data-groups-page-id="@productGroupsPageId">
636 <input type="text" class="fullscreen-input-field typeahead-search-field u-no-margin js-typeahead-search-field dw-mod" placeholder="@searchPlaceholder" value="@searchValue">
637 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content u-full-width dw-mod" id="ProductSearchBarContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false" data-preloader="minimal"></ul>
638
639 <span class="icon-nz icon-nz-arrow-long-right input-arrow-icon js-typeahead-enter-btn"></span>
640 </div>
641 </div>
642
643 </div>
644 </div>
645 </li>
646
647 @if (!onlyPreview)
648 {
649 @RenderMiniCart()
650 }
651 @RenderSignIn("inNavigation", userInitials)
652 @RenderLanguageSelector()
653 </ul>
654 </div>
655 </div>
656 </div>
657 </nav>
658 }
659
660 @if (renderPagesInToolBar && Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
661 {
662 <div class="second-tools-menu dw-mod u-box-shadow">
663 <div class="grid bottom-container__center-container dw-mod u-margin-left">
664 <div class="grid grid--align-center grid--justify-start header-nav center-container">
665 <div>
666 @RenderHeaderNavigation()
667 </div>
668 </div>
669 </div>
670 </div>
671 }
672
673 @* Impersonation bar *@
674 @if (Model.CurrentUser.ID > 0 && Model.SecondaryUsers.Count > 0)
675 {
676 <div class="u-color-warning--bg">
677 <div class="center-container top-container__center-container dw-mod">
678 @*Impersonation*@
679 <div class="grid">
680 <div class="grid--align-self-center grid__col-x">
681 @if (Model.CurrentSecondaryUser != null && Model.CurrentSecondaryUser.ID > 0)
682 {
683 string stopImpersonateTranslation = Translate("Stop impersonation");
684 string username = "";
685 if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.FirstName) && !string.IsNullOrEmpty(Model.CurrentSecondaryUser.LastName))
686 {
687 username = Model.CurrentSecondaryUser.FirstName + " " + Model.CurrentSecondaryUser.LastName;
688 }
689 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Name))
690 {
691 username = Model.CurrentSecondaryUser.Name;
692 }
693 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Email))
694 {
695 username = Model.CurrentSecondaryUser.Email;
696 }
697 else
698 {
699 username = Model.CurrentSecondaryUser.UserName;
700 }
701 <div class="grid-cell">
702 <div class="u-pull--left u-bold u-margin-top">
703 <i class="fa fa-user-secret"></i>
704 @username<text> </text>@Translate("is impersonated by")<text> </text>@Pageview.User.UserName
705 </div>
706 <form method="post" class="u-pull--right u-no-margin">
707 <input type="submit" class="btn btn--secondary dw-mod u-no-margin" name="DwExtranetRemoveSecondaryUser" value="@stopImpersonateTranslation">
708 </form>
709 </div>
710 }
711
712 else
713 {
714 string viewListTranslation = Translate("View the list of users you can impersonate");
715 <div class="grid-cell u-bold">
716 <i class="fa fa-user-secret"></i>
717 <a href="/Default.aspx?ID=@impersonationPageId" title="@viewListTranslation" class="u-color-font-black">@viewListTranslation</a>
718 </div>
719 }
720 </div>
721 </div>
722 </div>
723 </div>
724 }
725 </header>
726 <!-- Floating mini cart -->
727 @if (!onlyPreview && !stickyMenu && pageId == productsPageId && Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
728 {
729 <div class="floating-mini-cart u-hidden dw-mod" id="FloatingMiniCart">
730 <div class="mini-cart m-0 dw-mod">
731 <a href="/Default.aspx?ID=@cartPageId&Purge=True" class="menu-tools__link menu__link--condensed dw-mod js-mini-cart-button" onmouseenter="Cart.UpdateMiniCart(event, 'miniCart', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart&rnd='+ Date.now() +'')">
732 <img src="@navigationIconThird" class="d-inline-block align-text-top" alt="">
733 <div class="mini-cart__counter mini-cart__counter--lg dw-mod">
734 <div class="js-handlebars-root js-mini-cart-counter" id="FloatingCartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-preloader="false" data-init-onload="false">
735 <div class="js-mini-cart-counter-content">@Model.Cart.TotalProductsCount</div>
736 </div>
737 </div>
738 </a>
739 <div class="mini-cart-dropdown js-handlebars-root js-mini-cart dw-mod" id="SecondaryMiniCart" data-template="MiniCartContent" data-cart-id="@miniCartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="true"></div>
740 </div>
741 </div>
742 }
743 <!-- Render the content -->
744 <div id="Page" class="page @pagePos">
745 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Frontend.PageViewModel>
746 @using System.Linq
747
748
749
750 @{
751 string pageUrl = GetGlobalValue("Global:Pageview.Url.Raw");
752 string searchQuery = HttpContext.Current.Request.QueryString.Get("Search");
753 bool isProduct = Dynamicweb.Context.Current.Request.Url.ToString().ToLower().Contains("productid");
754 bool hasGroupSpots = Dynamicweb.Context.Current.Request.RawUrl.Split('/').Count() <= 5 && string.IsNullOrEmpty(searchQuery);
755 bool fourthLayer = Dynamicweb.Context.Current.Request.RawUrl.Split('/').Count() == 4;
756 bool thirdLayer = Dynamicweb.Context.Current.Request.RawUrl.Split('/').Count() == 3;
757
758 var group = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(HttpContext.Current.Request.QueryString.Get("GroupID"));
759 string feedFullUrl = pageUrl + "&feed=true";
760 int i = 0;
761 }
762 @if (Model.PropertyItem.GetList("ShowBreadcrumb").SelectedValue == "True")
763 {
764 <div class="center-container">
765 <div class="grid__col-12">
766 <ul class="breadcrumb">
767 <li class="breadcrumb__item dw-mod">
768 <a href="/">@Model.Area.FirstPage.Name</a>
769 </li>
770 @RenderNavigation(new
771 {
772 id = "breadcrumb",
773 template = "Breadcrumb.xslt"
774 })
775 </ul>
776 </div>
777 </div>
778 }
779
780 <div class="shop-page">
781
782 @if (!isProduct && group != null)
783 {
784 <div class="center-container">
785 <div class="grid">
786 <section class="grid__col-12 grid__col-sm-6 grid__col-md-8 grid__col-lg-8">
787 <h1 class="display-3 font-weight-bold mb-2">@group.Name</h1>
788 <div class="pr-lg-12">@group.Description</div>
789 </section>
790 <div class="grid__col-12 grid__col-sm-6 grid__col-md-4 grid__col-lg-4 grid__col--bleed page-shop__info-box">
791 @Model.Placeholder("rightcolumn", "right column", "default:true;sort:1")
792 </div>
793 </div>
794 </div>
795 }
796
797 <div class="center-container">
798 <div class="grid">
799 @if (hasGroupSpots && !isProduct)
800 {
801 @RenderNavigation(new
802 {
803 id = "shopnav",
804 startLevel = 1,
805 endlevel = 4,
806 expandmode = "Pathonly",
807 template = "EcomGroupSpots.xslt"
808 })
809 }
810 </div>
811 </div>
812
813
814 <section class="@(!hasGroupSpots && !isProduct || fourthLayer && !isProduct ? "bg-gray" : "bg-white")">
815 <div class="center-container dw-mod">
816 <div class="grid">
817 @if (Model.PropertyItem.GetList("LeftMenu").SelectedValue == "True")
818 {
819 var navigationMarkup = RenderNavigation(new
820 {
821 id = "leftnav",
822 cssclass = "menu dwnavigation",
823 startLevel = 2,
824 endlevel = 5,
825 template = "LeftNavigation.xslt"
826 });
827 if (!string.IsNullOrEmpty(navigationMarkup))
828 {
829 <nav class="grid__col-md-3 grid__col-sm-12 grid__col-xs-12">
830 <div class="grid">
831 <div class="grid__col-12">
832 <div class="grid__cell">@navigationMarkup</div>
833 </div>
834 </div>
835 </nav>
836 }
837 }
838
839 @if (!isProduct && group != null && hasGroupSpots && thirdLayer)
840 {
841 <section class="bg-gray bg-gray-overflow py-10 mt-lg-10 center-container">
842 <div class="grid">
843 <div class="grid__col-12 grid__col-lg-8">
844 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureHeadline")).Value.ToString()))
845 {
846 <h2 class="h4 mb-6">@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureHeadline")).Value</h2>
847 }
848 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureText")).Value.ToString()))
849 {
850 <div>@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureText")).Value</div>
851 }
852 </div>
853 <div class="grid__col-12 grid__col-lg-4">
854 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureColumnHeadline")).Value.ToString()))
855 {
856 <h2 class="h4 mb-6">@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureColumnHeadline")).Value</h2>
857 }
858 <div class="row no-gutters">
859 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOne")).Value.ToString()))
860 {
861 string link = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOneLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOneLink")).Value.ToString() : "#";
862 string linkName = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOneLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOneLink")).Value.ToString().Split('/').Last() : "";
863 <div class="grid__col-6">
864 <a href="@link" class="p-0 d-inline-block mb-5" target="_blank">
865 <img class="img-fluid d-inline-block b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=96&Compression=80&image=/Files/Images/@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOne")).Value" alt="@linkName">
866 <u class="small text-primary d-block">@linkName</u>
867 </a>
868 </div>
869 }
870 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwo")).Value.ToString()))
871 {
872 string link = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwoLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwoLink")).Value.ToString() : "#";
873 string linkName = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwoLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwoLink")).Value.ToString().Split('/').Last() : "";
874
875 <div class="grid__col-6">
876 <a href="@link" class="p-0 d-inline-block mb-5" target="_blank">
877 <img class="img-fluid d-inline-block b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=96&Compression=80&image=/Files/Images/@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwo")).Value" alt="@linkName">
878 <u class="small text-primary d-block">@linkName</u>
879 </a>
880 </div>
881 }
882 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThree")).Value.ToString()))
883 {
884 string link = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThreeLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThreeLink")).Value.ToString() : "#";
885 string linkName = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThreeLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThreeLink")).Value.ToString().Split('/').Last() : "";
886
887 <div class="grid__col-6">
888 <a href="@link" class="p-0 d-inline-block mb-5" target="_blank">
889 <img class="img-fluid d-inline-block b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=96&Compression=80&image=/Files/Images/@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThree")).Value" alt="@linkName">
890 <u class="small text-primary d-block">@linkName</u>
891 </a>
892 </div>
893 }
894 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFour")).Value.ToString()))
895 {
896 string link = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFourLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFourLink")).Value.ToString() : "#";
897 string linkName = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFourLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFourLink")).Value.ToString().Split('/').Last() : "";
898
899 <div class="grid__col-6">
900 <a href="@link" class="p-0 d-inline-block mb-5" target="_blank">
901 <img class="img-fluid d-inline-block b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=96&Compression=80&image=/Files/Images/@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFour")).Value" alt="@linkName">
902 <u class="small text-primary d-block">@linkName</u>
903 </a>
904 </div>
905 }
906 </div>
907 </div>
908 </div>
909 </section>
910
911 }
912
913 @Model.Placeholder("dwcontent", "content", "default:true;sort:1")
914 </div>
915 </div>
916 </section>
917 </div>
918
919
920
921 </div>
922 </main>
923 @RenderFooter()
924
925
926 <!-- Content rendering helpers -->
927 @helper MobileNavigation(string userInitials)
928 {
929 int pageId = Model.TopPage.ID;
930 string mobileNavigationLevels = Model.Area.Item.GetBoolean("MobileNavigationLevels") ? Model.Area.Item.GetString("MobileNavigationLevels") : "3";
931
932 bool showCreateAccountLink = Model.Area.Item.GetBoolean("ShowCreateAccountLink");
933
934 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
935 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed");
936 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
937 string navigationText = Model.Area.Item.GetString("NavigationPhoneText");
938 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : "";
939 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : "";
940 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : "";
941 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : "";
942 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : "";
943 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink");
944 string navigationIconUserWhite = Model.Area.Item.GetFile("NavigationIconUserWhite") != null ? Model.Area.Item.GetFile("NavigationIconUserWhite").Path : "";
945 string contactNumber = Model.Area.Item.GetString("ContactNumber");
946 int productsPageId = GetPageIdByNavigationTag("ProductsPage");
947 int productsSearchFeedId = productsPageId;
948 string searchPlaceholder = Translate("Search");
949 string searchValue = HttpContext.Current.Request.QueryString.Get("Search") != null ? HttpContext.Current.Request.QueryString.Get("Search") : "";
950 string searchQuery = HttpContext.Current.Request.QueryString.Get("Search");
951 string myDashboardPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("CustomerDashboard").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerDashboard").ToString() : GetPageIdByNavigationTag("CustomerDashboard").ToString();
952
953 string myProfilePageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerProfile").ToString() : GetPageIdByNavigationTag("CustomerProfile").ToString();
954 string myOrdersPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders").ToString() : GetPageIdByNavigationTag("CustomerOrders").ToString();
955 string myFavoritesPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerFavorites").ToString() : GetPageIdByNavigationTag("CustomerFavorites").ToString();
956 bool showMyProfileLink = Model.Area.Item.GetBoolean("ShowMyProfileLink");
957 bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink");
958 bool showMyFavoritesLink = Model.Area.Item.GetBoolean("ShowMyFavoritesLink");
959
960 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar");
961 int startLevel = renderPagesInToolBar ? 1 : 0;
962 bool isLrtSite = Model.Area.Item.GetBoolean("LRT_Theme");
963
964 bool onlyPreview = Model.Area.Item.GetBoolean("OnlyPreviewForAnonymous");
965
966 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet")
967 {
968 <!-- Trigger for mobile navigation -->
969 <input type="checkbox" id="MobileNavTrigger" class="mobile-nav-trigger" />
970
971 <!-- Mobile navigation -->
972 <nav class="mobile-navigation dw-mod">
973 @if (Model.CurrentUser.ID > 0)
974 {
975 string userName = Model.CurrentUser.FirstName != null ? Model.CurrentUser.FirstName : "";
976 userName += " " + Model.CurrentUser.LastName != null ? Model.CurrentUser.LastName : "";
977 userName += userName == "" && Model.CurrentUser.UserName != null ? Model.CurrentUser.UserName : "";
978
979 <ul class="menu menu-mobile">
980 <li class="menu-mobile__item w-50 bg-primary menu-mobile__container">
981 <a href="/default.aspx?ID=@myDashboardPageId" class="menu-mobile__link hover-bg-green dw-mod text-white"><img src="@navigationIconUserWhite" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText">@Translate("My user")</a>
982 </li>
983
984 <li class="menu-mobile__item w-50 js-typeahead" data-page-size="2" id="MobileProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId">
985 <input type="text" class="u-full-width js-typeahead-search-field u-no-margin mobile-search-input" placeholder="@searchPlaceholder" value="@searchValue">
986 <ul class="dropdown dropdown--absolute-position mobile-search-dropdown u-min-w220px js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul>
987 </li>
988
989 </ul>
990
991 }
992 <ul class="menu menu-mobile">
993
994 @if (Model.CurrentUser.ID <= 0)
995 {
996 <li class="menu-mobile__item w-50 bg-primary menu-mobile__container">
997 <label for="SignInModalTrigger" onclick="document.getElementById('MobileNavTrigger').checked = false;" class="menu-mobile__link text-white hover-bg-green dw-mod"><img src="@navigationIconUserWhite" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText">@Translate("Sign in")</label>
998 </li>
999 <li class="menu-mobile__item w-50 js-typeahead" data-page-size="2" id="MobileProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId">
1000 <input type="text" class="u-full-width js-typeahead-search-field u-no-margin mobile-search-input" placeholder="@searchPlaceholder" value="@searchValue">
1001 <ul class="dropdown dropdown--absolute-position mobile-search-dropdown u-min-w220px js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul>
1002 </li>
1003
1004 }
1005
1006 </ul>
1007
1008 @RenderNavigation(new
1009 {
1010 id = "mobilenavigation",
1011 cssclass = "menu menu-mobile dwnavigation",
1012 startLevel = 0,
1013 ecomStartLevel = 1,
1014 endlevel = 5,
1015 expandmode = "all",
1016 template = "BaseMenuForMobile.xslt"
1017 })
1018
1019 <ul class="menu menu-mobile">
1020 @if (Model.CurrentUser.ID <= 0)
1021 {
1022
1023 if (showCreateAccountLink)
1024 {
1025 <li class="menu-mobile__item menu-mobile__container">
1026 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Default.aspx?ID=@createAccountPageId"><img src="@navigationIconFourth" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText">@Translate("Create account")</a>
1027 </li>
1028 }
1029 }
1030
1031 else
1032 {
1033 if (showMyProfileLink && User.IsExtranetUserLoggedIn())
1034 {
1035 <li class="menu-mobile__item">
1036 <a href="tel:@contactNumber" class="menu-mobile__link menu-mobile__link--highlighted dw-mod">
1037 <img src="@navigationIcon" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText">
1038 <span>@contactNumber</span>
1039 </a>
1040 </li>
1041 }
1042
1043 <li class="menu-mobile__item">
1044 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId"><img src="@navigationIconFourth" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText"> @Translate("Sign out")</a>
1045 </li>
1046 }
1047
1048
1049
1050 @if (Model.Languages.Count > 0 && !isLrtSite)
1051 {
1052 string selectedLanguage = "";
1053
1054 foreach (var lang in Model.Languages)
1055 {
1056 if (lang.IsCurrent)
1057 {
1058 selectedLanguage = lang.Name;
1059 }
1060 }
1061
1062 <li class="menu-mobile__item dw-mod">
1063 <label for="MobileMenuCheck_Language" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"> @selectedLanguage</label>
1064 <input id="MobileMenuCheck_Language" type="checkbox" class="expand-trigger">
1065 <label for="MobileMenuCheck_Language" class="menu-mobile__trigger"></label>
1066 <ul class="menu-mobile menu-mobile__submenu expand-menu">
1067 @foreach (var lang in Model.Languages)
1068 {
1069 if (lang.Name != "Deutcsh")
1070 {
1071 <li class="menu-mobile__item dw-mod">
1072 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod menu-mobile__link--level-1" href="/Default.aspx?ID=@lang.Page.ID&CurrencyCode=@Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCurrencyId">@lang.Name</a>
1073 </li>
1074 }
1075 }
1076 </ul>
1077 </li>
1078 }
1079
1080 </ul>
1081 </nav>
1082
1083 <label class="mobile-nav-trigger-off" for="MobileNavTrigger"></label>
1084 if (!onlyPreview)
1085 {
1086 <div class="u-visually-hidden js-handlebars-root js-mini-cart" id="miniCart" data-template="MiniCartContent" data-cart-id="@cartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div>
1087 }
1088 }
1089 }
1090
1091 @helper LoginModal()
1092 {
1093 int pageId = Model.TopPage.ID;
1094 string topLayout = Model.Area.Item.GetList("LayoutTop").SelectedValue;
1095 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
1096 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
1097 string forgotPasswordPageId = signInProfilePageId.ToString() + "&LoginAction=Recovery";
1098 string userSignedInError = !Model.LogOnFailed ? "" : "checked";
1099 string userSignedInErrorText = "";
1100
1101 if (Model.LogOnFailed)
1102 {
1103 switch (Model.LogOnFailedReason)
1104 {
1105 case Dynamicweb.Security.UserManagement.LogOnFailedReason.PasswordLengthInvalid:
1106 userSignedInErrorText = Translate("Password length is invalid");
1107 break;
1108 case Dynamicweb.Security.UserManagement.LogOnFailedReason.IncorrectLogin:
1109 userSignedInErrorText = Translate("Invalid email or password");
1110 break;
1111 case Dynamicweb.Security.UserManagement.LogOnFailedReason.ExceededFailedLogOnLimit:
1112 userSignedInErrorText = Translate("You have exceeded the limit of allowed login attempts. The user account is temporarily locked");
1113 break;
1114 case Dynamicweb.Security.UserManagement.LogOnFailedReason.LoginLocked:
1115 userSignedInErrorText = Translate("The user account is temporarily locked");
1116 break;
1117 case Dynamicweb.Security.UserManagement.LogOnFailedReason.PasswordExpired:
1118 userSignedInErrorText = Translate("The password has expired and needs to be renewed");
1119 break;
1120 default:
1121 userSignedInErrorText = Translate("An unknown error occured");
1122 break;
1123 }
1124 }
1125 <!-- Trigger for the login modal -->
1126
1127 <input type="checkbox" id="SignInModalTrigger" class="modal-trigger @topLayout" @userSignedInError />
1128
1129 <!-- Login modal -->
1130 <div class="modal-container">
1131 <label for="SignInModalTrigger" id="SignInModalOverlay" class="modal-overlay"></label>
1132 <div class="modal modal--xs login-modal" id="SignInModal">
1133 <label for="SignInModalTrigger" class="modal__close"></label>
1134 <div class="modal__header">
1135 <h1 class="mb-0">@Translate("Sign in")</h1>
1136 </div>
1137 <div class="modal__body">
1138 <form method="post" id="LoginForm" action="?LoggedIn=true" class="u-no-margin">
1139 <input type="hidden" name="ID" value="@pageId" />
1140 <input type="hidden" name="DWExtranetUsernameRemember" value="True" />
1141 <input type="hidden" name="DWExtranetPasswordRemember" value="True" />
1142 <label for="LoginUsername">@Translate("Type Email")</label>
1143 <input type="text" class="u-full-width" id="LoginUsername" name="username" placeholder="@Translate(" placerholder email")" />
1144 <label for="LoginPassword">@Translate("Type Password")</label>
1145 <input type="password" class="u-full-width" id="LoginPassword" name="password" placeholder="@Translate(" placeholder password")" />
1146 <div class="field-error dw-mod">@userSignedInErrorText</div>
1147 <label>
1148 <input type="checkbox" id="RememberMe" name="Autologin" checked="checked" value="True">
1149 <span>@Translate("Remember me", "Remember me")</span>
1150 </label>
1151 <button type="submit" class="btn btn--primary mb-2 btn--full dw-mod" name="LoginAction" value="Login" onclick="Buttons.LockButton(event)">@Translate("Sign in")</button>
1152 <a class="text-primary float-right btn-sm" href="/Default.aspx?id=@forgotPasswordPageId">@Translate("Forgot your password?", "Forgot your password?")</a>
1153 <div class="splitter mb-3 mt-4">
1154 <span class="splitter__text">@Translate("CreateAccountText")</span>
1155 <hr class="splitter__line">
1156 </div>
1157 <a class="btn btn-secondary bg-black w-100 mt-0" href="/default.aspx?ID=@createAccountPageId">@Translate("Create account")?</a>
1158 </form>
1159 </div>
1160 </div>
1161 </div>
1162
1163 }
1164
1165 @helper RenderHeaderNavigation()
1166 {
1167 bool megaMenu = Model.Area.Item.GetList("NavigationMegaMenu").SelectedValue.ToLower() == "true" ? true : false;
1168 string megamenuPromotionImage = Model.Area.Item.GetFile("NavigationMegamenuPromotionImage") != null ? Model.Area.Item.GetFile("NavigationMegamenuPromotionImage").Path : "";
1169 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar");
1170 int startLevel = renderPagesInToolBar ? 1 : 0;
1171
1172 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
1173 {
1174 if (!megaMenu)
1175 {
1176 @RenderNavigation(new
1177 {
1178 id = "topnavigation",
1179 cssclass = "menu dw-mod dwnavigation",
1180 startLevel = 0,
1181 ecomStartLevel = @startLevel,
1182 endlevel = 5,
1183 expandmode = "all",
1184 template = "BaseMenuWithDropdown.xslt"
1185 });
1186 }
1187
1188 else
1189 {
1190 @RenderNavigation(new
1191 {
1192 id = "topnavigation",
1193 cssclass = "menu dw-mod dwnavigation",
1194 startLevel = @startLevel,
1195 ecomStartLevel = @startLevel,
1196 endlevel = 5,
1197 promotionImage = megamenuPromotionImage,
1198 promotionLink = Model.Area.Item.GetString("NavigationMegamenuPromotionLink"),
1199 expandmode = "all",
1200 template = "BaseMegaMenu.xslt"
1201 });
1202 }
1203 }
1204 }
1205
1206 @helper MobileNavigationTrigger()
1207 {
1208 @* Mobile navigation trigger *@
1209 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet")
1210 {
1211 <div class="menu__item menu__item--horizontal menu__item--top-level dw-mod">
1212 <label for="MobileNavTrigger" class="mobile-nav-trigger-button menu__link dw-mod"></label>
1213 </div>
1214 }
1215 }
1216
1217
1218
1219 @helper RenderLanguageSelector(string type = "inNavigation")
1220 {
1221
1222 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs" : "menu__item menu__item--horizontal menu--clean dw-mod";
1223 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link";
1224 bool isLrtSite = Model.Area.Item.GetBoolean("LRT_Theme");
1225
1226 if (Model.Languages.Count > 1 && !isLrtSite)
1227 {
1228 <li class="@liClasses is-dropdown is-dropdown--no-icon">
1229 <div class="@menuLinkClass menu__link--icon dw-mod text-dark text-uppercase">
1230
1231 @foreach (var langnav in Model.Languages)
1232 {
1233
1234 if (langnav.IsCurrent && langnav.Name != "Deutcsh")
1235 {
1236 string langInfonav = Dynamicweb.Services.Areas.GetArea(langnav.ID).EcomCountryCode.ToLower();
1237
1238 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@langInfonav</span>
1239 <img alt="arrow-down" class="d-inline-block align-text-middle lang-arrow-down" src="/Files/Images/arrow-down.svg" />
1240 }
1241
1242 }
1243
1244 </div>
1245 <div class="menu menu--dropdown dw-mod">
1246 @foreach (var lang in Model.Languages)
1247 {
1248
1249
1250 string langInfo = lang.Name;
1251 if (langInfo != "Deutcsh")
1252 {
1253 <a href="/Default.aspx?AreaID=@Dynamicweb.Services.Pages.GetPage(lang.Page.ID).Area.ID" class="menu-dropdown__item menu-dropdown__item--link dw-mod">@langInfo</a>
1254 }
1255 }
1256 </div>
1257 </li>
1258 }
1259
1260
1261
1262
1263 }
1264
1265 @helper RenderMiniCart(string type = "inNavigation")
1266 {
1267 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod" : "menu__item menu__item--horizontal menu--clean dw-mod";
1268 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link";
1269
1270 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
1271 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed");
1272 int cartPageId = GetPageIdByNavigationTag("CartPage");
1273 double cartProductsCount = Model.Cart.TotalProductsCount;
1274 string navigationText = Model.Area.Item.GetString("NavigationPhoneText");
1275 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : "";
1276 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : "";
1277 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : "";
1278 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : "";
1279 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : "";
1280 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink");
1281 string openingBracket = "(";
1282 string closingBracket = ")";
1283
1284 @* Mini cart *@
1285 <li class="@liClasses">
1286 <div class="mini-cart dw-mod m-0">
1287 <a href="/Default.aspx?ID=@cartPageId&Purge=True" id="miniCartCounterWrap" class="@menuLinkClass dw-mod js-mini-cart-button" onmouseenter="Cart.UpdateMiniCart(event, 'miniCart', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart&rnd='+ Date.now() +'')">
1288 <img src="@navigationIconThird" class="d-inline-block align-top" alt="@navigationIconThird">
1289 <div class="mini-cart__counter mini-cart__counter--inline dw-mod">
1290 <div class="js-handlebars-root js-mini-cart-counter" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-init-onload="false" data-preloader="false">
1291 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Cart")</span>
1292 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-start">@openingBracket</span>
1293 <span class="js-mini-cart-counter-content mini-cart__counter-quantity">@cartProductsCount</span>
1294 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-close">@closingBracket</span>
1295 </div>
1296 </div>
1297 </a>
1298 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
1299 {
1300 <div class="mini-cart-dropdown js-handlebars-root js-mini-cart dw-mod" id="miniCart" data-template="MiniCartContent" data-cart-id="@miniCartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div>
1301 }
1302 </div>
1303 </li>
1304 }
1305
1306 @helper RenderSignIn(string type = "inNavigation", string userInitials = "")
1307 {
1308 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs u-margin-left" : "menu__item menu__item--horizontal menu__item--clean dw-mod";
1309 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link";
1310
1311 int pageId = Model.TopPage.ID;
1312 string myProfilePageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerProfile").ToString() : GetPageIdByNavigationTag("CustomerProfile").ToString();
1313 string myOrdersPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders").ToString() : GetPageIdByNavigationTag("CustomerOrders").ToString();
1314 string myDashboardPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("CustomerDashboard").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerDashboard").ToString() : GetPageIdByNavigationTag("CustomerDashboard").ToString();
1315 string myFavoritesPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerFavorites").ToString() : GetPageIdByNavigationTag("CustomerFavorites").ToString();
1316 string mySavedCardsPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("SavedCards").ToString() : GetPageIdByNavigationTag("SavedCards").ToString();
1317 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
1318 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
1319 string forgotPasswordPageId = signInProfilePageId.ToString() + "&LoginAction=Recovery";
1320
1321 bool showCreateAccountLink = Model.Area.Item.GetBoolean("ShowCreateAccountLink");
1322 bool showMyProfileLink = Model.Area.Item.GetBoolean("ShowMyProfileLink");
1323 bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink");
1324 bool showMyFavoritesLink = Model.Area.Item.GetBoolean("ShowMyFavoritesLink");
1325 bool showMySavedCardsLink = Model.Area.Item.GetBoolean("ShowMySavedCardsLink");
1326
1327 string navigationText = Model.Area.Item.GetString("NavigationPhoneText");
1328 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : "";
1329 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : "";
1330 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : "";
1331 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : "";
1332 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : "";
1333 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink");
1334
1335 @* Sign in + Customer center links *@
1336 <li class="@liClasses">
1337 <div class="@menuLinkClass is-dropdown is-dropdown--no-icon dw-mod">
1338 <img src="@navigationIconFourth" class="d-inline-block align-text-top" alt="@Translate(" Userprofile")">
1339 @if (Model.CurrentUser.ID <= 0)
1340 {
1341 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Login")</span>
1342 }
1343 else
1344 {
1345 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Model.CurrentUser.FirstName</span>
1346 }
1347 <div class="menu menu--dropdown sign-in-dropdown dw-mod">
1348 <ul class="list list--clean dw-mod">
1349 @if (Model.CurrentUser.ID <= 0)
1350 {
1351 <li>
1352 <label for="SignInModalTrigger" class="btn btn--primary btn--full u-no-margin sign-in-modal-trigger-button dw-mod" onclick="setTimeout(function () { document.getElementById('LoginUsername').focus() }, 10)">@Translate("Sign in")</label>
1353 </li>
1354 if (showCreateAccountLink)
1355 {
1356 <li>
1357 <a href="/default.aspx?ID=@createAccountPageId" class="btn btn--secondary u-no-margin">@Translate("Create account")</a>
1358 </li>
1359 }
1360 if (showMyProfileLink || showMyOrdersLink || showMyFavoritesLink || showMySavedCardsLink && User.IsExtranetUserLoggedIn())
1361 {
1362 <li class="list__seperator dw-mod"></li>
1363 }
1364 }
1365
1366 else
1367 {
1368 if (!string.IsNullOrWhiteSpace(myDashboardPageId))
1369 {
1370 <li>
1371 <a href="/default.aspx?ID=@myDashboardPageId" class="list__link dw-mod"><i class="fa fa-user"></i> @Translate("My Account")</a>
1372 </li>
1373 }
1374 }
1375
1376 @if (showMyProfileLink && User.IsExtranetUserLoggedIn())
1377 {
1378 <li>
1379 <a href="/default.aspx?ID=@myProfilePageId" class="list__link dw-mod"><i class="fa fa-user"></i> @Translate("My Profile")</a>
1380 </li>
1381 }
1382
1383 @if (showMyOrdersLink && User.IsExtranetUserLoggedIn())
1384 {
1385 <li>
1386 <a href="/default.aspx?ID=@myOrdersPageId" class="list__link dw-mod"><i class="fa fa-list"></i> @Translate("My Orders")</a>
1387 </li>
1388 }
1389
1390 @if (showMyFavoritesLink && User.IsExtranetUserLoggedIn())
1391 {
1392 <li>
1393 <a href="/default.aspx?ID=@myFavoritesPageId" class="list__link dw-mod"><i class="fa fa-star"></i> @Translate("My Favorites")</a>
1394 </li>
1395 }
1396
1397 @if (showMySavedCardsLink)
1398 {
1399 <li>
1400 <a href="/default.aspx?ID=@mySavedCardsPageId" class="list__link dw-mod"><i class="fa fa-credit-card"></i> @Translate("My Saved cards")</a>
1401 </li>
1402 }
1403
1404 @if (Model.CurrentUser.ID > 0)
1405 {
1406 if (showMyProfileLink || showMyOrdersLink || showMyFavoritesLink || showMySavedCardsLink)
1407 {
1408 <li class="list__seperator dw-mod"></li>
1409 }
1410 <li>
1411 <a href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId" class="list__link dw-mod">@Translate("Sign out")</a>
1412 </li>
1413 }
1414 </ul>
1415 </div>
1416 </div>
1417 </li>
1418 }
1419
1420 @helper RenderFavorites(string type = "inNavigation")
1421 {
1422 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs" : "menu__item menu__item--horizontal menu--clean dw-mod";
1423 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link";
1424 string myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites").ToString();
1425
1426 @* Favorites *@
1427 if (Model.CurrentUser.ID > 0)
1428 {
1429 <li class="@liClasses">
1430 <a href="/Default.aspx?ID=@myFavoritesPageId" class="@menuLinkClass dw-mod">
1431 <i class="fa fa-star fa-1_5x"></i>
1432 </a>
1433 </li>
1434 }
1435 }
1436
1437 @helper RenderFooter()
1438 {
1439 string footerColumnThreeContent = !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterColumnThree")) ? Model.Area.Item.GetString("FooterColumnThree") : "";
1440 string footerColumnOneHeader = Model.Area.Item.GetString("FooterColumnOneHeader");
1441 string footerColumnTwoHeader = Model.Area.Item.GetString("FooterColumnTwoHeader");
1442 string footerColumnThreeHeader = Model.Area.Item.GetString("FooterColumnThreeHeader");
1443 int newsletterSignUpPageId = GetPageIdByNavigationTag("NewsletterSignUp");
1444 string TextUnderLogo = Model.Area.Item.GetString("TextUnderLogo");
1445 string footerlogo = Model.Area.Item.GetFile("Logo") != null ? Model.Area.Item.GetFile("Logo").Path : "/Files/Images/logo-dynamicweb.png";
1446 string firstPageId = Model.Area.FirstActivePage.ID.ToString();
1447 string logoAltText = Model.Area.Item.GetString("LogoAltText");
1448
1449 string fullBackgroundImage = "";
1450 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetFile("BackgroundImage") != null)
1451 {
1452 fullBackgroundImage = "background-image:url(/Admin/Public/GetImage.ashx?width=2500&height=1100&crop=0&Compression=85&DoNotUpscale=true&image=" + Model.Area.Item.GetFile("BackgroundImage").Path + ");";
1453 fullBackgroundImage += " background-position: center center; background-size: cover; ";
1454 }
1455 else if ((Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") && Model.Area.Item.GetFile("Mobile_BackgroundImage") != null)
1456 {
1457 fullBackgroundImage = "background-image:url(/Admin/Public/GetImage.ashx?width=2500&height=1100&crop=5&Compression=85&DoNotUpscale=true&image=" + Model.Area.Item.GetFile("Mobile_BackgroundImage").Path + ");";
1458 fullBackgroundImage += " background-position: center center; background-size: cover; ";
1459 }
1460
1461 <!-- Footer section -->
1462 <footer class="footer dw-mod" style="@fullBackgroundImage">
1463 <div class="center-container header-nav top-container__center-container dw-mod">
1464 <div class="grid">
1465 @if (Model.Area.Item.GetItems("FooterSocialLinks").Count > 0)
1466 {
1467 <div class="grid__col-md-auto logo-col">
1468 <div class="footer__content dw-mod">
1469 <div class="collection dw-mod">
1470 <a href="/Default.aspx?ID=@firstPageId">
1471 <img class="grid__cell-img logo-footer dw-mod" src="@footerlogo" alt="@logoAltText" />
1472 </a>
1473 <div class="footer__content social-links-container mt-4 dw-mod">
1474 @foreach (var socialitem in Model.Area.Item.GetItems("FooterSocialLinks"))
1475 {
1476 //Fields.FirstOrDefault(x => x.SystemName == "Icon").GetString()
1477 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel;
1478 string socialIconClass = socialIcon.SelectedValue;
1479 string socialIconTitle = socialIcon.SelectedName;
1480 string socialLink = socialitem.GetString("Link");
1481
1482 <a href="@socialLink" target="_blank" title="@socialIconTitle"><i class="fa @socialIconClass fa-2x"></i></a>
1483 }
1484 </div>
1485 </div>
1486 </div>
1487 </div>
1488 }
1489
1490 @if (!string.IsNullOrEmpty(footerColumnOneHeader))
1491 {
1492 <div class="grid__col-md-auto">
1493 <h4 class="footer__heading dw-mod">@footerColumnOneHeader</h4>
1494 <div class="footer__content dw-mod">
1495 <ul class="small list dw-mod">
1496 @foreach (var footerLink in Model.Area.Item.GetItems("FooterColumnOneLink"))
1497 {
1498 string footerlinkText = footerLink.GetString("LinkText");
1499 string footerlinkUrl = footerLink.GetString("LinkUrl");
1500 <li>
1501 <a class="font-weight-semi-bold" href="@footerlinkUrl">@footerlinkText</a>
1502 </li>
1503 }
1504 </ul>
1505 </div>
1506 </div>
1507 }
1508
1509 @if (!string.IsNullOrEmpty(footerColumnTwoHeader))
1510 {
1511 <div class="grid__col-md-auto">
1512 <h4 class="footer__heading dw-mod">@footerColumnTwoHeader</h4>
1513 <div class="footer__content dw-mod">
1514 <ul class="small list dw-mod">
1515 @foreach (var footerLinkSecond in Model.Area.Item.GetItems("FooterColumnTwoLink"))
1516 {
1517 string footerlinkTextSecondary = footerLinkSecond.GetString("LinkTextSecondary");
1518 string footerlinkUrlSecondary = footerLinkSecond.GetString("LinkUrlSecondary");
1519 <li>
1520 <a class="font-weight-semi-bold" href="@footerlinkUrlSecondary">@footerlinkTextSecondary</a>
1521 </li>
1522 }
1523 </ul>
1524 </div>
1525 </div>
1526 }
1527
1528 @if (!string.IsNullOrEmpty(footerColumnThreeContent) || !string.IsNullOrEmpty(footerColumnThreeHeader))
1529 {
1530 <div class="grid__col-md-auto">
1531 <h4 class="footer__heading dw-mod">@footerColumnThreeHeader</h4>
1532 <div class="footer__content dw-mod">
1533 @footerColumnThreeContent
1534 </div>
1535 </div>
1536 }
1537
1538 @if (Model.Area.Item.GetBoolean("FooterNewsletterSignUp"))
1539 {
1540 <div class="grid__col-md-auto">
1541 <h4 class="footer__heading dw-mod">@Translate("Mailing list", "Mailing list")</h4>
1542 <div class="footer__content dw-mod">
1543 <p>@Translate("Sign up if you would like to receive occasional treats from us", "Sign up if you would like to receive occasional treats from us").</p>
1544 <form class="form dw-mod" name="NewsletterRedirect" action='/Default.aspx' method="get" enctype="multipart/form-data">
1545 <input name="ID" id="ID" value="@newsletterSignUpPageId" type="hidden" />
1546 <div class="form__field-combi">
1547 <input name="NewsletterEmail" id="NewsletterEmail" type="text" class="u-w160px" placeholder='@Translate("Your email address", "Your email address")' />
1548 <input class="btn btn--primary btn--condensed dw-mod" type="submit" id="Submitter" value='@Translate("Go", "Go")' />
1549 </div>
1550 </form>
1551 </div>
1552 </div>
1553 }
1554
1555 <div class="grid__col-12 footer__copyright dw-mod">
1556 <p>@Model.Area.Item.GetString("FooterCopyrightText")</p>
1557 </div>
1558 </div>
1559 </div>
1560 </footer>
1561
1562 }
1563
1564
1565 @* Templates for Typeahead *@
1566 <script id="SearchGroupsTemplate" type="text/x-template">
1567 {{#.}}
1568 <li class="dropdown__item dw-mod" onclick="Search.UpdateGroupSelection(this)" data-group-id="{{id}}">{{name}}</li>
1569 {{/.}}
1570 </script>
1571
1572 <script id="SearchContentTemplate" type="text/x-template">
1573 {{#each .}}
1574 {{#Product}}
1575 {{#ifCond template "!==" "SearchMore"}}
1576 <li class="search-dropdown-item dropdown__item dropdown__item--seperator dw-mod">
1577 <div>
1578 <a href="{{link}}" class="search-dropdown-item__anchor js-typeahead-link u-color-inherit u-pull--left">
1579 <div class="search-dropdown-item__image u-margin-right u-pull--left {{noimage}} u-hidden-xs u-hidden-xxs"><img src="/Admin/Public/GetImage.ashx?width=45&height=36&crop=5&FillCanvas=True&Compression=75&image={{image}}" alt="{{name}}"></div>
1580 <div class="search-dropdown-item__content u-pull--left mb-3">
1581 <div class="small font-weight-normal js-typeahead-name">@Translate("Product number") {{number}}</div>
1582 <div class="small font-weight-normal js-typeahead-name">{{name}}</div>
1583 @if (!onlyPreview)
1584 {
1585 <div class="{{onlyPreview}} search-product-price font-weight-normal">{{price}}</div>
1586 }
1587 </div>
1588 </a>
1589 <div class="u-w80px hidden-xs-down">
1590 <a href="{{link}}" class="btn btn--secondary btn--condensed btn--full u-no-margin dw-mod {{hideViewMore}} js-ignore-click-outside">@Translate("View")</a>
1591 </div>
1592 </div>
1593 </li>
1594 {{/ifCond}}
1595 {{#ifCond template "===" "SearchMore"}}
1596 {{>SearchMore}}
1597 {{/ifCond}}
1598 {{/Product}}
1599 {{else}}
1600 <li class="dropdown__item dropdown__item--seperator dw-mod">
1601 @Translate("No products found")
1602 </li>
1603 {{/each}}
1604 </script>
1605 <script id="SearchMore" type="text/x-template">
1606 <li class="dropdown__item dropdown__item--not-selectable dw-mod">
1607 <a href="/Default.aspx?ID=@productsPageId&Search={{searchParameter}}&GroupID={{groupId}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link">
1608 @Translate("View all")
1609 </a>
1610 </li>
1611 </script>
1612
1613 @* Templates for the mini cart *@
1614 <script id="MiniCartCounterContent" type="text/x-template">
1615 {{#.}}
1616 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Cart")</span>
1617 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-start">(</span>
1618 <span class="js-mini-cart-counter-content mini-cart__counter-quantity">{{numberofproducts}}</span>
1619 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-close">)</span>
1620 {{/.}}
1621 </script>
1622
1623 <script id="MiniCartContent" type="text/x-template">
1624 {{#.}}
1625 <div class="mini-cart-dropdown__inner {{isempty}} dw-mod">
1626 <h4 class="u-ta-left u-no-margin u-margin-bottom u-margin-top font-weight-normal h4">@Translate("Shopping cart")</h4>
1627 <div class="mini-cart-dropdown__body dw-mod">
1628 <table class="table table-responsive mini-cart-table border-bottom dw-mod">
1629 <thead>
1630 <tr class="font-weight-normal h6">
1631 <hr />
1632 <td> </td>
1633 <td>@Translate("Product")</td>
1634 <td class="u-ta-center">@Translate("Qty")</td>
1635 <td class="u-ta-right" width="120">@Translate("Total price excl. vat")</td>
1636 </tr>
1637 </thead>
1638 {{#OrderLines}}
1639 {{#ifCond template "===" "CartOrderline"}}
1640 {{>MiniCartOrderline}}
1641 {{/ifCond}}
1642 {{#ifCond template "===" "CartOrderlineMobile"}}
1643 {{>MiniCartOrderlineMobile}}
1644 {{/ifCond}}
1645 {{#ifCond template "===" "CartOrderlineDiscount"}}
1646 {{>MiniCartOrderlineDiscount}}
1647 {{/ifCond}}
1648 {{/OrderLines}}
1649 <tr>
1650 <td class="h6 font-weight-normal">@Translate("Shipping")</td>
1651 <td colspan="3" class="u-ta-right" width="130">{{shippingfee}}</td>
1652 </tr>
1653 <tr class="mini-cart-totals dw-mod">
1654 <td colspan="2" class="h6 font-weight-semi-bold">@Translate("Total")</td>
1655 <td class="h6 font-weight-semi-bold u-ta-right js-mini-cart-quantity">{{numberofproducts}}</td>
1656 <td class="h6 font-weight-semi-bold u-ta-right" width="130">
1657
1658 {{totalprice}}
1659
1660 </td>
1661 </tr>
1662 </table>
1663 </div>
1664 <table class="table mini-cart-table dw-mod">
1665 <tbody>
1666 <tr class="mini-cart-orderlines__footer dw-mod">
1667 <td colspan="2"><button type="button" class="btn btn--secondary btn--condensed u-pull--left u-no-margin btn--sm" onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=EmptyCart', false);">@Translate("Empty cart")</button></td>
1668 <td colspan="2" class="u-ta-right"><a href="/Default.aspx?ID=@cartPageId" class="btn btn--primary u-pull--right u-no-margin btn--sm">@Translate("Proceed to checkout")</a></td>
1669 </tr>
1670 </tbody>
1671 </table>
1672 </div>
1673 {{/.}}
1674 </script>
1675
1676 <script id="MiniCartOrderline" type="text/x-template">
1677 <tr class="{{isempty}}">
1678 <td class="mini-cart-table__product-image"><a href="{{link}}" class="{{hideimage}}"><img src="/Admin/Public/GetImage.ashx?width=300&height=300&crop=5&Compression=75&image={{image}}" alt="{{name}}"></a></td>
1679 <td>
1680 <a href="{{link}}" class="mini-cart-orderlines__name product-number">@Translate("Product number") {{productnumber}}</a>
1681 <a href="{{link}}" class="mini-cart-orderlines__name font-weight-normal small">{{name}}</a>
1682
1683 @* IF SENTENCE FROM DISCOUNT LIST IN JSON FEED FILE (NZPRODUTLISTFEED.CSHTML) *@
1684
1685 {{#if Discount.[1].discountPrice}}
1686 <div class="js-popup minicart_popup_container">
1687 <a class="js-popup-trigger">@Translate("DiscountText")</a>
1688
1689 <div class="js-popup-modal minicart_popup_modal">
1690 <div class="js-popout-close nz-icon icon-nz-close-circled"></div>
1691
1692 <ul class="grid__col-12 pt-5 p-0 d-flex flex-row flex-wrap">
1693 @* FOREACH DISCOUNT LOOP FROM JSON FEED *@
1694 {{#each Discount}}
1695 {{#unless @@first}}
1696
1697 <li class="p-0 mb-0 grid__col-12 align-items-start">@Translate("UnitPriceText") {{this.discountQuantity}} @Translate("UnitPriceTextStk")</li>
1698 <li class="p-0 pb-3 grid__col-12 align-items-start">{{this.discountPrice}} {{this.discountCurrency}}</li>
1699 {{/unless}}
1700 {{/each}}
1701
1702 </ul>
1703 </div>
1704
1705 </div>
1706 {{/if}}
1707
1708 <div class="item-number">{{unitname}}</div>
1709
1710 <span class="small product-card__quantity-alert js-product-quantity-error-{{id}} {{limitReached}}">@Translate("Max stock level is reached")</span>
1711
1712 </td>
1713 <td class="u-ta-right">
1714 <div class="mini-cart-quantity">
1715 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=DecOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__subtract" data-icon-nz="minus"></span>
1716 <input class="mini-cart-quantity__input js-quantity-input text-center" id="Quantity_{{id}}" name="Quantity{{id}}" type="number" value="{{quantity}}" min="1" style="pointer-events:none;" />
1717 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=IncOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__add" data-icon-nz="plus"></span>
1718 </div>
1719 </td>
1720 <td class="u-ta-right mini-cart-remove-product-container">
1721 <span class="minicart-totalprice">
1722 <span>
1723 {{totalunitpricewithdiscounts}}
1724 </span>
1725
1726
1727 </span><a class="btn btn--link u-no-margin mini-cart-remove-product mt-1 pt-0 pr-0 text-right" onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=DelOrderLine&key={{orderLineId}}', false);">@Translate("Remove product")</a>
1728 </td>
1729 </tr>
1730 </script>
1731
1732 <script id="MiniCartOrderlineMobile" type="text/x-template">
1733 <tr class="{{isempty}}">
1734 <td class="mini-cart-table__product-image"><a href="{{link}}" class="{{hideimage}}"><img src="/Admin/Public/GetImage.ashx?width=50&height=50&crop=5&Compression=75&image={{image}}" alt="{{name}}"></a></td>
1735 <td>
1736 <a href="{{link}}" class="mini-cart-orderlines__name">{{name}}</a>
1737 <a href="{{link}}" class="mini-cart-orderlines__name item-number">{{variantname}}</a>
1738 <div class="item-number">{{unitname}}</div>
1739 </td>
1740 <td class="u-ta-right">
1741 <div class="mini-cart-quantity">
1742 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=DecOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__subtract" data-icon-nz="minus"></span>
1743 <input class="mini-cart-quantity__input js-quantity-input text-center" id="Quantity_{{id}}" name="Quantity{{id}}" type="number" value="{{quantity}}" min="1" />
1744 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=IncOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__add" data-icon-nz="plus"></span>
1745 </div>
1746 </td>
1747 <td class="u-ta-right">{{totalprice}}</td>
1748 </tr>
1749 </script>
1750
1751 <script id="MiniCartOrderlineDiscount" type="text/x-template">
1752
1753
1754 </script>
1755
1756 <!-- Javascript -->
1757 <script src="/Files/Templates/Designs/Rapido/js/handlebars-v4.0.11.js"></script>
1758 <script src="/assets/javascripts/lib/searchparams-polyfill.js"></script>
1759 <script src="/Files/Templates/Designs/Rapido/js/master.min.js"></script>
1760
1761 @if (Model.Area.Item.GetBoolean("UseCustomJavascript"))
1762 {
1763 <script>window.jQuery || document.write('<script src="/assets/javascripts/lib/jquery-3.2.1.min.js"><\/script>')</script>
1764 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
1765 <script src="/assets/javascripts/lib/es6-shim.min.js"></script>
1766 <script src="/Files/Templates/Designs/Rapido/js/custom.min.js?v=@assetsVersion"></script>
1767 }
1768
1769 <script>
1770 Wireframe.Init(@wireframeMode.ToLower());
1771 </script>
1772
1773
1774
1775
1776 <!-- Modal -->
1777 <div class="nz-modal fade js-video-modal" tabindex="-1" role="dialog" aria-hidden="true">
1778 <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
1779 <div class="modal-content">
1780 <div class="modal-header">
1781 <button type="button" class="close btn-primary" data-dismiss="modal" aria-label="Close">
1782 <span aria-hidden="true" data-icon-nz="close"></span>
1783 </button>
1784 </div>
1785 <div class="modal-body js-modal-content p-0">
1786
1787 <div class="embed-responsive embed-responsive-16by9">
1788 <iframe class="js-video-container embed-responsive-item" data-cookieconsent="marketing" data-src="" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
1789 </div>
1790 </div>
1791 </div>
1792 </div>
1793 </div>
1794
1795 <!-- Alert Modal -->
1796 <div class="nz-modal fade alert-modal js-alert-modal" tabindex="-1" role="dialog" aria-hidden="true">
1797 <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
1798 <div class="modal-content">
1799 <div class="modal-header">
1800 <button type="button" class="close btn-primary" data-dismiss="modal" aria-label="Close">
1801 <span aria-hidden="true" data-icon-nz="close"></span>
1802 </button>
1803 </div>
1804 <div class="modal-body js-modal-content p-0">
1805 <div class="cookies-text text-center">
1806 <p>
1807 @Translate("CookiesMarketing", "Please accept marketing cookies to watch this video")
1808 </p>
1809 <a href="javascript:Cookiebot.renew()" class="btn btn-nav-lg btn-outline-secondary ">
1810 @Translate("CookiesSettings", "Update cookie settings")
1811 </a>
1812 </div>
1813
1814 </div>
1815 </div>
1816 </div>
1817 </div>
1818
1819 </body>
1820 </html>
1821