Error executing template "Designs/Tefcold/_parsed/Basic_News.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_d951bce4a7b64fc3beca6c078f4e9a70.Execute() in E:\Solutions\Live\Tefcold.Web\Files\Templates\Designs\Tefcold\_parsed\Basic_News.parsed.cshtml:line 583
   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("News") 576 @Description("Default news template") 577 @{ 578 string basicPagePrefix = "Page "; 579 } 580 <figure> 581 <img src="~/Files/Images/Grafik/webbanner.jpg" alt="webbanner" class="img-fluid" /> 582 </figure> 583 @RenderNavigation(new { Template = "basic_Breadcrumb.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 5 }) 584 585 <main class="basic_page"> 586 <aside class="basic_page-sidebar"> 587 @RenderNavigation(new { Template = "basic_Page.xslt", StartLevel = 1, EndLevel = 3 }) 588 </aside> 589 <section class="basic_page-content"> 590 @if (Model.Item.GetFile("Image") != null) 591 { 592 <figure> 593 <img src="@Model.Item.GetFile("Image").Path.ToString()" class="img-fluid" alt="@Model.Item.GetString("Title").ToString()" /> 594 </figure> 595 } 596 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title").ToString())) 597 { 598 <header class="basic_page-header news-header"> 599 <h1> 600 @Model.Item.GetString("Title").ToString() 601 </h1> 602 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("news")" class="btn btn-sm btn-secondary"> 603 @Translate(basicPagePrefix + "back to news","Go back") 604 </a> 605 </header> 606 } 607 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text").ToString())) 608 { 609 <div class="basic_page-text"> 610 <small>@Model.Item.GetDateTime("Date").ToShortDateString()</small> 611 @Model.Item.GetString("Text") 612 </div> 613 } 614 </section> 615 </main> 616 617 @{ 618 string footerPrefix = "Footer "; 619 } 620 <footer class="basic_footer"> 621 <div class="basic_footer-wrap basic_footer-main"> 622 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterOneTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterOneText"))) 623 { 624 <div class="basic_footer-box"> 625 <div class="basic_footer-head" role="button" v-b-toggle.footer-one> 626 <h3>@Model.Area.Item.GetString("FooterOneTitle")</h3> 627 </div> 628 <b-collapse id="footer-one" class="basic_footer-collapse"> 629 <div class="basic_footer-body"> 630 @Model.Area.Item.GetString("FooterOneText") 631 </div> 632 </b-collapse> 633 </div> 634 } 635 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoTitle")) 636 && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoText")) 637 || !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoTag"))) 638 { 639 <div class="basic_footer-box"> 640 <div class="basic_footer-head" role="button" v-b-toggle.footer-two> 641 <h3>@Model.Area.Item.GetString("FooterTwoTitle")</h3> 642 </div> 643 <b-collapse id="footer-two" class="basic_footer-collapse"> 644 <div class="basic_footer-body"> 645 @Model.Area.Item.GetString("FooterTwoText") 646 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoTag"))) 647 { 648 @RenderNavigation(new { Template = "basic_Footer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, NavigationTag = @Model.Area.Item.GetString("FooterTwoTag").ToString() }) 649 } 650 </div> 651 </b-collapse> 652 </div> 653 } 654 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeTitle")) 655 && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeText")) 656 || !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeTag"))) 657 { 658 <div class="basic_footer-box"> 659 <div class="basic_footer-head" role="button" v-b-toggle.footer-three> 660 <h3>@Model.Area.Item.GetString("FooterThreeTitle")</h3> 661 </div> 662 <b-collapse id="footer-three" class="basic_footer-collapse"> 663 <div class="basic_footer-body"> 664 @Model.Area.Item.GetString("FooterThreeText") 665 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeTag"))) 666 { 667 @RenderNavigation(new { Template = "basic_Footer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, NavigationTag = @Model.Area.Item.GetString("FooterThreeTag").ToString() }) 668 } 669 </div> 670 </b-collapse> 671 </div> 672 } 673 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterFourTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterFourText"))) 674 { 675 <div class="basic_footer-box"> 676 <div class="basic_footer-head" role="button" v-b-toggle.footer-four> 677 <h3>@Model.Area.Item.GetString("FooterFourTitle")</h3> 678 </div> 679 <b-collapse id="footer-four" class="basic_footer-collapse"> 680 <div class="basic_footer-body"> 681 @Model.Area.Item.GetString("FooterFourText") 682 </div> 683 </b-collapse> 684 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FacebookUrl")) 685 || !string.IsNullOrEmpty(Model.Area.Item.GetString("LinkedInUrl")) 686 || !string.IsNullOrEmpty(Model.Area.Item.GetString("YoutubeUrl"))) 687 { 688 <div class="some"> 689 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FacebookUrl"))) 690 { 691 <a href="@Model.Area.Item.GetString("FacebookUrl")" target="_blank" aria-label="Facebook" rel="noreferrer"> 692 <svg> 693 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#facebook-square"></use> 694 </svg> 695 </a> 696 } 697 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("LinkedInUrl"))) 698 { 699 <a href="@Model.Area.Item.GetString("LinkedInUrl")" target="_blank" aria-label="LinkedIn" rel="noreferrer"> 700 <svg> 701 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#linkedin"></use> 702 </svg> 703 </a> 704 } 705 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("YoutubeUrl"))) 706 { 707 <a href="@Model.Area.Item.GetString("YoutubeUrl")" target="_blank" aria-label="Youtube" rel="noreferrer"> 708 <svg> 709 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#youtube-square"></use> 710 </svg> 711 </a> 712 } 713 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("SmileyUrl"))) 714 { 715 <a href="@Model.Area.Item.GetString("SmileyUrl")" target="_blank" aria-label="@Translate(footerPrefix + "smiley", "Elite Smiley")" rel="noreferrer"> 716 <svg> 717 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#happy-smiley"></use> 718 </svg> 719 </a> 720 } 721 </div> 722 } 723 </div> 724 } 725 </div> 726 @if (Model.Area.Item.GetFile("GroupLogo") != null) 727 { 728 <div class="basic_footer-group"> 729 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("GroupLogo"))) 730 { 731 <a href="@Model.Area.Item.GetString("GroupLink")" target="_blank" title="@Translate(footerPrefix + "tefcold group logo alt", "Part of Tefcold Group")"> 732 <img src="@Model.Area.Item.GetFile("GroupLogo").Path" class="img-fluid" alt="@Translate(footerPrefix + "tefcold group logo alt", "Part of Tefcold Group")" /> 733 </a> 734 } 735 else 736 { 737 <img src="@Model.Area.Item.GetFile("GroupLogo").Path" class="img-fluid" alt="@Translate(footerPrefix + "tefcold group logo alt", "Part of Tefcold Group")" /> 738 } 739 </div> 740 } 741 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterCopyright"))) 742 { 743 744 <div class="basic_footer-sub"> 745 <div class="basic_footer-wrap"> 746 747 <p> 748 &copy; @DateTime.Now.Year @Model.Area.Item.GetString("FooterCopyright") 749 </p> 750 @RenderNavigation(new { Template = "basic_Footer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4, NavigationTag = "footer" }) 751 752 @if (Model.Area.Item.GetValue<ListViewModel>("Cards").SelectedValues.Any()) 753 { 754 <div class="text-center cards"> 755 @foreach (var cards in Model.Area.Item.GetValue<ListViewModel>("Cards").SelectedValues) 756 { 757 <img src="/Files/Images/cards/@cards" alt="@cards.Split('.').First()" loading="lazy" /> 758 } 759 </div> 760 } 761 762 </div> 763 </div> 764 } 765 </footer> 766 <compare-banner class="comparison-footer" inline-template> 767 <div v-if="productsToCompare >= 1" class="comparison-footer"> 768 @{ 769 string comparisonFooterPrefix = "Comparison "; 770 } 771 <template v-if="productsToCompare >= 2"> 772 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("compare")" class="btn btn-primary btn-lg btn-block"> 773 <svg class="icon"> 774 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#balance-scale"></use> 775 </svg> 776 <span> 777 @Translate(comparisonFooterPrefix + "Click to compare", "Click to compare") 778 <strong>{{productsToCompare}}</strong> 779 @Translate(comparisonFooterPrefix + "products", "products") 780 </span> 781 </a> 782 </template> 783 <template v-else> 784 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("compare")" class="btn btn-primary btn-lg btn-block no-click"> 785 <svg class="icon"> 786 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#balance-scale"></use> 787 </svg> 788 <span> 789 @Translate(comparisonFooterPrefix + "You need 2 product to compare", "You need <strong>2</strong> products to compare") 790 </span> 791 </a> 792 </template> 793 </div> 794 </compare-banner> 795 <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'> 796 <div></div> 797 </basic-alert> 798 </div> 799 800 @helper RenderLanguage(PageLanguageViewModel lang) 801 { 802 if (Pageview.AreaID == lang.ID) 803 { 804 return; 805 806 } 807 808 if (Pageview.AreaID == lang.ID) 809 { 810 return; 811 812 } 813 814 var langCode = lang.Culture.Split('-').Last(); 815 var cultureInfo = CultureInfo.GetCultureInfo(lang.Culture); 816 var language = cultureInfo.NativeName.Split('(')[0]; 817 var url = SearchEngineFriendlyURLs.GetFriendlyUrl(lang.Page.ID); 818 var query = System.Web.HttpUtility.ParseQueryString(System.Web.HttpContext.Current.Request.QueryString.ToString()); 819 var allowedQuery = new HashSet<string> { "groupid", "productid", "variantid" }; 820 var shopIdSplit = "-at-SHOP"; 821 var shopId = Services.Pages.GetPage(lang.Page.ID).Area.EcomShopId; 822 foreach (var kv in query.AllKeys) 823 { 824 if (kv != null && allowedQuery.Contains(kv.ToLower())) 825 { 826 var queryValue = query[kv]; 827 var indexOfShopId = queryValue.IndexOf(shopIdSplit, StringComparison.InvariantCultureIgnoreCase); 828 if (indexOfShopId > 0) 829 { 830 var withOutShopId = queryValue.Substring(0, indexOfShopId); 831 query[kv] = withOutShopId + "-at-" + shopId; 832 } 833 } 834 else 835 { 836 query.Remove(kv); 837 } 838 } 839 840 841 var langArea = Dynamicweb.Services.Areas.GetArea(lang.ID); 842 var protocol = langArea.SslMode == 2 ? "https:" : "http"; 843 var host = lang.PrimaryDomain; 844 845 if (string.IsNullOrWhiteSpace(host)) 846 { 847 var domains = langArea.Domain.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()); 848 host = (domains.FirstOrDefault(s => !s.Equals("localhost")) ?? "").TrimEnd('/'); 849 } 850 var urlencodedQuery = $"{protocol}://{host}{url}{(query.HasKeys() ? "?" + query.ToString() : "")}"; 851 852 <li> 853 <a href="@urlencodedQuery"> 854 @if (lang.Culture == "en-GB") 855 { 856 <img src="/Files/Images/globe-flag.png" alt="@lang.Culture - Flag" width="32" height="32" loading="lazy" /> 857 } 858 else 859 { 860 <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" /> 861 } 862 @*@if (lang.Culture == "en-GB") 863 { 864 <svg width="32" height="32" fill="#3a3b3c"> 865 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#globe"></use> 866 </svg> 867 } 868 else 869 { 870 <img src="/Admin/Images/Flags/flag_@(langCode).png" alt="@lang.Culture - Flag" loading="lazy" /> 871 }*@ 872 <span>@Translate("lang_" + lang.Culture.Split('-').First(), lang.Culture.Split('-').First())</span> 873 </a> 874 </li> 875 } 876 877 878 @helper renderArea(Area lang, Websites websiteSettings) 879 { 880 var protocol = lang.SslMode == 2 ? "https:" : "http"; 881 var host = lang.DomainLock; 882 string countryCode = lang.Culture.Split('-').Last(); 883 if (string.IsNullOrWhiteSpace(host)) 884 { 885 var domains = lang.Domain.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()); 886 host = (domains.FirstOrDefault(s => !s.Equals("localhost")) ?? "").TrimEnd('/'); 887 } 888 var langUrl = $"{protocol}://{host}"; 889 var langSettings = lang.Item.ToCodeFirstItem<Websites>(); 890 if (langSettings.NoIndex && !websiteSettings.NoIndex) 891 { 892 var pageId = NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag(countryCode + "Redirect"); 893 langUrl = pageId > 0 ? $"/Default.aspx?ID={pageId}" : ""; 894 } 895 <a href="@langUrl"> 896 @if (lang.Culture == "en-GB") 897 { 898 <img src="/Files/Images/globe-flag.png" alt="@lang.Culture - Flag" width="32" height="32" class="img-fluid" loading="lazy" /> 899 } 900 else 901 { 902 <img src="/Admin/Images/Flags/flag_@(countryCode).png" alt="@lang.Culture - Flag" width="32" height="32" class="img-fluid" loading="lazy" /> 903 } 904 <span>@Translate("lang_" + lang.Culture.Split('-').First(), lang.Culture.Split('-').First())</span> 905 </a> 906 907 } 908 909 <script type="text/x-template" id="cart-icon-template"> 910 @{ 911 string cartIconPrefix = "Minicart "; 912 } 913 <li> 914 <a :href="cartlink" title="@Translate(cartIconPrefix + "Checkout", "Checkout")"> 915 <svg> 916 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#shopping-cart"></use> 917 </svg> 918 <span class="label">@Translate(cartIconPrefix + "Checkout", "Checkout")</span> 919 <strong v-if="!cartEmpty" class="cart-quantity">{{quantity}}</strong> 920 </a> 921 </li> 922 </script> 923 924 925 926 <script type="text/x-template" id="basic-facet-filter-template"> 927 @{ 928 string basicFacetPrefix = "Filter "; 929 } 930 <aside> 931 <template v-if="HasActiveFilter()"> 932 933 <p id="selected-filter-label" class="sr-only"> 934 @Translate(basicFacetPrefix + "Active", "Active") 935 </p> 936 <div class="basic_filter-active" aria-labelledby="selected-filter-label"> 937 <template v-for="facetFilter in facetFilters"> 938 <span v-for="option in SelectedOptions(facetFilter)" class="custom-control custom-filter"> 939 <input type="checkbox" 940 :id="'Selected-' + facetFilter.name + '-' + option.name" 941 :name="facetFilter.name" 942 :value="option.value" 943 :v-model="option.selected" 944 :checked="option.selected" 945 v-on:click="ToggleFilter(facetFilter.name,option)" 946 class="custom-control-input" /> 947 <label :for="'Selected-' + facetFilter.name + '-' + option.name" class="custom-control-label" :data-name="facetFilter.name"> 948 <span> 949 {{option.label}} 950 </span> 951 <svg> 952 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#times"></use> 953 </svg> 954 </label> 955 </span> 956 </template> 957 </div> 958 </template> 959 <b-collapse class="basic_filter" id="sidebar-filter"> 960 <template v-if="!error && facetFilters"> 961 <button type="button" class="btn-close" v-b-toggle.sidebar-filter.sidebar-overlay aria-label="@Translate(basicFacetPrefix + "Close Filter", "Close Filter")"> 962 <span></span> 963 <span></span> 964 </button> 965 <div class="basic_filter-groups"> 966 <div class="basic_filter-group" v-for="(facetFilter, index) in facetFilters"> 967 <p :id="'filter-group-' + facetFilter.name.toLowerCase().trim()" v-b-toggle="'filter-collapse-' + facetFilter.name.toLowerCase().trim()"> 968 <template v-if="facetFilter.name === 'ModelType'"> 969 @Translate(basicFacetPrefix + "ModelType", "Model / Type") 970 </template> 971 <template v-else-if="facetFilter.name === 'DoorType'"> 972 @Translate(basicFacetPrefix + "DoorType", " Door type") 973 </template> 974 <template v-else-if="facetFilter.name === 'ExternalHeight'"> 975 @Translate(basicFacetPrefix + "ExternalHeight", "External Height") (mm) 976 </template> 977 <template v-else-if="facetFilter.name === 'NetVolume'"> 978 @Translate(basicFacetPrefix + "NetVolume", "Net Volume") (l) 979 </template> 980 <template v-else-if="facetFilter.name === 'DoorNumber'"> 981 @Translate(basicFacetPrefix + "DoorNumber", " Number of doors") 982 </template> 983 <template v-else-if="facetFilter.name === 'ExteriorFinish'"> 984 @Translate(basicFacetPrefix + "ExteriorFinish", "Exterior Finish") 985 </template> 986 <template v-else-if="facetFilter.name === 'ExternalWidth'"> 987 @Translate(basicFacetPrefix + "ExternalWidth", "External Width") (mm) 988 </template> 989 <template v-else-if="facetFilter.name === 'GrossVolume'"> 990 @Translate(basicFacetPrefix + "GrossVolume", "Gross Volume") (l) 991 </template> 992 <template v-else-if="facetFilter.name === 'Bottles330'"> 993 @Translate(basicFacetPrefix + "Bottles330", "Capacity 330ml bottles") 994 </template> 995 <template v-else-if="facetFilter.name === 'Bottles500'"> 996 @Translate(basicFacetPrefix + "Bottles500", "Capacity 500ml bottles") 997 </template> 998 <template v-else-if="facetFilter.name === 'Cans330'"> 999 @Translate(basicFacetPrefix + "Cans330", "Capacity 300ml cans") 1000 </template> 1001 <template v-else-if="facetFilter.name === 'Cans500'"> 1002 @Translate(basicFacetPrefix + "Cans500", "Capacity 500ml cans") 1003 </template> 1004 <template v-else-if="facetFilter.name === 'TemperatureRange'"> 1005 @Translate(basicFacetPrefix + "TemperatureRange", "Temperature Range") 1006 </template> 1007 <template v-else-if="facetFilter.name === 'TemperatureRangeZone2'"> 1008 @Translate(basicFacetPrefix + "TemperatureRangeZone2", "Tempature Range 2") 1009 </template> 1010 <template v-else-if="facetFilter.name === 'ShelfNumber'"> 1011 @Translate(basicFacetPrefix + "ShelfNumber", "Number of shelfs") 1012 </template> 1013 <template v-else-if="facetFilter.name === 'LidType'"> 1014 @Translate(basicFacetPrefix + "LidType", "Lid Type") 1015 </template> 1016 <template v-else-if="facetFilter.name === 'InteriorFinish'"> 1017 @Translate(basicFacetPrefix + "InteriorFinish", "Interior Finish") 1018 </template> 1019 <template v-else-if="facetFilter.name === 'WineBottles750'"> 1020 @Translate(basicFacetPrefix + "WineBottles750", "Capacity 750ml winebottles") 1021 </template> 1022 <template v-else> 1023 {{facetFilter.name}} 1024 </template> 1025 <svg> 1026 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#chevron-up"></use> 1027 </svg> 1028 </p> 1029 <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()"> 1030 <template v-if="facetFilter.renderType === 'Range'"> 1031 <basic-range-slider @@change="updateRange(facetFilter,$event)" :min="getMinRange(facetFilter)" :max="getMaxRange(facetFilter)" :init-min="getInitMin(facetFilter)" :init-max="getInitMax(facetFilter)"></basic-range-slider> 1032 </template> 1033 1034 <template v-else-if="facetFilter.optionActiveCount > 5"> 1035 <span v-for="option in facetFilter.options.slice(0, 5)" class="custom-control custom-checkbox facet-option"> 1036 <input type="checkbox" class="custom-control-input" 1037 :id="'UnSelected-' + facetFilter.name + '-' + option.name" 1038 :name="facetFilter.name" 1039 :value="option.value" 1040 :v-model="option.selected" 1041 :checked="option.selected" 1042 v-on:click="ToggleFilter(facetFilter.name,option)" /> 1043 <label :for="'UnSelected-' + facetFilter.name + '-' + option.name" class="custom-control-label"> 1044 {{option.label}} <span class="count">({{option.count}})</span> 1045 </label> 1046 </span> 1047 <b-collapse class="basic_filter-expand" :id="'filter-expand-' + facetFilter.name.toLowerCase().trim()" :visible="ShowMoreIfSelected(facetFilter.options, index)"> 1048 <span v-for="option in facetFilter.options.slice(5)" class="custom-control custom-checkbox facet-option"> 1049 <input type="checkbox" class="custom-control-input" 1050 :id="'UnSelected-' + facetFilter.name + '-' + option.name" 1051 :name="facetFilter.name" 1052 :value="option.value" 1053 :v-model="option.selected" 1054 :checked="option.selected" 1055 v-on:click="ToggleFilter(facetFilter.name,option)" /> 1056 <label :for="'UnSelected-' + facetFilter.name + '-' + option.name" class="custom-control-label"> 1057 {{option.label}} <span class="count">({{option.count}})</span> 1058 </label> 1059 </span> 1060 </b-collapse> 1061 <a v-b-toggle="'filter-expand-' + facetFilter.name.toLowerCase().trim()" class="basic_filter-expanding" v-if="facetFilter.optionActiveCount > 6"> 1062 <span class="show-more">+ @Translate(basicFacetPrefix + "show more", "show more")</span> 1063 <span class="show-less">- @Translate(basicFacetPrefix + "show less", "show less")</span> 1064 </a> 1065 </template> 1066 <template v-else> 1067 <span v-for="option in facetFilter.options" class="custom-control custom-checkbox facet-option"> 1068 <input type="checkbox" class="custom-control-input" 1069 :id="'UnSelected-' + facetFilter.name + '-' + option.name" 1070 :name="facetFilter.name" 1071 :value="option.value" 1072 :v-model="option.selected" 1073 :checked="option.selected" 1074 v-on:click="ToggleFilter(facetFilter.name,option)" /> 1075 <label :for="'UnSelected-' + facetFilter.name + '-' + option.name" class="custom-control-label"> 1076 {{option.label}} <span class="count">({{option.count}})</span> 1077 </label> 1078 </span> 1079 </template> 1080 </b-collapse> 1081 </div> 1082 </div> 1083 </template> 1084 </b-collapse> 1085 </aside> 1086 </script> 1087 <script type="text/x-template" id="add-to-basket-simple-template"> 1088 @{ 1089 string addToBasketSimplePrifix = "BuyButton "; 1090 } 1091 <div class="form-flex" v-if="priceWithoutVat > 0" v-bind:class="[{added: IsAdded}, {adding: IsAdding}, {disabled: !canAdd}]"> 1092 1093 <label for="quantity">@Translate(addToBasketSimplePrifix + "Quantity", "Quantity")</label> 1094 <input class="form-control" type="tel" name="quantity" v-model="quantity" autocomplete="off" onclick="this.setSelectionRange(0, this.value.length)"> 1095 <button :disabled="!canAdd" :class="buttonClass" v-on:click="addToBasketAndResetQuantity()" aria-label="@Translate(addToBasketSimplePrifix + "Add", "Add")"> 1096 <slot> 1097 <svg> 1098 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#shopping-cart"> 1099 </use> 1100 </svg> 1101 <span> 1102 @Translate(addToBasketSimplePrifix + "Add to basket", "Add to basket") 1103 </span> 1104 </slot> 1105 1106 </button> 1107 1108 <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> 1109 <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> 1110 <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> 1111 </div> 1112 </script> 1113 1114 <script type="text/x-template" id="quick-add-template"> 1115 @{ 1116 string quickAddPrifix = "BuyButton "; 1117 } 1118 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]"> 1119 <label for="quantity">@Translate(quickAddPrifix + "Quantity", "Quantity")</label> 1120 <input class="form-control" type="number" id="quantity" name="quantity" v-model="quantity" autocomplete="off"> 1121 </div> 1122 </script> 1123 1124 <script type="text/x-template" id="add-to-basket-button-only-template"> 1125 @{ 1126 string addToBasketPrefix = "BuyButton "; 1127 } 1128 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]"> 1129 <button :class="buttonClass" v-on:click="addToBasket()"> 1130 <slot> 1131 @Translate(addToBasketPrefix + "Add to basket", "Add to basket") 1132 </slot> 1133 </button> 1134 </div> 1135 </script> 1136 @using Dynamicweb.Frontend 1137 @using Tefcold.Web.CustomCode.Items 1138 @{ 1139 string asyncPrefix = "Async "; 1140 var website = PageView.Current().Area.GetWebsiteSettings(); 1141 } 1142 <script type="text/x-template" id="async-price-template"> 1143 <div :class="classType + (loading ? ' loading' : '') + (hasDiscount ? ' has-discount' : '')"> 1144 <template> 1145 <p :class="classType + '--error'" v-if="error">{{error}}</p> 1146 </template> 1147 <template v-if="!loading"> 1148 <template v-if="!forceAskForPrice && price.netUnitPrice.priceWithoutVat"> 1149 <meta itemprop="price" :content="price.netUnitPrice.priceWithoutVat" /> 1150 <meta itemprop="priceCurrency" content="@(Pageview.User?.Currency ?? Pageview.Area.EcomCurrencyId)" /> 1151 <div class="price-withoutvat"> 1152 <span class="price-label">@Translate(asyncPrefix + "price without vat", "Price without VAT")</span> 1153 <p class="price"> 1154 <span class="unit-price">{{ price.netUnitPrice.priceWithoutVat | currency(price.currencyCode) }}</span> 1155 @if (website.ShowPriceWitVatAndDiscount) 1156 { 1157 <small class="prev-price" v-if="hasDiscount && price.unitPrice.priceWithoutVat">{{ price.unitPrice.priceWithoutVat | currency(price.currencyCode) }}</small> 1158 } 1159 </p> 1160 </div> 1161 1162 @if (website.ShowPriceWitVatAndDiscount) 1163 { 1164 <template v-if="!listView"> 1165 <div class="price-withvat"> 1166 <span class="price-label">@Translate(asyncPrefix + "price with vat", "Price with VAT")</span> 1167 <p class="price"> 1168 <span class="unit-price">{{ price.netUnitPrice.priceWithVat | currency(price.currencyCode) }}</span> 1169 <small class="prev-price" v-if="hasDiscount && !listView && price.unitPrice.priceWithVat">{{ price.unitPrice.priceWithVat | currency(price.currencyCode) }}</small> 1170 </p> 1171 1172 </div> 1173 </template> 1174 } 1175 </template> 1176 <template v-if="!price?.netUnitPrice?.priceWithoutVat || forceAskForPrice"> 1177 <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> 1178 </template> 1179 </template> 1180 </div> 1181 </script> 1182 <script type="text/x-template" id="pagination-template"> 1183 @{ 1184 string paginationPrefix = "Pagination "; 1185 } 1186 <nav aria-label="@Translate(paginationPrefix + "Productlist pagination", "Productlist pagination")"> 1187 <ul class="pagination"> 1188 <li :class="['page-item', currentPage == 1 ? 'disabled' : '' ]"> 1189 <a class="page-link" v-on:click="togglePrevPage()" aria-label="@Translate(paginationPrefix + "Previous Page", "Previous Page")" v-bind:aria-disabled="currentPage > 1 ? 'true' : null"> 1190 <svg> 1191 <use xmlns:xlink="http://www.w3.org/1999/xlink" 1192 xlink:href="/files/dist/icons/icons.svg#chevron-left"> 1193 </use> 1194 </svg> 1195 </a> 1196 </li> 1197 <template v-if="hasGroupId"> 1198 <li v-if="showPage(n)" v-for="n in totalPages" :key="n" :class="(n == currentPage ? 'page-item active' : 'page-item')"> 1199 <a v-on:click="togglePage(n)" v-bind:aria-current="(n == currentPage ? 'true' : '')" class="page-link"> 1200 {{n}} 1201 </a> 1202 </li> 1203 </template> 1204 <template v-else> 1205 <li class="page-item"> 1206 <span class="page-label"> 1207 {{currentPage}} 1208 </span> 1209 </li> 1210 <li class="page-item"> 1211 <span class="page-label"> 1212 @Translate(paginationPrefix + "of", "of") 1213 </span> 1214 </li> 1215 <li class="page-item"> 1216 <span class="page-label"> 1217 {{totalPages}} 1218 </span> 1219 </li> 1220 </template> 1221 <li :class="'page-item' + (currentPage >= totalPages ? ' disabled' : '')"> 1222 <a v-on:click="toggleNextPage()" aria-label="@Translate(paginationPrefix + "Next Page", "Next Page")" class="page-link" v-bind:aria-disabled="totalPages > currentPage ? 'true' : null"> 1223 <svg class="icon-pagination"> 1224 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#chevron-right"></use> 1225 </svg> 1226 </a> 1227 </li> 1228 </ul> 1229 </nav> 1230 </script> 1231 <script type="text/x-template" id="product-specification-list-view-template"> 1232 <div class="basic_listview-data"> 1233 <template v-if="!isSparePart"> 1234 <p itemprop="description"> 1235 {{ SpecificationHelpers.GetFirstSpecificationValueOrDefault('GrossNetVolume',productSpecifications)}} {{ SpecificationHelpers.GetSpecificationUnit(SpecificationHelpers.GetSpecificationByKey('GrossNetVolume',productSpecifications))}} 1236 <br /> 1237 {{ SpecificationHelpers.GetFirstSpecificationValueOrDefault('ExternalDimensionWeb',productSpecifications)}} 1238 1239 </p> 1240 </template> 1241 <p itemprop="sku">@Translate("PLP No.", "No.") {{productNumber}}</p> 1242 </div> 1243 </script> 1244 @using Tefcold.Web.CustomCode.Extensions 1245 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Ecommerce.ProductCatalog.ProductViewModel> 1246 <script type="text/x-template" id="product-spare-parts-view-template"> 1247 @{ 1248 string basicPimPrefix = "PDP "; 1249 } 1250 <div v-if="sparePartReportExist || hasExplodedDrawing || spareParts.length > 0"> 1251 <button class="btn-collapse" id="spareparts" v-b-toggle.spareparts-list> 1252 @Translate(basicPimPrefix + "spare parts", "Spare Parts") 1253 </button> 1254 <template> 1255 <b-collapse id="spareparts-list" visible accordion="specs2"> 1256 <template> 1257 <div class="body-collapse full pb-0"> 1258 <ul class="basic_pim-spares"> 1259 <template v-if="sparePartReportExist"> 1260 <li> 1261 <a href="#" v-on:click="getSparePartReport($event)" target="_blank"> 1262 <svg> 1263 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#download"></use> 1264 </svg> 1265 @Translate(basicPimPrefix + "spare part list", "Spare part list") 1266 </a> 1267 </li> 1268 </template> 1269 <li v-if="hasExplodedDrawing"> 1270 <a :href="explodedDrawing" target="_blank"> 1271 <svg> 1272 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#download"></use> 1273 </svg> 1274 @Translate(basicPimPrefix + "view exploded drawing of spare parts", "View exploded drawing of spare parts") 1275 </a> 1276 </li> 1277 <li :data-point="spare.product.position" class="basic_pim-spare" v-for="spare in spareParts"> 1278 <div class="head"> 1279 <a href="#" v-on:click="navigateToSpare($event,spare.product.id)" class="name">{{spare.product.productName}}</a> 1280 <p class="sku">{{spare.product.number}}</p> 1281 </div> 1282 1283 @if (Pageview.IsAllowedToShop()) 1284 { 1285 <div class="foot"> 1286 <async-price class-type="asyncprice-spare" 1287 :product="spare" 1288 :default-price="spare.product.price" 1289 list-price="true" 1290 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1291 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1292 1293 </async-price> 1294 <add-to-basket-simple :product="spare" 1295 :unit-of-measure="'PCS'" 1296 :sparepart-location="sparepartLocation" 1297 button-class="btn btn-primary" 1298 class="addtobasketsimple-plp" 1299 :price-without-vat="spare.product.price" 1300 language-id="@Pageview.Area.EcomLanguageId" 1301 :only-spare-parts="@(Pageview.User.OnlySpareParts().ToString().ToLower())" 1302 :is-marketing-user="@(Pageview.User.OnlyView().ToString().ToLower())" 1303 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1304 </add-to-basket-simple> 1305 </div> 1306 } 1307 @*<p>DEBUG: {{spare}}</p>*@ 1308 </li> 1309 1310 </ul> 1311 </div> 1312 </template> 1313 </b-collapse> 1314 </template> 1315 </div> 1316 1317 </script> 1318 <script type="text/x-template" id="variant-list-template"> 1319 <ul class="variants" v-if="initialVariant.product.hasVariants" > 1320 <li> 1321 <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"/> 1322 <label :for="'main-' + initialVariant.product.id" :style="getImageOrColor(initialVariant.product.variantImage,initialVariant.product.variantValue)"></label> 1323 </li> 1324 <li v-for="variant in initialVariant.product.simpleVariants"> 1325 <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" /> 1326 <label :for="'color-'+variant.product.id+ '-' + variant.product.variantId" :style="getImageOrColor(variant.product.variantImage,variant.product.variantValue)"> 1327 </label> 1328 </li> 1329 </ul> 1330 </script> 1331 @using Dynamicweb.Ecommerce.International 1332 @{ 1333 string plpProductPrefix2 = "PLP "; 1334 } 1335 <script type="text/x-template" id="product-template"> 1336 1337 <article itemscope itemtype="https://schema.org/Product" v-if="product.product" v-bind:key="product.product.number"> 1338 <span class="badge"> 1339 <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" /> 1340 </span> 1341 <a :href="product.product.url" itemprop="url"> 1342 <figure style="min-height: 1px;"> 1343 1344 <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)" 1345 v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1346 <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'" 1347 v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1348 </figure> 1349 <header> 1350 <h1 itemprop="name">{{product.product.name}}</h1> 1351 <p itemprop="category">{{product.product.shortDescription}}</p> 1352 <div class="flex-list"> 1353 <product-specification-list-view :product-specifications="product.specifications" 1354 :product-number="product.product.number" 1355 :is-spare-part="product.product.isSparePart"> 1356 </product-specification-list-view> 1357 @if (Pageview.IsAllowedToShop()) 1358 { 1359 <template v-if="plpClass=='basic_listview-grid'"> 1360 <buying-component inline-template :selected-product="product" :initial-product="initialProduct"> 1361 <template v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)"> 1362 <div class="energy-data"> 1363 <a :href="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyLabel',selectedProduct.specifications)" target="_blank" class="energy-label"> 1364 <img :src="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)" alt="Energy Label" class="img-fluid img-energy" height="25" /> 1365 </a> 1366 <a href="#" v-on:click="getProductReport($event,selectedProduct.product.number,selectedProduct.product.name,selectedProduct.product.languageId)" target="_blank" class="energy-link"> 1367 <small>@Translate("PDP product sheet", "Product Sheet")</small> 1368 </a> 1369 </div> 1370 </template> 1371 </buying-component> 1372 </template> 1373 } 1374 </div> 1375 </header> 1376 </a> 1377 <template v-if="plpClass=='basic_listview-list'"> 1378 <ul class="basic_listview-specs"> 1379 <li v-for="item in SpecificationHelpers.GetPrettyBulletPoints(product.specifications)"> 1380 {{item}} 1381 </li> 1382 </ul> 1383 @*{{ product.Product.LongDescription }}*@ 1384 </template> 1385 1386 1387 @if (!Pageview.IsAllowedToShop()) 1388 { 1389 <footer> 1390 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("contact")" class="btn btn-outline-secondary btn-sm"> 1391 @Translate("create account", "Create account") 1392 </a> 1393 <buying-component inline-template :selected-product="product" :initial-product="initialProduct"> 1394 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1395 </buying-component> 1396 </footer> 1397 } 1398 else 1399 { 1400 <buying-component inline-template :selected-product="product" :plp-class="plpClass" :initial-product="initialProduct"> 1401 <footer itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"> 1402 1403 <template v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications) && plpClass == 'basic_listview-list'"> 1404 <div class="energy-price"> 1405 <div class="variant-price"> 1406 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1407 <async-price class-type="asyncprice-plp" 1408 :product="selectedProduct" 1409 :default-price="selectedProduct.product.defaultPrice.priceWithoutVat" 1410 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1411 list-price="true" 1412 :should-emit-warranties="@((Pageview.IsAllowedToShop()).ToString().ToLower())" 1413 :force-ask-for-price="(!selectedProduct.product.isSparePart && @((Pageview.User.OnlySpareParts()).ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1414 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1415 </async-price> 1416 </div> 1417 <div class="energy-data"> 1418 <a :href="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyLabel',selectedProduct.specifications)" class="energy-label" target="_blank"> 1419 <img :src="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)" alt="Energy Label" class="img-fluid img-energy" height="25" /> 1420 </a> 1421 <a href="#" v-on:click="getProductReport($event,selectedProduct.product.number,selectedProduct.product.name,selectedProduct.product.languageId)" target="_blank" class="energy-link"> 1422 <small>@Translate("PDP product sheet", "Product Sheet")</small> 1423 </a> 1424 </div> 1425 </div> 1426 </template> 1427 <template v-else> 1428 <div class="variant-price"> 1429 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1430 <async-price class-type="asyncprice-plp" 1431 :product="selectedProduct" 1432 :default-price="selectedProduct.product.defaultPrice.priceWithoutVat" 1433 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1434 list-price="true" 1435 :should-emit-warranties="@((Pageview.IsAllowedToShop()).ToString().ToLower())" 1436 :force-ask-for-price="(!selectedProduct.product.isSparePart && @((Pageview.User.OnlySpareParts()).ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1437 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1438 </async-price> 1439 </div> 1440 </template> 1441 <div class="plp-buttons"> 1442 <div class="btn-group"> 1443 <add-to-compare :product-number="selectedProduct.product.number"></add-to-compare> 1444 @if (Pageview.IsCurrentlyB2B()) 1445 { 1446 <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> 1447 } 1448 </div> 1449 <add-to-basket-simple :product="selectedProduct" 1450 :unit-of-measure="'PCS'" 1451 button-class="btn btn-primary" 1452 class="addtobasketsimple-plp" 1453 :price-without-vat="currentItemPriceWithoutVat" 1454 language-id="@Pageview.Area.EcomLanguageId" 1455 :only-spare-parts="@(Pageview.User.OnlySpareParts().ToString().ToLower())" 1456 :is-marketing-user="@(Pageview.User.OnlyView().ToString().ToLower())" 1457 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1458 </add-to-basket-simple> 1459 </div> 1460 </footer> 1461 </buying-component> 1462 } 1463 1464 </article> 1465 1466 </script> 1467 <script type="text/x-template" id="product-template-cz"> 1468 @{ 1469 string plpProductPrefix = "PLP "; 1470 } 1471 <article itemscope itemtype="https://schema.org/Product" v-if="product.product" v-bind:key="product.product.number"> 1472 <span class="stickers"> 1473 <span class="sticker" v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('Stickers',product.specifications)"> 1474 <img :src="'/Admin/Public/GetImage.ashx?Height=50&amp;Compression=85&amp;Image=' + SpecificationHelpers.GetFirstSpecificationValueOrDefault('Stickers',product.specifications)" 1475 alt="@Translate(basicPimPrefix + "Sticker", "Sticker")" 1476 class="img-fluid" /> 1477 </span> 1478 <span v-if="ShowDiscount" class="sticker discount"> 1479 -{{discount}}% 1480 </span> 1481 </span> 1482 <a :href="product.product.url" itemprop="url" :title="['@Translate(plpProductPrefix + "More info about", "More info about") ' + product.product.name]"> 1483 <figure style="min-height: 1px;"> 1484 1485 <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)" 1486 v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1487 <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'" 1488 v-bind:alt="product.product.name" itemprop="image" class="img-fluid" /> 1489 </figure> 1490 <header> 1491 <h1 itemprop="name">{{product.product.name}}</h1> 1492 <p itemprop="category">{{product.product.shortDescription}}</p> 1493 <div class="flex-list"> 1494 <product-specification-list-view :product-specifications="product.specifications" 1495 :product-number="product.product.number" 1496 :is-spare-part="product.product.isSparePart"> 1497 </product-specification-list-view> 1498 <template v-if="plpClass=='basic_listview-grid'"> 1499 <buying-component inline-template :selected-product="product" :initial-product="initialProduct"> 1500 <template v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)"> 1501 <div class="energy-data"> 1502 <a :href="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyLabel',selectedProduct.specifications)" target="_blank" class="energy-label"> 1503 <img :src="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)" alt="Energy Label" class="img-fluid img-energy" height="25" /> 1504 </a> 1505 <a href="#" v-on:click="getProductReport($event,selectedProduct.product.number,selectedProduct.product.name,selectedProduct.product.languageId)" target="_blank" class="energy-link"> 1506 <small>@Translate("PDP product sheet", "Product Sheet")</small> 1507 </a> 1508 </div> 1509 </template> 1510 </buying-component> 1511 </template> 1512 </div> 1513 </header> 1514 </a> 1515 <template v-if="plpClass=='basic_listview-list'"> 1516 <ul class="basic_listview-specs"> 1517 <li v-for="item in SpecificationHelpers.GetPrettyBulletPoints(product.specifications)"> 1518 {{item}} 1519 </li> 1520 </ul> 1521 </template> 1522 <buying-component @@discount="onDiscount($event)" inline-template :selected-product="product" :initial-product="initialProduct"> 1523 <footer itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"> 1524 1525 1526 <template v-if="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications) && plpClass == 'basic_listview-list'"> 1527 <div class="energy-price"> 1528 <div class="variant-price"> 1529 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1530 <async-price class-type="asyncprice-plp" 1531 :product="selectedProduct" 1532 :default-price="selectedProduct.product.defaultPrice.priceWithoutVat" 1533 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1534 list-price="true" 1535 :should-emit-warranties="@((Pageview.IsAllowedToShop()).ToString().ToLower())" 1536 :force-ask-for-price="(!selectedProduct.product.isSparePart && @((Pageview.User.OnlySpareParts()).ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1537 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))" 1538 @@discount="onDiscount($event)" 1539 :list-view="true"> 1540 </async-price> 1541 </div> 1542 <div class="energy-data"> 1543 <a :href="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyLabel',selectedProduct.specifications)" class="energy-label" target="_blank"> 1544 <img :src="SpecificationHelpers.GetFirstSpecificationValueOrDefault('EnergyArrow',selectedProduct.specifications)" alt="Energy Label" class="img-fluid img-energy" height="25" /> 1545 </a> 1546 <a href="#" v-on:click="getProductReport($event,selectedProduct.product.number,selectedProduct.product.name,selectedProduct.product.languageId)" target="_blank" class="energy-link"> 1547 <small>@Translate("PDP product sheet", "Product Sheet")</small> 1548 </a> 1549 </div> 1550 </div> 1551 </template> 1552 <template v-else> 1553 <div class="variant-price"> 1554 <variant-list :initial-variant="initialProduct" :currently-selected="selectedProduct"></variant-list> 1555 <async-price class-type="asyncprice-plp" 1556 :product="selectedProduct" 1557 :default-price="selectedProduct.product.defaultPrice.priceWithoutVat" 1558 :only-standard-price="@(Pageview.IsCurrentlyB2C().ToString().ToLower())" 1559 list-price="true" 1560 :should-emit-warranties="@((Pageview.IsAllowedToShop()).ToString().ToLower())" 1561 :force-ask-for-price="(!selectedProduct.product.isSparePart && @((Pageview.User.OnlySpareParts()).ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1562 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))" 1563 @@discount="onDiscount($event)" 1564 :list-view="true"> 1565 </async-price> 1566 </div> 1567 </template> 1568 <div class="btn-group"> 1569 <add-to-compare :product-number="selectedProduct.product.number"></add-to-compare> 1570 @if (Pageview.IsCurrentlyB2B()) 1571 { 1572 <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> 1573 } 1574 </div> 1575 <add-to-basket-simple :product="selectedProduct" 1576 :unit-of-measure="'PCS'" 1577 button-class="btn btn-primary" 1578 class="addtobasketsimple-plp" 1579 :price-without-vat="currentItemPriceWithoutVat" 1580 language-id="@Pageview.Area.EcomLanguageId" 1581 :only-spare-parts="@(Pageview.User.OnlySpareParts().ToString().ToLower())" 1582 :is-marketing-user="@(Pageview.User.OnlyView().ToString().ToLower())" 1583 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1584 </add-to-basket-simple> 1585 </footer> 1586 </buying-component> 1587 </article> 1588 </script> 1589 <script type="text/x-template" id="quick-search-template"> 1590 <div class="quicksearch-component"> 1591 <div class="quickorder-form"> 1592 <slot name="right-box"></slot> 1593 <div class="quickorder-box"> 1594 <h2>@Translate("Find products")</h2> 1595 <div class="quickorder-input"> 1596 <label for="quickOrderSearch">@Translate("Product name or number")</label> 1597 <input type="text" 1598 :id="id" 1599 v-model="search" 1600 @@keydown.enter="enter" 1601 @@keydown.down="down" 1602 @@keydown.up="up" 1603 @@input="onSearchInput" 1604 class="form-control form-control-lg" 1605 autocomplete="chrome-off" 1606 placeholder="@Translate("Quick order search term")" 1607 :disabled="disabled"/> 1608 <label for="quickOrderQty">@Translate("Quantity")</label> 1609 <input type="number" 1610 v-model.number="quantity" 1611 @@change="chosenProduct()" 1612 @@keydown.enter="chosenProduct()" 1613 class="form-control form-control-lg" 1614 id="quickOrderQty" 1615 placeholder="0" 1616 autocomplete="chrome-off" 1617 :disabled="disabled"/> 1618 1619 </div> 1620 <ul v-if="filterList.length > 0 && open" class="quickorder-list"> 1621 <li v-for="(product,index) in filterList" 1622 :class="{'active': isSelected(index)}"> 1623 <button @@click="suggestClick(index)"> 1624 {{concatNameAndNumber(product)}} 1625 </button> 1626 1627 </li> 1628 </ul> 1629 1630 <div class="quickorder-product" v-if="currentChosenProduct"> 1631 <p><strong>{{currentChosenProduct.name}}</strong><small>{{currentChosenProduct.shortDescription}}</small></p> 1632 <product-specification-list-view v-if="searchProductSpecs !== null" 1633 :product-specifications="searchProductSpecs" 1634 :product-number="currentChosenProduct.number"> 1635 </product-specification-list-view> 1636 <async-price class-type="quickorder-product-price" 1637 :product="currentChosenProduct" 1638 unit-of-measure="" 1639 :only-price="true" 1640 default-price-without-vat="0" 1641 :force-ask-for-price="(!currentChosenProduct.isSparePart && @(Pageview.User.OnlySpareParts().ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1642 @@price="handlePriceUpdate" 1643 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1644 </async-price> 1645 </div> 1646 </div> 1647 </div> 1648 <p v-if="showPriceError">@Translate("QuickOrderZeroPriceError","Can not add product with zero price")</p> 1649 <div class="quickorder-cart" v-if="productsToOrder.length > 0"> 1650 <table class="table table-striped table-flex"> 1651 <thead> 1652 <tr> 1653 <th>@Translate("Product")</th> 1654 <th>@Translate("Specifications")</th> 1655 <th>@Translate("Quantity")</th> 1656 <th class="cell-right">@Translate("Price")</th> 1657 <th>&nbsp;</th> 1658 </tr> 1659 </thead> 1660 <tbody> 1661 <tr v-for="(product,index) in productsToOrder"> 1662 <td class="cell-prod"> 1663 <strong>{{product.name}}</strong> 1664 <small>{{product.shortDescription}}</small> 1665 </td> 1666 <td class="cell-specs"> 1667 <product-specification-list-view :product-specifications="product.productSpecifications" 1668 :product-number="product.number"> 1669 </product-specification-list-view> 1670 </td> 1671 <td class="cell-specs"> 1672 <input class="form-control" type="number" v-model="product.quantity" @@input="updateQuantity()" /> 1673 </td> 1674 <td class="cell-price cell-right"> 1675 <async-price class-type="quickorder-product-price" 1676 :product="quickOrderProductToSimpleProduct(product)" 1677 unit-of-measure="" 1678 :only-price="true" 1679 default-price-without-vat="0" 1680 :should-emit-warranties="true" 1681 @@qo-warranty-update="setWarranty($event,product)" 1682 :force-ask-for-price="(!product.isSparePart && @(Pageview.User.OnlySpareParts().ToString().ToLower())) || @(Pageview.User.OnlyView().ToString().ToLower())" 1683 standard-customer="@(string.IsNullOrEmpty(Pageview.AreaSettings.GetString("StandardCustomer")) ? "" : Pageview.AreaSettings.GetString("StandardCustomer"))"> 1684 1685 </async-price> 1686 </td> 1687 <td class="cell-trash"> 1688 <button @@click="removeOrderline(index)" aria-label="@Translate("Delete product")" class="text-danger"> 1689 <svg> 1690 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#trash-alt"></use> 1691 </svg> 1692 </button> 1693 </td> 1694 </tr> 1695 </tbody> 1696 </table> 1697 <slot name="button"></slot> 1698 1699 </div> 1700 </div> 1701 </script> 1702 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 1703 @{ 1704 //This template contains everything for the favoritelist items. 1705 string favoriteListPrefix = "FavoriteList "; 1706 } 1707 <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> 1708 1709 <script type="text/x-template" id="favorite-item-template"> 1710 <div class="custom-control custom-checkbox"> 1711 <input type="checkbox" :checked="isActive" v-on:change="toggleItem()" :id="'fav-' +favoriteList.id" class="custom-control-input" /> 1712 <label :for="'fav-' + favoriteList.id" class="custom-control-label"> 1713 {{favoriteList.name}} 1714 </label> 1715 1716 @*<input type="checkbox" :value="favoriteList.id" :checked="isItemAddedToThisList(favoriteList)" v-on:change="toggleItem($event, favoriteList.id)" class="form-check-input" /> 1717 <label :for="'fav-' + favoriteList.id" class="form-check-label"> 1718 {{favoriteList.name}} 1719 </label>*@ 1720 </div> 1721 </script> 1722 <!-- 1723 1724 <button class="btn btn-favorite favorite" title="Add to favorite" aria-label="@Translate("Favorite", "Favorite" )" v-on:click="toggleItem()"> 1725 <svg> 1726 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#snowflake"></use> 1727 </svg> 1728 </button> 1729 --> 1730 <script type="text/x-template" id="favorite-list-template"> 1731 <div class="fav"> 1732 <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()"> 1733 <svg> 1734 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#snowflake"></use> 1735 </svg> 1736 </button> 1737 <div class="fav-overlay" v-autoClose.nonPath="closeToggle" :id="'favorite' + product.product.id"> 1738 <div class="fav-arrow" v-if="showingMenu"></div> 1739 <div class="fav-inwrap" v-if="showingMenu"> 1740 <template v-if="loading"> 1741 <div class="text-center"> 1742 <span class="spinner-md-default"></span> 1743 </div> 1744 </template> 1745 <em class="error" v-if="uiErrorMessage">{{uiErrorMessage}}</em> 1746 <template v-if="!loading && !uiErrorMessage"> 1747 <p class="fav-title">@Translate(favoriteListPrefix + "Favoritliste", "Favoritliste")</p> 1748 <template v-if="favoriteLists && favoriteLists.length > '0'"> 1749 <p class="fav-teaser"> 1750 @Translate(favoriteListPrefix + "Tilføj eller fjern markering.", "Tilføj eller fjern markering.") 1751 </p> 1752 <div class="fav-lists"> 1753 <favorite-item v-for="favoriteList in favoriteLists" :favorite-list="favoriteList" :product="product" :key="favoriteList.id" /> 1754 </div> 1755 <div class="fav-new"> 1756 <div class="custom-control custom-checkbox"> 1757 <input type="checkbox" v-model="addNewList" id="addNewListCheckbox" class="custom-control-input" /> 1758 <label for="addNewListCheckbox" class="custom-control-label"> 1759 @Translate(favoriteListPrefix + "Ny favoritliste", "Ny favoritliste") 1760 </label> 1761 </div> 1762 </div> 1763 <div v-if="addNewList" class="fav-form"> 1764 <label for="addNewListNameInput" class="sr-only">@Translate(favoriteListPrefix + "Navn", "Navn")</label> 1765 <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" /> 1766 <button v-on:click="saveAsNewList" class="btn btn-secondary btn-sm">@Translate(favoriteListPrefix + "Gem", "Gem")</button> 1767 </div> 1768 </template> 1769 <template v-else> 1770 <p class="fav-teaser">@Translate(favoriteListPrefix + "NoFavoritliste", "Du har endnu ingen favoritlister, angiv navn for at oprette en.")</p> 1771 <div class="fav-form"> 1772 <label for="addNewListNameInput" class="sr-only">@Translate(favoriteListPrefix + "Navn", "Navn")</label> 1773 <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" /> 1774 <button v-on:click="saveAsNewList" class="btn btn-secondary btn-sm">@Translate(favoriteListPrefix + "Gem", "Gem")</button> 1775 </div> 1776 </template> 1777 </template> 1778 </div> 1779 </div> 1780 </div> 1781 </script> 1782 1783 <script type="text/x-template" id="basic-range-slider-template"> 1784 @{ 1785 string rangeFacetPrefix = "Filter "; 1786 } 1787 <div class="facet-option"> 1788 <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> 1789 <div class="vue-slider-fields"> 1790 <div class="form-group"> 1791 <label for="minValue" class="sr-only">@Translate(rangeFacetPrefix + "Minimum Value", "Minimum Value")</label> 1792 <input class="form-control form-control-sm" type="number" @@blur="onChange" id="minValue" name="minValue" v-model="minValue" /> 1793 </div> 1794 <div class="form-group"> 1795 <label for="maxValue" class="sr-only">@Translate(rangeFacetPrefix + "Maximum Value", "Maximum Value")</label> 1796 <input class="form-control form-control-sm" type="number" @@blur="onChange" id="maxValue" name="maxValue" v-model="maxValue" /> 1797 </div> 1798 </div> 1799 </div> 1800 </script> 1801 1802 1803 1804 <script type="text/x-template" id="add-compare-template"> 1805 <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")']"> 1806 <svg> 1807 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#balance-scale"></use> 1808 </svg> 1809 </button> 1810 </script> 1811 @using Dynamicweb.Frontend 1812 @{ 1813 string instantSearchPrefix = "InstantSearch "; 1814 } 1815 <script type="text/x-template" id="instant-search-template"> 1816 <form v-bind:class="baseClass" action="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")" v-autoClose="closeFoldOut"> 1817 <div class="basic_instantsearch"> 1818 <label for="searchTerm" class="sr-only">@Translate(instantSearchPrefix + "Search", "Search")</label> 1819 <input type="search" 1820 placeholder="@Translate(instantSearchPrefix + "Search", "Search")" 1821 id="searchTerm" 1822 name="search" 1823 autocomplete="off" 1824 v-model="searchTerm" 1825 v-on:focus="openSearch"> 1826 <button type="submit"> 1827 <span class="sr-only">@Translate(instantSearchPrefix + "Search", "Search")</span> 1828 <svg> 1829 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#search"></use> 1830 </svg> 1831 </button> 1832 <div class="fold-out" v-bind:class="{ active: foldActive, 'has-results': showResults }"> 1833 <template v-if="searchTerm == null"> 1834 <p class="search-string">@Translate(instantSearchPrefix + "Type something", "Type something")</p> 1835 </template> 1836 <template v-else-if="queryLoading"> 1837 <div class="is-loading"> 1838 <span class="spinner-lg-default"></span> 1839 </div> 1840 </template> 1841 <template v-else-if="!showResults"> 1842 <p class="search-string"> 1843 @Translate(instantSearchPrefix + "Empty search...", "Empty search...") 1844 </p> 1845 </template> 1846 <div class="fold-out-grid" v-else> 1847 <div class="fold-out-col is-content"> 1848 <ul v-if="groups?.length>0" class="fold-out-content"> 1849 <li> 1850 <strong>@Translate(instantSearchPrefix + "Categories", "Categories")</strong> 1851 </li> 1852 <li v-for="group in groups"> 1853 <a :href="group.url"> 1854 {{group.groupName}} 1855 </a> 1856 </li> 1857 </ul> 1858 <ul v-if="contents?.length>0" class="fold-out-content"> 1859 <li> 1860 <strong>@Translate(instantSearchPrefix + "Content", "Content")</strong> 1861 </li> 1862 <li v-for="content in contents"> 1863 <a :href="content.url"> 1864 {{content.pageTitle}} 1865 </a> 1866 </li> 1867 <li v-if="hasMoreContent" class="show-all"> 1868 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?search=' + searchTerm + '&show=content'">@Translate(instantSearchPrefix + "See all", "Se alle")</a> 1869 </li> 1870 </ul> 1871 </div> 1872 <div class="fold-out-col is-products" v-if="products?.length > 0"> 1873 <ul class="fold-out-products"> 1874 <li> 1875 <strong>@Translate(instantSearchPrefix + "Products", "Products")</strong> 1876 </li> 1877 <li v-for="product in products"> 1878 <figure> 1879 <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')" /> 1880 </figure> 1881 <div> 1882 <a :href="product.url"> 1883 {{product.name}} 1884 </a> 1885 <small>{{product.number}}</small> 1886 </div> 1887 </li> 1888 <li v-if="hasMoreProducts" class="show-all"> 1889 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?search=' + searchTerm + '&show=products'">@Translate(instantSearchPrefix + "See all", "Se alle")</a> 1890 </li> 1891 </ul> 1892 1893 </div> 1894 <div class="fold-out-col is-spareparts" v-if="spareParts?.length > 0"> 1895 <ul class="fold-out-products"> 1896 <li> 1897 <strong>@Translate(instantSearchPrefix + "Spareparts", "Spare parts")</strong> 1898 </li> 1899 <li v-for="product in spareParts"> 1900 <figure> 1901 <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')" /> 1902 </figure> 1903 <div> 1904 <a :href="product.url"> 1905 {{product.name}} 1906 </a> 1907 <small>{{product.number}}</small> 1908 </div> 1909 </li> 1910 <li v-if="hasMoreSpares" class="show-all"> 1911 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?search=' + searchTerm + '&show=spares'">@Translate(instantSearchPrefix + "See all", "Se alle")</a> 1912 </li> 1913 </ul> 1914 </div> 1915 </div> 1916 @*<div v-if="searchTerm != '' && showResults && !queryLoading" class="actions"> 1917 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?search=' + searchTerm">@Translate(instantSearchPrefix + "See all", "Se alle")</a> 1918 </div>*@ 1919 </div> 1920 </div> 1921 </form> 1922 </script> 1923 1924 1925 1926 <script src="@NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/scripts/vendors~bundle.min.js")"></script> 1927 <script src="@NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/scripts/bundle.min.js")"></script> 1928 @{ 1929 var currentUser = NORRIQ.Universal.Identity.Dw.UserViewModel.GetCurrentUser<Tefcold.Web.Api.Models.UserViewModelWithMediaBank>(); 1930 var jsonUser = Newtonsoft.Json.JsonConvert.SerializeObject(currentUser); 1931 } 1932 <script async> 1933 AppStart.VueProvider.init({ 1934 webApiUrl: '@System.Web.Configuration.WebConfigurationManager.AppSettings["WebApiProxyUrl"]', 1935 user: @jsonUser, 1936 currencyCode: '@currencyCode', 1937 locale: '@Pageview.Area.Culture', 1938 currencyLeft: false, 1939 currencySpacing: true, 1940 currencySymbol: '@currencyCode', 1941 currencyDecimalSeparator: ',', 1942 currencyGroupSeparator: '.', 1943 currencyDecimalDigits: 2, 1944 dateFormatShort: '@Pageview.Area.Dateformat', 1945 shopId: '@Pageview.Area.EcomShopId', 1946 languages: `@languagesJson` 1947 }); 1948 </script> 1949 1950 <script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script> 1951 <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> 1952 1953 <script append="replace"></script> 1954 </body> 1955 </html>