Error executing template "Designs/Bolind/_parsed/basic_Page.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_811a472740394458bc92e3f2954dc6d8.Execute() in E:\Solutions\Bolind\Web\Live\Files\Templates\Designs\Bolind\_parsed\Basic_Page.parsed.cshtml:line 564
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @using Bolind.Web.CustomCode 2 @using Bolind.Web.CustomCode.CDN 3 @using Bolind.Web.CustomCode.Impersonation 4 @using Bolind.Web.CustomCode.Licitation 5 @using Bolind.Web.CustomCode.LWI.Selections 6 @using Bolind.Web.CustomCode.SalesPerson 7 @using Dynamicweb.Content 8 @using System.Web 9 @using Bolind.Web.CustomCode.Items.Settings 10 @using Bolind.Web.CustomModules.BolindAccountingNumbers.CustomCode 11 @using Dynamicweb 12 @using Dynamicweb.Environment.Web 13 @using Dynamicweb.Frontend; 14 @using NLWI.Core.Factory 15 @using NORRIQ.Common8.Caching 16 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 17 @{ 18 bool Privat = Model.Area.Item.GetBoolean("Private"); 19 var partnersite = !string.IsNullOrEmpty(Model.Area.Item.GetString("PartnerSiteID")); 20 var partnersiteid = Model.Area.Item.GetString("PartnerSiteID"); 21 //var bgimage = (Model.Area.Item.GetFile("BackgroundImage") != null) ? "Model.Area.Item.GetFile(BackgroundImage).Path" : ""; 22 var bgimage = Model.Area.Item.GetFile("BackgroundImage")?.Path ?? ""; 23 24 var item = Pageview.Area.Item.ToCodeFirstItem<Websites>(); 25 if (!string.IsNullOrWhiteSpace(bgimage)) 26 { 27 bgimage = Pageview.CdnWrap(bgimage); 28 } 29 string centerHeaderPrefix = "Header "; 30 var isCurrentlyImpersonating = ObjectFactory.GetInstance<NORRIQ.SalesPersonLogin.Services.ImpersonationService>().IsCurrentlyImpersonating(); 31 var userDisplayName = Pageview.User?.Name ?? string.Empty; 32 if (isCurrentlyImpersonating) 33 { 34 string name2 = Pageview.User.CustomFieldValues.FirstOrDefault(x => x.CustomField.SystemName == "AccessUser_Name2")?.Value?.ToString(); 35 if (!string.IsNullOrEmpty(name2)) 36 { 37 userDisplayName = $"{Pageview.User.Name} - {name2}"; 38 } 39 } 40 41 string bolindSite = !partnersite ? "bolind-main" : "bolind-partnersite"; 42 } 43 44 <!DOCTYPE html> 45 <html lang="@Pageview.Area.Culture"> 46 <head> 47 <title>@Model.Title</title> 48 <meta charset='utf-8' /> 49 <meta name="description" content="@Model.Description" /> 50 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5, user-scalable=yes, shrink-to-fit=no" /> 51 <meta http-equiv="x-ua-compatible" content="ie=edge"> 52 @if (Model.Area.Item.GetBoolean("NoIndex")) 53 { 54 <!-- TODO: remove on launch--> 55 <meta name="robots" content="noindex, nofollow" /> 56 } 57 @Model.MetaTags 58 @if (PageView.Current().IsB2C() && !partnersite) 59 { 60 <link rel="preload" href="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/Bolind-b2c-min.css"))" as="style" /> 61 <link href="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/Bolind-b2c-min.css"))" rel="stylesheet" media="screen" /> 62 } 63 else if (!PageView.Current().IsB2C() && !partnersite) 64 { 65 <link rel="preload" href="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/Bolind-min.css"))" as="style" /> 66 67 <link href="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/Bolind-min.css"))" rel="stylesheet" media="screen" /> 68 @*<link href="/Files/dist/css/Bolind-min.css" rel="stylesheet" />*@ 69 } 70 else if (partnersite) 71 { 72 <link rel="preload" href="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/" + partnersiteid + "-min.css"))" as="style" /> 73 <link href="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/" + partnersiteid + "-min.css"))" rel="stylesheet" media="screen" /> 74 } 75 @*<link href="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/Print-min.css"))" rel="stylesheet" media="print" />*@ 76 <link href="/Files/dist/css/Print-min.css" rel="stylesheet" media="print" /> 77 <link rel="shortcut icon" href="@Pageview.CdnWrap("/Files/Images/Graphics/icons/favicon.ico")" /> 78 <!-- Apple --> 79 <link rel="apple-touch-icon" sizes="any" href="@Pageview.CdnWrap("/Files/Images/Graphics/icons/bl-icon-196.png")" /> 80 <link rel="apple-touch-icon" sizes="180x180" href="@Pageview.CdnWrap("/Files/Images/Graphics/icons/bl-icon-180.png")" /> 81 <!-- Windows --> 82 <meta name="application-name" content="@Model.Title" /> 83 <meta name="msapplication-TileColor" content="#020b10" /> 84 <meta name="msapplication-square150x150logo" content="@Pageview.CdnWrap("/Files/Images/Graphics/icons/bl-icon-150.png")" /> 85 <!-- Android --> 86 <link rel="icon" sizes="192x192" href="@Pageview.CdnWrap("/Files/Images/Graphics/icons/bl-icon-192.png")"> 87 88 @if (!string.IsNullOrWhiteSpace(item.HeaderScript)) 89 { 90 @item.HeaderScript 91 } 92 93 @if (!partnersite) 94 { 95 string googleMaterialIconsUri = "https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@48,200..500,0..1,25&icon_names=apparel,arrow_forward,book_ribbon,call,chevron_forward,close,eco,faucet,forest,household_supplies,ladder,lightbulb,local_laundry_service,mail,mode_fan,person,play_arrow,sell,shopping_cart,star,store,tools_ladder,vertical_align_top&display=block"; 96 97 <link rel="preload" href="@googleMaterialIconsUri" as="style" /> 98 <link href="@googleMaterialIconsUri" rel="stylesheet" /> 99 } 100 101 <style> 102 .center_header-userinfo p.is-sales-person span { background-color: #004a6b; color: #fff; } 103 </style> 104 </head> 105 <body id="top" class="@bolindSite"> 106 @if (Model.Area.Item.GetString("IeWarningText") != null) 107 { 108 <div class="alert alert-warning text-center ie-only" rel="noindex">@Model.Area.Item.GetString("IeWarningText")</div> 109 } 110 @if (!partnersite && Pageview.User != null && Pageview.User.GetNavAssociationGroup().ToUpper() == "KAB") 111 { 112 <div class="alert alert-warning text-center" rel="noindex">@Translate("UsePunchOut", "Benyt punchout løsningen")</div> 113 } 114 @if (partnersite && Pageview.User == null) 115 { 116 <div id="app" class="partnerlogin"> 117 <div class="partnerloginWrap"> 118 <div class="partnerLoginbox"> 119 <h1 class="page-header">@Model.Area.Item.GetString("PartnerSiteTitle")</h1> 120 @*@if (Model.Area.Item.GetFile("Logo") != null) 121 { 122 <picture> 123 @if (Model.Area.Item.GetFile("LogoMobile") != null) 124 { 125 <source media="(max-width:63.99875rem)" srcset="@Model.Area.Item.GetFile("LogoMobile").Path" /> 126 } 127 <img class="img-fluid" src="@Model.Area.Item.GetFile("Logo")" alt="@Translate(centerHeaderPrefix + "Website Logo Alttext", "Website Logo Alttext")" /> 128 </picture> 129 } 130 else 131 { 132 <i>@Translate(centerHeaderPrefix + "No logo found", "No logo found, please configure it in the Dynamicweb Administration")</i> 133 }*@ 134 <p>@Translate("login_subline01", "Du skal være logget ind for at se denne side.")</p> 135 <p>@Translate("login_subline02", "Du er muligvis blevet logget ud af systemet. Du bedes gÃ¥ tilbage til din handelsportal og foretage login der igennem.")</p> 136 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("PartnerLoginText"))) 137 { 138 <hr class="hr-light" /> 139 <h3>@Translate("login_headline", "Alternativ adgang")</h3> 140 <p> 141 @Model.Area.Item.GetString("PartnerLoginText") 142 </p> 143 } 144 <head-login-form inline-template> 145 <form name="ExtUserForm" id="loginForm" method="post" class="form" role="form" v-on:submit="submitLogin"> 146 <input type="hidden" name="ID" id="ID" value="@Pageview.Page.ID" /> 147 <div class="form-group"> 148 <label for="Username">@Translate("Username", "Username")</label> 149 <input id="Username" v-model="username" name="Username" type="text" value="" class="form-control" autocomplete="off"> 150 </div> 151 <div class="form-group"> 152 <label for="Password">@Translate("Password", "Password")</label> 153 <input id="Password" v-model="password" name="Password" type="password" value="" class="form-control" autocomplete="off"> 154 </div> 155 <div v-if="loginFailed"> 156 <p class="alert alert-warning"> 157 @Translate("Login failed", "Invalid credentials") 158 </p> 159 </div> 160 <div class="basic_login-buttons"> 161 <button type="submit" role="button" class="btn btn-dark btn-block btn-lg" v-bind:class='{"loading": loading}' v-on:click="loading=true" id="loginBtn"> 162 @Translate("Login", "Login") 163 </button> 164 </div> 165 </form> 166 </head-login-form> 167 </div> 168 </div> 169 </div> 170 } 171 else 172 { 173 <div id="app"> 174 <header class="center_header hide-print"> 175 <div class="center_header-top"> 176 <div class="center_header-container"> 177 @if (partnersite) 178 { 179 <div class="partnersite"> 180 @Model.Area.Item.GetString("PartnerSiteTitle") 181 </div> 182 } 183 <div class="center_header-userinfo"> 184 @if (Model.Area.Item.GetFile("HeaderGraphic") != null) 185 { 186 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("HeaderGraphic").Path)" class="img-fluid" alt="@Translate(centerHeaderPrefix + "Graphics Alt Text", "One Stop Shopping")" /> 187 } 188 @if (!PageView.Current().IsB2C()) 189 { 190 if (Pageview.User != null) 191 { 192 <p title="@userDisplayName" class="logged-in @(isCurrentlyImpersonating ? "is-sales-person" : "ae")"> 193 <span v-b-toggle.customer-center>@Pageview.User.UserName, @userDisplayName @Pageview.User.CustomFieldValues.FirstOrDefault(x => x.CustomField.SystemName == "AccessUser_Name2").Value</span><a v-clear-cache:click.cart.user href="/admin/public/extranetlogoff.aspx?ID=@(Model.Area.FirstActivePage.ID)">@Translate(centerHeaderPrefix + "Sign Out", "Sign Out")</a> 194 </p> 195 } 196 else 197 { 198 <p class="logged-out"> 199 <a href="javascript:void();" v-b-toggle.customer-center> 200 @Translate(centerHeaderPrefix + "Login", "Log ind") 201 </a> 202 </p> 203 } 204 } 205 </div> 206 </div> 207 </div> 208 <div class="center_header-main"> 209 @if (partnersite) 210 { 211 <div class="logowrap"> 212 <a href="/" class="center_header-logo" title="@Translate(centerHeaderPrefix + "Go to frontpage", "Go to frontpage")"> 213 @if (Model.Area.Item.GetFile("Logo") != null) 214 { 215 <picture> 216 @if (Model.Area.Item.GetFile("LogoMobile") != null) 217 { 218 <source media="(max-width:63.99875rem)" srcset="@Pageview.CdnWrap(Model.Area.Item.GetFile("LogoMobile").Path)" /> 219 } 220 <img class="img-fluid" src="@Pageview.CdnWrap(Model.Area.Item.GetFile("Logo").Path)" alt="@Translate(centerHeaderPrefix + "Website Logo Alttext", "Website Logo Alttext")" /> 221 </picture> 222 } 223 else 224 { 225 <i>@Translate(centerHeaderPrefix + "No logo found", "No logo found, please configure it in the Dynamicweb Administration")</i> 226 } 227 </a> 228 </div> 229 } 230 <div class="center_header-container @(Pageview.User != null ? "center_header-container--user-logged-in" : string.Empty)"> 231 @if (!partnersite) 232 { 233 <div class="center_header-burger"> 234 <button type="button" 235 aria-label="@Translate(centerHeaderPrefix + "Open main navigation", "Open main navigation")" 236 v-b-toggle.basic_navigation> 237 <span></span> 238 <span></span> 239 <span></span> 240 </button> 241 </div> 242 <div class="center_header-container--logo"> 243 <a href="/" class="center_header-logo" title="@Translate(centerHeaderPrefix + "Go to frontpage", "Go to frontpage")"> 244 @if (Model.Area.Item.GetFile("Logo") != null) 245 { 246 <picture> 247 @if (Model.Area.Item.GetFile("LogoMobile") != null) 248 { 249 <source media="(max-width:1199px)" srcset="@Pageview.CdnWrap(Model.Area.Item.GetFile("LogoMobile").Path)" /> 250 } 251 <img class="img-fluid" src="@Pageview.CdnWrap(Model.Area.Item.GetFile("Logo").Path)" alt="@Translate(centerHeaderPrefix + "Website Logo Alttext", "Website Logo Alttext")" /> 252 </picture> 253 } 254 else 255 { 256 <i>@Translate(centerHeaderPrefix + "No logo found", "No logo found, please configure it in the Dynamicweb Administration")</i> 257 } 258 </a> 259 </div> 260 <div class="center_header-container--search"> 261 <instant-search base-class="center_header-search" :ajax-paragraph-id="@(ObjectFactory.GetInstance<NORRIQ.Common8.Context.ParagraphService>().GetParagraphId("instant-search-plp", 1))"></instant-search> 262 </div> 263 <div class="center_header-container--actions"> 264 <ul class="center_header-functions"> 265 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderZeroIcon")) 266 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderZeroLabel")) 267 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderZeroLink"))) 268 { 269 <li> 270 <a href="@Model.Area.Item.GetString("HeaderZeroLink")"> 271 <span class="icon material-symbols-rounded">@Model.Area.Item.GetString("HeaderZeroIcon")</span> 272 <span class="label">@Model.Area.Item.GetString("HeaderZeroLabel")</span> 273 </a> 274 </li> 275 } 276 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderOneIcon")) 277 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderOneLabel")) 278 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderOneLink"))) 279 { 280 <li> 281 <a href="@Model.Area.Item.GetString("HeaderOneLink")"> 282 <span class="icon material-symbols-rounded">@Model.Area.Item.GetString("HeaderOneIcon")</span> 283 <span class="label">@Model.Area.Item.GetString("HeaderOneLabel")</span> 284 </a> 285 </li> 286 } 287 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderTwoIcon")) 288 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderTwoLabel")) 289 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderTwoLink"))) 290 { 291 <li class="center_header-contact"> 292 <a href="@Model.Area.Item.GetString("HeaderTwoLink")"> 293 <span class="icon material-symbols-rounded">@Model.Area.Item.GetString("HeaderTwoIcon")</span> 294 <span class="label">@Model.Area.Item.GetString("HeaderTwoLabel")</span> 295 </a> 296 </li> 297 } 298 @if (!Privat) 299 { 300 <li class="@(Pageview.User != null ? "favorites-allowed" : "favorites-closed")"> 301 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("favoritlister")"> 302 <span class="icon material-symbols-rounded">star</span> 303 <span class="label">@Translate(centerHeaderPrefix + "favoritliste", "Favoritliste")</span> 304 </a> 305 </li> 306 <li class="center_header-customer"> 307 <button v-b-toggle.customer-center type="button" id="login-toggle" aria-label="@Translate("Show Webshop Login")" title="@(Pageview.User == null ? Translate("Login") : Translate("Account"))"> 308 <span class="icon material-symbols-rounded">person</span> 309 <span class="label">@(Pageview.User == null ? Translate(centerHeaderPrefix + "Login", "Log ind") : Translate(centerHeaderPrefix + "Customer center", "Kundecenter"))</span> 310 </button> 311 <b-collapse id="customer-center" class="head_login-dropmenu" accordion="basic_navigation" v-auto-close> 312 <div class="head_login-dropmenu--box"> 313 @if (Pageview.User == null) 314 { 315 <p class="h6"> 316 <span class="material-symbols-rounded">person</span> 317 @Translate("Webshop Login", "Webshop Login") 318 </p> 319 <head-login-form inline-template> 320 <form name="ExtUserForm" id="loginForm" method="post" class="form" role="form" v-on:submit="submitLogin"> 321 <input type="hidden" name="ID" id="ID" value="@Pageview.Page.ID" /> 322 <div class="form-group"> 323 <label for="Username">@Translate("Username", "Username")</label> 324 <input id="Username" v-model="username" name="Username" type="text" value="" class="form-control" autocomplete="off"> 325 </div> 326 <div class="form-group"> 327 <label for="Password">@Translate("Password", "Password")</label> 328 <input id="Password" v-model="password" name="Password" type="password" value="" class="form-control" autocomplete="off"> 329 </div> 330 <div v-if="loginFailed"> 331 <p class="alert alert-warning"> 332 @Translate("Login failed", "Invalid credentials") 333 </p> 334 </div> 335 <div class="basic_login-buttons"> 336 <button type="submit" role="button" class="btn btn-primary btn-block" v-bind:class='{"loading": loading}' id="loginBtn"> 337 @Translate("Login", "Login") 338 </button> 339 </div> 340 </form> 341 </head-login-form> 342 <ul class="links"> 343 <li> 344 <a href="/Default.aspx?ID=@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("forgotpassword")&amp;LoginAction=Recovery"> 345 @Translate("Forgot password") 346 </a> 347 </li> 348 <li> 349 <a href="/Default.aspx?ID=@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("usercreate")"> 350 @Translate("Create User") 351 </a> 352 </li> 353 </ul> 354 } 355 else 356 { 357 <div> 358 <p class="h6"> 359 <span class="material-symbols-rounded">person</span> 360 @Pageview.User.Name 361 </p> 362 <div class="navi"> 363 @DwCaching.CacheByPage("bolind_customer.xslt", () => RenderNavigation(new { Template = "bolind_customer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, parenttag = "customer-portal" })) 364 </div> 365 <p class="text-right"> 366 <a v-clear-cache:click.cart.user href='/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)' class="text-sm text-danger"> 367 @Translate("Sign out") 368 </a> 369 </p> 370 </div> 371 } 372 </div> 373 </b-collapse> 374 </li> 375 } 376 <li class="center_header-checkout"> 377 <cart-icon-new cartlink="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("checkout")"></cart-icon-new> 378 </li> 379 </ul> 380 </div> 381 } 382 else 383 { 384 <div class="center_header-burger"> 385 <button type="button" 386 aria-label="@Translate(centerHeaderPrefix + "Open main navigation", "Open main navigation")" 387 v-b-toggle.basic_navigation> 388 <span></span> 389 <span></span> 390 <span></span> 391 </button> 392 </div> 393 <instant-search base-class="center_header-search" :ajax-paragraph-id="@(ObjectFactory.GetInstance<NORRIQ.Common8.Context.ParagraphService>().GetParagraphId("instant-search-plp", 1))"></instant-search> 394 @*logo was here*@ 395 <ul class="center_header-functions"> 396 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderZeroIcon")) 397 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderZeroLabel")) 398 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderZeroLink"))) 399 { 400 <li> 401 <a href="@Model.Area.Item.GetString("HeaderZeroLink")"> 402 <svg> 403 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#@Model.Area.Item.GetString("HeaderZeroIcon")"></use> 404 </svg> 405 <span class="label">@Model.Area.Item.GetString("HeaderZeroLabel")</span> 406 </a> 407 </li> 408 } 409 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderOneIcon")) 410 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderOneLabel")) 411 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderOneLink"))) 412 { 413 <li> 414 <a href="@Model.Area.Item.GetString("HeaderOneLink")"> 415 <svg> 416 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#@Model.Area.Item.GetString("HeaderOneIcon")"></use> 417 </svg> 418 <span class="label">@Model.Area.Item.GetString("HeaderOneLabel")</span> 419 </a> 420 </li> 421 } 422 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderTwoIcon")) 423 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderTwoLabel")) 424 && !string.IsNullOrEmpty(Model.Area.Item.GetString("HeaderTwoLink"))) 425 { 426 <li class="center_header-contact"> 427 <a href="@Model.Area.Item.GetString("HeaderTwoLink")"> 428 <svg> 429 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#@Model.Area.Item.GetString("HeaderTwoIcon")"></use> 430 </svg> 431 <span class="label">@Model.Area.Item.GetString("HeaderTwoLabel")</span> 432 </a> 433 </li> 434 } 435 @if (!Privat) 436 { 437 <li class="@(Pageview.User != null ? "favorites-allowed" : "favorites-closed")"> 438 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("favoritlister")"> 439 440 <svg> 441 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#star"></use> 442 </svg> 443 <span class="label">@Translate(centerHeaderPrefix + "favoritliste", "favoritliste")</span> 444 445 </a> 446 </li> 447 <li class="center_header-customer"> 448 <button v-b-toggle.customer-center type="button" id="login-toggle" aria-label="@Translate("Show Webshop Login")" title="@(Pageview.User == null ? Translate("Login") : Translate("Account"))"> 449 <svg> 450 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#user"></use> 451 </svg> 452 @if (Pageview.User == null) 453 { 454 <span class="label"> 455 @Translate(centerHeaderPrefix + "Login", "Log ind") 456 </span> 457 } 458 else 459 { 460 <span class="label"> 461 @Translate(centerHeaderPrefix + "Customer center", "Kundecenter") 462 </span> 463 } 464 </button> 465 <b-collapse id="customer-center" class="head_login-dropmenu" accordion="basic_navigation" v-auto-close> 466 <div class="head_login-dropmenu--box"> 467 @if (Pageview.User == null) 468 { 469 <p class="h6"> 470 <svg class="icon icon-dark"> 471 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#user"></use> 472 </svg> 473 @Translate("Webshop Login", "Webshop Login") 474 </p> 475 <head-login-form inline-template> 476 <form name="ExtUserForm" id="loginForm" method="post" class="form" role="form" v-on:submit="submitLogin"> 477 <input type="hidden" name="ID" id="ID" value="@Pageview.Page.ID" /> 478 <div class="form-group"> 479 <label for="Username">@Translate("Username", "Username")</label> 480 <input id="Username" v-model="username" name="Username" type="text" value="" class="form-control" autocomplete="off"> 481 </div> 482 <div class="form-group"> 483 <label for="Password">@Translate("Password", "Password")</label> 484 <input id="Password" v-model="password" name="Password" type="password" value="" class="form-control" autocomplete="off"> 485 </div> 486 <div v-if="loginFailed"> 487 <p class="alert alert-warning"> 488 @Translate("Login failed", "Invalid credentials") 489 </p> 490 </div> 491 <div class="basic_login-buttons"> 492 <button type="submit" role="button" class="btn btn-primary btn-block" v-bind:class='{"loading": loading}' id="loginBtn"> 493 @Translate("Login", "Login") 494 </button> 495 </div> 496 </form> 497 </head-login-form> 498 <ul class="links"> 499 <li> 500 <a href="/Default.aspx?ID=@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("forgotpassword")&amp;LoginAction=Recovery"> 501 @Translate("Forgot password") 502 </a> 503 </li> 504 <li> 505 <a href="/Default.aspx?ID=@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("usercreate")"> 506 @Translate("Create User") 507 </a> 508 </li> 509 </ul> 510 } 511 else 512 { 513 <div> 514 <p class="h6"> 515 <svg class="icon icon-dark"> 516 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#user"></use> 517 </svg> 518 @Pageview.User.Name 519 </p> 520 <div class="navi"> 521 @DwCaching.CacheByPage("bolind_customer.xslt", () => RenderNavigation(new { Template = "bolind_customer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, parenttag = "customer-portal" })) 522 </div> 523 <p class="text-right"> 524 <a v-clear-cache:click.cart.user href='/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)' class="text-sm text-danger"> 525 @Translate("Sign out") 526 </a> 527 </p> 528 </div> 529 } 530 </div> 531 </b-collapse> 532 </li> 533 } 534 <li class="center_header-checkout"> 535 <cart-icon cartlink="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("checkout")"></cart-icon> 536 </li> 537 </ul> 538 } 539 </div> 540 </div> 541 @if (partnersite) 542 { 543 @DwCachingWithSelections.CacheByPage("center_Header.xslt", () => RenderNavigation(new { Template = "center_Header.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4 })); 544 } 545 else 546 { 547 @DwCachingWithSelections.CacheByPage("center_Header_new.xslt", () => RenderNavigation(new { Template = "center_Header_new.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4 })); 548 } 549 550 </header> 551 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 552 @using Bolind.Web.CustomCode.CDN 553 @using Dynamicweb.Frontend; 554 @using NORRIQ.Common8.Caching 555 556 @Title("Page") 557 @Description("Default page template") 558 @{ 559 string basicPagePrefix = "Page "; 560 var bg = Model.Item != null && Model.Item.GetBoolean("WhiteBackground") ? "whitebg" : ""; 561 } 562 @if (Pageview.IsCurrentUserAllowed) 563 { 564 var pageLayout = !string.IsNullOrEmpty(Model.Item.GetValue<ListViewModel>("Layout").SelectedValue) ? Model.Item.GetValue<ListViewModel>("Layout").SelectedValue : "content-page-sidebar"; 565 var pageClass = pageLayout == "page-wide" ? "basic_page-wide" : "basic_page"; 566 bool isBanner = Model.Item.GetBoolean("isBanner"); 567 var isBottomRight = Model.Item.GetBoolean("isBottomRight") ? " bottom-right" : "top-left"; 568 var isWhite = Model.Item.GetBoolean("isWhite") ? "text-white" : "text-dark"; 569 var isFixedWidth = Model.Item.GetBoolean("isFixedWidth") ? " is-fixed" : ""; 570 var justifyBanner = Model.Item.GetBoolean("isBottomRight") ? "space-between" : "center"; 571 572 573 if (!Model.Item.GetBoolean("HideBreadcrumb")) 574 { 575 @DwCaching.CacheByPage("basic_Breadcrumb.xslt", () => RenderNavigation(new { Template = "basic_Breadcrumb.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 5 })) 576 } 577 <main class="@pageClass" id="main-element"> 578 @if (pageLayout == "content-page-sidebar" || pageLayout == "module-page-sidebar") 579 { 580 <aside class="basic_page-sidebar"> 581 @*<div class="sidebar-toggle"> 582 <button type="button" 583 class="btn-toggle" 584 v-b-toggle.sidebar-navigation 585 aria-label="@Translate(basicPagePrefix + "Open sidebar","Open sidebar")"> 586 <svg class="icon-left"> 587 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#chevron-left"></use> 588 </svg> 589 <span>@Pageview.Page.MenuText</span> 590 </button> 591 </div>*@ 592 @DwCaching.CacheByPage("basic_Page.xslt", () => RenderNavigation(new { Template = "basic_Page.xslt", StartLevel = 1, EndLevel = 3 })) 593 </aside> 594 <section class="basic_page-content @bg"> 595 @if (pageLayout == "content-page-sidebar" 596 && !string.IsNullOrEmpty(Model.Item.GetString("Title").ToString()) 597 || !string.IsNullOrEmpty(Model.Item.GetString("Text").ToString()) 598 || Model.Item.GetFile("Image") != null) 599 { 600 if (isBanner && Model.Item.GetFile("Image") != null) 601 { 602 <figure class="page-banner @isWhite" style="background-image:url(@Pageview.CdnWrap(Model.Item.GetFile("Image").Path);"> 603 <figcaption class="@justifyBanner"> 604 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title").ToString())) 605 { 606 <h1 class="page-banner-title"> 607 @Model.Item.GetString("Title") 608 </h1> 609 } 610 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text").ToString())) 611 { 612 <div class="@isBottomRight"> 613 <div class="page-banner-text@(isFixedWidth)"> 614 @Model.Item.GetString("Text") 615 </div> 616 </div> 617 618 } 619 </figcaption> 620 </figure> 621 } 622 else 623 { 624 if (!string.IsNullOrEmpty(Model.Item.GetString("Title").ToString())) 625 { 626 <header class="basic_page-header"> 627 <h1> 628 @Model.Item.GetString("Title") 629 </h1> 630 </header> 631 } 632 if (!string.IsNullOrEmpty(Model.Item.GetString("Text").ToString()) || Model.Item.GetFile("Image") != null) 633 { 634 string ImagePosition = !string.IsNullOrEmpty(Model.Item.GetValue<ListViewModel>("ImagePosition").SelectedValue) ? Model.Item.GetValue<ListViewModel>("ImagePosition").SelectedValue : "top"; 635 <div class="basic_page-@ImagePosition"> 636 @if (Model.Item.GetFile("Image") != null) 637 { 638 <figure> 639 <img src="@Pageview.CdnWrap(Model.Item.GetFile("Image").Path)" 640 alt="@(!string.IsNullOrEmpty(Model.Item.GetString("ImageText")) ? Model.Item.GetString("ImageText") : Model.Item.GetString("Title"))" 641 class="img-fluid" /> 642 @if (!string.IsNullOrEmpty(Model.Item.GetString("ImageText"))) 643 { 644 <figcaption>@Model.Item.GetString("ImageText")</figcaption> 645 } 646 </figure> 647 } 648 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 649 { 650 <div class="basic_page-text"> 651 @Model.Item.GetString("Text") 652 </div> 653 } 654 </div> 655 } 656 } 657 } 658 @RenderPlaceholder() 659 </section> 660 } 661 else 662 { 663 @RenderPlaceholder() 664 @RenderBoxedPlaceholder() 665 } 666 </main> 667 } 668 else 669 { 670 <main class="basic_page" id="main-element"> 671 @RenderPlaceholder() 672 @RenderBoxedPlaceholder() 673 </main> 674 } 675 @helper RenderPlaceholder() 676 { 677 @Model.Placeholder("Content", "Content", "unwrap:true;default:true") 678 } 679 680 @helper RenderBoxedPlaceholder() 681 { 682 if (!String.IsNullOrEmpty(Model.Placeholder("Boxed"))) 683 { 684 <div class="basic_page-group"> 685 @Model.Placeholder("Boxed", "Grouped Content", "unwrap:true") 686 </div> 687 } 688 } 689 @*=== Footer Start ===*@ 690 @{ 691 string basicFooterPrefix = "Footer "; 692 } 693 694 @if (partnersite && (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterGraphicsText")) || Model.Area.Item.GetFile("FooterGraphicsGraphic") != null)) 695 { 696 <div class="basic_footer-graphics"> 697 <div class="basic_footer-wrap"> 698 <div class="basic_footer-box"> 699 @*@if (Pageview.User != null) 700 { 701 var salesPersonService = ObjectFactory.GetInstance<SalesPersonService>(); 702 var salesPerson = salesPersonService.GetPrimarySalesPerson(); 703 704 if (salesPerson != null) 705 { 706 <table class="table table-person"> 707 <tr> 708 <td class="img-cell"> 709 <img src="@Pageview.CdnWrap($"/Admin/Public/GetImage.ashx?Width=150&amp;Height=150&amp;Crop=5&amp;Compression=85&amp;Image={salesPerson.Image}")" /> 710 </td> 711 <td> 712 <p> 713 <strong>@Translate("contactperson_header", "Din kontaktperson")</strong><br /> 714 <span class="semibold">@salesPerson.Name</span> 715 <br /><span class="title">@salesPerson.Title</span><br /> 716 <span>@Translate("users_phone", "Tlf.")</span> <span>@salesPerson.Phone</span> 717 <br /> 718 <span>@Translate("users_email", "Email:")</span> <a href="mailto:@salesPerson.Email">@salesPerson.Email</a> 719 </p> 720 </td> 721 </tr> 722 </table> 723 } 724 else 725 { 726 <p>@Model.Area.Item.GetString("FooterGraphicsText")</p> 727 } 728 } 729 else 730 { 731 <p>@Model.Area.Item.GetString("FooterGraphicsText")</p> 732 }*@ 733 <p>@Model.Area.Item.GetString("FooterGraphicsText")</p> 734 </div> 735 @if (Model.Area.Item.GetFile("FooterGraphicsGraphic") != null) 736 { 737 <div class="basic_footer-box"> 738 <figure> 739 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("FooterGraphicsGraphic").Path)" class="img-fluid" alt="@Translate(basicFooterPrefix + "Graphics Alt Text", "City")" /> 740 </figure> 741 </div> 742 } 743 </div> 744 </div> 745 } 746 747 748 @if (!partnersite) 749 { 750 <div class="basic_footer-sup"> 751 <div class="basic_footer-wrap"> 752 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneText"))) 753 { 754 <div class="basic_footer-box @(!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneLink")) ? "basic_footer-box--has-link" : "")"> 755 <div class="basic_footer-media"> 756 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneIcon"))) 757 { 758 <span class="icon material-symbols-rounded">@Model.Area.Item.GetString("FooterSubOneIcon")</span> 759 } 760 else if (Model.Area.Item.GetFile("FooterSubOneImage") != null) 761 { 762 <figure> 763 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("FooterSubOneImage").Path)" alt="@Model.Title" class="img-fluid" /> 764 </figure> 765 } 766 </div> 767 <div class="basic_footer-text"> 768 <h3>@Model.Area.Item.GetString("FooterSubOneTitle")</h3> 769 @Model.Area.Item.GetString("FooterSubOneText") 770 </div> 771 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneLink"))) 772 { 773 <div class="basic_footer-link"> 774 <a href="@Model.Area.Item.GetString("FooterSubOneLink")" title="@Model.Area.Item.GetString("FooterSubOneLink")"></a> 775 <span class="sr-only">@Model.Area.Item.GetString("FooterSubOneLink")</span> 776 </div> 777 } 778 </div> 779 } 780 781 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubTwoTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubTwoText"))) 782 { 783 <div class="basic_footer-box @(!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubTwoLink")) ? "basic_footer-box--has-link" : "")"> 784 <div class="basic_footer-media"> 785 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneIcon"))) 786 { 787 <span class="icon material-symbols-rounded">@Model.Area.Item.GetString("FooterSubTwoIcon")</span> 788 } 789 else if (Model.Area.Item.GetFile("FooterSubTwoImage") != null) 790 { 791 <figure> 792 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("FooterSubTwoImage").Path)" alt="@Model.Title" class="img-fluid" /> 793 </figure> 794 } 795 </div> 796 <div class="basic_footer-text"> 797 <h3>@Model.Area.Item.GetString("FooterSubTwoTitle")</h3> 798 @Model.Area.Item.GetString("FooterSubTwoText") 799 </div> 800 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubTwoLink"))) 801 { 802 <div class="basic_footer-link"> 803 <a href="@Model.Area.Item.GetString("FooterSubTwoLink")" title="@Model.Area.Item.GetString("FooterSubTwoLink")"></a> 804 <span class="sr-only">@Model.Area.Item.GetString("FooterSubTwoLink")</span> 805 </div> 806 } 807 </div> 808 } 809 </div> 810 </div> 811 } 812 else 813 { 814 <div class="basic_footer-sup"> 815 <div class="basic_footer-wrap"> 816 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneText")) && Model.Area.Item.GetFile("FooterSubOneImage") != null) 817 { 818 <div class="basic_footer-box"> 819 <div class="basic_footer-text"> 820 <h3>@Model.Area.Item.GetString("FooterSubOneTitle")</h3> 821 @Model.Area.Item.GetString("FooterSubOneText") 822 </div> 823 <div class="basic_footer-image"> 824 <figure> 825 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("FooterSubOneImage").Path)" alt="@Model.Title" class="img-fluid" /> 826 </figure> 827 </div> 828 </div> 829 } 830 831 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubTwoTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubTwoText")) && Model.Area.Item.GetFile("FooterSubTwoImage") != null) 832 { 833 <div class="basic_footer-box"> 834 <div class="basic_footer-text"> 835 <h3>@Model.Area.Item.GetString("FooterSubTwoTitle")</h3> 836 @Model.Area.Item.GetString("FooterSubTwoText") 837 </div> 838 <div class="basic_footer-image"> 839 <figure> 840 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("FooterSubTwoImage").Path)" alt="@Model.Title" class="img-fluid" /> 841 </figure> 842 </div> 843 </div> 844 } 845 </div> 846 </div> 847 } 848 849 <footer class="basic_footer"> 850 <div class="basic_footer-wrap"> 851 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterOneTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterOneText"))) 852 { 853 <div class="basic_footer-box"> 854 <div class="basic_footer-head" role="button" v-b-toggle.footer-one> 855 <h3>@Model.Area.Item.GetString("FooterOneTitle")</h3> 856 </div> 857 <b-collapse id="footer-one" class="basic_footer-collapse"> 858 <div class="basic_footer-body"> 859 @Model.Area.Item.GetString("FooterOneText") 860 </div> 861 </b-collapse> 862 </div> 863 } 864 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoTitle"))) 865 { 866 var navitag = Model.Area.Item.GetString("FooterTwoNavigationtag"); 867 868 <div class="basic_footer-box"> 869 <div class="basic_footer-head" role="button" v-b-toggle.footer-two> 870 <h3>@Model.Area.Item.GetString("FooterTwoTitle")</h3> 871 </div> 872 <b-collapse id="footer-two" class="basic_footer-collapse"> 873 <div class="basic_footer-body"> 874 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoText"))) 875 { 876 @Model.Area.Item.GetString("FooterTwoText") 877 } 878 @if (!string.IsNullOrEmpty(navitag)) 879 { 880 @DwCaching.CacheByArea("basic_SubPage.xslt", () => RenderNavigation(new { Template = "basic_SubPage.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, NavigationTag = navitag })) 881 } 882 </div> 883 </b-collapse> 884 </div> 885 } 886 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeText"))) 887 { 888 <div class="basic_footer-box"> 889 <div class="basic_footer-head" role="button" v-b-toggle.footer-three> 890 <h3>@Model.Area.Item.GetString("FooterThreeTitle")</h3> 891 </div> 892 <b-collapse id="footer-three" class="basic_footer-collapse"> 893 <div class="basic_footer-body"> 894 @Model.Area.Item.GetString("FooterThreeText") 895 </div> 896 </b-collapse> 897 </div> 898 } 899 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterFourText")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterCopyright")) && partnersite) 900 { 901 <div class="basic_footer-box"> 902 <div id="footer-four" class="basic_footer-logo"> 903 <div class="basic_footer-body"> 904 @Model.Area.Item.GetString("FooterFourText") 905 <p> 906 @Translate(basicFooterPrefix + "Copyright", "Copyright")&copy; @DateTime.Now.Year - @Model.Area.Item.GetString("FooterCopyright") 907 </p> 908 </div> 909 </div> 910 </div> 911 } 912 </div> 913 @if (Model.Area.Item.GetItems("PaymentCards") != null && Model.Area.Item.GetItems("PaymentCards").Any()) 914 { 915 <div class="basic_footer-wrap"> 916 <div class="basic_footer-box"> 917 <div class="basic_footer-icons"> 918 <ul class="list-inline payments"> 919 @foreach (var i in Model.Area.Item.GetItems("PaymentCards")) 920 { 921 var cardTitle = i.GetString("Title"); 922 var cardImage = i.GetFile("ImageFile"); 923 <li class="list-inline-item"> 924 <img src="@cardImage.Path" alt="@cardTitle" class="img-fluid" /> 925 </li> 926 } 927 </ul> 928 </div> 929 </div> 930 </div> 931 } 932 933 @if (!partnersite && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterCopyright"))) 934 { 935 <div class="basic_footer-wrap"> 936 <p class="basic_footer-copyright">&copy; @DateTime.Now.Year @Model.Area.Item.GetString("FooterCopyright")</p> 937 </div> 938 } 939 940 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnOneText")) || !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnTwoText")) || !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnThreeText")) || !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnFourText")) || !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnFiveText"))) 941 { 942 <div class="basic_footer-info"> 943 <div class="basic_footer-wrap"> 944 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnOneText"))) 945 { 946 <div class="basic_footer-info--box"> 947 @Raw(Model.Area.Item.GetString("FooterSubColumnOneText")) 948 </div> 949 } 950 951 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnTwoText"))) 952 { 953 <div class="basic_footer-info--box"> 954 @Raw(Model.Area.Item.GetString("FooterSubColumnTwoText")) 955 </div> 956 } 957 958 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnThreeText"))) 959 { 960 <div class="basic_footer-info--box"> 961 @Raw(Model.Area.Item.GetString("FooterSubColumnThreeText")) 962 </div> 963 } 964 965 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnFourText"))) 966 { 967 <div class="basic_footer-info--box"> 968 @Raw(Model.Area.Item.GetString("FooterSubColumnFourText")) 969 </div> 970 } 971 972 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubColumnFiveText"))) 973 { 974 <div class="basic_footer-info--box"> 975 @Raw(Model.Area.Item.GetString("FooterSubColumnFiveText")) 976 </div> 977 } 978 979 </div> 980 </div> 981 } 982 </footer> 983 @*=== Footer End ===*@ 984 </div> 985 } 986 <a href="#top" class="scroll-to-top" title="@Translate("Scroll to top", "GÃ¥ til toppen")"> 987 @if (!partnersite) 988 { 989 <span class="material-symbols-rounded">vertical_align_top</span> 990 } 991 else 992 { 993 <svg class="icon"> 994 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#arrow-to-top"></use> 995 </svg> 996 } 997 <span class="sr-only">@Translate("Scroll to top", "GÃ¥ til toppen")</span> 998 </a> 999 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 1000 1001 <script type="text/x-template" id="add-to-basket-simple-template"> 1002 @{ 1003 string addToBasketSimplePrifix = "BuyButton "; 1004 } 1005 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]"> 1006 <label for="quantity">@Translate(addToBasketSimplePrifix + "Quantity", "Quantity")</label> 1007 <input class="form-control" type="number" name="quantity" v-model="quantity" autocomplete="off" onclick="this.select()"> 1008 <button :disabled="quantity < 1 || isCoolDownProduct" :class="buttonCl" v-on:click="addToBasketAndResetQuantity()" aria-label="@Translate(addToBasketSimplePrifix + "Add", "Add")"> 1009 <slot> 1010 <svg> 1011 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#shopping-cart"> 1012 </use> 1013 </svg> 1014 <span v-if="isCoolDownProduct"> 1015 @Translate(addToBasketSimplePrifix + "Add to basket udmeldt", "Udgået") 1016 </span> 1017 <span v-else> 1018 @Translate(addToBasketSimplePrifix + "Add to basket", "Add to basket") 1019 </span> 1020 </slot> 1021 </button> 1022 </div> 1023 </script> 1024 1025 <script type="text/x-template" id="quick-add-template"> 1026 @{ 1027 string quickAddPrifix = "BuyButton "; 1028 } 1029 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]" v-if="!isCoolDownProduct"> 1030 <label for="quantity">@Translate(quickAddPrifix + "Quantity", "Quantity")</label> 1031 <input class="form-control" type="number" id="quantity" name="quantity" v-model="quantity" autocomplete="off"> 1032 </div> 1033 </script> 1034 1035 <script type="text/x-template" id="add-to-basket-button-only-template"> 1036 @{ 1037 string addToBasketPrefix = "BuyButton "; 1038 } 1039 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]"> 1040 <button :class="buttonCl" v-on:click="addToBasket()" :disbaled="isCoolDownProduct"> 1041 <slot v-if="isCoolDownProduct"> 1042 @Translate(addToBasketPrefix + "Add to basket udmeldt", "Udgået") 1043 </slot> 1044 <slot v-else> 1045 @Translate(addToBasketPrefix + "Add to basket", "Add to basket") 1046 </slot> 1047 </button> 1048 </div> 1049 </script> 1050 1051 <script type="text/x-template" id="add-to-basket-rounding-template"> 1052 @{ 1053 string addToBasketRoundingPrifix = "BuyButton "; 1054 } 1055 <div v-bind:class="[{animated: true}, {added: IsAdded}, {adding: IsAdding}]" v-if="showBasket()"> 1056 <p class="alert alert-warning" v-if="didRounding"> 1057 <svg> 1058 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#info-circle"></use> 1059 </svg> 1060 @Translate("product_minPurchaseRoundingInfoText", "Vi har ændret antal ift. kolli-størrelse") 1061 </p> 1062 <div class="addtobasket-group"> 1063 @*input-group was here*@ 1064 @*@if (Pageview.User != null) 1065 { 1066 <favorite-item :product-id="productId" 1067 :language-id="languageId" 1068 :variant-id="variantId" 1069 ref="favoriteItem"> 1070 </favorite-item> 1071 }*@ 1072 <template v-if="missingVariant"> 1073 <p class="alert alert-warning"> 1074 <svg> 1075 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#info-circle"> 1076 </use> 1077 </svg> 1078 @Translate(addToBasketRoundingPrifix + "Select variant", "Select variant") 1079 </p> 1080 </template> 1081 <template v-else> 1082 <div class="input-group"> 1083 <div class="input-group-prepend"><span class="input-group-text">{{unitsOfMeasureDescription().toLowerCase().trim() }}</span></div> 1084 <label for="quantity" class="sr-only">@Translate(addToBasketRoundingPrifix + "Quantity", "Quantity")</label> 1085 <input class="form-control" type="number" v-on:keyup.enter="addToBasketAndResetQuantity()" min="1" max="9999" name="quantity" v-model="quantity" value="1" autocomplete="off" onclick="this.select()" v-on:blur="calculateMinPurchase($event.target.value)"> 1086 <div class="input-group-append"> 1087 <button :disabled="quantity < 1 || isCoolDownProduct" :class="buttonCl" v-on:click="addToBasketAndResetQuantity()" aria-label="@Translate(addToBasketRoundingPrifix + "Add", "Add")" should-animate> 1088 <slot> 1089 <svg> 1090 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#shopping-cart"> 1091 </use> 1092 </svg> 1093 <span v-if="isCoolDownProduct"> 1094 @Translate(addToBasketRoundingPrifix + "Add to basket udmeldt", "Udgået") 1095 </span> 1096 <span v-else> 1097 @Translate(addToBasketRoundingPrifix + "Add to basket", "Add to basket") 1098 </span> 1099 </slot> 1100 </button> 1101 </div> 1102 </div> 1103 </template> 1104 </div> 1105 @*<div id="add-message" v-if="IsAdded || IsAdding"><p>@Translate("Tilføjet til kurv!")</p></div>*@ 1106 </div> 1107 </script> 1108 @using Bolind.Web.CustomCode 1109 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 1110 1111 <script type="text/x-template" id="async-price-template"> 1112 @{ 1113 string asyncPrefix = "Async "; 1114 } 1115 <div :class="classType + (loading && !isCoolDownProduct ? ' loading' : '')"> 1116 <template> 1117 <p :class="classType + '--error'" v-if="error">{{error}}</p> 1118 </template> 1119 <template v-if="isCoolDownProduct"> 1120 <p class="alert noprice" style="background-color: #dae0e5"> 1121 @Translate(asyncPrefix + "item discontinued", "Vare udg&aring;et") 1122 </p> 1123 </template> 1124 <template v-else-if="!onlyStock && !error && price && price.unitPrice"> 1125 @{ 1126 bool B2C = Pageview.IsB2C(); 1127 var vat = (B2C) ? Translate("product_inclVat", "inkl. moms") : Translate("product_exVat", "ekskl. moms"); 1128 } 1129 <p class="alert alert-warning noprice" v-if="priceWithoutVatString == '0' && !allowZeroPrice"> 1130 @Translate(asyncPrefix + "Contact Bolind for price", "Kontakt Bolind for pris") 1131 </p> 1132 <p class="listprice" v-if="showListPrice && (priceWithoutVatString != '0')"> 1133 @Translate(asyncPrefix + "product_listPrice", "Vejledende pris:") <span>{{ listPrice | currency(true) }}</span> 1134 </p> 1135 <p class="price" v-bind:class="{ sale: showListPrice }" v-if="!loading && price && price.netUnitPrice && (priceWithoutVatString != '0' || allowZeroPrice ) && !isCart" itemprop="priceCurrency" :content="price.unitPrice.currencyKey"> 1136 <template v-if="isCampaign"> 1137 <span class="price-campaigntext">@Translate(asyncPrefix + "Campaign_price", "Kampagnepris")</span> 1138 </template> 1139 <span itemprop="price" :content="price.unitPrice.priceWithoutVat" class="price-actual"> 1140 {{ price.netUnitPrice.priceWithoutVat | currency(true) }} 1141 </span> 1142 </p> 1143 <template v-if="(priceWithoutVatString != '0' || allowZeroPrice) && !isCart"> 1144 <ul class="list-inline qtyPrices" v-if="price.extraInfo.navPrices.length > 0 && showQtyPrices(price)"> 1145 <li v-for="navPrice in price.extraInfo.navPrices"> 1146 <span>@Translate(asyncPrefix + "Price pr. unit", "Fra") {{navPrice.quantity}} {{ unitsOfMeasureDescription().toLowerCase().trim() }} </span> 1147 <span class="qtyprice">{{navPrice.price | currency(true)}}</span> 1148 </li> 1149 </ul> 1150 <p class="priceper"> 1151 @Translate(asyncPrefix + "product_pricePer", "Pris pr.") {{ unitsOfMeasureDescription().toLowerCase().trim() }} @vat 1152 </p> 1153 @if (!B2C) 1154 { 1155 <p class="priceincl" v-if="!hidePriceIncl"> 1156 @Translate(asyncPrefix + "PriceVatIncl", "Pris inkl. moms:") <span>{{ priceWithVatString | currency(true) }}</span> 1157 </p> 1158 } 1159 </template> 1160 <template v-if="isCart"> 1161 <span class="montage-price">{{ price.netUnitPrice.priceWithoutVat | currency(true) }}</span> 1162 </template> 1163 </template> 1164 </div> 1165 </script> 1166 1167 <script type="text/x-template" id="cart-icon-template"> 1168 @{ 1169 string translationPrefixCart = "Minicart "; 1170 } 1171 <a :href="cartlink"> 1172 <svg> 1173 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#shopping-cart"></use> 1174 </svg> 1175 <span class="label">@Translate(translationPrefixCart + "Checkout", "Checkout")</span> 1176 <span v-if="!cartEmpty" class="cart-quantity">{{quantity}}</span> 1177 </a> 1178 </script> 1179 <script type="text/x-template" id="cart-icon-template-new"> 1180 @{ 1181 string _translationPrefixCart = "Minicart "; 1182 } 1183 <a :href="cartlink"> 1184 <span class="icon material-symbols-rounded">shopping_cart</span> 1185 <span class="label">@Translate(_translationPrefixCart + "Checkout", "Checkout")</span> 1186 <span v-if="!cartEmpty" class="cart-quantity">{{quantity}}</span> 1187 </a> 1188 </script> 1189 <script type="text/x-template" id="basic-facet-filter-template"> 1190 @{ 1191 string basicFacetPrefix = "Filter "; 1192 } 1193 1194 <div class="basic_filter" v-if="!error && facetFilters"> 1195 <template v-if="HasActiveFilter()"> 1196 <p id="selected-filter-label" class="sr-only"> 1197 @Translate(basicFacetPrefix + "Active", "Active") 1198 </p> 1199 <div aria-labelledby="selected-filter-label" class="basic_filter-active"> 1200 <template v-for="facetFilter in facetFilters"> 1201 <span v-for="option in SelectedOptions(facetFilter)" class="custom-control custom-filter"> 1202 <input type="checkbox" 1203 :id="'Selected-' + facetFilter.Name + '-' + option.Name" 1204 :name="facetFilter.Name" 1205 :key="option.Label" 1206 :v-model="option.Selected" 1207 :checked="option.Selected" 1208 v-on:click="ToggleFilter(facetFilter.Name,option)" 1209 class="custom-control-input" /> 1210 <label :for="'Selected-' + facetFilter.Name + '-' + option.Name" class="custom-control-label"> 1211 <span class="filtername">{{facetFilter.Name}}:&nbsp;</span> 1212 <span class="filterstring">{{option.Label}}</span> 1213 <span class="remove">X</span> 1214 </label> 1215 </span> 1216 </template> 1217 </div> 1218 </template> 1219 <b-collapse class="basic_filter-collapse" id="sidebar-filter"> 1220 <div class="basic_filter-head"> 1221 <h3> 1222 @Translate(basicFacetPrefix + "Filter", "Filter") 1223 </h3> 1224 <template v-if="queryLoading"> 1225 <span class="spinner-md-default"></span> 1226 </template> 1227 <template v-else> 1228 <button type="button" class="btn-close" v-b-toggle.sidebar-filter aria-label="@Translate(basicFacetPrefix + "Close Filter", "Close Filter")"> 1229 <span></span> 1230 <span></span> 1231 </button> 1232 </template> 1233 </div> 1234 <div class="basic_filter-groups"> 1235 <div class="basic_filter-group" v-for="(facetFilter, index) in facetFilters"> 1236 <p :id="'filter-group-' + facetFilter.Name.toLowerCase().trim()" v-b-toggle="'filter-collapse-' + facetFilter.Name.toLowerCase().trim()"> 1237 {{facetFilter.Name}} 1238 <svg> 1239 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#chevron-right"></use> 1240 </svg> 1241 </p> 1242 <b-collapse :id="'filter-collapse-' + facetFilter.Name.toLowerCase().trim()" :visible="ShowGroupIfSelected(facetFilter.Options, index)" class="basic_filter-collapsing"> 1243 <template v-if="facetFilter.Options.length > 7"> 1244 <b-collapse class="basic_filter-expand" :id="'filter-expand-' + facetFilter.Name.toLowerCase().trim()" :visible="ShowMoreIfSelected(facetFilter.Options, index)"> 1245 <ul :aria-labelledby="'filter-group-' + facetFilter.Name.toLowerCase().trim()"> 1246 <li v-for="option in facetFilter.Options" class="custom-control custom-checkbox"> 1247 <input type="checkbox" class="custom-control-input" 1248 :id="'UnSelected-' + facetFilter.Name + '-' + option.Name" 1249 :key="option.Label" 1250 :name="facetFilter.Name" 1251 :v-model="option.Selected" 1252 :checked="option.Selected" 1253 v-on:click="ToggleFilter(facetFilter.Name,option)" /> 1254 <label :for="'UnSelected-' + facetFilter.Name + '-' + option.Name" class="custom-control-label"> 1255 {{option.Label}} ({{option.Count}}) 1256 </label> 1257 </li> 1258 </ul> 1259 </b-collapse> 1260 <a v-b-toggle="'filter-expand-' + facetFilter.Name.toLowerCase().trim()" class="basic_filter-expanding" v-if="facetFilter.Options.length > 7"> 1261 <span class="show-more">+ @Translate(basicFacetPrefix + "show more", "show more")</span> 1262 <span class="show-less">- @Translate(basicFacetPrefix + "show less", "show less")</span> 1263 </a> 1264 </template> 1265 <template v-else> 1266 <ul :aria-labelledby="'filter-group-' + facetFilter.Name.toLowerCase().trim()"> 1267 <li v-for="option in facetFilter.Options" class="custom-control custom-checkbox"> 1268 <input type="checkbox" class="custom-control-input" 1269 :id="'UnSelected-' + facetFilter.Name + '-' + option.Name" 1270 :key="option.Label" 1271 :name="facetFilter.Name" 1272 :v-model="option.Selected" 1273 :checked="option.Selected" @*AG: should it have been 'checked'?*@ 1274 v-on:click="ToggleFilter(facetFilter.Name,option)" /> 1275 <label :for="'UnSelected-' + facetFilter.Name + '-' + option.Name" class="custom-control-label"> 1276 {{option.Label}} <span class="count">({{option.Count}})</span> 1277 </label> 1278 </li> 1279 </ul> 1280 </template> 1281 </b-collapse> 1282 </div> 1283 </div> 1284 <div class="basic_filter-foot"> 1285 <button class="btn btn-dark btn-icon btn-block" v-b-toggle.sidebar-filter> 1286 <svg class="icon"> 1287 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#check"></use> 1288 </svg> 1289 @Translate(basicFacetPrefix + "Show selected", "Show Selected") 1290 </button> 1291 </div> 1292 </b-collapse> 1293 </div> 1294 </script> 1295 @{ 1296 string favoriteListPrefix = "FavoriteList "; 1297 } 1298 <script type="text/x-template" id="favorite-list-template"> 1299 <div v-bind:class="{ active: active }" id="basic_favoritelist" v-autoClose="closeFoldOut"> 1300 <div class="fav-inwrap"> 1301 <template v-if="loading"> 1302 <div class="loading"> 1303 <span class="spinner-xl-default"></span> 1304 </div> 1305 </template> 1306 <h5>@Translate(favoriteListPrefix + "Favoritliste", "Favoritliste")</h5> 1307 <p class="desc"> 1308 @Translate(favoriteListPrefix + "Tilføj eller fjern markering.", "Tilføj eller fjern markering.") 1309 </p> 1310 <template v-for="favoriteList in favoriteLists"> 1311 <div class="form-check"> 1312 <input type="checkbox" :id="'fav-' + favoriteList.id" :value="favoriteList.id" :checked="isItemAddedToThisList(favoriteList)" v-on:change="toggleItem($event, favoriteList.id)" class="form-check-input" /> 1313 <label :for="'fav-' + favoriteList.id" class="form-check-label"> 1314 {{favoriteList.name}} 1315 </label> 1316 </div> 1317 </template> 1318 <div class="form-check"> 1319 <input type="checkbox" id="addNewListCheckbox" v-model="addNewList" class="form-check-input" /> 1320 <label for="addNewListCheckbox" class="form-check-label"> 1321 @Translate(favoriteListPrefix + "Ny favoritliste", "Ny favoritliste") 1322 </label> 1323 </div> 1324 <div v-if="addNewList" class="input-group input-group-sm"> 1325 <input type="text" id="addNewListNameInput" v-model="addNewListNameInput" class="form-control new-list-name-input" v-on:keyup.enter="saveAsNewList" /> 1326 <div class="input-group-append"> 1327 <button v-on:click="saveAsNewList" class="btn btn-dark">@Translate(favoriteListPrefix + "Gem", "Gem")</button> 1328 </div> 1329 </div> 1330 </div> 1331 </div> 1332 </script> 1333 <script type="text/x-template" id="favorite-item-template"> 1334 <div class="basic_favoriteitem" v-if="loaded"> 1335 <button class="btn btn-light btn-icon icon-only" title="@Translate("AddFavorite", "Tilføj favorit")" v-on:click="toggleFavoriteList($event)"> 1336 <template v-if="showFavoriteIcon"> 1337 <svg viewBox="0 0 576 512" class="added"><path d="M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"></path></svg> 1338 @*<svg> 1339 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#star"></use> 1340 </svg>*@ 1341 <span class="pdp-only">@Translate("FavoriteAdded", "Favorit")</span> 1342 </template> 1343 <template v-else> 1344 <svg viewBox="0 0 576 512"><path d="M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z"></path></svg> 1345 @*<svg> 1346 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#star-stroke"></use> 1347 </svg>*@ 1348 <span class="pdp-only">@Translate("AddFavorite", "Tilføj favorit")</span> 1349 </template> 1350 </button> 1351 </div> 1352 </script> 1353 @using Bolind.Web.CustomCode.CDN 1354 @using Dynamicweb.Frontend 1355 <script type="text/x-template" id="instant-search-template"> 1356 <form v-bind:class="baseClass" action="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")" v-autoClose="closeFoldOut"> 1357 <div class="basic_instantsearch"> 1358 <label for="searchquery" class="sr-only">@Translate(centerHeaderPrefix + "Search products", "Hvad søger du?")</label> 1359 <input type="search" 1360 placeholder="@Translate(centerHeaderPrefix + "Search products", "Hvad søger du?")" 1361 id="searchquery" 1362 name="searchquery" 1363 autocomplete="off" 1364 v-on:input="inputChanged" 1365 v-on:focus="foldActive = 'active'" 1366 v-on:blur="foldActive = ''"> 1367 <button type="submit"> 1368 <span class="sr-only">@Translate(centerHeaderPrefix + "Search", "Søg")</span> 1369 <svg> 1370 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#search"></use> 1371 </svg> 1372 </button> 1373 <div class="fold-out" v-bind:class="{ active: foldActive }"> 1374 <div class="products"> 1375 <template v-if="searchQuery == ''"> 1376 @Translate(centerHeaderPrefix + "Type something", "Indtast for at søge") 1377 </template> 1378 <template v-else-if="queryLoading"> 1379 <div class="basic_listview-loading"> 1380 <span class="spinner-xl-default"></span> 1381 </div> 1382 </template> 1383 <template v-else-if="productList == null"> 1384 @Translate(centerHeaderPrefix + "Empty search...", "Der blev ikke fundet varer...") 1385 </template> 1386 <table v-else class="table table-sm table-border-bottom"> 1387 <tbody> 1388 <tr v-for="product in productList"> 1389 <td class="thumb text-center"> 1390 <a :href="getProductUrl(product)" @@mousedown.prevent="navigateToProduct(product)"> 1391 <img :src="'@PageView.Current().CdnWrap("/Admin/Public/GetImage.ashx?Width=50&amp;Height=40&amp;fillcanvas=true&amp;Compression=85&amp;Crop=5&amp;Image=")' + (product.PrimaryImage ? product.PrimaryImage : '/Files/Images/Default.png')" /> 1392 </a> 1393 </td> 1394 <td> 1395 <a :href="getProductUrl(product)" @@mousedown.prevent="navigateToProduct(product)"> 1396 {{product.Name}} <small>{{product.Description2}} {{product.Description3}}</small> 1397 </a> 1398 </td> 1399 <td class="text-right"> 1400 <small>{{product.Number}}</small> 1401 </td> 1402 </tr> 1403 </tbody> 1404 </table> 1405 </div> 1406 <div v-if="searchQuery != '' && productList != null" class="actions"> 1407 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?searchquery=' + searchQuery" @@mousedown.prevent="navigateToSearchResults('@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?searchquery=' + searchQuery)">@Translate(centerHeaderPrefix + "See all products", "Se alle varer")</a> 1408 </div> 1409 </div> 1410 </div> 1411 </form> 1412 </script> 1413 <script type="text/x-template" id="pagination-template"> 1414 @{ 1415 string paginationPrefix = "Pagination "; 1416 } 1417 <nav aria-label="@Translate(paginationPrefix + "Produktliste pagination", "Produktliste pagination")"> 1418 <ul class="pagination"> 1419 <li :class="['page-item', currentPage == 1 ? 'disabled' : '' ]"> 1420 <a class="page-link" v-on:click="togglePrevPage()" aria-label="@Translate(paginationPrefix + "Previous Page", "Previous Page")" v-bind:aria-disabled="currentPage > 1 ? 'true' : null"> 1421 <svg> 1422 <use xmlns:xlink="http://www.w3.org/1999/xlink" 1423 xlink:href="/files/dist/icons/icons.svg#chevron-left"> 1424 </use> 1425 </svg> 1426 </a> 1427 </li> 1428 <template v-for="n in totalPages" v-if="showPage(n)"> 1429 <li :key="n" :class="(n == currentPage ? 'page-item active' : 'page-item')"> 1430 <a v-on:click="togglePage(n)" v-bind:aria-current="(n == currentPage ? 'aria-page' : '')" class="page-link"> 1431 {{n}} 1432 </a> 1433 </li> 1434 </template> 1435 <li :class="'page-item' + (currentPage >= totalPages ? ' disabled' : '')"> 1436 <a v-on:click="toggleNextPage()" aria-label="@Translate(paginationPrefix + "Next Page", "Next Page")" class="page-link" v-bind:aria-disabled="totalPages > currentPage ? 'true' : null"> 1437 <svg class="icon-pagination"> 1438 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#chevron-right"></use> 1439 </svg> 1440 </a> 1441 </li> 1442 </ul> 1443 </nav> 1444 </script> 1445 1446 <script> 1447 var messages = { 1448 required: '@Translate("messages_required", "This field is required")', 1449 email: ' @Translate("messages_email", "Enter email")', 1450 numeric: ' @Translate("messages_numeric", "Enter number")', 1451 checked: ' @Translate("messages_checked", "Please accept terms and conditions to shop")', 1452 max: '@Translate("messages_max", "This field contains to many characters")' 1453 }; 1454 </script> 1455 @if (System.Web.HttpContext.Current.Session[WebsiteService.ClearLocalStorageTag] != null) 1456 { 1457 System.Web.HttpContext.Current.Session.Remove(WebsiteService.ClearLocalStorageTag); 1458 <script> 1459 localStorage.clear(); 1460 console.log("localstorage cleared"); 1461 </script> 1462 } 1463 <script src="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/scripts/bundle.min.js"))" data-category-consent="cookie_cat_necessary"></script> 1464 <script> 1465 AppStart.VueProvider.init({ 1466 webApiUrl: '@System.Web.Configuration.WebConfigurationManager.AppSettings["WebApiProxyUrl"]', 1467 currencyCode: '@Pageview.Area.EcomCurrencyId', 1468 locale: '@Pageview.Area.Culture', 1469 currencyLeft: false, 1470 currencySpacing: true, 1471 currencySymbol: '@Pageview.Area.EcomCurrencyId', 1472 currencyDecimalSeparator: ',', 1473 currencyGroupSeparator: '.', 1474 currencyDecimalDigits: 2, 1475 dateFormatShort: '@Pageview.Area.Dateformat' 1476 }); 1477 </script> 1478 <script append="replace"></script> 1479 <script src="https://www.google.com/recaptcha/api.js" async defer></script> 1480 </body> 1481 </html>