Error executing template "Designs/Bolind/_parsed/Basic_Page.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_8c0d88b1b6cf441f89d13ceaa9351df5.Execute() in E:\Solutions\Bolind\Web\Staging\Files\Templates\Designs\Bolind\_parsed\Basic_Page.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:a1809140-4ab6-4ed0-8b3f-5fc58edd3f6e
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 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 388 @using Bolind.Web.CustomCode.CDN 389 @using Dynamicweb.Frontend; 390 @using NORRIQ.Common8.Caching 391 392 @Title("Page") 393 @Description("Default page template") 394 @{ 395 string basicPagePrefix = "Page "; 396 var bg = Model.Item != null && Model.Item.GetBoolean("WhiteBackground") ? "whitebg" : ""; 397 } 398 @if (Pageview.IsCurrentUserAllowed) 399 { 400 var pageLayout = !string.IsNullOrEmpty(Model.Item.GetValue<ListViewModel>("Layout").SelectedValue) ? Model.Item.GetValue<ListViewModel>("Layout").SelectedValue : "content-page-sidebar"; 401 var pageClass = pageLayout == "page-wide" ? "basic_page-wide" : "basic_page"; 402 bool isBanner = Model.Item.GetBoolean("isBanner"); 403 var isBottomRight = Model.Item.GetBoolean("isBottomRight") ? " bottom-right" : "top-left"; 404 var isWhite = Model.Item.GetBoolean("isWhite") ? "text-white" : "text-dark"; 405 var isFixedWidth = Model.Item.GetBoolean("isFixedWidth") ? " is-fixed" : ""; 406 var justifyBanner = Model.Item.GetBoolean("isBottomRight") ? "space-between" : "center"; 407 408 409 if (!Model.Item.GetBoolean("HideBreadcrumb")) 410 { 411 @DwCaching.CacheByPage("basic_Breadcrumb.xslt", () => RenderNavigation(new { Template = "basic_Breadcrumb.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 5 })) 412 } 413 <main class="@pageClass" id="main-element"> 414 @if (pageLayout == "content-page-sidebar" || pageLayout == "module-page-sidebar") 415 { 416 <aside class="basic_page-sidebar"> 417 @*<div class="sidebar-toggle"> 418 <button type="button" 419 class="btn-toggle" 420 v-b-toggle.sidebar-navigation 421 aria-label="@Translate(basicPagePrefix + "Open sidebar","Open sidebar")"> 422 <svg class="icon-left"> 423 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#chevron-left"></use> 424 </svg> 425 <span>@Pageview.Page.MenuText</span> 426 </button> 427 </div>*@ 428 @DwCaching.CacheByPage("basic_Page.xslt", () => RenderNavigation(new { Template = "basic_Page.xslt", StartLevel = 1, EndLevel = 3 })) 429 </aside> 430 <section class="basic_page-content @bg"> 431 @if (pageLayout == "content-page-sidebar" 432 && !string.IsNullOrEmpty(Model.Item.GetString("Title").ToString()) 433 || !string.IsNullOrEmpty(Model.Item.GetString("Text").ToString()) 434 || Model.Item.GetFile("Image") != null) 435 { 436 if (isBanner && Model.Item.GetFile("Image") != null) 437 { 438 <figure class="page-banner @isWhite" style="background-image:url(@Pageview.CdnWrap(Model.Item.GetFile("Image").Path);"> 439 <figcaption class="@justifyBanner"> 440 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title").ToString())) 441 { 442 <h1 class="page-banner-title"> 443 @Model.Item.GetString("Title") 444 </h1> 445 } 446 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text").ToString())) 447 { 448 <div class="@isBottomRight"> 449 <div class="page-banner-text@(isFixedWidth)"> 450 @Model.Item.GetString("Text") 451 </div> 452 </div> 453 454 } 455 </figcaption> 456 </figure> 457 } 458 else 459 { 460 if (!string.IsNullOrEmpty(Model.Item.GetString("Title").ToString())) 461 { 462 <header class="basic_page-header"> 463 <h1> 464 @Model.Item.GetString("Title") 465 </h1> 466 </header> 467 } 468 if (!string.IsNullOrEmpty(Model.Item.GetString("Text").ToString()) || Model.Item.GetFile("Image") != null) 469 { 470 string ImagePosition = !string.IsNullOrEmpty(Model.Item.GetValue<ListViewModel>("ImagePosition").SelectedValue) ? Model.Item.GetValue<ListViewModel>("ImagePosition").SelectedValue : "top"; 471 <div class="basic_page-@ImagePosition"> 472 @if (Model.Item.GetFile("Image") != null) 473 { 474 <figure> 475 <img src="@Pageview.CdnWrap(Model.Item.GetFile("Image").Path)" 476 alt="@(!string.IsNullOrEmpty(Model.Item.GetString("ImageText")) ? Model.Item.GetString("ImageText") : Model.Item.GetString("Title"))" 477 class="img-fluid" /> 478 @if (!string.IsNullOrEmpty(Model.Item.GetString("ImageText"))) 479 { 480 <figcaption>@Model.Item.GetString("ImageText")</figcaption> 481 } 482 </figure> 483 } 484 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 485 { 486 <div class="basic_page-text"> 487 @Model.Item.GetString("Text") 488 </div> 489 } 490 </div> 491 } 492 } 493 } 494 @RenderPlaceholder() 495 </section> 496 } 497 else 498 { 499 @RenderPlaceholder() 500 @RenderBoxedPlaceholder() 501 } 502 </main> 503 } 504 else 505 { 506 <main class="basic_page" id="main-element"> 507 @RenderPlaceholder() 508 @RenderBoxedPlaceholder() 509 </main> 510 } 511 @helper RenderPlaceholder() 512 { 513 @Model.Placeholder("Content", "Content", "unwrap:true;default:true") 514 } 515 516 @helper RenderBoxedPlaceholder() 517 { 518 if (!String.IsNullOrEmpty(Model.Placeholder("Boxed"))) 519 { 520 <div class="basic_page-group"> 521 @Model.Placeholder("Boxed", "Grouped Content", "unwrap:true") 522 </div> 523 } 524 } 525 @*=== Footer Start ===*@ 526 @{ 527 string basicFooterPrefix = "Footer "; 528 } 529 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterGraphicsText")) || Model.Area.Item.GetFile("FooterGraphicsGraphic") != null) 530 { 531 <div class="basic_footer-graphics"> 532 <div class="basic_footer-wrap"> 533 <div class="basic_footer-box"> 534 @*@if (Pageview.User != null) 535 { 536 var salesPersonService = ObjectFactory.GetInstance<SalesPersonService>(); 537 var salesPerson = salesPersonService.GetPrimarySalesPerson(); 538 539 if (salesPerson != null) 540 { 541 <table class="table table-person"> 542 <tr> 543 <td class="img-cell"> 544 <img src="@Pageview.CdnWrap($"/Admin/Public/GetImage.ashx?Width=150&amp;Height=150&amp;Crop=5&amp;Compression=85&amp;Image={salesPerson.Image}")" /> 545 </td> 546 <td> 547 <p> 548 <strong>@Translate("contactperson_header", "Din kontaktperson")</strong><br /> 549 <span class="semibold">@salesPerson.Name</span> 550 <br /><span class="title">@salesPerson.Title</span><br /> 551 <span>@Translate("users_phone", "Tlf.")</span> <span>@salesPerson.Phone</span> 552 <br /> 553 <span>@Translate("users_email", "Email:")</span> <a href="mailto:@salesPerson.Email">@salesPerson.Email</a> 554 </p> 555 </td> 556 </tr> 557 </table> 558 } 559 else 560 { 561 <p>@Model.Area.Item.GetString("FooterGraphicsText")</p> 562 } 563 } 564 else 565 { 566 <p>@Model.Area.Item.GetString("FooterGraphicsText")</p> 567 }*@ 568 <p>@Model.Area.Item.GetString("FooterGraphicsText")</p> 569 </div> 570 @if (Model.Area.Item.GetFile("FooterGraphicsGraphic") != null) 571 { 572 <div class="basic_footer-box"> 573 <figure> 574 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("FooterGraphicsGraphic").Path)" class="img-fluid" alt="@Translate(basicFooterPrefix + "Graphics Alt Text", "City")" /> 575 </figure> 576 </div> 577 } 578 </div> 579 </div> 580 } 581 <div class="basic_footer-sup"> 582 <div class="basic_footer-wrap"> 583 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubOneText")) && Model.Area.Item.GetFile("FooterSubOneImage") != null) 584 { 585 <div class="basic_footer-box"> 586 <div class="basic_footer-text"> 587 <h3>@Model.Area.Item.GetString("FooterSubOneTitle")</h3> 588 @Model.Area.Item.GetString("FooterSubOneText") 589 </div> 590 <div class="basic_footer-image"> 591 <figure> 592 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("FooterSubOneImage").Path)" alt="@Model.Title" class="img-fluid" /> 593 </figure> 594 </div> 595 </div> 596 } 597 598 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubTwoTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterSubTwoText")) && Model.Area.Item.GetFile("FooterSubTwoImage") != null) 599 { 600 <div class="basic_footer-box"> 601 <div class="basic_footer-text"> 602 <h3>@Model.Area.Item.GetString("FooterSubTwoTitle")</h3> 603 @Model.Area.Item.GetString("FooterSubTwoText") 604 </div> 605 <div class="basic_footer-image"> 606 <figure> 607 <img src="@Pageview.CdnWrap(Model.Area.Item.GetFile("FooterSubTwoImage").Path)" alt="@Model.Title" class="img-fluid" /> 608 </figure> 609 </div> 610 </div> 611 } 612 </div> 613 </div> 614 <footer class="basic_footer"> 615 <div class="basic_footer-wrap"> 616 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterOneTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterOneText"))) 617 { 618 <div class="basic_footer-box"> 619 <div class="basic_footer-head" role="button" v-b-toggle.footer-one> 620 <h3>@Model.Area.Item.GetString("FooterOneTitle")</h3> 621 </div> 622 <b-collapse id="footer-one" class="basic_footer-collapse"> 623 <div class="basic_footer-body"> 624 @Model.Area.Item.GetString("FooterOneText") 625 </div> 626 </b-collapse> 627 </div> 628 } 629 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoTitle"))) 630 { 631 var navitag = Model.Area.Item.GetString("FooterTwoNavigationtag"); 632 633 <div class="basic_footer-box"> 634 <div class="basic_footer-head" role="button" v-b-toggle.footer-two> 635 <h3>@Model.Area.Item.GetString("FooterTwoTitle")</h3> 636 </div> 637 <b-collapse id="footer-two" class="basic_footer-collapse"> 638 <div class="basic_footer-body"> 639 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterTwoText"))) 640 { 641 @Model.Area.Item.GetString("FooterTwoText") 642 } 643 @if (!string.IsNullOrEmpty(navitag)) 644 { 645 @DwCaching.CacheByArea("basic_SubPage.xslt", () => RenderNavigation(new { Template = "basic_SubPage.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, NavigationTag = navitag })) 646 } 647 </div> 648 </b-collapse> 649 </div> 650 } 651 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeTitle")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterThreeText"))) 652 { 653 <div class="basic_footer-box"> 654 <div class="basic_footer-head" role="button" v-b-toggle.footer-three> 655 <h3>@Model.Area.Item.GetString("FooterThreeTitle")</h3> 656 </div> 657 <b-collapse id="footer-three" class="basic_footer-collapse"> 658 <div class="basic_footer-body"> 659 @Model.Area.Item.GetString("FooterThreeText") 660 </div> 661 </b-collapse> 662 </div> 663 } 664 @if (!string.IsNullOrEmpty(Model.Area.Item.GetString("FooterFourText")) && !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterCopyright"))) 665 { 666 <div class="basic_footer-box"> 667 <div id="footer-four" class="basic_footer-logo"> 668 <div class="basic_footer-body"> 669 @Model.Area.Item.GetString("FooterFourText") 670 <p> 671 @Translate(basicFooterPrefix + "Copyright", "Copyright")&copy; @DateTime.Now.Year - @Model.Area.Item.GetString("FooterCopyright") 672 </p> 673 </div> 674 </div> 675 </div> 676 } 677 </div> 678 @if (Model.Area.Item.GetItems("PaymentCards") != null && Model.Area.Item.GetItems("PaymentCards").Any()) 679 { 680 <div class="basic_footer-wrap"> 681 <div class="basic_footer-box"> 682 <div class="basic_footer-icons"> 683 <ul class="list-inline payments"> 684 @foreach (var i in Model.Area.Item.GetItems("PaymentCards")) 685 { 686 var cardTitle = i.GetString("Title"); 687 var cardImage = i.GetFile("ImageFile"); 688 <li class="list-inline-item"> 689 <img src="@cardImage.Path" alt="@cardTitle" class="img-fluid" /> 690 </li> 691 } 692 </ul> 693 </div> 694 </div> 695 </div> 696 } 697 </footer> 698 @*=== Footer End ===*@ 699 </div> 700 } 701 <a href="#top" class="scroll-to-top" title="@Translate("Scroll to top", "Gå til toppen")"> 702 <svg class="icon"> 703 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#arrow-to-top"></use> 704 </svg><span class="sr-only">@Translate("Scroll to top", "Gå til toppen")</span> 705 </a> 706 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 707 708 <script type="text/x-template" id="add-to-basket-simple-template"> 709 @{ 710 string addToBasketSimplePrifix = "BuyButton "; 711 } 712 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]"> 713 <label for="quantity">@Translate(addToBasketSimplePrifix + "Quantity", "Quantity")</label> 714 <input class="form-control" type="number" name="quantity" v-model="quantity" autocomplete="off" onclick="this.select()"> 715 <button :disabled="quantity < 1 || isCoolDownProduct" :class="buttonCl" v-on:click="addToBasketAndResetQuantity()" aria-label="@Translate(addToBasketSimplePrifix + "Add", "Add")"> 716 <slot> 717 <svg> 718 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#shopping-cart"> 719 </use> 720 </svg> 721 <span v-if="isCoolDownProduct"> 722 @Translate(addToBasketSimplePrifix + "Add to basket udmeldt", "Udgået") 723 </span> 724 <span v-else> 725 @Translate(addToBasketSimplePrifix + "Add to basket", "Add to basket") 726 </span> 727 </slot> 728 </button> 729 </div> 730 </script> 731 732 <script type="text/x-template" id="quick-add-template"> 733 @{ 734 string quickAddPrifix = "BuyButton "; 735 } 736 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]" v-if="!isCoolDownProduct"> 737 <label for="quantity">@Translate(quickAddPrifix + "Quantity", "Quantity")</label> 738 <input class="form-control" type="number" id="quantity" name="quantity" v-model="quantity" autocomplete="off"> 739 </div> 740 </script> 741 742 <script type="text/x-template" id="add-to-basket-button-only-template"> 743 @{ 744 string addToBasketPrefix = "BuyButton "; 745 } 746 <div v-bind:class="[{added: IsAdded}, {adding: IsAdding}]"> 747 <button :class="buttonCl" v-on:click="addToBasket()" :disbaled="isCoolDownProduct"> 748 <slot v-if="isCoolDownProduct"> 749 @Translate(addToBasketPrefix + "Add to basket udmeldt", "Udgået") 750 </slot> 751 <slot v-else> 752 @Translate(addToBasketPrefix + "Add to basket", "Add to basket") 753 </slot> 754 </button> 755 </div> 756 </script> 757 758 <script type="text/x-template" id="add-to-basket-rounding-template"> 759 @{ 760 string addToBasketRoundingPrifix = "BuyButton "; 761 } 762 <div v-bind:class="[{animated: true}, {added: IsAdded}, {adding: IsAdding}]" v-if="showBasket()"> 763 <p class="alert alert-warning" v-if="didRounding"> 764 <svg> 765 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#info-circle"></use> 766 </svg> 767 @Translate("product_minPurchaseRoundingInfoText", "Vi har ændret antal ift. kolli-størrelse") 768 </p> 769 <div class="addtobasket-group"> 770 @*input-group was here*@ 771 @*@if (Pageview.User != null) 772 { 773 <favorite-item :product-id="productId" 774 :language-id="languageId" 775 :variant-id="variantId" 776 ref="favoriteItem"> 777 </favorite-item> 778 }*@ 779 <template v-if="missingVariant"> 780 <p class="alert alert-warning"> 781 <svg> 782 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#info-circle"> 783 </use> 784 </svg> 785 @Translate(addToBasketRoundingPrifix + "Select variant", "Select variant") 786 </p> 787 </template> 788 <template v-else> 789 <div class="input-group"> 790 <div class="input-group-prepend"><span class="input-group-text">{{unitsOfMeasureDescription().toLowerCase().trim() }}</span></div> 791 <label for="quantity" class="sr-only">@Translate(addToBasketRoundingPrifix + "Quantity", "Quantity")</label> 792 <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)"> 793 <div class="input-group-append"> 794 <button :disabled="quantity < 1 || isCoolDownProduct" :class="buttonCl" v-on:click="addToBasketAndResetQuantity()" aria-label="@Translate(addToBasketRoundingPrifix + "Add", "Add")" should-animate> 795 <slot> 796 <svg> 797 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#shopping-cart"> 798 </use> 799 </svg> 800 <span v-if="isCoolDownProduct"> 801 @Translate(addToBasketRoundingPrifix + "Add to basket udmeldt", "Udgået") 802 </span> 803 <span v-else> 804 @Translate(addToBasketRoundingPrifix + "Add to basket", "Add to basket") 805 </span> 806 </slot> 807 </button> 808 </div> 809 </div> 810 </template> 811 </div> 812 @*<div id="add-message" v-if="IsAdded || IsAdding"><p>@Translate("Tilføjet til kurv!")</p></div>*@ 813 </div> 814 </script> 815 @using Bolind.Web.CustomCode 816 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 817 818 <script type="text/x-template" id="async-price-template"> 819 @{ 820 string asyncPrefix = "Async "; 821 } 822 <div :class="classType + (loading && !isCoolDownProduct ? ' loading' : '')"> 823 <template> 824 <p :class="classType + '--error'" v-if="error">{{error}}</p> 825 </template> 826 <template v-if="isCoolDownProduct"> 827 <p class="alert noprice" style="background-color: #dae0e5"> 828 @Translate(asyncPrefix + "item discontinued", "Vare udg&aring;et") 829 </p> 830 </template> 831 <template v-else-if="!onlyStock && !error && price && price.unitPrice"> 832 @{ 833 bool B2C = Pageview.IsB2C(); 834 var vat = (B2C) ? Translate("product_inclVat", "inkl. moms") : Translate("product_exVat", "ekskl. moms"); 835 } 836 <p class="alert alert-warning noprice" v-if="priceWithoutVatString == '0' && !allowZeroPrice"> 837 @Translate(asyncPrefix + "Contact Bolind for price", "Kontakt Bolind for pris") 838 </p> 839 <p class="listprice" v-if="showListPrice && (priceWithoutVatString != '0')"> 840 @Translate(asyncPrefix + "product_listPrice", "Vejledende pris:") <span>{{ listPrice | currency(true) }}</span> 841 </p> 842 <p class="price" v-bind:class="{ sale: showListPrice }" v-if="!loading && price && price.netUnitPrice && (priceWithoutVatString != '0' || allowZeroPrice ) && !isCart" itemprop="priceCurrency" :content="price.unitPrice.currencyKey"> 843 <template v-if="isCampaign"> 844 <span class="price-campaigntext">@Translate(asyncPrefix + "Campaign_price", "Kampagnepris")</span> 845 </template> 846 <span itemprop="price" :content="price.unitPrice.priceWithoutVat" class="price-actual"> 847 {{ price.netUnitPrice.priceWithoutVat | currency(true) }} 848 </span> 849 </p> 850 <template v-if="(priceWithoutVatString != '0' || allowZeroPrice) && !isCart"> 851 <ul class="list-inline qtyPrices" v-if="price.extraInfo.navPrices.length > 0 && showQtyPrices(price)"> 852 <li v-for="navPrice in price.extraInfo.navPrices"> 853 <span>@Translate(asyncPrefix + "Price pr. unit", "Fra") {{navPrice.quantity}} {{ unitsOfMeasureDescription().toLowerCase().trim() }} </span> 854 <span class="qtyprice">{{navPrice.price | currency(true)}}</span> 855 </li> 856 </ul> 857 <p class="priceper"> 858 @Translate(asyncPrefix + "product_pricePer", "Pris pr.") {{ unitsOfMeasureDescription().toLowerCase().trim() }} @vat 859 </p> 860 @if (!B2C) 861 { 862 <p class="priceincl" v-if="!hidePriceIncl"> 863 @Translate(asyncPrefix + "PriceVatIncl", "Pris inkl. moms:") <span>{{ priceWithVatString | currency(true) }}</span> 864 </p> 865 } 866 </template> 867 <template v-if="isCart"> 868 <span class="montage-price">{{ price.netUnitPrice.priceWithoutVat | currency(true) }}</span> 869 </template> 870 </template> 871 </div> 872 </script> 873 874 <script type="text/x-template" id="cart-icon-template"> 875 @{ 876 string translationPrefixCart = "Minicart "; 877 } 878 <a :href="cartlink"> 879 <svg> 880 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#shopping-cart"></use> 881 </svg> 882 <span class="label">@Translate(translationPrefixCart + "Checkout", "Checkout")</span> 883 <span v-if="!cartEmpty" class="cart-quantity">{{quantity}}</span> 884 </a> 885 </script> 886 <script type="text/x-template" id="basic-facet-filter-template"> 887 @{ 888 string basicFacetPrefix = "Filter "; 889 } 890 891 <div class="basic_filter" v-if="!error && facetFilters"> 892 <template v-if="HasActiveFilter()"> 893 <p id="selected-filter-label" class="sr-only"> 894 @Translate(basicFacetPrefix + "Active", "Active") 895 </p> 896 <div aria-labelledby="selected-filter-label" class="basic_filter-active"> 897 <template v-for="facetFilter in facetFilters"> 898 <span v-for="option in SelectedOptions(facetFilter)" class="custom-control custom-filter"> 899 <input type="checkbox" 900 :id="'Selected-' + facetFilter.Name + '-' + option.Name" 901 :name="facetFilter.Name" 902 :key="option.Label" 903 :v-model="option.Selected" 904 :checked="option.Selected" 905 v-on:click="ToggleFilter(facetFilter.Name,option)" 906 class="custom-control-input" /> 907 <label :for="'Selected-' + facetFilter.Name + '-' + option.Name" class="custom-control-label"> 908 <span class="filtername">{{facetFilter.Name}}:&nbsp;</span> 909 <span class="filterstring">{{option.Label}}</span> 910 <span class="remove">X</span> 911 </label> 912 </span> 913 </template> 914 </div> 915 </template> 916 <b-collapse class="basic_filter-collapse" id="sidebar-filter"> 917 <div class="basic_filter-head"> 918 <h3> 919 @Translate(basicFacetPrefix + "Filter", "Filter") 920 </h3> 921 <template v-if="queryLoading"> 922 <span class="spinner-md-default"></span> 923 </template> 924 <template v-else> 925 <button type="button" class="btn-close" v-b-toggle.sidebar-filter aria-label="@Translate(basicFacetPrefix + "Close Filter", "Close Filter")"> 926 <span></span> 927 <span></span> 928 </button> 929 </template> 930 </div> 931 <div class="basic_filter-groups"> 932 <div class="basic_filter-group" v-for="(facetFilter, index) in facetFilters"> 933 <p :id="'filter-group-' + facetFilter.Name.toLowerCase().trim()" v-b-toggle="'filter-collapse-' + facetFilter.Name.toLowerCase().trim()"> 934 {{facetFilter.Name}} 935 <svg> 936 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#chevron-right"></use> 937 </svg> 938 </p> 939 <b-collapse :id="'filter-collapse-' + facetFilter.Name.toLowerCase().trim()" :visible="ShowGroupIfSelected(facetFilter.Options, index)" class="basic_filter-collapsing"> 940 <template v-if="facetFilter.Options.length > 7"> 941 <b-collapse class="basic_filter-expand" :id="'filter-expand-' + facetFilter.Name.toLowerCase().trim()" :visible="ShowMoreIfSelected(facetFilter.Options, index)"> 942 <ul :aria-labelledby="'filter-group-' + facetFilter.Name.toLowerCase().trim()"> 943 <li v-for="option in facetFilter.Options" class="custom-control custom-checkbox"> 944 <input type="checkbox" class="custom-control-input" 945 :id="'UnSelected-' + facetFilter.Name + '-' + option.Name" 946 :key="option.Label" 947 :name="facetFilter.Name" 948 :v-model="option.Selected" 949 :checked="option.Selected" 950 v-on:click="ToggleFilter(facetFilter.Name,option)" /> 951 <label :for="'UnSelected-' + facetFilter.Name + '-' + option.Name" class="custom-control-label"> 952 {{option.Label}} ({{option.Count}}) 953 </label> 954 </li> 955 </ul> 956 </b-collapse> 957 <a v-b-toggle="'filter-expand-' + facetFilter.Name.toLowerCase().trim()" class="basic_filter-expanding" v-if="facetFilter.Options.length > 7"> 958 <span class="show-more">+ @Translate(basicFacetPrefix + "show more", "show more")</span> 959 <span class="show-less">- @Translate(basicFacetPrefix + "show less", "show less")</span> 960 </a> 961 </template> 962 <template v-else> 963 <ul :aria-labelledby="'filter-group-' + facetFilter.Name.toLowerCase().trim()"> 964 <li v-for="option in facetFilter.Options" class="custom-control custom-checkbox"> 965 <input type="checkbox" class="custom-control-input" 966 :id="'UnSelected-' + facetFilter.Name + '-' + option.Name" 967 :key="option.Label" 968 :name="facetFilter.Name" 969 :v-model="option.Selected" 970 :checked="option.Selected" @*AG: should it have been 'checked'?*@ 971 v-on:click="ToggleFilter(facetFilter.Name,option)" /> 972 <label :for="'UnSelected-' + facetFilter.Name + '-' + option.Name" class="custom-control-label"> 973 {{option.Label}} <span class="count">({{option.Count}})</span> 974 </label> 975 </li> 976 </ul> 977 </template> 978 </b-collapse> 979 </div> 980 </div> 981 <div class="basic_filter-foot"> 982 <button class="btn btn-dark btn-icon btn-block" v-b-toggle.sidebar-filter> 983 <svg class="icon"> 984 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#check"></use> 985 </svg> 986 @Translate(basicFacetPrefix + "Show selected", "Show Selected") 987 </button> 988 </div> 989 </b-collapse> 990 </div> 991 </script> 992 @{ 993 string favoriteListPrefix = "FavoriteList "; 994 } 995 <script type="text/x-template" id="favorite-list-template"> 996 <div v-bind:class="{ active: active }" id="basic_favoritelist" v-autoClose="closeFoldOut"> 997 <div class="fav-inwrap"> 998 <template v-if="loading"> 999 <div class="loading"> 1000 <span class="spinner-xl-default"></span> 1001 </div> 1002 </template> 1003 <h5>@Translate(favoriteListPrefix + "Favoritliste", "Favoritliste")</h5> 1004 <p class="desc"> 1005 @Translate(favoriteListPrefix + "Tilføj eller fjern markering.", "Tilføj eller fjern markering.") 1006 </p> 1007 <template v-for="favoriteList in favoriteLists"> 1008 <div class="form-check"> 1009 <input type="checkbox" :id="'fav-' + favoriteList.id" :value="favoriteList.id" :checked="isItemAddedToThisList(favoriteList)" v-on:change="toggleItem($event, favoriteList.id)" class="form-check-input" /> 1010 <label :for="'fav-' + favoriteList.id" class="form-check-label"> 1011 {{favoriteList.name}} 1012 </label> 1013 </div> 1014 </template> 1015 <div class="form-check"> 1016 <input type="checkbox" id="addNewListCheckbox" v-model="addNewList" class="form-check-input" /> 1017 <label for="addNewListCheckbox" class="form-check-label"> 1018 @Translate(favoriteListPrefix + "Ny favoritliste", "Ny favoritliste") 1019 </label> 1020 </div> 1021 <div v-if="addNewList" class="input-group input-group-sm"> 1022 <input type="text" id="addNewListNameInput" v-model="addNewListNameInput" class="form-control new-list-name-input" v-on:keyup.enter="saveAsNewList" /> 1023 <div class="input-group-append"> 1024 <button v-on:click="saveAsNewList" class="btn btn-dark">@Translate(favoriteListPrefix + "Gem", "Gem")</button> 1025 </div> 1026 </div> 1027 </div> 1028 </div> 1029 </script> 1030 <script type="text/x-template" id="favorite-item-template"> 1031 <div class="basic_favoriteitem" v-if="loaded"> 1032 <button class="btn btn-light btn-icon icon-only" title="@Translate("AddFavorite", "Tilføj favorit")" v-on:click="toggleFavoriteList($event)"> 1033 <template v-if="showFavoriteIcon"> 1034 <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> 1035 @*<svg> 1036 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#star"></use> 1037 </svg>*@ 1038 <span class="pdp-only">@Translate("FavoriteAdded", "Favorit")</span> 1039 </template> 1040 <template v-else> 1041 <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> 1042 @*<svg> 1043 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#star-stroke"></use> 1044 </svg>*@ 1045 <span class="pdp-only">@Translate("AddFavorite", "Tilføj favorit")</span> 1046 </template> 1047 </button> 1048 </div> 1049 </script> 1050 @using Bolind.Web.CustomCode.CDN 1051 @using Dynamicweb.Frontend 1052 <script type="text/x-template" id="instant-search-template"> 1053 <form v-bind:class="baseClass" action="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")" v-autoClose="closeFoldOut"> 1054 <div class="basic_instantsearch"> 1055 <label for="searchquery" class="sr-only">@Translate(centerHeaderPrefix + "Search products", "Hvad søger du?")</label> 1056 <input type="search" 1057 placeholder="@Translate(centerHeaderPrefix + "Search products", "Hvad søger du?")" 1058 id="searchquery" 1059 name="searchquery" 1060 autocomplete="off" 1061 v-on:input="inputChanged" 1062 v-on:focus="foldActive = 'active'"> 1063 <button type="submit"> 1064 <span class="sr-only">@Translate(centerHeaderPrefix + "Search", "Søg")</span> 1065 <svg> 1066 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/Files/dist/icons/icons.svg#search"></use> 1067 </svg> 1068 </button> 1069 <div class="fold-out" v-bind:class="{ active: foldActive }"> 1070 <div class="products"> 1071 <template v-if="searchQuery == ''"> 1072 @Translate(centerHeaderPrefix + "Type something", "Indtast for at søge") 1073 </template> 1074 <template v-else-if="queryLoading"> 1075 <div class="basic_listview-loading"> 1076 <span class="spinner-xl-default"></span> 1077 </div> 1078 </template> 1079 <template v-else-if="productList == null"> 1080 @Translate(centerHeaderPrefix + "Empty search...", "Der blev ikke fundet varer...") 1081 </template> 1082 <table v-else class="table table-sm table-border-bottom"> 1083 <tbody> 1084 <tr v-for="product in productList"> 1085 <td class="thumb text-center"> 1086 <a :href="getProductUrl(product)"> 1087 <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')" /> 1088 </a> 1089 </td> 1090 <td> 1091 <a :href="getProductUrl(product)"> 1092 {{product.Name}} <small>{{product.Description2}} {{product.Description3}}</small> 1093 </a> 1094 </td> 1095 <td class="text-right"> 1096 <small>{{product.Number}}</small> 1097 </td> 1098 </tr> 1099 </tbody> 1100 </table> 1101 </div> 1102 <div v-if="searchQuery != '' && productList != null" class="actions"> 1103 <a :href="'@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("searchresult")?searchquery=' + searchQuery">@Translate(centerHeaderPrefix + "See all products", "Se alle varer")</a> 1104 </div> 1105 </div> 1106 </div> 1107 </form> 1108 </script> 1109 <script type="text/x-template" id="pagination-template"> 1110 @{ 1111 string paginationPrefix = "Pagination "; 1112 } 1113 <nav aria-label="@Translate(paginationPrefix + "Produktliste pagination", "Produktliste pagination")"> 1114 <ul class="pagination"> 1115 <li :class="['page-item', currentPage == 1 ? 'disabled' : '' ]"> 1116 <a class="page-link" v-on:click="togglePrevPage()" aria-label="@Translate(paginationPrefix + "Previous Page", "Previous Page")" v-bind:aria-disabled="currentPage > 1 ? 'true' : null"> 1117 <svg> 1118 <use xmlns:xlink="http://www.w3.org/1999/xlink" 1119 xlink:href="/files/dist/icons/icons.svg#chevron-left"> 1120 </use> 1121 </svg> 1122 </a> 1123 </li> 1124 <template v-for="n in totalPages" v-if="showPage(n)"> 1125 <li :key="n" :class="(n == currentPage ? 'page-item active' : 'page-item')"> 1126 <a v-on:click="togglePage(n)" v-bind:aria-current="(n == currentPage ? 'aria-page' : '')" class="page-link"> 1127 {{n}} 1128 </a> 1129 </li> 1130 </template> 1131 <li :class="'page-item' + (currentPage >= totalPages ? ' disabled' : '')"> 1132 <a v-on:click="toggleNextPage()" aria-label="@Translate(paginationPrefix + "Next Page", "Next Page")" class="page-link" v-bind:aria-disabled="totalPages > currentPage ? 'true' : null"> 1133 <svg class="icon-pagination"> 1134 <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/files/dist/icons/icons.svg#chevron-right"></use> 1135 </svg> 1136 </a> 1137 </li> 1138 </ul> 1139 </nav> 1140 </script> 1141 1142 <script> 1143 var messages = { 1144 required: '@Translate("messages_required", "This field is required")', 1145 email: ' @Translate("messages_email", "Enter email")', 1146 numeric: ' @Translate("messages_numeric", "Enter number")', 1147 checked: ' @Translate("messages_checked", "Please accept terms and conditions to shop")', 1148 max: '@Translate("messages_max", "This field contains to many characters")' 1149 }; 1150 </script> 1151 @if (System.Web.HttpContext.Current.Session[WebsiteService.ClearLocalStorageTag] != null) 1152 { 1153 System.Web.HttpContext.Current.Session.Remove(WebsiteService.ClearLocalStorageTag); 1154 <script> 1155 localStorage.clear(); 1156 console.log("localstorage cleared"); 1157 </script> 1158 } 1159 <script src="@Pageview.CdnWrapResources(NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/Files/dist/scripts/bundle.min.js"))" data-category-consent="cookie_cat_necessary"></script> 1160 <script> 1161 AppStart.VueProvider.init({ 1162 webApiUrl: '@System.Web.Configuration.WebConfigurationManager.AppSettings["WebApiProxyUrl"]', 1163 currencyCode: '@Pageview.Area.EcomCurrencyId', 1164 locale: '@Pageview.Area.Culture', 1165 currencyLeft: false, 1166 currencySpacing: true, 1167 currencySymbol: '@Pageview.Area.EcomCurrencyId', 1168 currencyDecimalSeparator: ',', 1169 currencyGroupSeparator: '.', 1170 currencyDecimalDigits: 2, 1171 dateFormatShort: '@Pageview.Area.Dateformat' 1172 }); 1173 </script> 1174 <script append="replace"></script> 1175 <script src="https://www.google.com/recaptcha/api.js" async defer></script> 1176 </body> 1177 </html>