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>&nbsp;</text>@Translate("is impersonated by")<text>&nbsp;</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&amp;height=1100&amp;crop=0&amp;Compression=85&amp;DoNotUpscale=true&amp;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&amp;height=1100&amp;crop=5&amp;Compression=85&amp;DoNotUpscale=true&amp;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>&nbsp;</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