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