Error executing template "Designs/Rapido/_parsed/NZShopPage.parsed.cshtml"
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Dynamicweb.Data.DatabaseConnectionProvider.CreateConnection(Boolean open)
at Dynamicweb.Data.DatabaseConnectionProvider.CreateConnection()
at Dynamicweb.Data.DatabaseProvider.CreateConnection()
at Dynamicweb.Data.Database.CreateConnection()
at Dynamicweb.Data.Database.CreateDataReader(String sql, IDbConnection connection, IDbTransaction transaction, Int32 commandTimeout, Dictionary`2 sqlParams)
at Dynamicweb.Ecommerce.Products.GroupShopRelation.get_CachedGroupShopRelations(GroupShopRelationType type)
at Dynamicweb.Ecommerce.Products.GroupShopRelation.get_GroupShopRelationByGroupId(String theGroupId, String theShopId)
at Dynamicweb.Ecommerce.Products.Group.get_IsTopGroup()
at Dynamicweb.Ecommerce.Shops.Shop.GetTopLevelGroups(String languageId)
at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.MakeGroupTree(Page page, NavigationItem parentNode)
at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.Process(NavigationItem node)
at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.ProcessTree(RootNavigationItem rootNode, NavigationType navigationType)
at Dynamicweb.Frontend.XmlNavigation.MakeXml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, Int32 selectedAreaId)
at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, String name, String xsltPath, Int32 selectedAreaId, Boolean sitemapMode, NameValueCollection settings, NameValueCollection attributes, IncludeMode mode)
at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(NameValueCollection settings, NameValueCollection attributes)
at Dynamicweb.Rendering.TemplateBase`1.RenderNavigation(Object settings)
at CompiledRazorTemplates.Dynamic.RazorEngine_969cdcdf1b424ef1bff7029e4d820af4.<RenderHeaderNavigation>b__2_0(TextWriter __razor_helper_writer) in E:\Solutions\S_DW_Lauridsen\lauridsen-live\Files\Templates\Designs\Rapido\_parsed\NZShopPage.parsed.cshtml:line 1176
at RazorEngine.Templating.TemplateWriter.WriteTo(TextWriter writer)
at RazorEngine.Templating.TemplateBase.Write(TemplateWriter helper)
at CompiledRazorTemplates.Dynamic.RazorEngine_969cdcdf1b424ef1bff7029e4d820af4.Execute() in E:\Solutions\S_DW_Lauridsen\lauridsen-live\Files\Templates\Designs\Rapido\_parsed\NZShopPage.parsed.cshtml:line 666
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
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()
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:2,State:0,Class:20
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