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