Error executing template "Designs/Rapido/_parsed/NZNewsArticle.parsed.cshtml"
System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: Exception of type 'System.InvalidOperationException' was thrown.
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.VerifyIntegrity()
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.TryGetValue(TKey key, TValue& value)
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValue(TKey key, CreateValueCallback createValueCallback)
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetOrCreateValue(TKey key)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CSharpSyntaxNode.GetStructure(SyntaxTrivia trivia)
   at Microsoft.CodeAnalysis.SyntaxTrivia.GetStructure()
   at Microsoft.CodeAnalysis.SyntaxNode.<DescendantTriviaIntoTrivia>d__171.MoveNext()
   at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNode node, Func`2 filter, List`1& directives)
   at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNodeOrToken& node, Func`2 filter, List`1& directives)
   at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.GetContexts(SyntaxTree tree, Boolean isGeneratedCode)
   at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.Create(SyntaxTree tree, Boolean isGeneratedCode)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.EnsureNullableContextMapInitialized()
   at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxTree syntaxTree, Int32 position)
   at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxToken token)
   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.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.Imports.FromSyntax(CSharpSyntaxNode declarationSyntax, InContainerBinder binder, ConsList`1 basesBeingResolved, Boolean inUsing)
   at Microsoft.CodeAnalysis.CSharp.InContainerBinder.<>c__DisplayClass6_0.<.ctor>b__0(ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.InContainerBinder.GetImports(ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetImports(SingleNamespaceDeclaration declaration)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
   at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
   at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceModuleSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
   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()
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: Exception of type 'System.InvalidOperationException' was thrown.
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.VerifyIntegrity()
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.TryGetValue(TKey key, TValue& value)
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValue(TKey key, CreateValueCallback createValueCallback)
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetOrCreateValue(TKey key)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CSharpSyntaxNode.GetStructure(SyntaxTrivia trivia)
   at Microsoft.CodeAnalysis.SyntaxTrivia.GetStructure()
   at Microsoft.CodeAnalysis.SyntaxNode.<DescendantTriviaIntoTrivia>d__171.MoveNext()
   at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNode node, Func`2 filter, List`1& directives)
   at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNodeOrToken& node, Func`2 filter, List`1& directives)
   at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.GetContexts(SyntaxTree tree, Boolean isGeneratedCode)
   at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.Create(SyntaxTree tree, Boolean isGeneratedCode)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.EnsureNullableContextMapInitialized()
   at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxTree syntaxTree, Int32 position)
   at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxToken token)
   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.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.Imports.FromSyntax(CSharpSyntaxNode declarationSyntax, InContainerBinder binder, ConsList`1 basesBeingResolved, Boolean inUsing)
   at Microsoft.CodeAnalysis.CSharp.InContainerBinder.<>c__DisplayClass6_0.<.ctor>b__0(ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.InContainerBinder.GetImports(ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetImports(SingleNamespaceDeclaration declaration)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
   at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
   at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)
---> (Inner Exception #0) System.InvalidOperationException: Exception of type 'System.InvalidOperationException' was thrown.
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.VerifyIntegrity()
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.TryGetValue(TKey key, TValue& value)
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValue(TKey key, CreateValueCallback createValueCallback)
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetOrCreateValue(TKey key)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CSharpSyntaxNode.GetStructure(SyntaxTrivia trivia)
   at Microsoft.CodeAnalysis.SyntaxTrivia.GetStructure()
   at Microsoft.CodeAnalysis.SyntaxNode.<DescendantTriviaIntoTrivia>d__171.MoveNext()
   at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNode node, Func`2 filter, List`1& directives)
   at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNodeOrToken& node, Func`2 filter, List`1& directives)
   at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.GetContexts(SyntaxTree tree, Boolean isGeneratedCode)
   at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.Create(SyntaxTree tree, Boolean isGeneratedCode)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.EnsureNullableContextMapInitialized()
   at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxTree syntaxTree, Int32 position)
   at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxToken token)
   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.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.Imports.FromSyntax(CSharpSyntaxNode declarationSyntax, InContainerBinder binder, ConsList`1 basesBeingResolved, Boolean inUsing)
   at Microsoft.CodeAnalysis.CSharp.InContainerBinder.<>c__DisplayClass6_0.<.ctor>b__0(ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.InContainerBinder.GetImports(ConsList`1 basesBeingResolved)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetImports(SingleNamespaceDeclaration declaration)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
   at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)<---
<---


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 @* 749 @if (Model.PropertyItem.GetList("ShowBreadcrumb").SelectedValue == "True") 750 { 751 <div class="center-container"> 752 <div class="grid__col-12 grid__col--bleed-y"> 753 <ul class="breadcrumb"> 754 <li class="breadcrumb__item dw-mod"> 755 <a href="/">@Model.Area.FirstPage.Name</a> 756 </li> 757 @RenderNavigation(new 758 { 759 id = "breadcrumb", 760 template = "Breadcrumb.xslt" 761 }) 762 </ul> 763 </div> 764 </div> 765 } 766 *@ 767 768 <div class="grid news-article-page center-container"> 769 @* Divs count is equal divs in ParagraphContainer.cshtml *@ 770 @Model.Placeholder("dwcontent", "content", "default:true;sort:1") 771 </div> 772 <div class="grid news-article-page news-article-page--full-width"> 773 @* Divs count is equal divs in ParagraphContainer.cshtml *@ 774 @Model.Placeholder("FullWidthContent") 775 </div> 776 777 778 779 </div> 780 </main> 781 @RenderFooter() 782 783 784 <!-- Content rendering helpers --> 785 @helper MobileNavigation(string userInitials) 786 { 787 int pageId = Model.TopPage.ID; 788 string mobileNavigationLevels = Model.Area.Item.GetBoolean("MobileNavigationLevels") ? Model.Area.Item.GetString("MobileNavigationLevels") : "3"; 789 790 bool showCreateAccountLink = Model.Area.Item.GetBoolean("ShowCreateAccountLink"); 791 792 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 793 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 794 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 795 string navigationText = Model.Area.Item.GetString("NavigationPhoneText"); 796 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : ""; 797 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : ""; 798 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : ""; 799 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : ""; 800 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : ""; 801 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink"); 802 string navigationIconUserWhite = Model.Area.Item.GetFile("NavigationIconUserWhite") != null ? Model.Area.Item.GetFile("NavigationIconUserWhite").Path : ""; 803 string contactNumber = Model.Area.Item.GetString("ContactNumber"); 804 int productsPageId = GetPageIdByNavigationTag("ProductsPage"); 805 int productsSearchFeedId = productsPageId; 806 string searchPlaceholder = Translate("Search"); 807 string searchValue = HttpContext.Current.Request.QueryString.Get("Search") != null ? HttpContext.Current.Request.QueryString.Get("Search") : ""; 808 string searchQuery = HttpContext.Current.Request.QueryString.Get("Search"); 809 string myDashboardPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("CustomerDashboard").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerDashboard").ToString() : GetPageIdByNavigationTag("CustomerDashboard").ToString(); 810 811 string myProfilePageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerProfile").ToString() : GetPageIdByNavigationTag("CustomerProfile").ToString(); 812 string myOrdersPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders").ToString() : GetPageIdByNavigationTag("CustomerOrders").ToString(); 813 string myFavoritesPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerFavorites").ToString() : GetPageIdByNavigationTag("CustomerFavorites").ToString(); 814 bool showMyProfileLink = Model.Area.Item.GetBoolean("ShowMyProfileLink"); 815 bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink"); 816 bool showMyFavoritesLink = Model.Area.Item.GetBoolean("ShowMyFavoritesLink"); 817 818 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar"); 819 int startLevel = renderPagesInToolBar ? 1 : 0; 820 bool isLrtSite = Model.Area.Item.GetBoolean("LRT_Theme"); 821 822 bool onlyPreview = Model.Area.Item.GetBoolean("OnlyPreviewForAnonymous"); 823 824 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 825 { 826 <!-- Trigger for mobile navigation --> 827 <input type="checkbox" id="MobileNavTrigger" class="mobile-nav-trigger" /> 828 829 <!-- Mobile navigation --> 830 <nav class="mobile-navigation dw-mod"> 831 @if (Model.CurrentUser.ID > 0) 832 { 833 string userName = Model.CurrentUser.FirstName != null ? Model.CurrentUser.FirstName : ""; 834 userName += " " + Model.CurrentUser.LastName != null ? Model.CurrentUser.LastName : ""; 835 userName += userName == "" && Model.CurrentUser.UserName != null ? Model.CurrentUser.UserName : ""; 836 837 <ul class="menu menu-mobile"> 838 <li class="menu-mobile__item w-50 bg-primary menu-mobile__container"> 839 <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> 840 </li> 841 842 <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"> 843 <input type="text" class="u-full-width js-typeahead-search-field u-no-margin mobile-search-input" placeholder="@searchPlaceholder" value="@searchValue"> 844 <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> 845 </li> 846 847 </ul> 848 849 } 850 <ul class="menu menu-mobile"> 851 852 @if (Model.CurrentUser.ID <= 0) 853 { 854 <li class="menu-mobile__item w-50 bg-primary menu-mobile__container"> 855 <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> 856 </li> 857 <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"> 858 <input type="text" class="u-full-width js-typeahead-search-field u-no-margin mobile-search-input" placeholder="@searchPlaceholder" value="@searchValue"> 859 <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> 860 </li> 861 862 } 863 864 </ul> 865 866 @RenderNavigation(new 867 { 868 id = "mobilenavigation", 869 cssclass = "menu menu-mobile dwnavigation", 870 startLevel = 0, 871 ecomStartLevel = 1, 872 endlevel = 5, 873 expandmode = "all", 874 template = "BaseMenuForMobile.xslt" 875 }) 876 877 <ul class="menu menu-mobile"> 878 @if (Model.CurrentUser.ID <= 0) 879 { 880 881 if (showCreateAccountLink) 882 { 883 <li class="menu-mobile__item menu-mobile__container"> 884 <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> 885 </li> 886 } 887 } 888 889 else 890 { 891 if (showMyProfileLink && User.IsExtranetUserLoggedIn()) 892 { 893 <li class="menu-mobile__item"> 894 <a href="tel:@contactNumber" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"> 895 <img src="@navigationIcon" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText"> 896 <span>@contactNumber</span> 897 </a> 898 </li> 899 } 900 901 <li class="menu-mobile__item"> 902 <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> 903 </li> 904 } 905 906 907 908 @if (Model.Languages.Count > 0 && !isLrtSite) 909 { 910 string selectedLanguage = ""; 911 912 foreach (var lang in Model.Languages) 913 { 914 if (lang.IsCurrent) 915 { 916 selectedLanguage = lang.Name; 917 } 918 } 919 920 <li class="menu-mobile__item dw-mod"> 921 <label for="MobileMenuCheck_Language" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"> @selectedLanguage</label> 922 <input id="MobileMenuCheck_Language" type="checkbox" class="expand-trigger"> 923 <label for="MobileMenuCheck_Language" class="menu-mobile__trigger"></label> 924 <ul class="menu-mobile menu-mobile__submenu expand-menu"> 925 @foreach (var lang in Model.Languages) 926 { 927 if (lang.Name != "Deutcsh") 928 { 929 <li class="menu-mobile__item dw-mod"> 930 <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> 931 </li> 932 } 933 } 934 </ul> 935 </li> 936 } 937 938 </ul> 939 </nav> 940 941 <label class="mobile-nav-trigger-off" for="MobileNavTrigger"></label> 942 if (!onlyPreview) 943 { 944 <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> 945 } 946 } 947 } 948 949 @helper LoginModal() 950 { 951 int pageId = Model.TopPage.ID; 952 string topLayout = Model.Area.Item.GetList("LayoutTop").SelectedValue; 953 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 954 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage"); 955 string forgotPasswordPageId = signInProfilePageId.ToString() + "&LoginAction=Recovery"; 956 string userSignedInError = !Model.LogOnFailed ? "" : "checked"; 957 string userSignedInErrorText = ""; 958 959 if (Model.LogOnFailed) 960 { 961 switch (Model.LogOnFailedReason) 962 { 963 case Dynamicweb.Security.UserManagement.LogOnFailedReason.PasswordLengthInvalid: 964 userSignedInErrorText = Translate("Password length is invalid"); 965 break; 966 case Dynamicweb.Security.UserManagement.LogOnFailedReason.IncorrectLogin: 967 userSignedInErrorText = Translate("Invalid email or password"); 968 break; 969 case Dynamicweb.Security.UserManagement.LogOnFailedReason.ExceededFailedLogOnLimit: 970 userSignedInErrorText = Translate("You have exceeded the limit of allowed login attempts. The user account is temporarily locked"); 971 break; 972 case Dynamicweb.Security.UserManagement.LogOnFailedReason.LoginLocked: 973 userSignedInErrorText = Translate("The user account is temporarily locked"); 974 break; 975 case Dynamicweb.Security.UserManagement.LogOnFailedReason.PasswordExpired: 976 userSignedInErrorText = Translate("The password has expired and needs to be renewed"); 977 break; 978 default: 979 userSignedInErrorText = Translate("An unknown error occured"); 980 break; 981 } 982 } 983 <!-- Trigger for the login modal --> 984 985 <input type="checkbox" id="SignInModalTrigger" class="modal-trigger @topLayout" @userSignedInError /> 986 987 <!-- Login modal --> 988 <div class="modal-container"> 989 <label for="SignInModalTrigger" id="SignInModalOverlay" class="modal-overlay"></label> 990 <div class="modal modal--xs login-modal" id="SignInModal"> 991 <label for="SignInModalTrigger" class="modal__close"></label> 992 <div class="modal__header"> 993 <h1 class="mb-0">@Translate("Sign in")</h1> 994 </div> 995 <div class="modal__body"> 996 <form method="post" id="LoginForm" action="?LoggedIn=true" class="u-no-margin"> 997 <input type="hidden" name="ID" value="@pageId" /> 998 <input type="hidden" name="DWExtranetUsernameRemember" value="True" /> 999 <input type="hidden" name="DWExtranetPasswordRemember" value="True" /> 1000 <label for="LoginUsername">@Translate("Type Email")</label> 1001 <input type="text" class="u-full-width" id="LoginUsername" name="username" placeholder="@Translate(" placerholder email")" /> 1002 <label for="LoginPassword">@Translate("Type Password")</label> 1003 <input type="password" class="u-full-width" id="LoginPassword" name="password" placeholder="@Translate(" placeholder password")" /> 1004 <div class="field-error dw-mod">@userSignedInErrorText</div> 1005 <label> 1006 <input type="checkbox" id="RememberMe" name="Autologin" checked="checked" value="True"> 1007 <span>@Translate("Remember me", "Remember me")</span> 1008 </label> 1009 <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> 1010 <a class="text-primary float-right btn-sm" href="/Default.aspx?id=@forgotPasswordPageId">@Translate("Forgot your password?", "Forgot your password?")</a> 1011 <div class="splitter mb-3 mt-4"> 1012 <span class="splitter__text">@Translate("CreateAccountText")</span> 1013 <hr class="splitter__line"> 1014 </div> 1015 <a class="btn btn-secondary bg-black w-100 mt-0" href="/default.aspx?ID=@createAccountPageId">@Translate("Create account")?</a> 1016 </form> 1017 </div> 1018 </div> 1019 </div> 1020 1021 } 1022 1023 @helper RenderHeaderNavigation() 1024 { 1025 bool megaMenu = Model.Area.Item.GetList("NavigationMegaMenu").SelectedValue.ToLower() == "true" ? true : false; 1026 string megamenuPromotionImage = Model.Area.Item.GetFile("NavigationMegamenuPromotionImage") != null ? Model.Area.Item.GetFile("NavigationMegamenuPromotionImage").Path : ""; 1027 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar"); 1028 int startLevel = renderPagesInToolBar ? 1 : 0; 1029 1030 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 1031 { 1032 if (!megaMenu) 1033 { 1034 @RenderNavigation(new 1035 { 1036 id = "topnavigation", 1037 cssclass = "menu dw-mod dwnavigation", 1038 startLevel = 0, 1039 ecomStartLevel = @startLevel, 1040 endlevel = 5, 1041 expandmode = "all", 1042 template = "BaseMenuWithDropdown.xslt" 1043 }); 1044 } 1045 1046 else 1047 { 1048 @RenderNavigation(new 1049 { 1050 id = "topnavigation", 1051 cssclass = "menu dw-mod dwnavigation", 1052 startLevel = @startLevel, 1053 ecomStartLevel = @startLevel, 1054 endlevel = 5, 1055 promotionImage = megamenuPromotionImage, 1056 promotionLink = Model.Area.Item.GetString("NavigationMegamenuPromotionLink"), 1057 expandmode = "all", 1058 template = "BaseMegaMenu.xslt" 1059 }); 1060 } 1061 } 1062 } 1063 1064 @helper MobileNavigationTrigger() 1065 { 1066 @* Mobile navigation trigger *@ 1067 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 1068 { 1069 <div class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1070 <label for="MobileNavTrigger" class="mobile-nav-trigger-button menu__link dw-mod"></label> 1071 </div> 1072 } 1073 } 1074 1075 1076 1077 @helper RenderLanguageSelector(string type = "inNavigation") 1078 { 1079 1080 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"; 1081 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1082 bool isLrtSite = Model.Area.Item.GetBoolean("LRT_Theme"); 1083 1084 if (Model.Languages.Count > 1 && !isLrtSite) 1085 { 1086 <li class="@liClasses is-dropdown is-dropdown--no-icon"> 1087 <div class="@menuLinkClass menu__link--icon dw-mod text-dark text-uppercase"> 1088 1089 @foreach (var langnav in Model.Languages) 1090 { 1091 1092 if (langnav.IsCurrent && langnav.Name != "Deutcsh") 1093 { 1094 string langInfonav = Dynamicweb.Services.Areas.GetArea(langnav.ID).EcomCountryCode.ToLower(); 1095 1096 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@langInfonav</span> 1097 <img alt="arrow-down" class="d-inline-block align-text-middle lang-arrow-down" src="/Files/Images/arrow-down.svg" /> 1098 } 1099 1100 } 1101 1102 </div> 1103 <div class="menu menu--dropdown dw-mod"> 1104 @foreach (var lang in Model.Languages) 1105 { 1106 1107 1108 string langInfo = lang.Name; 1109 if (langInfo != "Deutcsh") 1110 { 1111 <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> 1112 } 1113 } 1114 </div> 1115 </li> 1116 } 1117 1118 1119 1120 1121 } 1122 1123 @helper RenderMiniCart(string type = "inNavigation") 1124 { 1125 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod" : "menu__item menu__item--horizontal menu--clean dw-mod"; 1126 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1127 1128 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 1129 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 1130 int cartPageId = GetPageIdByNavigationTag("CartPage"); 1131 double cartProductsCount = Model.Cart.TotalProductsCount; 1132 string navigationText = Model.Area.Item.GetString("NavigationPhoneText"); 1133 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : ""; 1134 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : ""; 1135 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : ""; 1136 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : ""; 1137 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : ""; 1138 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink"); 1139 string openingBracket = "("; 1140 string closingBracket = ")"; 1141 1142 @* Mini cart *@ 1143 <li class="@liClasses"> 1144 <div class="mini-cart dw-mod m-0"> 1145 <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() +'')"> 1146 <img src="@navigationIconThird" class="d-inline-block align-top" alt="@navigationIconThird"> 1147 <div class="mini-cart__counter mini-cart__counter--inline dw-mod"> 1148 <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"> 1149 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Cart")</span> 1150 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-start">@openingBracket</span> 1151 <span class="js-mini-cart-counter-content mini-cart__counter-quantity">@cartProductsCount</span> 1152 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-close">@closingBracket</span> 1153 </div> 1154 </div> 1155 </a> 1156 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 1157 { 1158 <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> 1159 } 1160 </div> 1161 </li> 1162 } 1163 1164 @helper RenderSignIn(string type = "inNavigation", string userInitials = "") 1165 { 1166 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"; 1167 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1168 1169 int pageId = Model.TopPage.ID; 1170 string myProfilePageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerProfile").ToString() : GetPageIdByNavigationTag("CustomerProfile").ToString(); 1171 string myOrdersPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders").ToString() : GetPageIdByNavigationTag("CustomerOrders").ToString(); 1172 string myDashboardPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("CustomerDashboard").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerDashboard").ToString() : GetPageIdByNavigationTag("CustomerDashboard").ToString(); 1173 string myFavoritesPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerFavorites").ToString() : GetPageIdByNavigationTag("CustomerFavorites").ToString(); 1174 string mySavedCardsPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("SavedCards").ToString() : GetPageIdByNavigationTag("SavedCards").ToString(); 1175 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 1176 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage"); 1177 string forgotPasswordPageId = signInProfilePageId.ToString() + "&LoginAction=Recovery"; 1178 1179 bool showCreateAccountLink = Model.Area.Item.GetBoolean("ShowCreateAccountLink"); 1180 bool showMyProfileLink = Model.Area.Item.GetBoolean("ShowMyProfileLink"); 1181 bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink"); 1182 bool showMyFavoritesLink = Model.Area.Item.GetBoolean("ShowMyFavoritesLink"); 1183 bool showMySavedCardsLink = Model.Area.Item.GetBoolean("ShowMySavedCardsLink"); 1184 1185 string navigationText = Model.Area.Item.GetString("NavigationPhoneText"); 1186 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : ""; 1187 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : ""; 1188 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : ""; 1189 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : ""; 1190 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : ""; 1191 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink"); 1192 1193 @* Sign in + Customer center links *@ 1194 <li class="@liClasses"> 1195 <div class="@menuLinkClass is-dropdown is-dropdown--no-icon dw-mod"> 1196 <img src="@navigationIconFourth" class="d-inline-block align-text-top" alt="@Translate(" Userprofile")"> 1197 @if (Model.CurrentUser.ID <= 0) 1198 { 1199 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Login")</span> 1200 } 1201 else 1202 { 1203 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Model.CurrentUser.FirstName</span> 1204 } 1205 <div class="menu menu--dropdown sign-in-dropdown dw-mod"> 1206 <ul class="list list--clean dw-mod"> 1207 @if (Model.CurrentUser.ID <= 0) 1208 { 1209 <li> 1210 <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> 1211 </li> 1212 if (showCreateAccountLink) 1213 { 1214 <li> 1215 <a href="/default.aspx?ID=@createAccountPageId" class="btn btn--secondary u-no-margin">@Translate("Create account")</a> 1216 </li> 1217 } 1218 if (showMyProfileLink || showMyOrdersLink || showMyFavoritesLink || showMySavedCardsLink && User.IsExtranetUserLoggedIn()) 1219 { 1220 <li class="list__seperator dw-mod"></li> 1221 } 1222 } 1223 1224 else 1225 { 1226 if (!string.IsNullOrWhiteSpace(myDashboardPageId)) 1227 { 1228 <li> 1229 <a href="/default.aspx?ID=@myDashboardPageId" class="list__link dw-mod"><i class="fa fa-user"></i> @Translate("My Account")</a> 1230 </li> 1231 } 1232 } 1233 1234 @if (showMyProfileLink && User.IsExtranetUserLoggedIn()) 1235 { 1236 <li> 1237 <a href="/default.aspx?ID=@myProfilePageId" class="list__link dw-mod"><i class="fa fa-user"></i> @Translate("My Profile")</a> 1238 </li> 1239 } 1240 1241 @if (showMyOrdersLink && User.IsExtranetUserLoggedIn()) 1242 { 1243 <li> 1244 <a href="/default.aspx?ID=@myOrdersPageId" class="list__link dw-mod"><i class="fa fa-list"></i> @Translate("My Orders")</a> 1245 </li> 1246 } 1247 1248 @if (showMyFavoritesLink && User.IsExtranetUserLoggedIn()) 1249 { 1250 <li> 1251 <a href="/default.aspx?ID=@myFavoritesPageId" class="list__link dw-mod"><i class="fa fa-star"></i> @Translate("My Favorites")</a> 1252 </li> 1253 } 1254 1255 @if (showMySavedCardsLink) 1256 { 1257 <li> 1258 <a href="/default.aspx?ID=@mySavedCardsPageId" class="list__link dw-mod"><i class="fa fa-credit-card"></i> @Translate("My Saved cards")</a> 1259 </li> 1260 } 1261 1262 @if (Model.CurrentUser.ID > 0) 1263 { 1264 if (showMyProfileLink || showMyOrdersLink || showMyFavoritesLink || showMySavedCardsLink) 1265 { 1266 <li class="list__seperator dw-mod"></li> 1267 } 1268 <li> 1269 <a href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId" class="list__link dw-mod">@Translate("Sign out")</a> 1270 </li> 1271 } 1272 </ul> 1273 </div> 1274 </div> 1275 </li> 1276 } 1277 1278 @helper RenderFavorites(string type = "inNavigation") 1279 { 1280 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"; 1281 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1282 string myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites").ToString(); 1283 1284 @* Favorites *@ 1285 if (Model.CurrentUser.ID > 0) 1286 { 1287 <li class="@liClasses"> 1288 <a href="/Default.aspx?ID=@myFavoritesPageId" class="@menuLinkClass dw-mod"> 1289 <i class="fa fa-star fa-1_5x"></i> 1290 </a> 1291 </li> 1292 } 1293 } 1294 1295 @helper RenderFooter() 1296 { 1297 string footerColumnThreeContent = !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterColumnThree")) ? Model.Area.Item.GetString("FooterColumnThree") : ""; 1298 string footerColumnOneHeader = Model.Area.Item.GetString("FooterColumnOneHeader"); 1299 string footerColumnTwoHeader = Model.Area.Item.GetString("FooterColumnTwoHeader"); 1300 string footerColumnThreeHeader = Model.Area.Item.GetString("FooterColumnThreeHeader"); 1301 int newsletterSignUpPageId = GetPageIdByNavigationTag("NewsletterSignUp"); 1302 string TextUnderLogo = Model.Area.Item.GetString("TextUnderLogo"); 1303 string footerlogo = Model.Area.Item.GetFile("Logo") != null ? Model.Area.Item.GetFile("Logo").Path : "/Files/Images/logo-dynamicweb.png"; 1304 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 1305 string logoAltText = Model.Area.Item.GetString("LogoAltText"); 1306 1307 string fullBackgroundImage = ""; 1308 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetFile("BackgroundImage") != null) 1309 { 1310 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 + ");"; 1311 fullBackgroundImage += " background-position: center center; background-size: cover; "; 1312 } 1313 else if ((Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") && Model.Area.Item.GetFile("Mobile_BackgroundImage") != null) 1314 { 1315 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 + ");"; 1316 fullBackgroundImage += " background-position: center center; background-size: cover; "; 1317 } 1318 1319 <!-- Footer section --> 1320 <footer class="footer dw-mod" style="@fullBackgroundImage"> 1321 <div class="center-container header-nav top-container__center-container dw-mod"> 1322 <div class="grid"> 1323 @if (Model.Area.Item.GetItems("FooterSocialLinks").Count > 0) 1324 { 1325 <div class="grid__col-md-auto logo-col"> 1326 <div class="footer__content dw-mod"> 1327 <div class="collection dw-mod"> 1328 <a href="/Default.aspx?ID=@firstPageId"> 1329 <img class="grid__cell-img logo-footer dw-mod" src="@footerlogo" alt="@logoAltText" /> 1330 </a> 1331 <div class="footer__content social-links-container mt-4 dw-mod"> 1332 @foreach (var socialitem in Model.Area.Item.GetItems("FooterSocialLinks")) 1333 { 1334 //Fields.FirstOrDefault(x => x.SystemName == "Icon").GetString() 1335 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel; 1336 string socialIconClass = socialIcon.SelectedValue; 1337 string socialIconTitle = socialIcon.SelectedName; 1338 string socialLink = socialitem.GetString("Link"); 1339 1340 <a href="@socialLink" target="_blank" title="@socialIconTitle"><i class="fa @socialIconClass fa-2x"></i></a> 1341 } 1342 </div> 1343 </div> 1344 </div> 1345 </div> 1346 } 1347 1348 @if (!string.IsNullOrEmpty(footerColumnOneHeader)) 1349 { 1350 <div class="grid__col-md-auto"> 1351 <h4 class="footer__heading dw-mod">@footerColumnOneHeader</h4> 1352 <div class="footer__content dw-mod"> 1353 <ul class="small list dw-mod"> 1354 @foreach (var footerLink in Model.Area.Item.GetItems("FooterColumnOneLink")) 1355 { 1356 string footerlinkText = footerLink.GetString("LinkText"); 1357 string footerlinkUrl = footerLink.GetString("LinkUrl"); 1358 <li> 1359 <a class="font-weight-semi-bold" href="@footerlinkUrl">@footerlinkText</a> 1360 </li> 1361 } 1362 </ul> 1363 </div> 1364 </div> 1365 } 1366 1367 @if (!string.IsNullOrEmpty(footerColumnTwoHeader)) 1368 { 1369 <div class="grid__col-md-auto"> 1370 <h4 class="footer__heading dw-mod">@footerColumnTwoHeader</h4> 1371 <div class="footer__content dw-mod"> 1372 <ul class="small list dw-mod"> 1373 @foreach (var footerLinkSecond in Model.Area.Item.GetItems("FooterColumnTwoLink")) 1374 { 1375 string footerlinkTextSecondary = footerLinkSecond.GetString("LinkTextSecondary"); 1376 string footerlinkUrlSecondary = footerLinkSecond.GetString("LinkUrlSecondary"); 1377 <li> 1378 <a class="font-weight-semi-bold" href="@footerlinkUrlSecondary">@footerlinkTextSecondary</a> 1379 </li> 1380 } 1381 </ul> 1382 </div> 1383 </div> 1384 } 1385 1386 @if (!string.IsNullOrEmpty(footerColumnThreeContent) || !string.IsNullOrEmpty(footerColumnThreeHeader)) 1387 { 1388 <div class="grid__col-md-auto"> 1389 <h4 class="footer__heading dw-mod">@footerColumnThreeHeader</h4> 1390 <div class="footer__content dw-mod"> 1391 @footerColumnThreeContent 1392 </div> 1393 </div> 1394 } 1395 1396 @if (Model.Area.Item.GetBoolean("FooterNewsletterSignUp")) 1397 { 1398 <div class="grid__col-md-auto"> 1399 <h4 class="footer__heading dw-mod">@Translate("Mailing list", "Mailing list")</h4> 1400 <div class="footer__content dw-mod"> 1401 <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> 1402 <form class="form dw-mod" name="NewsletterRedirect" action='/Default.aspx' method="get" enctype="multipart/form-data"> 1403 <input name="ID" id="ID" value="@newsletterSignUpPageId" type="hidden" /> 1404 <div class="form__field-combi"> 1405 <input name="NewsletterEmail" id="NewsletterEmail" type="text" class="u-w160px" placeholder='@Translate("Your email address", "Your email address")' /> 1406 <input class="btn btn--primary btn--condensed dw-mod" type="submit" id="Submitter" value='@Translate("Go", "Go")' /> 1407 </div> 1408 </form> 1409 </div> 1410 </div> 1411 } 1412 1413 <div class="grid__col-12 footer__copyright dw-mod"> 1414 <p>@Model.Area.Item.GetString("FooterCopyrightText")</p> 1415 </div> 1416 </div> 1417 </div> 1418 </footer> 1419 1420 } 1421 1422 1423 @* Templates for Typeahead *@ 1424 <script id="SearchGroupsTemplate" type="text/x-template"> 1425 {{#.}} 1426 <li class="dropdown__item dw-mod" onclick="Search.UpdateGroupSelection(this)" data-group-id="{{id}}">{{name}}</li> 1427 {{/.}} 1428 </script> 1429 1430 <script id="SearchContentTemplate" type="text/x-template"> 1431 {{#each .}} 1432 {{#Product}} 1433 {{#ifCond template "!==" "SearchMore"}} 1434 <li class="search-dropdown-item dropdown__item dropdown__item--seperator dw-mod"> 1435 <div> 1436 <a href="{{link}}" class="search-dropdown-item__anchor js-typeahead-link u-color-inherit u-pull--left"> 1437 <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> 1438 <div class="search-dropdown-item__content u-pull--left mb-3"> 1439 <div class="small font-weight-normal js-typeahead-name">@Translate("Product number") {{number}}</div> 1440 <div class="small font-weight-normal js-typeahead-name">{{name}}</div> 1441 @if (!onlyPreview) 1442 { 1443 <div class="{{onlyPreview}} search-product-price font-weight-normal">{{price}}</div> 1444 } 1445 </div> 1446 </a> 1447 <div class="u-w80px hidden-xs-down"> 1448 <a href="{{link}}" class="btn btn--secondary btn--condensed btn--full u-no-margin dw-mod {{hideViewMore}} js-ignore-click-outside">@Translate("View")</a> 1449 </div> 1450 </div> 1451 </li> 1452 {{/ifCond}} 1453 {{#ifCond template "===" "SearchMore"}} 1454 {{>SearchMore}} 1455 {{/ifCond}} 1456 {{/Product}} 1457 {{else}} 1458 <li class="dropdown__item dropdown__item--seperator dw-mod"> 1459 @Translate("No products found") 1460 </li> 1461 {{/each}} 1462 </script> 1463 <script id="SearchMore" type="text/x-template"> 1464 <li class="dropdown__item dropdown__item--not-selectable dw-mod"> 1465 <a href="/Default.aspx?ID=@productsPageId&Search={{searchParameter}}&GroupID={{groupId}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link"> 1466 @Translate("View all") 1467 </a> 1468 </li> 1469 </script> 1470 1471 @* Templates for the mini cart *@ 1472 <script id="MiniCartCounterContent" type="text/x-template"> 1473 {{#.}} 1474 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Cart")</span> 1475 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-start">(</span> 1476 <span class="js-mini-cart-counter-content mini-cart__counter-quantity">{{numberofproducts}}</span> 1477 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-close">)</span> 1478 {{/.}} 1479 </script> 1480 1481 <script id="MiniCartContent" type="text/x-template"> 1482 {{#.}} 1483 <div class="mini-cart-dropdown__inner {{isempty}} dw-mod"> 1484 <h4 class="u-ta-left u-no-margin u-margin-bottom u-margin-top font-weight-normal h4">@Translate("Shopping cart")</h4> 1485 <div class="mini-cart-dropdown__body dw-mod"> 1486 <table class="table table-responsive mini-cart-table border-bottom dw-mod"> 1487 <thead> 1488 <tr class="font-weight-normal h6"> 1489 <hr /> 1490 <td>&nbsp;</td> 1491 <td>@Translate("Product")</td> 1492 <td class="u-ta-center">@Translate("Qty")</td> 1493 <td class="u-ta-right" width="120">@Translate("Total price excl. vat")</td> 1494 </tr> 1495 </thead> 1496 {{#OrderLines}} 1497 {{#ifCond template "===" "CartOrderline"}} 1498 {{>MiniCartOrderline}} 1499 {{/ifCond}} 1500 {{#ifCond template "===" "CartOrderlineMobile"}} 1501 {{>MiniCartOrderlineMobile}} 1502 {{/ifCond}} 1503 {{#ifCond template "===" "CartOrderlineDiscount"}} 1504 {{>MiniCartOrderlineDiscount}} 1505 {{/ifCond}} 1506 {{/OrderLines}} 1507 <tr> 1508 <td class="h6 font-weight-normal">@Translate("Shipping")</td> 1509 <td colspan="3" class="u-ta-right" width="130">{{shippingfee}}</td> 1510 </tr> 1511 <tr class="mini-cart-totals dw-mod"> 1512 <td colspan="2" class="h6 font-weight-semi-bold">@Translate("Total")</td> 1513 <td class="h6 font-weight-semi-bold u-ta-right js-mini-cart-quantity">{{numberofproducts}}</td> 1514 <td class="h6 font-weight-semi-bold u-ta-right" width="130"> 1515 1516 {{totalprice}} 1517 1518 </td> 1519 </tr> 1520 </table> 1521 </div> 1522 <table class="table mini-cart-table dw-mod"> 1523 <tbody> 1524 <tr class="mini-cart-orderlines__footer dw-mod"> 1525 <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> 1526 <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> 1527 </tr> 1528 </tbody> 1529 </table> 1530 </div> 1531 {{/.}} 1532 </script> 1533 1534 <script id="MiniCartOrderline" type="text/x-template"> 1535 <tr class="{{isempty}}"> 1536 <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> 1537 <td> 1538 <a href="{{link}}" class="mini-cart-orderlines__name product-number">@Translate("Product number") {{productnumber}}</a> 1539 <a href="{{link}}" class="mini-cart-orderlines__name font-weight-normal small">{{name}}</a> 1540 1541 @* IF SENTENCE FROM DISCOUNT LIST IN JSON FEED FILE (NZPRODUTLISTFEED.CSHTML) *@ 1542 1543 {{#if Discount.[1].discountPrice}} 1544 <div class="js-popup minicart_popup_container"> 1545 <a class="js-popup-trigger">@Translate("DiscountText")</a> 1546 1547 <div class="js-popup-modal minicart_popup_modal"> 1548 <div class="js-popout-close nz-icon icon-nz-close-circled"></div> 1549 1550 <ul class="grid__col-12 pt-5 p-0 d-flex flex-row flex-wrap"> 1551 @* FOREACH DISCOUNT LOOP FROM JSON FEED *@ 1552 {{#each Discount}} 1553 {{#unless @@first}} 1554 1555 <li class="p-0 mb-0 grid__col-12 align-items-start">@Translate("UnitPriceText") {{this.discountQuantity}} @Translate("UnitPriceTextStk")</li> 1556 <li class="p-0 pb-3 grid__col-12 align-items-start">{{this.discountPrice}} {{this.discountCurrency}}</li> 1557 {{/unless}} 1558 {{/each}} 1559 1560 </ul> 1561 </div> 1562 1563 </div> 1564 {{/if}} 1565 1566 <div class="item-number">{{unitname}}</div> 1567 1568 <span class="small product-card__quantity-alert js-product-quantity-error-{{id}} {{limitReached}}">@Translate("Max stock level is reached")</span> 1569 1570 </td> 1571 <td class="u-ta-right"> 1572 <div class="mini-cart-quantity"> 1573 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=DecOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__subtract" data-icon-nz="minus"></span> 1574 <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;" /> 1575 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=IncOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__add" data-icon-nz="plus"></span> 1576 </div> 1577 </td> 1578 <td class="u-ta-right mini-cart-remove-product-container"> 1579 <span class="minicart-totalprice"> 1580 <span> 1581 {{totalunitpricewithdiscounts}} 1582 </span> 1583 1584 1585 </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> 1586 </td> 1587 </tr> 1588 </script> 1589 1590 <script id="MiniCartOrderlineMobile" type="text/x-template"> 1591 <tr class="{{isempty}}"> 1592 <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> 1593 <td> 1594 <a href="{{link}}" class="mini-cart-orderlines__name">{{name}}</a> 1595 <a href="{{link}}" class="mini-cart-orderlines__name item-number">{{variantname}}</a> 1596 <div class="item-number">{{unitname}}</div> 1597 </td> 1598 <td class="u-ta-right"> 1599 <div class="mini-cart-quantity"> 1600 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=DecOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__subtract" data-icon-nz="minus"></span> 1601 <input class="mini-cart-quantity__input js-quantity-input text-center" id="Quantity_{{id}}" name="Quantity{{id}}" type="number" value="{{quantity}}" min="1" /> 1602 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=IncOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__add" data-icon-nz="plus"></span> 1603 </div> 1604 </td> 1605 <td class="u-ta-right">{{totalprice}}</td> 1606 </tr> 1607 </script> 1608 1609 <script id="MiniCartOrderlineDiscount" type="text/x-template"> 1610 1611 1612 </script> 1613 1614 <!-- Javascript --> 1615 <script src="/Files/Templates/Designs/Rapido/js/handlebars-v4.0.11.js"></script> 1616 <script src="/assets/javascripts/lib/searchparams-polyfill.js"></script> 1617 <script src="/Files/Templates/Designs/Rapido/js/master.min.js"></script> 1618 1619 @if (Model.Area.Item.GetBoolean("UseCustomJavascript")) 1620 { 1621 <script>window.jQuery || document.write('<script src="/assets/javascripts/lib/jquery-3.2.1.min.js"><\/script>')</script> 1622 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script> 1623 <script src="/assets/javascripts/lib/es6-shim.min.js"></script> 1624 <script src="/Files/Templates/Designs/Rapido/js/custom.min.js?v=@assetsVersion"></script> 1625 } 1626 1627 <script> 1628 Wireframe.Init(@wireframeMode.ToLower()); 1629 </script> 1630 1631 1632 1633 1634 <!-- Modal --> 1635 <div class="nz-modal fade js-video-modal" tabindex="-1" role="dialog" aria-hidden="true"> 1636 <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> 1637 <div class="modal-content"> 1638 <div class="modal-header"> 1639 <button type="button" class="close btn-primary" data-dismiss="modal" aria-label="Close"> 1640 <span aria-hidden="true" data-icon-nz="close"></span> 1641 </button> 1642 </div> 1643 <div class="modal-body js-modal-content p-0"> 1644 1645 <div class="embed-responsive embed-responsive-16by9"> 1646 <iframe class="js-video-container embed-responsive-item" data-cookieconsent="marketing" data-src="" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe> 1647 </div> 1648 </div> 1649 </div> 1650 </div> 1651 </div> 1652 1653 <!-- Alert Modal --> 1654 <div class="nz-modal fade alert-modal js-alert-modal" tabindex="-1" role="dialog" aria-hidden="true"> 1655 <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> 1656 <div class="modal-content"> 1657 <div class="modal-header"> 1658 <button type="button" class="close btn-primary" data-dismiss="modal" aria-label="Close"> 1659 <span aria-hidden="true" data-icon-nz="close"></span> 1660 </button> 1661 </div> 1662 <div class="modal-body js-modal-content p-0"> 1663 <div class="cookies-text text-center"> 1664 <p> 1665 @Translate("CookiesMarketing", "Please accept marketing cookies to watch this video") 1666 </p> 1667 <a href="javascript:Cookiebot.renew()" class="btn btn-nav-lg btn-outline-secondary "> 1668 @Translate("CookiesSettings", "Update cookie settings") 1669 </a> 1670 </div> 1671 1672 </div> 1673 </div> 1674 </div> 1675 </div> 1676 1677 </body> 1678 </html> 1679