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