Error executing template "Designs/Bolind/_parsed/Frontpage.parsed.cshtml"
System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'FooterSubOneLink'.
Invalid column name 'FooterSubOneIcon'.
Invalid column name 'FooterSubTwoLink'.
Invalid column name 'FooterSubTwoIcon'.
Invalid column name 'FooterSubColumnOneText'.
Invalid column name 'FooterSubColumnTwoText'.
Invalid column name 'FooterSubColumnThreeText'.
Invalid column name 'FooterSubColumnFourText'.
Invalid column name 'FooterSubColumnFiveText'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at Dynamicweb.Data.Database.CreateDataReader(IDbCommand command, CommandBehavior behavior)
   at Dynamicweb.Data.Database.CreateDataReader(CommandBuilder commandBuilder, IDbConnection connection, IDbTransaction transaction, CommandBehavior behavior, Int32 commandTimeout)
   at Dynamicweb.Data.Database.CreateDataReader(CommandBuilder commandBuilder, IDbConnection connection, IDbTransaction transaction, Int32 commandTimeout)
   at Dynamicweb.Content.Items.Queries.Repository.SelectInternal(IEnumerable`1 ids, Query query)
   at Dynamicweb.Content.Items.Queries.Repository.SelectByIds(IEnumerable`1 ids, Query query, Boolean checkPermissions, Boolean includeInheritedItems)
   at Dynamicweb.Content.Items.Queries.Repository.SelectByIds(IEnumerable`1 ids, Query query, Boolean checkPermissions)
   at Dynamicweb.Content.Items.Queries.Repository.SelectById(String id, Query query)
   at Dynamicweb.Content.Items.Queries.Repository.SelectById[T](String id, Query query)
   at Dynamicweb.Content.Items.Queries.StorageManager.GetById[T](String id)
   at Bolind.Web.CustomCode.WebsiteService.<>c__DisplayClass4_0.b__0()
   at NORRIQ.Common8.Caching.CacheItemContainer.BuildItem[T](Func`1 buildmethod, Type dependencyType)
   at NORRIQ.Common8.Caching.HttpCache.GetOrInsert[T](String cacheKey, Func`1 buildCacheDependency, Func`1 buildNewItem)
   at NORRIQ.Common8.Caching.HttpCache`1.GetOrInsert[T](String cacheKey, Func`1 buildNewItem)
   at NORRIQ.Common8.Caching.AreaCache.GetOrInsert[T](String cacheKey, Func`1 buildNewItem)
   at NORRIQ.Common8.Caching.DwCaching.CacheByArea(String cacheKey, Func`1 buildFunc)
   at Bolind.Web.CustomCode.WebsiteService.GetWebsiteProperties()
   at Bolind.Web.CustomCode.AreaExtentions.IsB2C(Area area)
   at Bolind.Web.CustomCode.AreaExtentions.IsB2C(PageView pageView)
   at CompiledRazorTemplates.Dynamic.RazorEngine_0dfc8acd317b4cdb8bd61ce054ebccc2.Execute() in E:\Solutions\Bolind\Web\Staging\Files\Templates\Designs\Bolind\_parsed\Frontpage.parsed.cshtml:line 56
   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()
ClientConnectionId:b06e3bab-4251-49fd-8eab-e35826b03026
Error Number:207,State:1,Class:16

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