Error executing template "Designs/Rapido/_parsed/NZShopPage.parsed.cshtml"
System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
   at System.Runtime.InteropServices.Marshal.AllocHGlobal(IntPtr cb)
   at System.Reflection.Internal.NativeHeapMemoryBlock.DisposableData..ctor(Int32 size)
   at System.Reflection.Internal.StreamMemoryBlockProvider.ReadMemoryBlockNoLock(Stream stream, Boolean isFileStream, Int64 start, Int32 size)
   at System.Reflection.Internal.StreamMemoryBlockProvider.GetMemoryBlockImpl(Int32 start, Int32 size)
   at System.Reflection.Internal.MemoryBlockProvider.GetMemoryBlock(Int32 start, Int32 size)
   at System.Reflection.PortableExecutable.PEReader.GetMetadataBlock()
   at System.Reflection.Metadata.PEReaderExtensions.GetMetadataReader(PEReader peReader, MetadataReaderOptions options, MetadataStringDecoder utf8Decoder)
   at Microsoft.CodeAnalysis.PEModule.InitializeMetadataReader()
   at Microsoft.CodeAnalysis.PEModule.get_MetadataReader()
   at Microsoft.CodeAnalysis.PEAssembly..ctor(AssemblyMetadata owner, ImmutableArray`1 modules)
   at Microsoft.CodeAnalysis.AssemblyMetadata.GetOrCreateData()
   at Microsoft.CodeAnalysis.AssemblyMetadata.GetModules()
   at Microsoft.CodeAnalysis.AssemblyMetadata.IsValidAssembly()
   at Microsoft.CodeAnalysis.CommonReferenceManager`2.GetMetadata(PortableExecutableReference peReference, CommonMessageProvider messageProvider, Location location, DiagnosticBag diagnostics)
   at Microsoft.CodeAnalysis.CommonReferenceManager`2.ResolveMetadataReferences(TCompilation compilation, Dictionary`2 assemblyReferencesBySimpleName, ImmutableArray`1& references, IDictionary`2& boundReferenceDirectiveMap, ImmutableArray`1& boundReferenceDirectives, ImmutableArray`1& assemblies, ImmutableArray`1& modules, DiagnosticBag diagnostics)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.ReferenceManager.CreateAndSetSourceAssemblyFullBind(CSharpCompilation compilation)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.ReferenceManager.CreateSourceAssemblyForCompilation(CSharpCompilation compilation)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetRuntimeMetadataVersion(EmitOptions emitOptions)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetRuntimeMetadataVersion(EmitOptions emitOptions, DiagnosticBag diagnostics)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CreateModuleBuilder(EmitOptions emitOptions, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, IEnumerable`1 manifestResources, CompilationTestData testData, DiagnosticBag diagnostics, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.CheckOptionsAndCreateModuleBuilder(DiagnosticBag diagnostics, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, CompilationTestData testData, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream metadataPEStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, CompilationTestData testData, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, Stream metadataPEStream, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, CancellationToken cancellationToken)
   at RazorEngine.Roslyn.CSharp.RoslynCompilerServiceBase.CompileType(TypeContext context)
   at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType)
   at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType)
   at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType)
   at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

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