Error executing template "Designs/Tefcold/_parsed/Basic_Page.parsed.cshtml"
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.MakeGroupTree(GroupCollection groups, Page page, NavigationItem parentNode, Int32 thisLevel, Int32 maxLevel, Page productPage)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.MakeGroupTree(Page page, NavigationItem parentNode)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.Process(NavigationItem node)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.ProcessTree(RootNavigationItem rootNode, NavigationType navigationType)
   at Dynamicweb.Frontend.XmlNavigation.MakeXml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, Int32 selectedAreaId)
   at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, String name, String xsltPath, Int32 selectedAreaId, Boolean sitemapMode, NameValueCollection settings, NameValueCollection attributes, IncludeMode mode)
   at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(NameValueCollection settings, NameValueCollection attributes)
   at Dynamicweb.Rendering.TemplateBase`1.RenderNavigation(Object settings)
   at CompiledRazorTemplates.Dynamic.RazorEngine_fda2c78b37584552937ebfc4df1822fb.Execute() in E:\Solutions\Live\Tefcold.Web\Files\Templates\Designs\Tefcold\_parsed\Basic_Page.parsed.cshtml:line 115
   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 System.Globalization 2 @using Dynamicweb 3 @using Dynamicweb.Content 4 @using Dynamicweb.Frontend; 5 @using Dynamicweb.Security.UserManagement 6 @using NLWI.Core.Factory 7 @using NORRIQ.SalesPersonLogin.Services 8 @using Dynamicweb.Ecommerce.International 9 @using Tefcold.Web.CustomCode.Extensions 10 @using Tefcold.Web.CustomCode.Items.Properties 11 @using Tefcold.Web.CustomCode.Items.Settings 12 @using Tefcold.Web.CustomCode.LanguageSwitch 13 @using Tefcold.Web.CustomCode.Razor 14 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 15 @{ 16 //Heine: Understående kan bruges såfremt der skal tjekkes på om man er i impersonation mode: 17 var isImpersonating = ImpersonationService.IsCurrentlyImpersonating(); 18 var locationName = Pageview.User?.Name; 19 var websiteSettings = Pageview.Area.Item.ToCodeFirstItem<Websites>(); 20 LanguageService languageService = new LanguageService(); 21 var languagesJson = Newtonsoft.Json.JsonConvert.SerializeObject(languageService.GetLanguages()); 22 } 23 24 <!DOCTYPE html> 25 <html lang="@Pageview.Area.Culture"> 26 <head> 27 <meta charset='utf-8' /> 28 <meta name="description" content="@Model.Description" /> 29 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5, user-scalable=yes, shrink-to-fit=no" /> 30 <meta http-equiv="x-ua-compatible" content="ie=edge"> 31 @if (Model.Area.Item.GetBoolean("NoIndex")) 32 { 33 <!-- TODO: remove on launch--> 34 <meta name="robots" content="noindex, nofollow" /> 35 } 36 37 @if (!string.IsNullOrWhiteSpace(websiteSettings.HeaderScript)) 38 { 39 @websiteSettings.HeaderScript 40 } 41 42 @if (!string.IsNullOrWhiteSpace(websiteSettings.GoogleTagManagerId)) 43 { 44 <script> 45 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 46 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 47 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 48 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 49 })(window,document,'script','dataLayer','@websiteSettings.GoogleTagManagerId'); 50 </script> 51 } 52 53 <!-- Begin Mailchimp Signup Form --> 54 <link href="//cdn-images.mailchimp.com/embedcode/classic-10_7.css" rel="stylesheet" type="text/css"> 55 <style type="text/css"> 56 #mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; } 57 /* Add your own Mailchimp form style overrides in your site stylesheet or in this style block. 58 We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */ 59 60 </style> 61 62 <title>@Model.Title</title> 63 @Model.MetaTags 64 @if (Model.Area.Item.GetFile("Icon") != null) 65 { 66 <link href="@Model.Area.Item.GetFile("Icon").Path" rel="icon" type="image/png"> 67 } 68 <link rel="preload" href="@NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/Tefcold-min.css")" as="style" /> 69 <link rel="stylesheet" async href="@NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/css/Tefcold-min.css")" /> 70 @*<link href="/Files/dist/css/Tefcold-min.css" rel="stylesheet" />*@ 71 </head> 72 <body> 73 @if (!string.IsNullOrWhiteSpace(websiteSettings.GoogleTagManagerId)) 74 { 75 <!-- Google Tag Manager (noscript) --> 76 <noscript> 77 <iframe src="https://www.googletagmanager.com/ns.html?id=@websiteSettings.GoogleTagManagerId" 78 height="0" width="0" style="display: none; visibility: hidden"></iframe> 79 </noscript> 80 <!-- End Google Tag Manager (noscript) --> 81 } 82 <div id="app"> 83 @{ 84 string basicNavbarPrefix = "Header "; 85 var logo = Model.Area.Item.GetFile("Logo"); 86 var currencyCode = Pageview.User?.Currency ?? Pageview.Area.EcomCurrencyId; 87 } 88 <header class="basic_navbar@(websiteSettings.EcomNav ? " has-groupsnavbar":"")" id="header"> 89 @if (isImpersonating) 90 { 91 <div class="impersonation-bar"> 92 <div class="basic_navbar-container"> 93 <p> 94 @Translate(basicNavbarPrefix + "debitor", "Debitor"): <b>@locationName</b> | <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("impersonation-choose-customer")?action=changeuser">@Translate("Change customer")</a> 95 </p> 96 </div> 97 </div> 98 } 99 <div class="basic_navbar-main"> 100 <div class="basic_navbar-container"> 101 <a href="/" class="basic_navbar-logo" title="@Translate(basicNavbarPrefix + "Go to frontpage", "Go to frontpage")"> 102 @if (logo != null) 103 { 104 <img class="img-fluid" src="@logo.Path" alt="@Translate(basicNavbarPrefix + "Website Logo Alttext", "Website Logo Alttext")" /> 105 } 106 else 107 { 108 <i>@Translate(basicNavbarPrefix + "No logo found", "No logo found, please configure it in the Dynamicweb Administration")</i> 109 } 110 </a> 111 <collapse-hack inline-template> 112 <b-collapse class="basic_navbar-navigation" id="basic_navigation" tag="@(websiteSettings.EcomNav ? "div" : "nav")"> 113 @if (!websiteSettings.EcomNav) 114 { 115 @RenderNavigation(new { Template = "basic_navbar.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4 }) 116 } 117 else 118 { 119 @RenderNavigation(new { Template = "basic_navbar-extreme.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4 }) 120 } 121 <ul class="basic_navbar-subnav"> 122 <li> 123 <button type="button" 124 v-b-toggle.languages 125 aria-label="@Translate(basicNavbarPrefix + "Choose Language", "Choose Language")" 126 title="@Translate(basicNavbarPrefix + "Choose Language", "Choose Language")"> 127 <img src="/Admin/Public/GetImage.ashx?Width=32&amp;Compression=85&amp;Format=webp&amp;Quality=85&amp;Image=@Pageview.Area.Flag32X32" alt="@Pageview.Area.CultureInfo.EnglishName" /> 128 <span class="sr-only">@Pageview.Area.CultureInfo.EnglishName</span> 129 </button> 130 </li> 131 <li> 132 <button v-b-toggle.contacts 133 type="button" 134 aria-label="@Translate(basicNavbarPrefix + "Show contacts", "Show contacts")" 135 title="@Translate(basicNavbarPrefix + "Show contacts", "Show contacts")"> 136 <svg> 137 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#phone-alt"></use> 138 </svg> 139 <span class="sr-only">@Translate(basicNavbarPrefix + "Contacts", "Contacts")</span> 140 </button> 141 </li> 142 <li> 143 <button v-b-toggle.customer-center 144 type="button" 145 aria-label="@Translate(basicNavbarPrefix + "Show Webshop Login", "Show Webshop Login")" 146 title="@Translate(basicNavbarPrefix + "Show Webshop Login", "Show Webshop Login")"> 147 @if (Pageview.User == null) 148 { 149 <svg> 150 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#user"></use> 151 </svg> 152 } 153 else 154 { 155 <svg style="width: 30px; height: 30px;"> 156 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#user-check"></use> 157 </svg> 158 } 159 <span class="sr-only">@Translate(basicNavbarPrefix + "Login", "Login")</span> 160 </button> 161 </li> 162 @if (Pageview.User != null) 163 { 164 <li> 165 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("quickorder")" title="@Translate(basicNavbarPrefix + "Quickorder", "Quickorder")"> 166 <svg width="28px" height="28px"> 167 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#quickorder"></use> 168 </svg> 169 <span class="sr-only">@Translate(basicNavbarPrefix + "Quickorder", "Quickorder")</span> 170 </a> 171 </li> 172 } 173 @if (Pageview.User != null && Pageview.User.AllowMediaBank()) 174 { 175 @*<media-bank inline-template> 176 <li> 177 <form id="mediabankform" action="https://imagebank.tefcold.com/Home/LoginUser" method="post"> 178 <input id="mediabankformname" type="hidden" name="username" /> 179 <input id="mediabankformpassword" type="hidden" name="password" /> 180 <input type="hidden" value="false" name="persistent" /> 181 </form> 182 <a v-on:click="connect($event)" href="#" title="@Translate(basicNavbarPrefix + "Mediabank", "Mediabank")"> 183 <svg width="28px" height="28px" fill="currentColor"> 184 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#photo-video"></use> 185 </svg> 186 <span class="sr-only">@Translate(basicNavbarPrefix + "Mediabank", "Mediabank")</span> 187 </a> 188 </li> 189 </media-bank>*@ 190 <li> 191 <a href="@Translate(basicNavbarPrefix + "Mediabank Link", "http://media.tefcold.com")" target="_blank" title="@Translate(basicNavbarPrefix + "Mediabank", "Mediabank")"> 192 <svg width="28px" height="28px" fill="currentColor"> 193 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#photo-video"></use> 194 </svg> 195 <span class="sr-only">@Translate(basicNavbarPrefix + "Mediabank", "Mediabank")</span> 196 </a> 197 </li> 198 } 199 <li> 200 <button type="button" 201 class="btn-close" 202 @@click="collapseAll" 203 aria-label="@Translate(basicNavbarPrefix + "Close Navigation", "Close Navigation")" 204 title="@Translate(basicNavbarPrefix + "Close Navigation", "Close Navigation")"> 205 <span></span> 206 <span></span> 207 </button> 208 </li> 209 </ul> 210 </b-collapse> 211 </collapse-hack> 212 @if (websiteSettings.SearchAheadActivated) 213 { 214 <instant-search base-class="basic_navbar-search" :min-search-length="@websiteSettings.KeyStrokes" :number-of-hits="@websiteSettings.SearchHits" :product-search-paragraph-id="@websiteSettings.ProductSearchParagraphId" 215 :content-search-paragraph-id="@websiteSettings.ContentSearchParagraphId"></instant-search> 216 } 217 else 218 { 219 220 <form class="basic_navbar-search" action="/Default.aspx"> 221 <search-shortcut inline-template> 222 <div style="display: none"></div> 223 </search-shortcut> 224 <label for="productsearch">Search</label> 225 <input name="ID" type="hidden" value="@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("searchresult")"> 226 <input name="PageSize" type="hidden" value="99" /> 227 <input type="search" placeholder="@Translate(basicNavbarPrefix + "Search", "Search")" id="productsearch" name="productsearch"> 228 <button type="submit"> 229 <span class="sr-only">@Translate(basicNavbarPrefix + "Search", "Search")</span> 230 <svg> 231 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#search"></use> 232 </svg> 233 </button> 234 </form> 235 } 236 237 <ul class="basic_navbar-functions"> 238 <li class="basic_navbar-languages relative"> 239 <button type="button" v-b-toggle.languages aria-label="@Translate(basicNavbarPrefix + "Choose Language", "Choose Language")" title="@Translate(basicNavbarPrefix + "Choose Language", "Choose Language")"> 240 <span class="sr-only">@Pageview.Area.CultureInfo.EnglishName</span> 241 @if (Pageview.Area.Culture == "en-GB") 242 { 243 <img src="/Admin/Public/GetImage.ashx?Width=32&amp;Compression=85&amp;Format=webp&amp;Quality=85&amp;Image=/Files/Images/globe-flag.png" alt="@Pageview.Area.Culture - Flag" width="32" height="32" /> 244 } 245 else 246 { 247 <img src="/Admin/Public/GetImage.ashx?Width=32&amp;Compression=85&amp;Format=webp&amp;Quality=85&amp;Image=@Pageview.Area.Flag32X32" alt="@Pageview.Area.Culture - Flag" width="32" height="32" /> 248 } 249 @*@if (Pageview.Area.Culture == "en-GB") 250 { 251 <svg width="32" height="32" fill="currentColor"> 252 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#globe"></use> 253 </svg> 254 } 255 else 256 { 257 <img src="@Pageview.Area.Flag32X32" alt="@Pageview.Area.Culture - Flag" /> 258 }*@ 259 </button> 260 <b-collapse id="languages" class="basic_navbar-dropdown" accordion="header" v-auto-close> 261 <div class="basic_navbar-body languages-dropdown"> 262 <ul class="master-area"> 263 <li class="head"> 264 @if (Pageview.AreaID == 12 || Pageview.AreaID == 13) 265 { 266 <strong>@Translate(basicNavbarPrefix + "Tefcold Cz Languages", "TEFCOLD CZ s.r.o.")</strong> 267 } 268 else 269 { 270 <strong>@Translate(basicNavbarPrefix + "Tefcol Group Languages", "TEFCOLD A/S")</strong> 271 } 272 </li> 273 @foreach (var lang in Model.Languages) 274 { 275 @RenderLanguage(lang) 276 } 277 </ul> 278 <ul class="sub-area"> 279 280 @foreach (var masterArea in Dynamicweb.Services.Areas.GetMasterAreas().Where(a => !Model.Languages.Any(s => a.ID == s.ID))) 281 { 282 <li class="head"> 283 @if (Pageview.AreaID == 12 || Pageview.AreaID == 13) 284 { 285 <strong>@Translate(basicNavbarPrefix + "Tefcol Group Languages", "TEFCOLD A/S")</strong> 286 } 287 else 288 { 289 <strong>@Translate(basicNavbarPrefix + "Tefcold Cz Languages", "TEFCOLD CZ s.r.o.")</strong> 290 } 291 </li> 292 if (Pageview.AreaID != masterArea.ID) 293 { 294 <li class="@masterArea.ID"> 295 @renderArea(masterArea, websiteSettings) 296 </li> 297 } 298 foreach (var lang in masterArea.Languages.Where(s => s.Active && s.ID != Pageview.AreaID)) 299 { 300 <li class="is-lang"> 301 @renderArea(lang, websiteSettings) 302 </li> 303 } 304 } 305 306 </ul> 307 <ul class="uk-area"> 308 <li class="head"><strong>@Translate(basicNavbarPrefix + "Tefcol UK Languages", "TEFCOLD UK")</strong></li> 309 <li> 310 <a href="@Translate(basicNavbarPrefix + "Tefcold UK Url", "//tefcold.co.uk")" target="_blank"> 311 312 <img src="/Admin/Public/GetImage.ashx?Width=32&amp;Compression=85&amp;Format=webp&amp;Quality=85&amp;Background=dee0e2&amp;Image=/Admin/Images/Flags/flag_GB.png" alt="en-GB - Flag" loading="lazy" /> 313 <span>@Translate(basicNavbarPrefix + "Tefcold UK Label", "tefcold.co.uk")</span> 314 </a> 315 </li> 316 </ul> 317 </div> 318 </b-collapse> 319 </li> 320 <li class="basic_navbar-contacts @(Pageview.User != null ? "static" : "relative")"> 321 <button v-b-toggle.contacts 322 type="button" 323 aria-label="@Translate(basicNavbarPrefix + "Show contacts", "Show contacts")" 324 title="@Translate(basicNavbarPrefix + "Show contacts", "Show contacts")"> 325 <svg> 326 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#phone-alt"></use> 327 </svg> 328 <span class="sr-only">@Translate(basicNavbarPrefix + "Contacts", "Contacts")</span> 329 </button> 330 @{ 331 var impersonationGroupId = websiteSettings.ImpersonationGroup.FirstOrDefault(); 332 IEnumerable<User> users = null; 333 IEnumerable<User> salesPersons = new List<User>(); 334 if (Pageview.User != null) 335 { 336 var salesPersonCode = Pageview.User.CustomFieldValues.FirstOrDefault(field => field.CustomField.Name == "Sales Person Code"); 337 var salesPersonsInitials = salesPersonCode?.Value?.ToString().Split(',') ?? new string[] { }; 338 salesPersonsInitials = salesPersonsInitials.Select(x => x.ToLower()).ToArray(); 339 340 if (!string.IsNullOrEmpty(impersonationGroupId)) 341 { 342 users = Group.GetGroupByID(int.Parse(impersonationGroupId)).Users; 343 } 344 if (users == null || Pageview.User == null) 345 { 346 salesPersons = new List<User>(); 347 } 348 else 349 { 350 salesPersons = users.Where(user => salesPersonsInitials.Contains(user.Email.ToLower().Split('@').FirstOrDefault() ?? "")); 351 } 352 } 353 354 } 355 <b-collapse id="contacts" class="@(Pageview.User != null ? "basic_navbar-megamenu" : "basic_navbar-dropdown")" v-auto-close accordion="header"> 356 <div class="basic_navbar-body"> 357 @if (Pageview.User != null) 358 { 359 if (salesPersons.Any()) 360 { 361 <p class="tefcold_salesperson-byline h1">@Translate(basicNavbarPrefix + "Your Sales Team", "Your Sales Team")</p> 362 } 363 foreach (var salesPerson in salesPersons) 364 { 365 <div class="tefcold_salesperson" itemscope itemtype="http://schema.org/Person"> 366 <figure> 367 <img src="@salesPerson.Image" class="img-fluid" alt="@salesPerson.Name" itemprop="image" loading="lazy" /> 368 </figure> 369 <p itemprop="name">@salesPerson.Name</p> 370 <p itemprop="jobTitle">@salesPerson.JobTitle</p> 371 <p itemprop="telephone"> 372 <svg> 373 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#phone-alt"></use> 374 </svg> 375 <span>@salesPerson.PhonePrivate</span> 376 </p> 377 <p itemprop="telephone"> 378 <svg> 379 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#mobile-alt"></use> 380 </svg> 381 <span>@salesPerson.PhoneMobile</span> 382 </p> 383 <a href="@("mailto:" + @salesPerson.Email)" itemprop="email"> 384 <svg> 385 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#envelope"></use> 386 </svg> 387 <span>@salesPerson.Email</span> 388 </a> 389 </div> 390 } 391 } 392 <ul> 393 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("PhoneLabel")) 394 && !string.IsNullOrEmpty(Model.Area.Item.GetString("Phonenumber"))) 395 { 396 <li class="head"> 397 <strong> 398 @Model.Area.Item.GetString("PhoneLabel") 399 </strong> 400 <strong> 401 @Model.Area.Item.GetString("Phonenumber") 402 </strong> 403 </li> 404 } 405 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("ContactPage")) 406 && !string.IsNullOrEmpty(Model.Area.Item.GetString("ContactLabel"))) 407 { 408 <li> 409 <a href="@Model.Area.Item.GetString("ContactPage")"> 410 @Model.Area.Item.GetString("ContactLabel") 411 </a> 412 </li> 413 } 414 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("SalesPage")) 415 && !string.IsNullOrEmpty(Model.Area.Item.GetString("SalesLabel"))) 416 { 417 <li> 418 <a href="@Model.Area.Item.GetString("SalesPage")"> 419 @Model.Area.Item.GetString("SalesLabel") 420 </a> 421 </li> 422 } 423 </ul> 424 425 </div> 426 </b-collapse> 427 </li> 428 <li class="basic_navbar-user"> 429 <button v-b-toggle.customer-center type="button" aria-label="@Translate(basicNavbarPrefix + "Show Webshop Login", "Show Webshop Login")" title="@Translate(basicNavbarPrefix + "Show Webshop Login", "Show Webshop Login")"> 430 @if (Pageview.User == null) 431 { 432 <svg> 433 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#user"></use> 434 </svg> 435 } 436 else 437 { 438 <svg style="width: 30px; height: 30px;"> 439 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#user-check"></use> 440 </svg> 441 } 442 <span class="sr-only">@Translate(basicNavbarPrefix + "Login", "Login")</span> 443 </button> 444 445 446 <b-collapse id="customer-center" class="basic_navbar-dropdown" accordion="header" v-auto-close> 447 <div class="basic_navbar-body"> 448 @if (Pageview.User == null) 449 { 450 <head-login-form inline-template> 451 <form name="ExtUserForm" id="loginForm" method="post" class="form" role="form" v-on:submit="submitLogin"> 452 <p> 453 <strong> 454 @Translate(basicNavbarPrefix + "Webshop Login", "Webshop Login") 455 </strong> 456 </p> 457 <input type="hidden" name="ID" id="ID" value="" /> 458 <div class="form-group"> 459 <label for="Username">@Translate(basicNavbarPrefix + "Username", "Username")</label> 460 <input id="Username" v-model="username" name="Username" type="text" value="" class="form-control" autocomplete="off"> 461 </div> 462 <div class="form-group"> 463 <label for="Password">@Translate(basicNavbarPrefix + "Password", "Password")</label> 464 <input id="Password" v-model="password" name="Password" type="password" value="" class="form-control" autocomplete="off"> 465 </div> 466 <div v-if="loginFailed"> 467 <p class="alert alert-warning"> 468 @Translate("Login failed", "Invalid credentials") 469 </p> 470 </div> 471 <div v-if="redirecting" class="alert alert-warning"> 472 <p> 473 @Translate("Login wrong shop", "Your login belongs to another language, redirecting you in:") 474 475 </p> 476 <span class="basic_login"><b>{{counter}}</b></span> 477 </div> 478 479 <div class="basic_login-buttons"> 480 <button type="submit" role="button" class="btn btn-primary btn-block" v-bind:class='{"loading": loading}' v-on:click="loading=true" id="loginBtn"> 481 @Translate(basicNavbarPrefix + "Login", "Login") 482 </button> 483 </div> 484 </form> 485 </head-login-form> 486 <ul> 487 <li> 488 <a href="/Default.aspx?ID=@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("forgotpassword")&amp;LoginAction=Recovery"> 489 @Translate(basicNavbarPrefix + "Forgot password", "Forgot password") 490 </a> 491 </li> 492 <li> 493 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("contact")"> 494 @Translate(basicNavbarPrefix + "Create Webshop Account", "Create Webshop Account") 495 </a> 496 </li> 497 </ul> 498 } 499 else 500 { 501 <div class="active-user"> 502 <p><strong>@Pageview.User.Name</strong></p> 503 <p> 504 <a v-clear-cache:click.user href='/admin/public/extranetlogoff.aspx?ID=@(NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("home"))'> 505 @Translate(basicNavbarPrefix + "Sign out", "Sign out") 506 </a> 507 </p> 508 </div> 509 @RenderNavigation(new { Template = "basic_Footer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, NavigationTag = "customer-portal" }) 510 } 511 </div> 512 </b-collapse> 513 </li> 514 @if (Pageview.User != null && Pageview.User.AllowMediaBank()) 515 { 516 @*<media-bank inline-template> 517 <li> 518 <form id="mediabankform" action="https://imagebank.tefcold.com/Home/LoginUser" method="post"> 519 <input id="mediabankformname" type="hidden" name="username" /> 520 <input id="mediabankformpassword" type="hidden" name="password" /> 521 <input type="hidden" value="false" name="persistent" /> 522 </form> 523 <a v-on:click="connect($event)" href="#" title="@Translate(basicNavbarPrefix + "Mediabank", "Mediabank")"> 524 <svg width="28px" height="28px" fill="currentColor"> 525 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#photo-video"></use> 526 </svg> 527 <span class="sr-only">@Translate(basicNavbarPrefix + "Mediabank", "Mediabank")</span> 528 </a> 529 </li> 530 </media-bank>*@ 531 <li> 532 <a href="@Translate(basicNavbarPrefix + "Mediabank Link", "http://media.tefcold.com")" target="_blank" title="@Translate(basicNavbarPrefix + "Mediabank", "Mediabank")"> 533 <svg width="28px" height="28px" fill="currentColor"> 534 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#photo-video"></use> 535 </svg> 536 <span class="sr-only">@Translate(basicNavbarPrefix + "Mediabank", "Mediabank")</span> 537 </a> 538 </li> 539 540 } 541 @if (Pageview.User != null) 542 { 543 <li class="basic_navbar-quick"> 544 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("quickorder")" title="@Translate(basicNavbarPrefix + "Quickorder", "Quickorder")"> 545 <svg width="28px" height="28px"> 546 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#quickorder"></use> 547 </svg> 548 <span class="sr-only">@Translate(basicNavbarPrefix + "Quickorder", "Quickorder")</span> 549 </a> 550 </li> 551 } 552 @if (websiteSettings.b2cshopping || Pageview.User != null) 553 { 554 <cart-icon cartlink="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("checkout")"></cart-icon> 555 } 556 <li class="basic_navbar-toggle"> 557 <button type="button" 558 aria-label="@Translate(basicNavbarPrefix + "Open main navigation", "Open main navigation")" 559 title="@Translate(basicNavbarPrefix + "Open main navigation", "Open main navigation")" 560 v-b-toggle.basic_navigation> 561 <svg width="28px" height="28px"> 562 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#bars"></use> 563 </svg> 564 <span class="sr-only">@Translate(basicNavbarPrefix + "Open main navigation", "Open main navigation")</span> 565 </button> 566 </li> 567 </ul> 568 569 </div> 570 </div> 571 </header> 572 @using Dynamicweb.Frontend; 573 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 574 575 @Title("Page") 576 @Description("Default page template") 577 @{ 578 string basicPagePrefix = "Page "; 579 } 580 @if (Pageview.IsCurrentUserAllowed) 581 { 582 var pageLayout = !string.IsNullOrEmpty(Model.Item.GetValue<ListViewModel>("Layout").SelectedValue) ? Model.Item.GetValue<ListViewModel>("Layout").SelectedValue : "content-page-sidebar"; 583 var pageClass = pageLayout == "page-wide" ? "basic_page-wide" : "basic_page"; 584 if (!Model.Item.GetBoolean("HideBreadcrumb")) 585 { 586 if (Model.Area.Item.GetFile("TopImage") != null) 587 { 588 <figure> 589 <img src="/Admin/Public/GetImage.ashx?Height=200&amp;Compression=85&amp;Crop=6&amp;Image=@Model.Area.Item.GetFile("TopImage").Path" class="img-fluid" alt="webbanner" /> 590 </figure> 591 } 592 @RenderNavigation(new { Template = "basic_Breadcrumb.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 5 }) 593 } 594 <main class="@pageClass"> 595 @if (pageLayout == "content-page-sidebar" || pageLayout == "module-page-sidebar") 596 { 597 <aside class="basic_page-sidebar"> 598 @RenderNavigation(new { Template = "basic_Page.xslt", StartLevel = 1, EndLevel = 3 }) 599 </aside> 600 <div class="basic_page-content"> 601 @if (pageLayout == "content-page-sidebar" && !string.IsNullOrEmpty(Model.Item.GetString("Title").ToString()) || !string.IsNullOrEmpty(Model.Item.GetString("Text").ToString())) 602 { 603 <section class="basic_paragraph"> 604 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title").ToString())) 605 { 606 <header> 607 <h1> 608 @Model.Item.GetString("Title") 609 </h1> 610 </header> 611 } 612 @if (Model.Item.GetFile("Image") != null) 613 { 614 <figure> 615 <img src="@Model.Item.GetFile("Image").Path" alt="@Model.Item.GetString("Title")" class="img-fluid" /> 616 </figure> 617 } 618 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text").ToString())) 619 { 620 @Model.Item.GetString("Text") 621 } 622 </section> 623 } 624 @RenderPlaceholder() 625 </div> 626 } 627 else 628 { 629 @RenderPlaceholder() 630 } 631 </main> 632 } 633 else 634 { 635 <main class="basic_page"> 636 @RenderPlaceholder() 637 </main> 638 } 639 @helper RenderPlaceholder() 640 { 641 @Model.Placeholder("Content", "Content", "unwrap:true;default:true") 642 if (!String.IsNullOrEmpty(Model.Placeholder("Boxed"))) 643 { 644 <div class="grouped"> 645 @Model.Placeholder("Boxed", "Grouped Content", "unwrap:true") 646 </div> 647 } 648 } 649 650 @{ 651 string footerPrefix = "Footer "; 652 } 653 <footer class="basic_footer"> 654 <div class="basic_footer-wrap basic_footer-main"> 655 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterOneTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterOneText"))) 656 { 657 <div class="basic_footer-box"> 658 <div class="basic_footer-head" role="button" v-b-toggle.footer-one> 659 <h3>@Model.Area.Item.GetString("FooterOneTitle")</h3> 660 </div> 661 <b-collapse id="footer-one" class="basic_footer-collapse"> 662 <div class="basic_footer-body"> 663 @Model.Area.Item.GetString("FooterOneText") 664 </div> 665 </b-collapse> 666 </div> 667 } 668 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoTitle")) 669 && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoText")) 670 || !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoTag"))) 671 { 672 <div class="basic_footer-box"> 673 <div class="basic_footer-head" role="button" v-b-toggle.footer-two> 674 <h3>@Model.Area.Item.GetString("FooterTwoTitle")</h3> 675 </div> 676 <b-collapse id="footer-two" class="basic_footer-collapse"> 677 <div class="basic_footer-body"> 678 @Model.Area.Item.GetString("FooterTwoText") 679 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoTag"))) 680 { 681 @RenderNavigation(new { Template = "basic_Footer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, NavigationTag = @Model.Area.Item.GetString("FooterTwoTag").ToString() }) 682 } 683 </div> 684 </b-collapse> 685 </div> 686 } 687 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeTitle")) 688 && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeText")) 689 || !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeTag"))) 690 { 691 <div class="basic_footer-box"> 692 <div class="basic_footer-head" role="button" v-b-toggle.footer-three> 693 <h3>@Model.Area.Item.GetString("FooterThreeTitle")</h3> 694 </div> 695 <b-collapse id="footer-three" class="basic_footer-collapse"> 696 <div class="basic_footer-body"> 697 @Model.Area.Item.GetString("FooterThreeText") 698 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeTag"))) 699 { 700 @RenderNavigation(new { Template = "basic_Footer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, NavigationTag = @Model.Area.Item.GetString("FooterThreeTag").ToString() }) 701 } 702 </div> 703 </b-collapse> 704 </div> 705 } 706 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterFourTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterFourText"))) 707 { 708 <div class="basic_footer-box"> 709 <div class="basic_footer-head" role="button" v-b-toggle.footer-four> 710 <h3>@Model.Area.Item.GetString("FooterFourTitle")</h3> 711 </div> 712 <b-collapse id="footer-four" class="basic_footer-collapse"> 713 <div class="basic_footer-body"> 714 @Model.Area.Item.GetString("FooterFourText") 715 </div> 716 </b-collapse> 717 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FacebookUrl")) 718 || !string.IsNullOrEmpty(Model.Area.Item.GetString("LinkedInUrl")) 719 || !string.IsNullOrEmpty(Model.Area.Item.GetString("YoutubeUrl"))) 720 { 721 <div class="some"> 722 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FacebookUrl"))) 723 { 724 <a href="@Model.Area.Item.GetString("FacebookUrl")" target="_blank" aria-label="Facebook" rel="noreferrer"> 725 <svg> 726 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#facebook-square"></use> 727 </svg> 728 </a> 729 } 730 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("LinkedInUrl"))) 731 { 732 <a href="@Model.Area.Item.GetString("LinkedInUrl")" target="_blank" aria-label="LinkedIn" rel="noreferrer"> 733 <svg> 734 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#linkedin"></use> 735 </svg> 736 </a> 737 } 738 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("YoutubeUrl"))) 739 { 740 <a href="@Model.Area.Item.GetString("YoutubeUrl")" target="_blank" aria-label="Youtube" rel="noreferrer"> 741 <svg> 742 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#youtube-square"></use> 743 </svg> 744 </a> 745 } 746 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("SmileyUrl"))) 747 { 748 <a href="@Model.Area.Item.GetString("SmileyUrl")" target="_blank" aria-label="@Translate(footerPrefix + "smiley", "Elite Smiley")" rel="noreferrer"> 749 <svg> 750 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#happy-smiley"></use> 751 </svg> 752 </a> 753 } 754 </div> 755 } 756 </div> 757 } 758 </div> 759 @if (Model.Area.Item.GetFile("GroupLogo") != null) 760 { 761 <div class="basic_footer-group"> 762 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("GroupLogo"))) 763 { 764 <a href="@Model.Area.Item.GetString("GroupLink")" target="_blank" title="@Translate(footerPrefix + "tefcold group logo alt", "Part of Tefcold Group")"> 765 <img src="@Model.Area.Item.GetFile("GroupLogo").Path" class="img-fluid" alt="@Translate(footerPrefix + "tefcold group logo alt", "Part of Tefcold Group")" /> 766 </a> 767 } 768 else 769 { 770 <img src="@Model.Area.Item.GetFile("GroupLogo").Path" class="img-fluid" alt="@Translate(footerPrefix + "tefcold group logo alt", "Part of Tefcold Group")" /> 771 } 772 </div> 773 } 774 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterCopyright"))) 775 { 776 777 <div class="basic_footer-sub"> 778 <div class="basic_footer-wrap"> 779 780 <p> 781 &copy; @DateTime.Now.Year @Model.Area.Item.GetString("FooterCopyright") 782 </p> 783 @RenderNavigation(new { Template = "basic_Footer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, NavigationTag = "footer" }) 784 785 @if (Model.Area.Item.GetValue<ListViewModel>("Cards").SelectedValues.Any()) 786 { 787 <div class="text-center cards"> 788 @foreach (var cards in Model.Area.Item.GetValue<ListViewModel>("Cards").SelectedValues) 789 { 790 <img src="/Files/Images/cards/@cards" alt="@cards.Split('.').First()" loading="lazy" /> 791 } 792 </div> 793 } 794 795 </div> 796 </div> 797 } 798 </footer> 799 <compare-banner class="comparison-footer" inline-template> 800 <div v-if="productsToCompare >= 1" class="comparison-footer"> 801 @{ 802 string comparisonFooterPrefix = "Comparison "; 803 } 804 <template v-if="productsToCompare >= 2"> 805 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("compare")" class="btn btn-primary btn-lg btn-block"> 806 <svg class="icon"> 807 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#balance-scale"></use> 808 </svg> 809 <span> 810 @Translate(comparisonFooterPrefix + "Click to compare", "Click to compare") 811 <strong>{{productsToCompare}}</strong> 812 @Translate(comparisonFooterPrefix + "products", "products") 813 </span> 814 </a> 815 </template> 816 <template v-else> 817 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("compare")" class="btn btn-primary btn-lg btn-block no-click"> 818 <svg class="icon"> 819 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#balance-scale"></use> 820 </svg> 821 <span> 822 @Translate(comparisonFooterPrefix + "You need 2 product to compare", "You need <strong>2</strong> products to compare") 823 </span> 824 </a> 825 </template> 826 </div> 827 </compare-banner> 828 <basic-alert inline-template alertmessage='@Translate("Internet Explore Alert Message", "Website does not work properly on Internet Explorer, change browser for optimal user experience")' sessionstoragekey='IEHasBeenAlert'> 829 <div></div> 830 </basic-alert> 831 </div> 832 833 @helper RenderLanguage(PageLanguageViewModel lang) 834 { 835 if (Pageview.AreaID == lang.ID) 836 { 837 return; 838 839 } 840 841 if (Pageview.AreaID == lang.ID) 842 { 843 return; 844 845 } 846 847 var langCode = lang.Culture.Split('-').Last(); 848 var cultureInfo = CultureInfo.GetCultureInfo(lang.Culture); 849 var language = cultureInfo.NativeName.Split('(')[0]; 850 var url = SearchEngineFriendlyURLs.GetFriendlyUrl(lang.Page.ID); 851 var query = System.Web.HttpUtility.ParseQueryString(System.Web.HttpContext.Current.Request.QueryString.ToString()); 852 var allowedQuery = new HashSet<string> { "groupid", "productid", "variantid" }; 853 var shopIdSplit = "-at-SHOP"; 854 var shopId = Services.Pages.GetPage(lang.Page.ID).Area.EcomShopId; 855 foreach (var kv in query.AllKeys) 856 { 857 if (kv != null && allowedQuery.Contains(kv.ToLower())) 858 { 859 var queryValue = query[kv]; 860 var indexOfShopId = queryValue.IndexOf(shopIdSplit, StringComparison.InvariantCultureIgnoreCase); 861 if (indexOfShopId > 0) 862 { 863 var withOutShopId = queryValue.Substring(0, indexOfShopId); 864 query[kv] = withOutShopId + "-at-" + shopId; 865 } 866 } 867 else 868 { 869 query.Remove(kv); 870 } 871 } 872 873 874 var langArea = Dynamicweb.Services.Areas.GetArea(lang.ID); 875 var protocol = langArea.SslMode == 2 ? "https:" : "http"; 876 var host = lang.PrimaryDomain; 877 878 if (string.IsNullOrWhiteSpace(host)) 879 { 880 var domains = langArea.Domain.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()); 881 host = (domains.FirstOrDefault(s => !s.Equals("localhost")) ?? "").TrimEnd('/'); 882 } 883 var urlencodedQuery = $"{protocol}://{host}{url}{(query.HasKeys() ? "?" + query.ToString() : "")}"; 884 885 <li> 886 <a href="@urlencodedQuery"> 887 @if (lang.Culture == "en-GB") 888 { 889 <img src="/Files/Images/globe-flag.png" alt="@lang.Culture - Flag" width="32" height="32" loading="lazy" /> 890 } 891 else 892 { 893 <img src="/Admin/Public/GetImage.ashx?Width=32&amp;Compression=85&amp;Format=webp&amp;Quality=85&amp;Image=/Admin/Images/Flags/flag_@(langCode).png" alt="@lang.Culture - Flag" width="32" height="32" loading="lazy" /> 894 } 895 @*@if (lang.Culture == "en-GB") 896 { 897 <svg width="32" height="32" fill="#3a3b3c"> 898 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#globe"></use> 899 </svg> 900 } 901 else 902 { 903 <img src="/Admin/Images/Flags/flag_@(langCode).png" alt="@lang.Culture - Flag" loading="lazy" /> 904 }*@ 905 <span>@Translate("lang_" + lang.Culture.Split('-').First(), lang.Culture.Split('-').First())</span> 906 </a> 907 </li> 908 } 909 910 911 @helper renderArea(Area lang, Websites websiteSettings) 912 { 913 var protocol = lang.SslMode == 2 ? "https:" : "http"; 914 var host = lang.DomainLock; 915 string countryCode = lang.Culture.Split('-').Last(); 916 if (string.IsNullOrWhiteSpace(host)) 917 { 918 var domains = lang.Domain.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()); 919 host = (domains.FirstOrDefault(s => !s.Equals("localhost")) ?? "").TrimEnd('/'); 920 } 921 var langUrl = $"{protocol}://{host}"; 922 var langSettings = lang.Item.ToCodeFirstItem<Websites>(); 923 if (langSettings.NoIndex && !websiteSettings.NoIndex) 924 { 925 var pageId = NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag(countryCode + "Redirect"); 926 langUrl = pageId > 0 ? $"/Default.aspx?ID={pageId}" : ""; 927 } 928 <a href="@langUrl"> 929 @if (lang.Culture == "en-GB") 930 { 931 <img src="/Files/Images/globe-flag.png" alt="@lang.Culture - Flag" width="32" height="32" class="img-fluid" loading="lazy" /> 932 } 933 else 934 { 935 <img src="/Admin/Images/Flags/flag_@(countryCode).png" alt="@lang.Culture - Flag" width="32" height="32" class="img-fluid" loading="lazy" /> 936 } 937 <span>@Translate("lang_" + lang.Culture.Split('-').First(), lang.Culture.Split('-').First())</span> 938 </a> 939 940 } 941 942 <script type="text/x-template" id="cart-icon-template"> 943 @{ 944 string cartIconPrefix = "Minicart "; 945 } 946 <li> 947 <a :href="cartlink" title="@Translate(cartIconPrefix + "Checkout", "Checkout")"> 948 <svg> 949 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#shopping-cart"></use> 950 </svg> 951 <span class="label">@Translate(cartIconPrefix + "Checkout", "Checkout")</span> 952 <strong v-if="!cartEmpty" class="cart-quantity">{{quantity}}</strong> 953 </a> 954 </li> 955 </script> 956 957 958 959 <script type="text/x-template" id="basic-facet-filter-template"> 960 @{ 961 string basicFacetPrefix = "Filter "; 962 } 963 <aside> 964 <template v-if="HasActiveFilter()"> 965 966 <p id="selected-filter-label" class="sr-only"> 967 @Translate(basicFacetPrefix + "Active", "Active") 968 </p> 969 <div class="basic_filter-active" aria-labelledby="selected-filter-label"> 970 <template v-for="facetFilter in facetFilters"> 971 <span v-for="option in SelectedOptions(facetFilter)" class="custom-control custom-filter"> 972 <input type="checkbox" 973 :id="'Selected-' + facetFilter.name + '-' + option.name" 974 :name="facetFilter.name" 975 :value="option.value" 976 :v-model="option.selected" 977 :checked="option.selected" 978 v-on:click="ToggleFilter(facetFilter.name,option)" 979 class="custom-control-input" /> 980 <label :for="'Selected-' + facetFilter.name + '-' + option.name" class="custom-control-label" :data-name="facetFilter.name"> 981 <span> 982 {{option.label}} 983 </span> 984 <svg> 985 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#times"></use> 986 </svg> 987 </label> 988 </span> 989 </template> 990 </div> 991 </template> 992 <b-collapse class="basic_filter" id="sidebar-filter"> 993 <template v-if="!error && facetFilters"> 994 <button type="button" class="btn-close" v-b-toggle.sidebar-filter.sidebar-overlay aria-label="@Translate(basicFacetPrefix + "Close Filter", "Close Filter")"> 995 <span></span> 996 <span></span> 997 </button> 998 <div class="basic_filter-groups"> 999 <div class="basic_filter-group" v-for="(facetFilter, index) in facetFilters"> 1000 <p :id="'filter-group-' + facetFilter.name.toLowerCase().trim()" v-b-toggle="'filter-collapse-' + facetFilter.name.toLowerCase().trim()"> 1001 <template v-if="facetFilter.name === 'ModelType'"> 1002 @Translate(basicFacetPrefix + "ModelType", "Model / Type") 1003 </template> 1004 <template v-else-if="facetFilter.name === 'DoorType'"> 1005 @Translate(basicFacetPrefix + "DoorType", " Door type") 1006 </template> 1007 <template v-else-if="facetFilter.name === 'ExternalHeight'"> 1008 @Translate(basicFacetPrefix + "ExternalHeight", "External Height") (mm) 1009 </template> 1010 <template v-else-if="facetFilter.name === 'NetVolume'"> 1011 @Translate(basicFacetPrefix + "NetVolume", "Net Volume") (l) 1012 </template> 1013 <template v-else-if="facetFilter.name === 'DoorNumber'"> 1014 @Translate(basicFacetPrefix + "DoorNumber", " Number of doors") 1015 </template> 1016 <template v-else-if="facetFilter.name === 'ExteriorFinish'"> 1017 @Translate(basicFacetPrefix + "ExteriorFinish", "Exterior Finish") 1018 </template> 1019 <template v-else-if="facetFilter.name === 'ExternalWidth'"> 1020 @Translate(basicFacetPrefix + "ExternalWidth", "External Width") (mm) 1021 </template> 1022 <template v-else-if="facetFilter.name === 'GrossVolume'"> 1023 @Translate(basicFacetPrefix + "GrossVolume", "Gross Volume") (l) 1024 </template> 1025 <template v-else-if="facetFilter.name === 'Bottles330'"> 1026 @Translate(basicFacetPrefix + "Bottles330", "Capacity 330ml bottles") 1027 </template> 1028 <template v-else-if="facetFilter.name === 'Bottles500'"> 1029 @Translate(basicFacetPrefix + "Bottles500", "Capacity 500ml bottles") 1030 </template> 1031 <template v-else-if="facetFilter.name === 'Cans330'"> 1032 @Translate(basicFacetPrefix + "Cans330", "Capacity 300ml cans") 1033 </template> 1034 <template v-else-if="facetFilter.name === 'Cans500'"> 1035 @Translate(basicFacetPrefix + "Cans500", "Capacity 500ml cans") 1036 </template> 1037 <template v-else-if="facetFilter.name === 'TemperatureRange'"> 1038 @Translate(basicFacetPrefix + "TemperatureRange", "Temperature Range") 1039 </template> 1040 <template v-else-if="facetFilter.name === 'TemperatureRangeZone2'"> 1041 @Translate(basicFacetPrefix + "TemperatureRangeZone2", "Tempature Range 2") 1042 </template> 1043 <template v-else-if="facetFilter.name === 'ShelfNumber'"> 1044 @Translate(basicFacetPrefix + "ShelfNumber", "Number of shelfs") 1045 </template> 1046 <template v-else-if="facetFilter.name === 'LidType'"> 1047 @Translate(basicFacetPrefix + "LidType", "Lid Type") 1048 </template> 1049 <template v-else-if="facetFilter.name === 'InteriorFinish'"> 1050 @Translate(basicFacetPrefix + "InteriorFinish", "Interior Finish") 1051 </template> 1052 <template v-else-if="facetFilter.name === 'WineBottles750'"> 1053 @Translate(basicFacetPrefix + "WineBottles750", "Capacity 750ml winebottles") 1054 </template> 1055 <template v-else> 1056 {{facetFilter.name}} 1057 </template> 1058 <svg> 1059 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#chevron-up"></use> 1060 </svg> 1061 </p> 1062 <b-collapse :id="'filter-collapse-' + facetFilter.name.toLowerCase().trim()" :visible="ShowGroupIfSelected(facetFilter.options, index)" class="basic_filter-collapsing" :aria-labelledby="'filter-group-' + facetFilter.name.toLowerCase().trim()"> 1063 <template v-if="facetFilter.renderType === 'Range'"> 1064 <basic-range-slider @@change="updateRange(facetFilter,$event)" :min="getMinRange(facetFilter)" :max="getMaxRange(facetFilter)" :init-min="getInitMin(facetFilter)" :init-max="getInitMax(facetFilter)"></basic-range-slider> 1065 </template> 1066 1067 <template v-else-if="facetFilter.optionActiveCount > 5"> 1068 <span v-for="option in facetFilter.options.slice(0, 5)" class="custom-control custom-checkbox facet-option"> 1069 <input type="checkbox" class="custom-control-input" 1070 :id="'UnSelected-' + facetFilter.name + '-' + option.name" 1071 :name="facetFilter.name" 1072 :value="option.value" 1073 :v-model="option.selected" 1074 :checked="option.selected" 1075 v-on:click="ToggleFilter(facetFilter.name,option)" /> 1076 <label :for="'UnSelected-' + facetFilter.name + '-' + option.name" class="custom-control-label"> 1077 {{option.label}} <span class="count">({{option.count}})</span> 1078 </label> 1079 </span> 1080 <b-collapse class="basic_filter-expand" :id="'filter-expand-' + facetFilter.name.toLowerCase().trim()" :visible="ShowMoreIfSelected(facetFilter.options, index)"> 1081 <span v-for="option in facetFilter.options.slice(5)" class="custom-control custom-checkbox facet-option"> 1082 <input type="checkbox" class="custom-control-input" 1083 :id="'UnSelected-' + facetFilter.name + '-' + option.name" 1084 :name="facetFilter.name" 1085 :value="option.value" 1086 :v-model="option.selected" 1087 :checked="option.selected" 1088 v-on:click="ToggleFilter(facetFilter.name,option)" /> 1089 <label :for="'UnSelected-' + facetFilter.name + '-' + option.name" class="custom-control-label"> 1090 {{option.label}} <span class="count">({{option.count}})</span> 1091 </label> 1092 </span> 1093 </b-collapse> 1094 <a v-b-toggle="'filter-expand-' + facetFilter.name.toLowerCase().trim()" class="basic_filter-expanding" v-if="facetFilter.optionActiveCount > 6"> 1095 <span class="show-more">+ @Translate(basicFacetPrefix + "show more", "show more")</span> 1096 <span class="show-less">- @Translate(basicFacetPrefix + "show less", "show less")</span> 1097 </a> 1098 </template> 1099 <template v-else> 1100 <span v-for="option in facetFilter.options" class="custom-control custom-checkbox facet-option"> 1101 <input type="checkbox" class="custom-control-input" 1102 :id="'UnSelected-' + facetFilter.name + '-' + option.name" 1103 :name="facetFilter.name" 1104 :value="option.value" 1105 :v-model="option.selected" 1106 :checked="option.selected" 1107 v-on:click="ToggleFilter(facetFilter.name,option)" /> 1108 <label :for="'UnSelected-' + facetFilter.name + '-' + option.name" class="custom-control-label"> 1109 {{option.label}} <span class="count">({{option.count}})</span> 1110 </label> 1111 </span> 1112 </template> 1113 </b-collapse> 1114 </div> 1115 </div> 1116 </template> 1117 </b-collapse> 1118 </aside> 1119 </script> 1120 <script type="text/x-template" id="add-to-basket-simple-template"> 1121 @{ 1122 string addToBasketSimplePrifix = "BuyButton "; 1123 } 1124 <div class="form-flex" v-if="priceWithoutVat > 0" v-bind:class="[{added: IsAdded}, {adding: IsAdding}, {disabled: !canAdd}]"> 1125 1126 <label for="quantity">@Translate(addToBasketSimplePrifix + "Quantity", "Quantity")</label> 1127 <input class="form-control" type="tel" name="quantity" v-model="quantity" autocomplete="off" onclick="this.setSelectionRange(0, this.value.length)"> 1128 <button :disabled="!canAdd" :class="buttonClass" v-on:click="addToBasketAndResetQuantity()" aria-label="@Translate(addToBasketSimplePrifix + "Add", "Add")"> 1129 <slot> 1130 <svg> 1131 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#shopping-cart"> 1132 </use> 1133 </svg> 1134 <span> 1135 @Translate(addToBasketSimplePrifix + "Add to basket", "Add to basket") 1136 </span> 1137 </slot> 1138 1139 </button> 1140 1141 <span v-if="itemStockLocationState == 5" v-b-tooltip.hover.focus="'@Translate(addToBasketSimplePrifix + "The item is out of stock","The item is out of stock").Replace(System.Environment.NewLine,"").Replace("'","\\'")'" class="addtobasket-help">?</span> 1142 <span v-if="itemStockLocationState == 4" v-b-tooltip.hover.focus="'@Translate(addToBasketSimplePrifix + "cant buy this product info","This product is not available from the currently chosen stock location!").Replace(System.Environment.NewLine,"").Replace("'","\\'")'" class="addtobasket-help">?</span> 1143 <span v-if="itemStockLocationState == 50" v-b-tooltip.hover.focus="'@Translate(addToBasketSimplePrifix + "no stock information available","Could not find any stock information on this product!").Replace(System.Environment.NewLine,"").Replace("'","\\'")'" class="addtobasket-help">?</span> 1144 </div> 1145 </script> 1146 1147 <script type="text/x-template" id="quick-add-template"> 1148 @{ 1149 string quickAddPrifix = "BuyButton "; 1150 } 1151 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]"> 1152 <label for="quantity">@Translate(quickAddPrifix + "Quantity", "Quantity")</label> 1153 <input class="form-control" type="number" id="quantity" name="quantity" v-model="quantity" autocomplete="off"> 1154 </div> 1155 </script> 1156 1157 <script type="text/x-template" id="add-to-basket-button-only-template"> 1158 @{ 1159 string addToBasketPrefix = "BuyButton "; 1160 } 1161 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]"> 1162 <button :class="buttonClass" v-on:click="addToBasket()"> 1163 <slot> 1164 @Translate(addToBasketPrefix + "Add to basket", "Add to basket") 1165 </slot> 1166 </button> 1167 </div> 1168 </script> 1169 @using Dynamicweb.Frontend 1170 @using Tefcold.Web.CustomCode.Items 1171 @{ 1172 string asyncPrefix = "Async "; 1173 var website = PageView.Current().Area.GetWebsiteSettings(); 1174 } 1175 <script type="text/x-template" id="async-price-template"> 1176 <div :class="classType + (loading ? ' loading' : '') + (hasDiscount ? ' has-discount' : '')"> 1177 <template> 1178 <p :class="classType + '--error'" v-if="error">{{error}}</p> 1179 </template> 1180 <template v-if="!loading"> 1181 <template v-if="!forceAskForPrice && price.netUnitPrice.priceWithoutVat"> 1182 <meta itemprop="price" :content="price.netUnitPrice.priceWithoutVat" /> 1183 <meta itemprop="priceCurrency" content="@(Pageview.User?.Currency ?? Pageview.Area.EcomCurrencyId)" /> 1184 <div class="price-withoutvat"> 1185 <span class="price-label">@Translate(asyncPrefix + "price without vat", "Price without VAT")</span> 1186 <p class="price"> 1187 <span class="unit-price">{{ price.netUnitPrice.priceWithoutVat | currency(price.currencyCode) }}</span> 1188 @if (website.ShowPriceWitVatAndDiscount) 1189 { 1190 <small class="prev-price" v-if="hasDiscount && price.unitPrice.priceWithoutVat">{{ price.unitPrice.priceWithoutVat | currency(price.currencyCode) }}</small> 1191 } 1192 </p> 1193 </div> 1194 1195 @if (website.ShowPriceWitVatAndDiscount) 1196 { 1197 <template v-if="!listView"> 1198 <div class="price-withvat"> 1199 <span class="price-label">@Translate(asyncPrefix + "price with vat", "Price with VAT")</span> 1200 <p class="price"> 1201 <span class="unit-price">{{ price.netUnitPrice.priceWithVat | currency(price.currencyCode) }}</span> 1202 <small class="prev-price" v-if="hasDiscount && !listView && price.unitPrice.priceWithVat">{{ price.unitPrice.priceWithVat | currency(price.currencyCode) }}</small> 1203 </p> 1204 1205 </div> 1206 <div class="weee-fee" v-if="price.weeeFee && price.weeeFee > 0"> 1207 <span class="price-label">@Translate("Weee fee", "Weee fee")</span> 1208 <p class="price"> 1209 <span class="unit-price">{{ price.weeeFee | currency(price.currencyCode) }}</span> 1210 </p> 1211 1212 </div> 1213 </template> 1214 } 1215 </template> 1216 <template v-if="!price?.netUnitPrice?.priceWithoutVat || forceAskForPrice"> 1217 <a :href="'mailto:@Translate("Ask for a price EMAIL.","info@tefcold.dk")?subject=' + '@Translate("Ask for a price.")' + ' - ' + product.product.name + ' - ' + product.product.shortDescription + '&body=@Translate("ProductName EMAIL (BODY)", "Produktnavn: ") ' + product.product.name + ' - @Translate("ProductShortName EMAIL (BODY)", "Kort produktnavn: ") ' + product.product.shortDescription" class="btn btn-outline-secondary btn-sm">@Translate("Ask for a price.", "Spørg om pris.")</a> 1218 </template> 1219 </template> 1220 </div> 1221 </script> 1222 <script type="text/x-template" id="pagination-template"> 1223 @{ 1224 string paginationPrefix = "Pagination "; 1225 } 1226 <nav aria-label="@Translate(paginationPrefix + "Productlist pagination", "Productlist pagination")"> 1227 <ul class="pagination"> 1228 <li :class="['page-item', currentPage == 1 ? 'disabled' : '' ]" v-if="currentPage > 1"> 1229 <a class="page-link" v-on:click="togglePrevPage()" aria-label="@Translate(paginationPrefix + "Previous Page", "Previous Page")" v-bind:aria-disabled="currentPage > 1 ? 'true' : null"> 1230 <svg> 1231 <use xmlns:xlink="http://www.w3.org/1999/xlink" 1232 xlink:href="/files/dist/icons/icons.svg#chevron-left"> 1233 </use> 1234 </svg> 1235 </a> 1236 </li> 1237 <template v-if="hasGroupId"> 1238 <li v-if="showPage(n)" v-for="n in totalPages" :key="n" :class="(n == currentPage ? 'page-item active' : 'page-item')"> 1239 <a v-on:click="togglePage(n)" v-bind:aria-current="(n == currentPage ? 'true' : '')" class="page-link"> 1240 {{n}} 1241 </a> 1242 </li> 1243 </template> 1244 <template v-else> 1245 <li class="page-item"> 1246 <span class="page-label"> 1247 {{currentPage}} 1248 </span> 1249 </li> 1250 <li class="page-item"> 1251 <span class="page-label"> 1252 @Translate(paginationPrefix + "of", "of") 1253 </span> 1254 </li> 1255 <li class="page-item"> 1256 <span class="page-label"> 1257 {{totalPages}} 1258 </span> 1259 </li> 1260 </template> 1261 <li :class="'page-item' + (currentPage >= totalPages ? ' disabled' : '')" v-if="currentPage < totalPages"> 1262 <a v-on:click="toggleNextPage()" aria-label="@Translate(paginationPrefix + "Next Page", "Next Page")" class="page-link" v-bind:aria-disabled="totalPages > currentPage ? 'true' : null"> 1263 <svg class="icon-pagination"> 1264 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#chevron-right"></use> 1265 </svg> 1266 </a> 1267 </li> 1268 </ul> 1269 </nav> 1270 </script> 1271 <script type="text/x-template" id="product-specification-list-view-template"> 1272 <div class="basic_listview-data"> 1273 <template v-if="!isSparePart"> 1274 <p itemprop="description"> 1275 {{ SpecificationHelpers.GetFirstSpecificationValueOrDefault('GrossNetVolume',productSpecifications)}} {{ SpecificationHelpers.GetSpecificationUnit(SpecificationHelpers.GetSpecificationByKey('GrossNetVolume',productSpecifications))}} 1276 <br /> 1277 {{ SpecificationHelpers.GetFirstSpecificationValueOrDefault('ExternalDimensionWeb',productSpecifications)}} 1278 1279 </p> 1280 </template> 1281 <p itemprop="sku">@Translate("PLP No.", "No.") {{productNumber}}</p> 1282 </div> 1283 </script> 1284 @using Tefcold.Web.CustomCode.Extensions 1285 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Ecommerce.ProductCatalog.ProductViewModel> 1286 <script type="text/x-template" id="product-spare-parts-view-template"> 1287 @{ 1288 string basicPimPrefix = "PDP "; 1289 } 1290 <div v-if="sparePartReportExist || hasExplodedDrawing || spareParts.length > 0"> 1291 <button class="btn-collapse" id="spareparts" v-b-toggle.spareparts-list> 1292 @Translate(basicPimPrefix + "spare parts", "Spare Parts") 1293 </button> 1294 <template> 1295 <b-collapse id="spareparts-list" visible accordion="specs2"> 1296 <template> 1297 <div class="body-collapse full pb-0"> 1298 <ul class="basic_pim-spares"> 1299 <template v-if="sparePartReportExist"> 1300 <li> 1301 <a href="#" v-on:click="getSparePartReport($event)" target="_blank"> 1302 <svg> 1303 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#download"></use> 1304 </svg> 1305 @Translate(basicPimPrefix + "spare part list", "Spare part list") 1306 </a> 1307 </li> 1308 </template> 1309 <li v-if="hasExplodedDrawing"> 1310 <a :href="explodedDrawing" target="_blank"> 1311 <svg> 1312 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#download"></use> 1313 </svg> 1314 @Translate(basicPimPrefix + "view exploded drawing of spare parts", "View exploded drawing of spare parts") 1315 </a> 1316 </li> 1317 <li :data-point="spare.product.position" class="basic_pim-spare" v-for="spare in spareParts"> 1318 <div class="head"> 1319 <a href="#" v-on:click="navigateToSpare($event,spare.product.id)" class="name">{{spare.product.productName}}</a> 1320 <p class="sku">{{spare.product.number}}</p> 1321 </div> 1322 1323 @if (Pageview.IsAllowedToShop()) 1324 { 1325 <div class="foot"> 1326 <async-price class-type="asyncprice-spare" 1327 :product="spare" 1328 :default-price="spare.product.price" 1329 list-price="true" 1330 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1331 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1332 1333 </async-price> 1334 <add-to-basket-simple :product="spare" 1335 :unit-of-measure="'PCS'" 1336 :sparepart-location="sparepartLocation" 1337 button-class="btn btn-primary" 1338 class="addtobasketsimple-plp" 1339 :price-without-vat="spare.product.price" 1340 language-id="@Pageview.Area.EcomLanguageId" 1341 :only-spare-parts="@(Pageview.User.OnlySpareParts().ToString().ToLower())" 1342 :is-marketing-user="@(Pageview.User.OnlyView().ToString().ToLower())" 1343 :ishvasuser="@(Pageview.User.IsHVACUser().ToString().ToLower())" 1344 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1345 </add-to-basket-simple> 1346 </div> 1347 } 1348 @*<p>DEBUG: {{spare}}</p>*@ 1349 </li> 1350 1351 </ul> 1352 </div> 1353 </template> 1354 </b-collapse> 1355 </template> 1356 </div> 1357 1358 </script> 1359 <script type="text/x-template" id="variant-list-template"> 1360 <ul class="variants" v-if="initialVariant.product.hasVariants" > 1361 <li> 1362 <input v-model="variantId" @@click="changeVariantClickHandler($event)" :value="initialVariant.product.variantId" type="radio" :name="'main-' + initialVariant.product.id" :id="'main-' + initialVariant.product.id" :disabled="readOnly"/> 1363 <label :for="'main-' + initialVariant.product.id" :style="getImageOrColor(initialVariant.product.variantImage,initialVariant.product.variantValue)"></label> 1364 </li> 1365 <li v-for="variant in initialVariant.product.simpleVariants"> 1366 <input v-model="variantId" @@click="changeVariantClickHandler($event)" :value="variant.product.variantId" type="radio" :name="'color-'+variant.product.id + '-' + variant.product.variantId" :id="'color-'+variant.product.id + '-' + variant.product.variantId" /> 1367 <label :for="'color-'+variant.product.id+ '-' + variant.product.variantId" :style="getImageOrColor(variant.product.variantImage,variant.product.variantValue)"> 1368 </label> 1369 </li> 1370 </ul> 1371 </script> 1372 @using Dynamicweb.Ecommerce.International 1373 @{ 1374 string plpProductPrefix2 = "PLP "; 1375 } 1376 <script type="text/x-template" id="product-template"> 1377 1378 <article itemscope itemtype="https://schema.org/Product" v-if="product.product" v-bind:key="product.product.number"> 1379 <span class="badge"> 1380 <img v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('Stickers',product.specifications)" :src="'/Admin/Public/GetImage.ashx?Height=50&amp;Compression=85&amp;Image=' + SpecificationHelpers.GetFirstSpecificationValueOrDefault('Stickers',product.specifications)" alt="@Translate(basicPimPrefix + "Sticker", "Sticker")" v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1381 </span> 1382 <a :href="product.product.url" itemprop="url"> 1383 <figure style="min-height: 1px;"> 1384 1385 <img v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('WebPrimaryImage',product.specifications)" :src="'/Admin/Public/GetImage.ashx?Width=427&amp;Height=427&amp;Compression=85&amp;Crop=5&amp;Format=webp&amp;Quality=85&amp;fillcanvas=true&amp;Image=' + SpecificationHelpers.GetFirstSpecificationValueOrDefault('WebPrimaryImage',product.specifications)" 1386 v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1387 <img v-if="!SpecificationHelpers.GetFirstSpecificationValueOrDefault('WebPrimaryImage',product.specifications)" :src="'/Admin/Public/GetImage.ashx?Width=427&amp;Height=427&amp;Compression=85&amp;Crop=5&amp;Format=webp&amp;Quality=85&amp;fillcanvas=true&amp;Image=/Files/Images/default.jpg'" 1388 v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1389 </figure> 1390 <header> 1391 <h1 itemprop="name">{{product.product.name}}</h1> 1392 <p itemprop="category">{{product.product.shortDescription}}</p> 1393 <div class="flex-list"> 1394 <product-specification-list-view :product-specifications="product.specifications" 1395 :product-number="product.product.number" 1396 :is-spare-part="product.product.isSparePart"> 1397 </product-specification-list-view> 1398 @if (Pageview.IsAllowedToShop()) 1399 { 1400 <template v-if="plpClass=='basic_listview-grid'"> 1401 <buying-component inline-template :selected-product="product" :initial-product="initialProduct"> 1402 <template v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)"> 1403 <div class="energy-data"> 1404 <a :href="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyLabel',selectedProduct.specifications)" target="_blank" class="energy-label"> 1405 <img :src="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)" alt="Energy Label" class="img-fluid img-energy" height="25" /> 1406 </a> 1407 <a href="#" v-on:click="getProductReport($event,selectedProduct.product.number,selectedProduct.product.name,selectedProduct.product.languageId)" target="_blank" class="energy-link"> 1408 <small>@Translate("PDP product sheet", "Product Sheet")</small> 1409 </a> 1410 </div> 1411 </template> 1412 </buying-component> 1413 </template> 1414 } 1415 </div> 1416 </header> 1417 </a> 1418 <template v-if="plpClass=='basic_listview-list'"> 1419 <ul class="basic_listview-specs"> 1420 <li v-for="item in SpecificationHelpers.GetPrettyBulletPoints(product.specifications)"> 1421 {{item}} 1422 </li> 1423 </ul> 1424 @*{{ product.Product.LongDescription }}*@ 1425 </template> 1426 1427 1428 @if (!Pageview.IsAllowedToShop()) 1429 { 1430 <footer> 1431 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("contact")" class="btn btn-outline-secondary btn-sm"> 1432 @Translate("create account", "Create account") 1433 </a> 1434 <buying-component inline-template :selected-product="product" :initial-product="initialProduct"> 1435 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1436 </buying-component> 1437 </footer> 1438 } 1439 else 1440 { 1441 <buying-component inline-template :selected-product="product" :plp-class="plpClass" :initial-product="initialProduct"> 1442 <footer itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"> 1443 1444 <template v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications) && plpClass == 'basic_listview-list'"> 1445 <div class="energy-price"> 1446 <div class="variant-price"> 1447 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1448 <async-price class-type="asyncprice-plp" 1449 :product="selectedProduct" 1450 :default-price="selectedProduct.product.defaultPrice.priceWithoutVat" 1451 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1452 list-price="true" 1453 :should-emit-warranties="@((Pageview.IsAllowedToShop()).ToString().ToLower())" 1454 :force-ask-for-price="(!selectedProduct.product.isSparePart && @((Pageview.User.OnlySpareParts()).ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1455 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1456 </async-price> 1457 </div> 1458 <div class="energy-data"> 1459 <a :href="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyLabel',selectedProduct.specifications)" class="energy-label" target="_blank"> 1460 <img :src="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)" alt="Energy Label" class="img-fluid img-energy" height="25" /> 1461 </a> 1462 <a href="#" v-on:click="getProductReport($event,selectedProduct.product.number,selectedProduct.product.name,selectedProduct.product.languageId)" target="_blank" class="energy-link"> 1463 <small>@Translate("PDP product sheet", "Product Sheet")</small> 1464 </a> 1465 </div> 1466 </div> 1467 </template> 1468 <template v-else> 1469 <div class="variant-price"> 1470 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1471 <async-price class-type="asyncprice-plp" 1472 :product="selectedProduct" 1473 :default-price="selectedProduct.product.defaultPrice.priceWithoutVat" 1474 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1475 list-price="true" 1476 :should-emit-warranties="@((Pageview.IsAllowedToShop()).ToString().ToLower())" 1477 :force-ask-for-price="(!selectedProduct.product.isSparePart && @((Pageview.User.OnlySpareParts()).ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1478 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1479 </async-price> 1480 </div> 1481 </template> 1482 <div class="plp-buttons"> 1483 <div class="btn-group"> 1484 <add-to-compare :product-number="selectedProduct.product.number"></add-to-compare> 1485 @if (Pageview.IsCurrentlyB2B()) 1486 { 1487 <favorite-lists :ui-error-message-translation="'@Translate(plpProductPrefix2 + " Error while retrieving favorite list","Error while retrieving favorite list")'" :is-favorite-mode="@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("favorites") == @Pageview.ID" :product="selectedProduct"></favorite-lists> 1488 } 1489 </div> 1490 <add-to-basket-simple :product="selectedProduct" 1491 :unit-of-measure="'PCS'" 1492 button-class="btn btn-primary" 1493 class="addtobasketsimple-plp" 1494 :price-without-vat="currentItemPriceWithoutVat" 1495 language-id="@Pageview.Area.EcomLanguageId" 1496 :only-spare-parts="@(Pageview.User.OnlySpareParts().ToString().ToLower())" 1497 :is-marketing-user="@(Pageview.User.OnlyView().ToString().ToLower())" 1498 :ishvasuser="@(Pageview.User.IsHVACUser().ToString().ToLower())" 1499 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1500 </add-to-basket-simple> 1501 </div> 1502 </footer> 1503 </buying-component> 1504 } 1505 1506 </article> 1507 1508 </script> 1509 <script type="text/x-template" id="product-template-cz"> 1510 @{ 1511 string plpProductPrefix = "PLP "; 1512 } 1513 <article itemscope itemtype="https://schema.org/Product" v-if="product.product" v-bind:key="product.product.number"> 1514 <span class="stickers"> 1515 <span class="sticker" v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('Stickers',product.specifications)"> 1516 <img :src="'/Admin/Public/GetImage.ashx?Height=50&amp;Compression=85&amp;Image=' + SpecificationHelpers.GetFirstSpecificationValueOrDefault('Stickers',product.specifications)" 1517 alt="@Translate(basicPimPrefix + "Sticker", "Sticker")" 1518 class="img-fluid" /> 1519 </span> 1520 <span v-if="ShowDiscount" class="sticker discount"> 1521 -{{discount}}% 1522 </span> 1523 </span> 1524 <a :href="product.product.url" itemprop="url" :title="['@Translate(plpProductPrefix + "More info about", "More info about") ' + product.product.name]"> 1525 <figure style="min-height: 1px;"> 1526 1527 <img v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('WebPrimaryImage',product.specifications)" :src="'/Admin/Public/GetImage.ashx?Width=427&amp;Height=427&amp;Compression=85&amp;Crop=5&amp;Format=webp&amp;Quality=85&amp;fillcanvas=true&amp;Image=' + SpecificationHelpers.GetFirstSpecificationValueOrDefault('WebPrimaryImage',product.specifications)" 1528 v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1529 <img v-if="!SpecificationHelpers.GetFirstSpecificationValueOrDefault('WebPrimaryImage',product.specifications)" :src="'/Admin/Public/GetImage.ashx?Width=427&amp;Height=427&amp;Compression=85&amp;Crop=5&amp;Format=webp&amp;Quality=85&amp;fillcanvas=true&amp;Image=/Files/Images/default.jpg'" 1530 v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1531 </figure> 1532 <header> 1533 <h1 itemprop="name">{{product.product.name}}</h1> 1534 <p itemprop="category">{{product.product.shortDescription}}</p> 1535 <div class="flex-list"> 1536 <product-specification-list-view :product-specifications="product.specifications" 1537 :product-number="product.product.number" 1538 :is-spare-part="product.product.isSparePart"> 1539 </product-specification-list-view> 1540 <template v-if="plpClass=='basic_listview-grid'"> 1541 <buying-component inline-template :selected-product="product" :initial-product="initialProduct"> 1542 <template v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)"> 1543 <div class="energy-data"> 1544 <a :href="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyLabel',selectedProduct.specifications)" target="_blank" class="energy-label"> 1545 <img :src="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)" alt="Energy Label" class="img-fluid img-energy" height="25" /> 1546 </a> 1547 <a href="#" v-on:click="getProductReport($event,selectedProduct.product.number,selectedProduct.product.name,selectedProduct.product.languageId)" target="_blank" class="energy-link"> 1548 <small>@Translate("PDP product sheet", "Product Sheet")</small> 1549 </a> 1550 </div> 1551 </template> 1552 </buying-component> 1553 </template> 1554 </div> 1555 </header> 1556 </a> 1557 <template v-if="plpClass=='basic_listview-list'"> 1558 <ul class="basic_listview-specs"> 1559 <li v-for="item in SpecificationHelpers.GetPrettyBulletPoints(product.specifications)"> 1560 {{item}} 1561 </li> 1562 </ul> 1563 </template> 1564 <buying-component @@discount="onDiscount($event)" inline-template :selected-product="product" :initial-product="initialProduct"> 1565 <footer itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"> 1566 1567 1568 <template v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications) && plpClass == 'basic_listview-list'"> 1569 <div class="energy-price"> 1570 <div class="variant-price"> 1571 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1572 <async-price class-type="asyncprice-plp" 1573 :product="selectedProduct" 1574 :default-price="selectedProduct.product.defaultPrice.priceWithoutVat" 1575 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1576 list-price="true" 1577 :should-emit-warranties="@((Pageview.IsAllowedToShop()).ToString().ToLower())" 1578 :force-ask-for-price="(!selectedProduct.product.isSparePart && @((Pageview.User.OnlySpareParts()).ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1579 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))" 1580 @@discount="onDiscount($event)" 1581 :list-view="true"> 1582 </async-price> 1583 </div> 1584 <div class="energy-data"> 1585 <a :href="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyLabel',selectedProduct.specifications)" class="energy-label" target="_blank"> 1586 <img :src="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)" alt="Energy Label" class="img-fluid img-energy" height="25" /> 1587 </a> 1588 <a href="#" v-on:click="getProductReport($event,selectedProduct.product.number,selectedProduct.product.name,selectedProduct.product.languageId)" target="_blank" class="energy-link"> 1589 <small>@Translate("PDP product sheet", "Product Sheet")</small> 1590 </a> 1591 </div> 1592 </div> 1593 </template> 1594 <template v-else> 1595 <div class="variant-price"> 1596 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1597 <async-price class-type="asyncprice-plp" 1598 :product="selectedProduct" 1599 :default-price="selectedProduct.product.defaultPrice.priceWithoutVat" 1600 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1601 list-price="true" 1602 :should-emit-warranties="@((Pageview.IsAllowedToShop()).ToString().ToLower())" 1603 :force-ask-for-price="(!selectedProduct.product.isSparePart && @((Pageview.User.OnlySpareParts()).ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1604 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))" 1605 @@discount="onDiscount($event)" 1606 :list-view="true"> 1607 </async-price> 1608 </div> 1609 </template> 1610 <div class="btn-group"> 1611 <add-to-compare :product-number="selectedProduct.product.number"></add-to-compare> 1612 @if (Pageview.IsCurrentlyB2B()) 1613 { 1614 <favorite-lists :ui-error-message-translation="'@Translate(plpProductPrefix + " Error while retrieving favorite list","Error while retrieving favorite list")'" :is-favorite-mode="@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("favorites") == @Pageview.ID" :product="selectedProduct"></favorite-lists> 1615 } 1616 </div> 1617 <add-to-basket-simple :product="selectedProduct" 1618 :unit-of-measure="'PCS'" 1619 button-class="btn btn-primary" 1620 class="addtobasketsimple-plp" 1621 :price-without-vat="currentItemPriceWithoutVat" 1622 language-id="@Pageview.Area.EcomLanguageId" 1623 :only-spare-parts="@(Pageview.User.OnlySpareParts().ToString().ToLower())" 1624 :is-marketing-user="@(Pageview.User.OnlyView().ToString().ToLower())" 1625 :ishvasuser="@(Pageview.User.IsHVACUser().ToString().ToLower())" 1626 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1627 </add-to-basket-simple> 1628 </footer> 1629 </buying-component> 1630 </article> 1631 </script> 1632 <script type="text/x-template" id="quick-search-template"> 1633 <div class="quicksearch-component"> 1634 <div class="quickorder-form"> 1635 <slot name="right-box"></slot> 1636 <div class="quickorder-box"> 1637 <h2>@Translate("Find products")</h2> 1638 <div class="quickorder-input"> 1639 <label for="quickOrderSearch">@Translate("Product name or number")</label> 1640 <input type="text" 1641 :id="id" 1642 v-model="search" 1643 @@keydown.enter="enter" 1644 @@keydown.down="down" 1645 @@keydown.up="up" 1646 @@input="onSearchInput" 1647 class="form-control form-control-lg" 1648 autocomplete="chrome-off" 1649 placeholder="@Translate("Quick order search term")" 1650 :disabled="disabled"/> 1651 <label for="quickOrderQty">@Translate("Quantity")</label> 1652 <input type="number" 1653 v-model.number="quantity" 1654 @@change="chosenProduct()" 1655 @@keydown.enter="chosenProduct()" 1656 class="form-control form-control-lg" 1657 id="quickOrderQty" 1658 placeholder="0" 1659 autocomplete="chrome-off" 1660 :disabled="disabled"/> 1661 1662 </div> 1663 <ul v-if="filterList.length > 0 && open" class="quickorder-list"> 1664 <li v-for="(product,index) in filterList" 1665 :class="{'active': isSelected(index)}"> 1666 <button @@click="suggestClick(index)"> 1667 {{concatNameAndNumber(product)}} 1668 </button> 1669 1670 </li> 1671 </ul> 1672 1673 <div class="quickorder-product" v-if="currentChosenProduct"> 1674 <p><strong>{{currentChosenProduct.name}}</strong><small>{{currentChosenProduct.shortDescription}}</small></p> 1675 <product-specification-list-view v-if="searchProductSpecs !== null" 1676 :product-specifications="searchProductSpecs" 1677 :product-number="currentChosenProduct.number"> 1678 </product-specification-list-view> 1679 <async-price class-type="quickorder-product-price" 1680 :product="currentChosenProduct" 1681 unit-of-measure="" 1682 :only-price="true" 1683 default-price-without-vat="0" 1684 :force-ask-for-price="(!currentChosenProduct.isSparePart && @(Pageview.User.OnlySpareParts().ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1685 @@price="handlePriceUpdate" 1686 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1687 </async-price> 1688 </div> 1689 </div> 1690 </div> 1691 <p v-if="showPriceError">@Translate("QuickOrderZeroPriceError","Can not add product with zero price")</p> 1692 <div class="quickorder-cart" v-if="productsToOrder.length > 0"> 1693 <table class="table table-striped table-flex"> 1694 <thead> 1695 <tr> 1696 <th>@Translate("Product")</th> 1697 <th>@Translate("Specifications")</th> 1698 <th>@Translate("Quantity")</th> 1699 <th class="cell-right">@Translate("Price")</th> 1700 <th>&nbsp;</th> 1701 </tr> 1702 </thead> 1703 <tbody> 1704 <tr v-for="(product,index) in productsToOrder"> 1705 <td class="cell-prod"> 1706 <strong>{{product.name}}</strong> 1707 <small>{{product.shortDescription}}</small> 1708 </td> 1709 <td class="cell-specs"> 1710 <product-specification-list-view :product-specifications="product.productSpecifications" 1711 :product-number="product.number"> 1712 </product-specification-list-view> 1713 </td> 1714 <td class="cell-specs"> 1715 <input class="form-control" type="number" v-model="product.quantity" @@input="updateQuantity()" /> 1716 </td> 1717 <td class="cell-price cell-right"> 1718 <async-price class-type="quickorder-product-price" 1719 :product="quickOrderProductToSimpleProduct(product)" 1720 unit-of-measure="" 1721 :only-price="true" 1722 default-price-without-vat="0" 1723 :should-emit-warranties="true" 1724 @@qo-warranty-update="setWarranty($event,product)" 1725 :force-ask-for-price="(!product.isSparePart && @(Pageview.User.OnlySpareParts().ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1726 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1727 1728 </async-price> 1729 </td> 1730 <td class="cell-trash"> 1731 <button @@click="removeOrderline(index)" aria-label="@Translate("Delete product")" class="text-danger"> 1732 <svg> 1733 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#trash-alt"></use> 1734 </svg> 1735 </button> 1736 </td> 1737 </tr> 1738 </tbody> 1739 </table> 1740 <slot name="button"></slot> 1741 1742 </div> 1743 </div> 1744 </script> 1745 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 1746 @{ 1747 //This template contains everything for the favoritelist items. 1748 string favoriteListPrefix = "FavoriteList "; 1749 } 1750 <span id="favoritelistitem_confirm_delete_on_all" style="display: none; visibility: hidden">@Translate(favoriteListPrefix + "_confirm_delete_all", "Er du sikker på at du vil fjerne produktet {0} fra alle lister ?")</span> 1751 1752 <script type="text/x-template" id="favorite-item-template"> 1753 <div class="custom-control custom-checkbox"> 1754 <input type="checkbox" :checked="isActive" v-on:change="toggleItem()" :id="'fav-' +favoriteList.id" class="custom-control-input" /> 1755 <label :for="'fav-' + favoriteList.id" class="custom-control-label"> 1756 {{favoriteList.name}} 1757 </label> 1758 1759 @*<input type="checkbox" :value="favoriteList.id" :checked="isItemAddedToThisList(favoriteList)" v-on:change="toggleItem($event, favoriteList.id)" class="form-check-input" /> 1760 <label :for="'fav-' + favoriteList.id" class="form-check-label"> 1761 {{favoriteList.name}} 1762 </label>*@ 1763 </div> 1764 </script> 1765 <!-- 1766 1767 <button class="btn btn-favorite favorite" title="Add to favorite" aria-label="@Translate("Favorite", "Favorite" )" v-on:click="toggleItem()"> 1768 <svg> 1769 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#snowflake"></use> 1770 </svg> 1771 </button> 1772 --> 1773 <script type="text/x-template" id="favorite-list-template"> 1774 <div class="fav"> 1775 <button :aria-controls="'favorite' + product.product.id" :class="['btn btn-favorite', {'is-open': showingMenu}, {'is-selected': isActive}]" aria-label="@Translate(favoriteListPrefix + "Favorite", "Favorite" )" :title="isActive ? '@Translate(favoriteListPrefix + "Remove from favorites","Remove from favorites")' : '@Translate(favoriteListPrefix + "Add to favorites","Add to favorites")'" v-on:click="toggleItem()"> 1776 <svg> 1777 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#snowflake"></use> 1778 </svg> 1779 </button> 1780 <div class="fav-overlay" v-autoClose.nonPath="closeToggle" :id="'favorite' + product.product.id"> 1781 <div class="fav-arrow" v-if="showingMenu"></div> 1782 <div class="fav-inwrap" v-if="showingMenu"> 1783 <template v-if="loading"> 1784 <div class="text-center"> 1785 <span class="spinner-md-default"></span> 1786 </div> 1787 </template> 1788 <em class="error" v-if="uiErrorMessage">{{uiErrorMessage}}</em> 1789 <template v-if="!loading && !uiErrorMessage"> 1790 <p class="fav-title">@Translate(favoriteListPrefix + "Favoritliste", "Favoritliste")</p> 1791 <template v-if="favoriteLists && favoriteLists.length > '0'"> 1792 <p class="fav-teaser"> 1793 @Translate(favoriteListPrefix + "Tilføj eller fjern markering.", "Tilføj eller fjern markering.") 1794 </p> 1795 <div class="fav-lists"> 1796 <favorite-item v-for="favoriteList in favoriteLists" :favorite-list="favoriteList" :product="product" :key="favoriteList.id" /> 1797 </div> 1798 <div class="fav-new"> 1799 <div class="custom-control custom-checkbox"> 1800 <input type="checkbox" v-model="addNewList" id="addNewListCheckbox" class="custom-control-input" /> 1801 <label for="addNewListCheckbox" class="custom-control-label"> 1802 @Translate(favoriteListPrefix + "Ny favoritliste", "Ny favoritliste") 1803 </label> 1804 </div> 1805 </div> 1806 <div v-if="addNewList" class="fav-form"> 1807 <label for="addNewListNameInput" class="sr-only">@Translate(favoriteListPrefix + "Navn", "Navn")</label> 1808 <input type="text" id="addNewListNameInput" v-model="addNewListNameInput" class="form-control form-control-sm new-list-name-input" placeholder="@Translate(favoriteListPrefix + "Navn", "Navn")" v-on:keyup.enter="saveAsNewList" /> 1809 <button v-on:click="saveAsNewList" class="btn btn-secondary btn-sm">@Translate(favoriteListPrefix + "Gem", "Gem")</button> 1810 </div> 1811 </template> 1812 <template v-else> 1813 <p class="fav-teaser">@Translate(favoriteListPrefix + "NoFavoritliste", "Du har endnu ingen favoritlister, angiv navn for at oprette en.")</p> 1814 <div class="fav-form"> 1815 <label for="addNewListNameInput" class="sr-only">@Translate(favoriteListPrefix + "Navn", "Navn")</label> 1816 <input type="text" id="addNewListNameInput" v-model="addNewListNameInput" class="form-control form-control-sm new-list-name-input" placeholder="@Translate(favoriteListPrefix + "Navn", "Navn")" v-on:keyup.enter="saveAsNewList" /> 1817 <button v-on:click="saveAsNewList" class="btn btn-secondary btn-sm">@Translate(favoriteListPrefix + "Gem", "Gem")</button> 1818 </div> 1819 </template> 1820 </template> 1821 </div> 1822 </div> 1823 </div> 1824 </script> 1825 1826 <script type="text/x-template" id="basic-range-slider-template"> 1827 @{ 1828 string rangeFacetPrefix = "Filter "; 1829 } 1830 <div class="facet-option"> 1831 <vue-slider :key="key" @@drag-end="onChange" @@click="onChange" :min-range="1" v-model="value" :dotSize="20" :min="min" :max="max" :clickable="false"></vue-slider> 1832 <div class="vue-slider-fields"> 1833 <div class="form-group"> 1834 <label for="minValue" class="sr-only">@Translate(rangeFacetPrefix + "Minimum Value", "Minimum Value")</label> 1835 <input class="form-control form-control-sm" type="number" @@blur="onChange" id="minValue" name="minValue" v-model="minValue" /> 1836 </div> 1837 <div class="form-group"> 1838 <label for="maxValue" class="sr-only">@Translate(rangeFacetPrefix + "Maximum Value", "Maximum Value")</label> 1839 <input class="form-control form-control-sm" type="number" @@blur="onChange" id="maxValue" name="maxValue" v-model="maxValue" /> 1840 </div> 1841 </div> 1842 </div> 1843 </script> 1844 1845 1846 1847 <script type="text/x-template" id="add-compare-template"> 1848 <button @@click="onClick" :class="['btn btn-compare', {'is-selected':isInCompare}]" :title="[isInCompare ? '@Translate(plpProductPrefix + "Remove from Compare", "Remove from Compare")' : '@Translate(plpProductPrefix + "Add to compare", "Add to compare")']"> 1849 <svg> 1850 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#balance-scale"></use> 1851 </svg> 1852 </button> 1853 </script> 1854 @using Dynamicweb.Frontend 1855 @{ 1856 string instantSearchPrefix = "InstantSearch "; 1857 } 1858 <script type="text/x-template" id="instant-search-template"> 1859 <form v-bind:class="baseClass" action="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")" v-autoClose="closeFoldOut"> 1860 <div class="basic_instantsearch"> 1861 <label for="searchTerm" class="sr-only">@Translate(instantSearchPrefix + "Search", "Search")</label> 1862 <input type="search" 1863 placeholder="@Translate(instantSearchPrefix + "Search", "Search")" 1864 id="searchTerm" 1865 name="search" 1866 autocomplete="off" 1867 v-model="searchTerm" 1868 @*v-on:focus="openSearch"*@ 1869 @*v-on:blur="closeFoldOut()"*@ 1870 autofocus> 1871 <button type="submit"> 1872 <span class="sr-only">@Translate(instantSearchPrefix + "Search", "Search")</span> 1873 <svg> 1874 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#search"></use> 1875 </svg> 1876 </button> 1877 <div class="fold-out" id="fold-popup" aria-controls="fold-popup" v-bind:class="{ active: foldActive && showResults, 'has-results': showResults }" v-auto-close> 1878 <template v-if="searchTerm == null"> 1879 <p class="search-string">@Translate(instantSearchPrefix + "Type something", "Type something")</p> 1880 </template> 1881 <template v-else-if="queryLoading"> 1882 <div class="is-loading"> 1883 <span class="spinner-lg-default"></span> 1884 </div> 1885 </template> 1886 <template v-else-if="!showResults"> 1887 <p class="search-string"> 1888 @Translate(instantSearchPrefix + "Empty search...", "Empty search...") 1889 </p> 1890 </template> 1891 <div class="fold-out-grid" v-else> 1892 <div class="fold-out-col is-content"> 1893 <ul v-if="groups?.length>0" class="fold-out-content"> 1894 <li> 1895 <strong>@Translate(instantSearchPrefix + "Categories", "Categories")</strong> 1896 </li> 1897 <li v-for="group in groups"> 1898 <a :href="group.url"> 1899 {{group.groupName}} 1900 </a> 1901 </li> 1902 </ul> 1903 <ul v-if="contents?.length>0" class="fold-out-content"> 1904 <li> 1905 <strong>@Translate(instantSearchPrefix + "Content", "Content")</strong> 1906 </li> 1907 <li v-for="content in contents"> 1908 <a :href="content.url"> 1909 {{content.pageTitle}} 1910 </a> 1911 </li> 1912 <li v-if="hasMoreContent" class="show-all"> 1913 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?search=' + searchTerm + '&show=content'">@Translate(instantSearchPrefix + "See all", "Se alle")</a> 1914 </li> 1915 </ul> 1916 </div> 1917 <div class="fold-out-col is-products" v-if="products?.length > 0"> 1918 <ul class="fold-out-products"> 1919 <li> 1920 <strong>@Translate(instantSearchPrefix + "Products", "Products")</strong> 1921 </li> 1922 <li v-for="product in products"> 1923 <figure> 1924 <img :src="'/Admin/Public/GetImage.ashx?Width=50&amp;Height=50&amp;fillcanvas=true&amp;Compression=85&amp;Crop=5&amp;Image=' + (product.imageLink ? product.imageLink : '/Files/Images/Default.jpg')" /> 1925 </figure> 1926 <div> 1927 <a :href="product.url"> 1928 {{product.name}} 1929 </a> 1930 <small>{{product.number}}</small> 1931 </div> 1932 </li> 1933 <li v-if="hasMoreProducts" class="show-all"> 1934 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?search=' + searchTerm + '&show=products'">@Translate(instantSearchPrefix + "See all", "Se alle")</a> 1935 </li> 1936 </ul> 1937 1938 </div> 1939 <div class="fold-out-col is-spareparts" v-if="spareParts?.length > 0"> 1940 <ul class="fold-out-products"> 1941 <li> 1942 <strong>@Translate(instantSearchPrefix + "Spareparts", "Spare parts")</strong> 1943 </li> 1944 <li v-for="product in spareParts"> 1945 <figure> 1946 <img :src="'/Admin/Public/GetImage.ashx?Width=50&amp;Height=50&amp;fillcanvas=true&amp;Compression=85&amp;Crop=5&amp;Image=' + (product.imageLink ? product.imageLink : '/Files/Images/Default.jpg')" /> 1947 </figure> 1948 <div> 1949 <a :href="product.url"> 1950 {{product.name}} 1951 </a> 1952 <small>{{product.number}}</small> 1953 </div> 1954 </li> 1955 <li v-if="hasMoreSpares" class="show-all"> 1956 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?search=' + searchTerm + '&show=spares'">@Translate(instantSearchPrefix + "See all", "Se alle")</a> 1957 </li> 1958 </ul> 1959 </div> 1960 </div> 1961 @*<div v-if="searchTerm != '' && showResults && !queryLoading" class="actions"> 1962 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?search=' + searchTerm">@Translate(instantSearchPrefix + "See all", "Se alle")</a> 1963 </div>*@ 1964 </div> 1965 </div> 1966 </form> 1967 </script> 1968 1969 1970 1971 <script src="@NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/scripts/vendors~bundle.min.js")"></script> 1972 <script src="@NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/scripts/bundle.min.js")"></script> 1973 @{ 1974 var currentUser = NORRIQ.Universal.Identity.Dw.UserViewModel.GetCurrentUser<Tefcold.Web.Api.Models.UserViewModelWithMediaBank>(); 1975 var jsonUser = Newtonsoft.Json.JsonConvert.SerializeObject(currentUser); 1976 } 1977 <script async> 1978 AppStart.VueProvider.init({ 1979 webApiUrl: '@System.Web.Configuration.WebConfigurationManager.AppSettings["WebApiProxyUrl"]', 1980 user: @jsonUser, 1981 currencyCode: '@currencyCode', 1982 locale: '@Pageview.Area.Culture', 1983 currencyLeft: false, 1984 currencySpacing: true, 1985 currencySymbol: '@currencyCode', 1986 currencyDecimalSeparator: ',', 1987 currencyGroupSeparator: '.', 1988 currencyDecimalDigits: 2, 1989 dateFormatShort: '@Pageview.Area.Dateformat', 1990 shopId: '@Pageview.Area.EcomShopId', 1991 languages: `@languagesJson`, 1992 langId: '@Pageview.Area.EcomLanguageId' 1993 }); 1994 </script> 1995 1996 <script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script> 1997 <script type='text/javascript'>(function ($) { window.fnames = new Array(); window.ftypes = new Array(); fnames[0] = 'EMAIL'; ftypes[0] = 'email'; fnames[11] = 'INTEREST'; ftypes[11] = 'dropdown'; fnames[8] = 'COMPANY'; ftypes[8] = 'text'; fnames[12] = 'FNAME'; ftypes[12] = 'text'; fnames[1] = 'LNAME'; ftypes[1] = 'text'; fnames[2] = 'PHONE'; ftypes[2] = 'phone'; fnames[4] = 'COUNTRY'; ftypes[4] = 'dropdown'; fnames[5] = 'WEBSITE'; ftypes[5] = 'url'; fnames[9] = 'COMMENT'; ftypes[9] = 'text'; fnames[10] = 'HEARABOUT2'; ftypes[10] = 'dropdown'; }(jQuery)); var $mcj = jQuery.noConflict(true);</script> 1998 1999 <script append="replace"></script> 2000 </body> 2001 </html>