Error executing template "Designs/Junget/_parsed/PageShopList.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_a0867ef618204c4a9810c61ce4983d7f.<>c__DisplayClass1_1.<Execute>b__2(Page p) in D:\Web\Junget\Website\Files\Templates\Designs\Junget\_parsed\PageShopList.parsed.cshtml:line 95
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at CompiledRazorTemplates.Dynamic.RazorEngine_a0867ef618204c4a9810c61ce4983d7f.Execute() in D:\Web\Junget\Website\Files\Templates\Designs\Junget\_parsed\PageShopList.parsed.cshtml:line 95
   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.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @{ 2 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 3 Layout = null; 4 string cultureName = GetGlobalValue("Global:Area.Culture.Name").Split('-')[0]; 5 6 List<int> myJungetPageList = new List<int>(); 7 8 myJungetPageList.Add(GetPageIdByNavigationTag("MyJungetPage")); 9 myJungetPageList.Add(GetPageIdByNavigationTag("MyJungetReorderPage")); 10 myJungetPageList.Add(GetPageIdByNavigationTag("MyJungetFavoritePage")); 11 myJungetPageList.Add(GetPageIdByNavigationTag("MyJungetOrderPage")); 12 myJungetPageList.Add(GetPageIdByNavigationTag("MyJungetDocumentPage")); 13 myJungetPageList.Add(GetPageIdByNavigationTag("MyJungetProfilePage")); 14 15 Dynamicweb.Security.UserManagement.User MainUserMain = Pageview.User?.CurrentSecondaryUser != null ? Pageview.User.CurrentSecondaryUser : Pageview.User; 16 17 string device = System.Web.HttpContext.Current.Request.UserAgent.Contains("iPhone;") ? "iphone" : "generic"; 18 Dynamicweb.Content.PageService pageService = new Dynamicweb.Content.PageService(); 19 bool isHome = Pageview.Page.ID.Equals(pageService.GetFirstActivePageForArea(Pageview.AreaID).ID); 20 21 int cartPageIDJs = GetPageIdByNavigationTag("cartpageid"); 22 int miniCartPageIDJs = GetPageIdByNavigationTag("minicartpageid"); 23 } 24 25 <!doctype html> 26 <html lang="@cultureName" class="no-js" data-device="@(device)" data-cartpage-id="@cartPageIDJs" data-minicartpage-id="@miniCartPageIDJs"> 27 <head> 28 29 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 30 31 @if (Dynamicweb.Context.Current.Request.Url.Host.Contains(".vjm.dk") || Dynamicweb.Context.Current.Request.Url.Host.Contains(".dynamicweb.dk") || Pageview.Area.Noindex || Pageview.Page.Noindex) 32 { 33 <meta name="robots" content="noindex,nofollow"> 34 } 35 36 <!-- Hreflang stuff--> 37 @{ 38 39 if (Pageview.Page.Item != null) 40 { 41 string productId = ""; 42 string productVariantId = ""; 43 bool isProductPage = false; 44 45 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["ProductId"])) 46 { 47 productId = Dynamicweb.Context.Current.Request.QueryString["ProductId"]; 48 isProductPage = true; 49 50 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["variantid"])) 51 { 52 productVariantId = Dynamicweb.Context.Current.Request.QueryString["variantid"]; 53 } 54 } 55 56 string groupId = ""; 57 58 if (Pageview.Page.Item["ShopCategoryNumber"] != null) 59 { 60 groupId = Pageview.Page.Item["ShopCategoryNumber"].ToString(); 61 } 62 63 if (!string.IsNullOrEmpty(groupId)) 64 { 65 66 var areas = new AreaService().GetAreas(); 67 68 foreach (Dynamicweb.Content.Area area in areas) 69 { 70 71 if (area.Active == true && area.ID != 7) 72 { 73 74 if (isProductPage) 75 { 76 var product = new Dynamicweb.Ecommerce.Products.ProductService().GetProductById(productId, productVariantId, area.EcomLanguageId); 77 78 if (product != null && product.Active == false) 79 { 80 continue; 81 } 82 else if (product != null && Dynamicweb.Core.Converter.ToBoolean(product.GetProductFieldValue("WebshopOK")) == false) 83 { 84 continue; 85 } 86 else if (product == null) 87 { 88 continue; 89 } 90 91 } 92 93 List<string> itemTypes = new List<string> { "PageShopList" }; 94 var pages = new Dynamicweb.Content.PageService().GetPagesForItems(itemTypes); 95 var _pages = pages.Where(p => p.AreaId != 7 && p.Active && p.AreaId == area.ID && p.AreaId != Pageview.AreaID && p.Item["ShopCategoryNumber"] != null && p.Item["ShopCategoryNumber"].ToString() == groupId).ToList(); 96 97 foreach (var page in _pages) 98 { 99 100 string initialUrl = "Default.aspx?ID=" + page.ID; 101 if (!string.IsNullOrEmpty(productId)) 102 { 103 initialUrl += "&ProductId=" + productId; 104 105 if (!string.IsNullOrEmpty(productVariantId)) 106 { 107 initialUrl += "&variantid=" + productVariantId; 108 } 109 } 110 111 string friendlyUrl = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(initialUrl, area.EcomLanguageId); 112 string fullUrl = "https://www.junget.com" + friendlyUrl; 113 string hrefLang = area.CultureInfo.Name.ToLower(); 114 115 <link rel="alternate" href="@fullUrl" hreflang=" @hrefLang"> 116 117 } 118 119 } 120 121 } 122 } 123 } 124 125 } 126 127 128 <!-- Preconnects --> 129 <link rel="preconnect" href="//fonts.googleapis.com"> 130 <link rel="preconnect" href="//ajax.googleapis.com"> 131 <link rel="preconnect" href="//www.googletagmanager.com"> 132 <link rel="preconnect" href="//www.google-analytics.com"> 133 <link rel="preconnect" href="//connect.facebook.net"> 134 <link rel="preconnect" href="//code.jquery.com"> 135 <link rel="preconnect" href="//sleeknotecustomerscripts.sleeknote.com"> 136 <link rel="preconnect" href="//script.hotjar.com"> 137 <link rel="preconnect" href="//googleads.g.doubleclick.net"> 138 <link rel="preconnect" href="//static.hotjar.com"> 139 <link rel="preconnect" href="//cdn.jsdelivr.net"> 140 <link rel="preconnect" href="//cdnjs.cloudflare.com"> 141 142 <!-- DNS Prefetches --> 143 <link rel="dns-prefetch" href="//fonts.googleapis.com"> 144 <link rel="dns-prefetch" href="//ajax.googleapis.com"> 145 <link rel="dns-prefetch" href="//www.googletagmanager.com"> 146 <link rel="dns-prefetch" href="//www.google-analytics.com"> 147 <link rel="dns-prefetch" href="//connect.facebook.net"> 148 <link rel="dns-prefetch" href="//code.jquery.com"> 149 <link rel="dns-prefetch" href="//sleeknotecustomerscripts.sleeknote.com"> 150 <link rel="dns-prefetch" href="//script.hotjar.com"> 151 <link rel="dns-prefetch" href="//googleads.g.doubleclick.net"> 152 <link rel="dns-prefetch" href="//static.hotjar.com"> 153 <link rel="dns-prefetch" href="//cdn.jsdelivr.net"> 154 <link rel="dns-prefetch" href="//cdnjs.cloudflare.com"> 155 156 @using Dynamicweb.Environment 157 @using Dynamicweb.Frontend 158 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 159 @{ 160 string shareTitle = !string.IsNullOrEmpty(GetString("Item.Page.ShareTitle")) ? GetString("Item.Page.ShareTitle") : GetString("Title"); 161 string shareDescription = !string.IsNullOrEmpty(GetString("Item.Page.ShareDescription")) ? GetString("Item.Page.ShareDescription") : GetString("Title"); 162 string shareImageFallback = GetString("Item.Area.ShareImageFallback"); 163 string shareImage = !string.IsNullOrEmpty(GetString("Item.Page.ShareImage")) ? GetString("Item.Page.ShareImage") : shareImageFallback; 164 string siteName = GetString("DwAreaName"); 165 string host = GetGlobalValue("Global:Request.Host"); 166 string url = GetGlobalValue("Global:Pageview.Url"); 167 string hrefLangDK = GetString("Item.HrefLangDanish"); 168 string hrefLangSE = GetString("Item.HrefLangSwedish"); 169 string hrefLangEN = GetString("Item.HrefLangEnglish"); 170 } 171 172 <meta charset="utf-8"> 173 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 174 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0"> 175 <meta name="google-site-verification" content="n77-ytr_RM6UV48q1F5VCP11YF5MdlnKwq5lh_oFDZ8"> 176 <meta name="google-site-verification" content="94f3Qz-mWmNW0pSEEsreruBZn9CP_kqRfHCjeQXou_M"> 177 <meta name="google-site-verification" content="eufOyeWZ1auXem3wqbJ1DfrZi6TWscGyACljlE9DSAQ"> 178 <link rel="icon" type="image/x-icon" href="/webroot/images/favicon.ico"> 179 180 @* Disable robots/indexing for nozebrahosting domains *@ 181 @if (host.Contains("nozebrahosting") || host.Contains("staging")) 182 { 183 <meta name="robots" content="noindex, nofollow"> 184 } 185 186 @* Open Graph Tags (Facebook, Instagram and other services using OG) *@ 187 <meta property="og:title" content="@shareTitle"> 188 <meta property="og:site_name" content="@siteName"> 189 <meta property="og:url" content="https://@host@url"> 190 <meta property="og:description" content="@shareDescription"> 191 @if (!string.IsNullOrEmpty(shareImage)) 192 { 193 <meta property="og:image" content="http://@host@shareImage"> 194 } 195 <meta property="og:type" content="website"> 196 @if (!string.IsNullOrWhiteSpace(hrefLangDK)) 197 { 198 <link rel="alternate" hreflang="da-dk" href="@hrefLangDK"> 199 } 200 @if (!string.IsNullOrWhiteSpace(hrefLangSE)) 201 { 202 <link rel="alternate" hreflang="sv-se" href="@hrefLangSE"> 203 } 204 @if (!string.IsNullOrWhiteSpace(hrefLangEN)) 205 { 206 <link rel="alternate" hreflang="en" href="@hrefLangEN"> 207 } 208 209 @{ 210 IRequest request = Dynamicweb.Context.Current.Request; 211 string[] allKeys = request.QueryString.AllKeys; 212 bool isProductView = !string.IsNullOrEmpty(request.GetString("ProductId")); 213 PageView pageview = PageView.Current(); 214 string[] itemList = { "PageShopList", "PageProduct" }; 215 // Render canonical snippet from product view 216 if (isProductView) 217 { 218 @RenderSnippet("canonical") 219 } 220 // Render canonical explicit if url contains "LoginAction" param (hotfix) 221 else if (allKeys.Length > 1 && (pageview.Item == null || pageview.Item != null && !itemList.Contains(pageview.Item.SystemName) || pageview.Page.Level <= 3)) 222 { 223 <link rel="canonical" href="https://@host@url"> 224 } 225 } 226 227 @* NOTE: DW will insert system meta tags etc after the title tag *@ 228 @* The title tag will also be replaced with the system value *@ 229 @{ 230 231 string title = GetString("Title"); 232 //check for PageNum query parameter, if greater than 1, add page number to title 233 if ( Dynamicweb.Context.Current.Request.QueryString["PageNum"] != null && Dynamicweb.Context.Current.Request.QueryString["PageNum"] != "1") 234 { 235 title = title + " - " + Translate("side") + " " + Dynamicweb.Context.Current.Request.QueryString["PageNum"]; 236 } 237 this.Model.Template.SetTag("Title",title); 238 } 239 240 <title>@GetValue("Title")</title> 241 @GetValue("MetaTags") 242 @GetValue("CopyRightNotice") 243 244 245 @*<script src="https://use.fontawesome.com/92fdb7cbaa.js"></script>*@ 246 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous"> 247 248 @{ 249 var masterStyles = VestjyskMarketing.Helpers.Utilities.CacheBuster("/webroot/dist/main.css"); 250 } 251 <!-- Project styles --> 252 <link href="@masterStyles" rel="stylesheet"> 253 <link href="/webroot/css-static/print.css" rel="stylesheet" media="print"> 254 <link href="/webroot/css-static/swiper-bundle.css" rel="stylesheet"> 255 <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css"> 256 <script> 257 window.dataLayer = window.dataLayer || []; 258 function gtag() { dataLayer.push(arguments); } 259 // Set default consent to 'denied' as a placeholder 260 // Determine actual values based on customer's own requirements 261 gtag('consent', 'default', { 262 'ad_storage': 'denied', 263 'ad_user_data': 'denied', 264 'ad_personalization': 'denied', 265 'analytics_storage': 'denied', 266 'wait_for_update': 500 267 }); 268 gtag('set', 'ads_data_redaction', true); 269 </script> 270 271 272 <script id="CookieConsent" src="https://policy.app.cookieinformation.com/uc.js" data-culture="@cultureName.ToUpper()" data-gcm-version="2.0" type="text/javascript"></script> 273 274 <!--[if lt IE 9]> 275 <script src="/webroot/js-static/html5shiv.min.js"></script> 276 <![endif]--> 277 <!-- Avoiding the FOUC v3.0 (.no-js => .js) --> 278 <script>(function (H) { H.className = H.className.replace(/\bno-js\b/, 'js') })(document.documentElement)</script> 279 280 <!-- Polyfill modern images --> 281 <script> 282 // Picture element HTML5 shiv 283 document.createElement("picture"); 284 </script> 285 <script src="/webroot/js-static/picturefill.min.js" async=""></script> 286 @Pageview.Area.Item["HeaderScripts"] 287 @GetValue("Stylesheets") 288 @GetValue("Javascripts") 289 </head> 290 291 292 293 <body class='@(MainUserMain != null ? "signed-in" : "") @(MainUserMain != null && MainUserMain.HasGroup(24) ? "salesman " : string.Empty)@(isHome ? "home" : string.Empty )' data-device="@(device)"> 294 <span class="splash-screen">&nbsp;</span> 295 @* Inserting scripts from language node *@ 296 @Pageview.Area.Item["Scripts"] 297 <!--[if lte IE 9]> 298 <div class="alert alert-warning mb-0" role="alert"> 299 <table> 300 <tbody> 301 <tr> 302 <td class="align-middle"> 303 <span class="display-4 icon icon-alert"></span> 304 </td> 305 <td class="align-middle lead pl-4">@Pageview.Area.Item["BrowseHappyText"]</td> 306 </tr> 307 </tbody> 308 </table> 309 </div> 310 <![endif]--> 311 312 <div class="page-container bg-lighter-gray"> 313 @using Dynamicweb.Security.UserManagement 314 @using System.Web; 315 @using Dynamicweb.Frontend.Navigation 316 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 317 @{ 318 string searchPage = Pageview.Area.Item["SearchPage"].ToString(); 319 string sharpeningLink = Pageview.Area.Item["HeaderSharpeningLink"] != null ? Pageview.Area.Item["HeaderSharpeningLink"].ToString() : ""; 320 string serviceLink = Pageview.Area.Item["ServiceLink"] != null ? Pageview.Area.Item["ServiceLink"].ToString() : ""; 321 string minicartLink = Pageview.Area.Item["MinicartLink"] != null ? Pageview.Area.Item["MinicartLink"].ToString() : ""; 322 string mycartLink = GetString("Item.Area.MycartLink"); 323 string salesmanCartLink = GetString("Item.Area.SalesmanCart"); 324 string loginLink = Pageview.Area.Item["LoginLink"] != null ? Pageview.Area.Item["LoginLink"].ToString() : ""; 325 string pageId = GetGlobalValue("Global:Page.ID"); 326 string cartQty = GetString("Ecom:Order.OrderLines.TotalProductQuantity"); 327 string rootCultureName = GetGlobalValue("Global:Area.Culture.Name"); 328 string linkMainRoot = Pageview.AreaID == 1 ? "/" : "/" + rootCultureName; 329 User mainUserHeader = Pageview.User?.CurrentSecondaryUser != null ? Pageview.User.CurrentSecondaryUser : Pageview.User; 330 User secondaryUserHeader = Pageview.User?.CurrentSecondaryUser != null ? Pageview.User : null; 331 string myProfilePageUrl = string.Format("/Default.aspx?ID={0}", GetPageIdByNavigationTag("MyJungetPage")); 332 bool showCartCounter = true; 333 if (mainUserHeader != null && mainUserHeader.HasGroup(24)) 334 { 335 minicartLink = Pageview.Area.Item["SalesmanMiniCart"] != null ? Pageview.Area.Item["SalesmanMiniCart"].ToString() : ""; 336 showCartCounter = false; 337 } 338 339 int myPageFormId = GetPageIdByNavigationTag("MyJungetPage"); 340 341 string userName = ""; 342 if (Pageview.User != null) 343 { 344 if (Pageview.User.CurrentSecondaryUser != null) 345 { 346 userName = Pageview.User.CurrentSecondaryUser.Name; 347 } 348 else if (Pageview.User != null) 349 { 350 userName = Pageview.User.Name; 351 } 352 353 354 //hack for EUR on Danish. SIte. Go to english basket 355 if (Pageview.User.Currency == "EUR" && Pageview.AreaID == 1) 356 { 357 var areaEnglish = Dynamicweb.Content.AreaService.Repository.GetArea(7); 358 mycartLink = areaEnglish.Item["MycartLink"].ToString(); 359 } 360 361 } 362 363 string linkMyPage = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl("Default.aspx?ID=" + myPageFormId); 364 } 365 366 <header class="header fixed-top js-scroll-header js-header"> 367 @using Dynamicweb.Security.UserManagement 368 @using System.Web; 369 @using Dynamicweb.Frontend.Navigation 370 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 371 372 @{ 373 string globalMessage = GetString("Item.Area.GlobalMessage"); 374 bool globalMessageActive = GetBoolean("Item.Area.GlobalMessageActive"); 375 string globalMessageMD5 = Website.Helpers.EncryptionHelper.CreateMD5(globalMessage).ToString(); 376 377 } 378 379 @if (!string.IsNullOrEmpty(globalMessage) && globalMessageActive) 380 { 381 <div id="generalMessage" class="header-message" role="alert" style="display: none;"> 382 <input id="headerMessageMD5" type="hidden" value="@globalMessageMD5"> 383 @globalMessage 384 <a class="header-message-close" onclick="App.HeaderMessage.closeMessage()"><i class="icon icon-close"></i></a> 385 </div> 386 } 387 388 <div class="header__content bg-light-gray"> 389 <div class="container-fluid"> 390 <nav class="navbar navbar-expand-md navbar-toggleable"> 391 <div class="navigation__tool navbar-collapse collapse"> 392 <div> 393 <a class="header__logo-link" href="@linkMainRoot"> 394 <img src="/webroot/images/junget-logo-2024.svg" width="200" height="100%" class="header__logo" alt="Junget logo"> 395 </a> 396 </div> 397 <div class="dropdown ml-auto"> 398 <button class="btn btn-link dropdown-toggle p-0" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><img src="/webroot/images/@(rootCultureName).svg" width="28" height="20" alt="Junget"></button> 399 <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> 400 <a class="dropdown-item" href="/"><img width="28" height="20" src="/webroot/images/da-dk.svg" alt="Junget - Dansk"></a> 401 <a class="dropdown-item" href="/en-gb"><img width="28" height="20" src="/webroot/images/en-gb.svg" alt="Junget - English"></a> 402 <a class="dropdown-item" href="/nb-no"><img width="28" height="20" src="/webroot/images/nb-NO.svg" alt="Junget - Norsk"></a> 403 </div> 404 </div> 405 <ul class="navbar-nav"> 406 @if (!string.IsNullOrWhiteSpace(sharpeningLink)) 407 { 408 <li class="nav-item"> 409 <button type="button" class="btn-primary btn btn-sm js-aside-btn ml-3" data-view="sharpening">@Translate("HeaderSharpeningButton", "BESTIL SLIBEAFHENTNING")</button> 410 </li> 411 } 412 <li class="nav-item"> 413 @{ 414 // If user is an ordinary user and not an account manager 415 if (Pageview.User != null) 416 { 417 418 if (pageId == "1") 419 { 420 pageId = "/"; 421 } 422 423 <a class="btn btn-primary btn-sm ml-3" href="@(myProfilePageUrl)">@Translate("HeaderProfileButton", "MIT JUNGET")</a> 424 <a class="btn btn-secondary btn-sm ml-2" href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId">@Translate("HeaderLogoutButton", "LOG UD")</a> 425 } 426 else 427 { 428 <button type="button" class="btn btn-secondary btn-sm js-aside-btn ml-3" data-view="login">@Translate("HeaderLoginButton", "LOGIN")</button> 429 } 430 } 431 </li> 432 <li class="nav-item"> 433 <button type="button" class="btn btn-secondary btn-sm js-aside-btn ml-3" data-view="contacts">@Translate("HeaderContactButton", "KONTAKT")</button> 434 </li> 435 </ul> 436 </div> 437 </nav> 438 </div> 439 440 <!-- Desktop menu --> 441 <nav class="navbar navbar--bottom navbar-toggleable pt-3"> 442 <div class="container-fluid d-flex justify-content-between align-items-end flex-row"> 443 <a class="header__logo-link d-lg-none" href="@linkMainRoot"> 444 <img src="/webroot/images/junget-logo-2024.svg" class="header__logo" alt="Junget logo"> 445 </a> 446 <ul class="navbar-nav navbar-nav--desktop justify-content-end align-items-center primary-nav flex-row"> 447 @{ 448 var navigationSettings = new NavigationSettings() 449 { 450 StartLevel = 1, 451 StopLevel = 3, 452 ExpandMode = ExpandMode.All 453 }; 454 var navigationTemplate = "../Navigation/Header.cshtml"; 455 } 456 457 @Navigation.RenderNavigation(navigationTemplate, navigationSettings) 458 459 <li class="nav-item ml-4"> 460 <a class="d-inline-flex nav-item__link nav-item__link--search js-aside-btn p-0" href="#" data-view="search"><span class="icon icon-search mr-3"></span>@Translate("HeaderSearch", "SØG")</a> 461 </li> 462 <li class="nav-item"> 463 @if (showCartCounter) 464 { 465 <div class='nav-item__quantity js-product-cart-quantity @(!string.IsNullOrWhiteSpace(cartQty) ? "" : "is-empty" )'>@cartQty</div> 466 } 467 <a class="d-inline-flex nav-item__link nav-item__link--cart js-aside-btn p-0" href="#" data-view="cart"><span class="icon icon-cart"></span></a> 468 </li> 469 470 471 </ul> 472 473 <!-- Tablet/Mobile menu --> 474 <ul class="navbar-nav navbar-nav--mobile justify-content-center align-items-center flex-row"> 475 <li class="nav-item"> 476 <a class="d-inline-flex nav-item__link nav-item__link--home p-0" href="@linkMainRoot"><div class="btn btn-icon btn-icon--round btn-primary"><span class="icon icon-home-lg-alt"></span></div></a> 477 </li> 478 <li class="nav-item"> 479 <a class="d-inline-flex nav-item__link nav-item__link--search js-aside-btn p-0" href="#" data-view="search"><div class="btn btn-icon btn-icon--round btn-primary"><span class="icon icon-search"></span></div></a> 480 </li> 481 <li class="nav-item"> 482 <a class="d-inline-flex nav-item__link nav-item__link--phone-alt js-aside-btn p-0" href="#" data-view="phone" data-phone='@(Translate("tel:+45 89 36 55 00"))'><div class="btn btn-icon btn-icon--round btn-primary"><span class="icon icon-phone-alt"></span></div></a> 483 </li> 484 @if (string.IsNullOrWhiteSpace(GetGlobalValue("Global:Extranet.Email"))) 485 { 486 <li class="nav-item"> 487 <a class="d-inline-flex nav-item__link nav-item__link--search js-aside-btn p-0" href="#" data-view="login"> 488 <div class="btn btn-icon btn-icon--round btn-primary"> 489 @*<span class="icon icon-lock"></span>*@ 490 <span class="icon icon-user"></span> 491 </div> 492 </a> 493 </li> 494 } 495 else 496 { 497 <li class="nav-item"> 498 <a class="d-inline-flex nav-item__link nav-item__link--search p-0" href="@(myProfilePageUrl)"> 499 <div class="btn btn-icon btn-icon--round btn-primary"> 500 @*<span class="icon icon-lock-open"></span>*@ 501 <span class="icon icon-user"></span> 502 </div> 503 </a> 504 @* 505 <a class="d-inline-flex nav-item__link nav-item__link--search p-0" href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId"> 506 <div class="btn btn-icon btn-icon--round btn-primary"> 507 <span class="icon icon-lock-open"></span> 508 <span class="icon icon-user"></span> 509 </div> 510 </a> 511 *@ 512 </li> 513 } 514 @* 515 <li class="nav-item"> 516 <a class="d-inline-flex nav-item__link nav-item__link--cart js-aside-btn p-0" href="#" data-view="contacts"><div class="btn btn-icon btn-icon--round btn-primary"><span class="icon icon-user"></span></div></a> 517 </li> 518 *@ 519 <li class="nav-item"> 520 @if (showCartCounter) 521 { 522 <div class='nav-item__quantity js-product-cart-quantity @(!string.IsNullOrWhiteSpace(cartQty) ? "" : "is-empty" )'>@cartQty</div> 523 } 524 <a class="d-inline-flex nav-item__link nav-item__link--cart js-aside-btn p-0" href="#" data-view="cart"><span class="icon icon-cart"></span></a> 525 </li> 526 </ul> 527 </div> 528 </nav> 529 </div> 530 531 @if (mainUserHeader != null && mainUserHeader.HasGroup(24) && myJungetPageList.Contains(Pageview.ID)) 532 { 533 <div class="curve curve-secondary d-none d-md-block"> 534 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewbox="0 0 1440 40" preserveaspectratio="none"> 535 <path d="M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 536 <path d="M0,0h1440v40H0V0z M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 537 </svg> 538 </div> 539 <div class="curve curve-light-gray d-block d-md-none"> 540 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewbox="0 0 1440 40" preserveaspectratio="none"> 541 <path d="M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 542 <path d="M0,0h1440v40H0V0z M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 543 </svg> 544 </div> 545 546 <div class="salesman-bar"> 547 <div class="container"> 548 <div class="row align-items-center py-3"> 549 <div class="col-sm-3 col-12"> 550 S&aelig;lger:<br><strong> 551 @userName 552 </strong> 553 </div> 554 <div class="col-sm-5 col-12"> 555 <form action="@linkMyPage" class="form-inline" method="get"> 556 <div class="form-group has-search"> 557 <div id="bloodhound"> 558 <span class="icon icon-search form-control-feedback"></span> 559 <input type="hidden" name="DWExtranetSecondaryUserSelector" id="DWExtranetSecondaryUserSelector" value=""> 560 <input type="text" class="form-control typeahead" data-provide="typeahead" autocomplete="off" placeholder="Indtast kundenavn eller -nummer..."> 561 <button type="submit" class="btn btn-primary my-junget__login-btn">@Translate("Log ind")</button> 562 </div> 563 </div> 564 </form> 565 </div> 566 <div class="col-sm-4 col-12 text-right"> 567 @{ 568 if (secondaryUserHeader != null) 569 { 570 <text>Kunde:<br><strong><a href="/da-dk/mit-junget" style="color: #fff;">@secondaryUserHeader.Company (@secondaryUserHeader.CustomerNumber)</a></strong></text> 571 } 572 } 573 </div> 574 </div> 575 </div> 576 </div> 577 } 578 else 579 { 580 <div class="curve curve-light-gray"> 581 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewbox="0 0 1440 40" preserveaspectratio="none"> 582 <path d="M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 583 <path d="M0,0h1440v40H0V0z M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 584 </svg> 585 </div> 586 } 587 </header> 588 589 <div class="aside-panel js-aside js-view-phone"> 590 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="phone"></div> 591 <div class="side-modal is-phone-panel aside-panel__content flex-column js-view-phone"> 592 <div class="container p-0"> 593 <button type="button" class="btn btn-link btn-close js-aside-close-btn float-right" data-view="phone">@Translate("PanelCloseSearchButtonText", "LUK") <span class="icon icon-close ml-2"></span></button> 594 </div> 595 <div class="aside-panel__container container p-0"> 596 <div class="aside-panel__scroll-content"> 597 <ul class="phone-panel"> 598 <li class="phone-call"> 599 <a href='@(Translate("CallNowPhoneNumber","tel:+45 89 36 55 00"))'> 600 @(Translate("Ring nu")) 601 </a> 602 </li> 603 <li class="phone-call"> 604 <a class="js-aside-btn" href="#" data-view="contacts"> 605 @(Translate("Find medarbejder")) 606 </a> 607 </li> 608 </ul> 609 </div> 610 </div> 611 </div> 612 </div> 613 614 @if (!string.IsNullOrWhiteSpace(searchPage)) 615 { 616 <div class="aside-panel js-aside js-view-search"> 617 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="search"></div> 618 <div class="side-modal is-search-panel aside-panel__content flex-column js-view-search"> 619 <div class="container p-0"> 620 <button type="button" class="btn btn-link btn-close js-aside-close-btn float-right" data-view="search">@Translate("PanelCloseSearchButtonText", "LUK") <span class="icon icon-close ml-2"></span></button> 621 </div> 622 <div class="aside-panel__container container p-0"> 623 <div class="aside-panel__scroll-content"> 624 <form class="search-bar js-search-form mb-6" action="/@searchPage"> 625 <input class="search-bar__input js-search-input" name="q" type="text" placeholder='@Translate("HeaderSearch", "SØG")'> 626 <button class="search-bar__button" type="submit" data-icon="search"></button> 627 </form> 628 <div class="loading js-search-loading text-center"> 629 <svg version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="40px" height="40px" viewbox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve"> 630 <path fill="#000" d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z"> 631 <animatetransform attributetype="xml" attributename="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.6s" repeatcount="indefinite"></animatetransform> 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 </path> 648 </svg> 649 </div> 650 <div class="row no-gutters search__result js-search-result"></div> 651 </div> 652 </div> 653 </div> 654 </div> 655 } 656 657 @if (!string.IsNullOrWhiteSpace(sharpeningLink)) 658 { 659 <section class="aside-panel js-aside js-view-sharpening"> 660 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="sharpening"></div> 661 <div class="side-modal aside-panel__content flex-column js-view-sharpening"> 662 <button type="button" class="btn btn-link btn-close js-aside-close-btn" data-view="sharpening">@Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span></button> 663 <div class="container-fluid aside-panel__container"> 664 <div class="aside-panel__scroll-content"> 665 <div class="h2 mb-6">@Translate("SharpeningHeadline")</div> 666 <h5 class="h5 mb-7 text-primary">@Translate("SharpeningSubheader")</h5> 667 @if (String.IsNullOrEmpty(System.Web.HttpContext.Current.Request.QueryString["pid"])) 668 { 669 @RenderParagraphContent(Int32.Parse(sharpeningLink.Split('#')[1])) 670 } 671 else 672 { 673 <div>Formular er sendt afsted</div> 674 } 675 </div> 676 </div> 677 </div> 678 </section> 679 } 680 681 @if (!string.IsNullOrWhiteSpace(serviceLink)) 682 { 683 <section class="aside-panel js-aside js-view-service"> 684 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="service"></div> 685 <div class="side-modal aside-panel__content flex-column js-view-service"> 686 <button type="button" class="btn btn-link btn-close js-aside-close-btn" data-view="service">@Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span></button> 687 <div class="container-fluid aside-panel__container"> 688 <div class="aside-panel__scroll-content"> 689 <div class="h2 mb-6">@Translate("ServiceHeadline")</div> 690 <h5 class="h5 mb-7 text-primary">@Translate("ServiceSubheader")</h5> 691 @if (String.IsNullOrEmpty(System.Web.HttpContext.Current.Request.QueryString["pid"])) 692 { 693 @RenderParagraphContent(Int32.Parse(serviceLink.Split('#')[1])) 694 } 695 else 696 { 697 <div>Formular er sendt afsted</div> 698 } 699 </div> 700 </div> 701 </div> 702 </section> 703 } 704 705 @if (!string.IsNullOrWhiteSpace(loginLink)) 706 { 707 <section class="aside-panel js-aside js-view-login"> 708 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="login"></div> 709 <div class="side-modal aside-panel__content flex-column js-view-login"> 710 <button type="button" class="btn btn-link btn-close js-aside-close-btn" data-view="login">@Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span></button> 711 <div class="container-fluid aside-panel__container"> 712 <div class="aside-panel__scroll-content"> 713 @if (Dynamicweb.Context.Current.Request.Form["LoginAction"] != "Recovery") 714 { 715 @RenderParagraphContent(Int32.Parse(loginLink.Split('#')[1])) 716 } 717 </div> 718 </div> 719 </div> 720 </section> 721 } 722 723 @if (!string.IsNullOrWhiteSpace(minicartLink)) 724 { 725 <div class="aside-panel js-aside js-view-cart"> 726 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="cart"></div> 727 <div class="side-modal aside-panel__content flex-column js-view-cart"> 728 <button type="button" class="btn btn-link btn-close js-aside-close-btn" data-view="cart">@Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span></button> 729 <div class="container-fluid aside-panel__container"> 730 <div class="aside-panel__scroll-content js-product-cart"> 731 @RenderParagraphContent(Int32.Parse(minicartLink.Split('#')[1])) 732 <div class="my-6 text-right"> 733 <a href="@((mainUserHeader != null && mainUserHeader.HasGroup(24)) ? salesmanCartLink : mycartLink)" class="btn-lg btn-success d-md-inline-block ml-auto px-9">@Translate("GoToCheckoutButton", "GÅ TIL KASSEN")</a> 734 </div> 735 </div> 736 </div> 737 </div> 738 </div> 739 } 740 <div class="view"> 741 @using Dynamicweb.Frontend.Devices 742 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 743 744 745 746 @{ 747 var topPage = Dynamicweb.Frontend.PageView.GetPageviewByPageID(Int32.Parse(GetString("DwTopPageID"))); 748 string textWhite = GetBoolean("Item.TextColorWhite") ? "text-white" : ""; 749 bool hasBackgroundColor = GetBoolean("Item.BackgroundColorWhite"); 750 string headline = GetString("Item.Name"); 751 string spotHeadline = GetString("Item.SpotHeadline"); 752 string spotImage = GetString("Item.SpotImage"); 753 string spotImageAlt = GetString("Item.SpotImageAlt"); 754 string subheader = GetString("Item.Subheader"); 755 string topImage = !string.IsNullOrWhiteSpace(GetString("Item.Image")) ? GetString("Item.Image").Replace(" ", "%20") : topPage.Page.Item["TopImage"].ToString().Replace(" ", "%20"); 756 string filterTag = GetString("Item.Category") != "empty" ? GetString("Item.Category") : ""; 757 string imageAlt = !string.IsNullOrWhiteSpace(GetString("Item.ImageAlt")) ? GetString("Item.ImageAlt") : headline; 758 bool hasBreadcrumb = !GetBoolean("Item.HideBreakcrumbs"); 759 bool isTopPageShop = topPage.Equals(Pageview); 760 bool hideButton = GetBoolean("Item.HideButton"); 761 } 762 763 @if ((!string.IsNullOrWhiteSpace(topImage) || !string.IsNullOrWhiteSpace(headline) || !string.IsNullOrWhiteSpace(subheader))) 764 { 765 <div class="hero js-hero shop-hero"> 766 @if (!string.IsNullOrWhiteSpace(topImage)) 767 { 768 <div class="hero__image-holder"> 769 <picture class="hero__image image-ratio--hero-small"> 770 <!--[if IE 9]><video style="display: none;"><![endif]--> 771 <source srcset="/Admin/Public/GetImage.ashx?Image=@topImage&width=1440&amp;height=359&amp;compression=70&crop=0&amp;format=webP, /Admin/Public/GetImage.ashx?Image=@topImage&width=1440&amp;height=359&amp;compression=70&crop=0&amp;format=webP 2x" media="(min-width: 992px)"> 772 <source srcset="/Admin/Public/GetImage.ashx?Image=@topImage&width=768&amp;height=359&amp;compression=70&crop=0&amp;format=webP, /Admin/Public/GetImage.ashx?Image=@topImage&width=768&amp;height=359&amp;compression=70&crop=0&amp;format=webP 2x" media="(min-width: 576px)"> 773 <!--[if IE 9]></video><![endif]--> 774 <img class="image-ratio__image" src="/Admin/Public/GetImage.ashx?Image=@topImage&width=375&amp;height=250&amp;compression=70&crop=0&amp;format=webP" srcset="/Admin/Public/GetImage.ashx?Image=@topImage&width=375&amp;height=250&amp;compression=70&crop=0&amp;format=webP 2x" alt="@imageAlt"> 775 </picture> 776 777 <div class="hero__curve-holder"> 778 <div class="curve curve-bcg-lighter-gray"> 779 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewbox="0 0 1440 40" preserveaspectratio="none"> 780 <path d="M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 781 <path d="M0,0h1440v40H0V0z M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 782 </svg> 783 </div> 784 </div> 785 </div> 786 } 787 788 @if (string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["ProductId"])) 789 { 790 <div class="hero__text-holder @textWhite"> 791 <div class="container-fluid"> 792 @if (!string.IsNullOrWhiteSpace(headline)) 793 { 794 <h1 class="hero__title">@headline</h1> 795 } 796 @if (!string.IsNullOrWhiteSpace(subheader)) 797 { 798 <h2 class="hero__subtitle">@subheader</h2> 799 } 800 </div> 801 </div> 802 } 803 </div> 804 } 805 806 <div class='page-content shop-page @(hasBackgroundColor ? "bg-white" : "pb-0")@(isTopPageShop ? " shop-page-top" : string.Empty)'> 807 @if (!GetBoolean("Item.HideBreakcrumbs")) 808 { 809 <div class="@if (Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop) { <text>pt-9</text> }"> 810 @GetValue("DwNavigation(breadcrumb)") 811 </div> 812 <div id="content">@GetValue("DwContent(content)")</div> 813 } 814 815 @if (string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["ProductId"])) 816 { 817 <section class='grinding container-fluid @(hasBreadcrumb ? "" : "pt-9")@(isTopPageShop ? " top-shop" : string.Empty)'> 818 <div class="row no-gutters"> 819 <div class='col-12 col-md-7 col-lg-8 grinding-content left-content @(hideButton ? "is-active" : "js-toggle-class")' data-trigger-once="true"> 820 <div id="left-content">@GetValue("DwContent(leftcontent)")</div> 821 822 @if (!hideButton) 823 { 824 <button type="button" class="show-more-btn btn btn-outline-primary text-uppercase"> 825 <span class="text-more">@Translate("ecom-read-more", "Læs mere")</span> 826 <span class="text-less d-none">@Translate("ecom-read-less", "Minimer tekst")</span> 827 </button> 828 829 } 830 831 832 833 </div> 834 <div class="col-12 col-md-4 col-lg-3 ml-md-auto"> 835 <div id="right-content">@GetValue("DwContent(rightcontent)")</div> 836 </div> 837 </div> 838 </section> 839 } 840 841 @{ 842 var pageItem = Dynamicweb.Frontend.PageView.Current().Item; 843 844 Dynamicweb.Content.Page pageParent = Pageview.Page.Parent; 845 846 if (pageParent != null) 847 { 848 849 IEnumerable<Dynamicweb.Content.Page> categories = Dynamicweb.Services.Pages.GetPagesByParentID(pageParent.ID); 850 categories = categories != null && categories.Any() ? categories.Where(x => x.Item != null && (x.ItemType.Equals("ShopCategoryList") || x.ItemType.Equals("PageProductCategory") || x.ItemType.Equals("PageShopList"))) : categories; 851 852 if (categories != null && categories.Any()) 853 { 854 855 string categoriesClass = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["ProductId"]) ? " category-product-detail" : string.Empty; 856 857 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["ProductId"])) 858 { 859 Dynamicweb.Content.Page category = categories != null && categories.Any() ? categories.First(x => x.Equals(Pageview.Page)) : null; 860 861 if (category != null) 862 { 863 <section class="text d-md-none"> 864 <div class="container-fluid"> 865 <p class="h1 text-center text-primary mb-7">@category.MenuText</p> 866 </div> 867 </section> 868 } 869 } 870 871 <div class="quick-category-list__container swiper-container d-md-none"> 872 <div class="quick-category-list swiper-wrapper @(categoriesClass)"> 873 @foreach (Dynamicweb.Content.Page category in categories) 874 { 875 if (!category.Published) 876 { 877 continue; 878 } 879 string category_class = "quick-category-list__item swiper-slide"; 880 881 if (category.Equals(Pageview.Page)) 882 { 883 category_class += " active"; 884 } 885 886 <div class="@category_class"> 887 <a href="/Default.aspx?Id=@(category.ID)"> 888 <span>@category.MenuText</span> 889 </a> 890 </div> 891 } 892 </div> 893 </div> 894 } 895 896 } 897 898 } 899 900 </div> 901 <div id="bottom-content">@GetValue("DwContent(bottomcontent)")</div> 902 903 @if (!string.IsNullOrWhiteSpace(filterTag)) 904 { 905 @RenderItemList(new 906 { 907 ItemType = "PageMemberPage", 908 ListSourceType = "SelfArea", 909 ItemFieldsList = "*", 910 ListTemplate = "/ItemPublisher/List/Employees.cshtml", 911 ListPageSize = 1000, 912 ListOrderBy = "Sort", 913 Filter = "Category contains \"" + filterTag + "\"" 914 }) 915 } 916 else 917 { 918 @RenderItemList(new 919 { 920 ItemType = "PageMemberPage", 921 ListSourceType = "SelfArea", 922 ItemFieldsList = "*", 923 ListTemplate = "/ItemPublisher/List/EmployeesAccordion.cshtml", 924 ListPageSize = 1000, 925 ListOrderBy = "Sort" 926 }) 927 } 928 <a href="javascript:window.goBack()" class="button-back d-md-none">&nbsp;</a> 929 @if (!String.IsNullOrEmpty(Pageview.Area.Item["CookiebarText"].ToString()) && !String.IsNullOrEmpty(Pageview.Area.Item["CookiebarButtonText"].ToString())) 930 { 931 <!--googleoff: all--> 932 <aside class="cookiebar js-cookiebar" data-id="cookie-accept"> 933 <div class="cookiebar__container p-2 p-lg-4 text-center text-lg-left"> 934 <div class="cookiebar__body"> 935 <div>@Pageview.Area.Item["CookiebarText"]</div> 936 </div> 937 <div class="cookiebar__button-container mt-3 mt-lg-0"> 938 <a href="#" class="btn-secondary btn js-cookiebar-close">@Pageview.Area.Item["CookiebarButtonText"]</a> 939 </div> 940 </div> 941 </aside><!-- .cookiebar --> 942 <!--googleon: all--> 943 } 944 945 </div> 946 <footer class="footer"> 947 <div class="curve curve-bcg-light-gray"> 948 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewbox="0 0 1440 40" preserveaspectratio="none"> 949 <path d="M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 950 <path d="M0,0h1440v40H0V0z M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path> 951 </svg> 952 </div> 953 <div class="bg-light-gray pb-5"> 954 <div class="container-fluid"> 955 <div class="row no-gutters"> 956 <div class="col-12 col-sm-6 col-md-4 col-lg-3"> 957 <div class="footer__headline">@GetString("Item.Area.FooterColumnOne")</div> 958 <nav class="navbar"> 959 <ul class="navbar-nav d-block"> 960 @foreach (var item in GetLoop("Item.Area.FooterColumnOneLinks")) 961 { 962 string link = item.GetString("Item.Area.FooterColumnOneLinks.Link"); 963 964 <li class="footer__item"> 965 <span class="footer__icon icon icon-chevron-right"></span> 966 <a class="footer__link" href="@link">@item.GetString("Item.Area.FooterColumnOneLinks.Name")</a> 967 </li> 968 } 969 </ul> 970 </nav> 971 </div> 972 <div class="col-12 col-sm-6 col-md-4 col-lg-3 pl-md-2"> 973 <div class="footer__headline h2">@GetString("Item.Area.FooterColumnTwo")</div> 974 <div class="footer__item">@GetString("Item.Area.FooterInfo")</div> 975 <nav class="navbar"> 976 <ul class="navbar-nav d-block"> 977 @foreach (var item in GetLoop("Item.Area.FooterColumnTwoLinks")) 978 { 979 string link = item.GetString("Item.Area.FooterColumnTwoLinks.Link"); 980 981 <li class="footer__item"> 982 <span class="footer__icon icon icon-chevron-right"></span> 983 <a class="footer__link" href="@link">@item.GetString("Item.Area.FooterColumnTwoLinks.Name")</a> 984 </li> 985 } 986 </ul> 987 </nav> 988 </div> 989 <div class="ml-auto d-flex align-items-end align-right"> 990 @if (Pageview.Area.ID == 8) 991 { 992 <img class="mr-2 mb-3" src="/Files/System/Images/Shop/visa_mastercard.png" alt="visa mastercard" height="20"> 993 <img class="mr-3 mb-3" src="/Files/System/Images/Shop/vipps.svg" alt="vipps" height="20"> 994 } 995 else 996 { 997 <img class="mr-2 mb-3" src="/Files/System/Images/Shop/dankort_visa_mastercard.png" alt="Dankort visa mastercard" height="20"> 998 <img class="mr-3 mb-3" src="/Files/System/Images/Shop/icon-mobilepay.png" alt="mobilepay" height="20"> 999 } 1000 1001 @foreach (var item in GetLoop("Item.Area.FooterSocialMediaLinks")) 1002 { 1003 string link = item.GetString("Item.Area.FooterSocialMediaLinks.Link"); 1004 string alt = item.GetString("Item.Area.FooterSocialMediaLinks.Name"); 1005 string image = item.GetString("Item.Area.FooterSocialMediaLinks.Icon"); 1006 string target = link.Contains("www") ? "_blank" : "_self"; 1007 1008 <a class="mr-3" href="@link" target="@target"> 1009 <img class="img-fluid" src="/Admin/Public/GetImage.ashx?Image=@image&width=40&height=40&Compression=80&format=webP" alt="@alt"> 1010 </a> 1011 } 1012 @{ 1013 string co2Link = GetString("Item.Area.Co2NeutraltLink"); 1014 string co2Billede = GetString("Item.Area.Co2NeutraltBillede"); 1015 } 1016 <a class="mr-3" href="@co2Link" target="_blank"> 1017 <img src="@co2Billede" alt="co2 neutral" width="100"> 1018 </a> 1019 </div> 1020 </div> 1021 </div> 1022 </div> 1023 </footer> 1024 @using Dynamicweb.Content 1025 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1026 1027 1028 @{ 1029 var cookieName = "LanguageWebsite"; 1030 var cookieValue = ""; 1031 1032 if (Dynamicweb.Context.Current.Request.Cookies[cookieName] != null) 1033 { 1034 cookieValue = Dynamicweb.Context.Current.Request.Cookies[cookieName].Value; 1035 } 1036 1037 var areaService = new AreaService(); 1038 var activeAreas = areaService.GetAreas().Where(a => a.Active); 1039 1040 //tuple list of two strings 1041 var frontpageIds = new List<Tuple<string, string>>(); 1042 1043 if (cookieValue != "False" && cookieValue != "") 1044 { 1045 if (Pageview.Area.CultureInfo.TwoLetterISOLanguageName != cookieValue) 1046 { 1047 foreach (var activeArea in activeAreas) 1048 { 1049 if (activeArea.CultureInfo.TwoLetterISOLanguageName == cookieValue) 1050 { 1051 Dynamicweb.Context.Current.Response.Redirect("/Default.aspx?ID=" + pageService.GetFirstPageForArea(activeArea.ID).ID); 1052 } 1053 } 1054 } 1055 } 1056 1057 else if (cookieValue != "False") 1058 { 1059 var currentLanguage = Pageview.Area.CultureInfo.TwoLetterISOLanguageName; 1060 var pageLanguageNativeName = Translate(currentLanguage + "NativeName"); 1061 1062 1063 foreach (var activeArea in activeAreas) 1064 { 1065 var frontpage = pageService.GetFirstPageForArea(activeArea.ID); 1066 1067 var frontpageCode = activeArea.CultureInfo.TwoLetterISOLanguageName; 1068 frontpageIds.Add(new Tuple<string, string>(frontpageCode, frontpage.ID.ToString())); 1069 } 1070 1071 <div style="display: none" class="lang-mes"> 1072 <div id="currentLanguage" style="display: none">@pageLanguageNativeName</div> 1073 <div id="currentPageLanguageCode" style="display: none">@currentLanguage</div> 1074 1075 @foreach (var frontpageId in frontpageIds) 1076 { 1077 var id = "Page" + frontpageId.Item1; 1078 <div id="@id" style="display: none">@frontpageId.Item2</div> 1079 } 1080 <div class="lang-mes__content"> 1081 <div class="mes__content__message">@Translate("LanMes") </div> 1082 <div class="mes__content__buttons"> 1083 <a class="mes__content__buttons__yes mes-button" href="javascript:void(0)">@Translate("Yes")</a> 1084 <a class="mes__content__buttons__no mes-button" href="javascript:void(0)">@Translate("No")</a> 1085 </div> 1086 </div> 1087 </div> 1088 } 1089 1090 1091 <script> 1092 1093 document.addEventListener("DOMContentLoaded",function (){ 1094 1095 var userLanguage = navigator.language.split("-")[0].toLowerCase(); 1096 var userLanguageTranslated = ""; 1097 var userLanguageFrontpageId = "Default.Aspx?ID="; 1098 var currentPageLanguageCode = ""; 1099 1100 if (document.getElementById("currentPageLanguageCode") != null){ 1101 currentPageLanguageCode = document.getElementById("currentPageLanguageCode").innerText; 1102 1103 var sameLanguage = currentPageLanguageCode === userLanguage; 1104 1105 sameLanguage = sameLanguage || (currentPageLanguageCode === "nb" && userLanguage === "nn"); 1106 1107 1108 if (document.getElementById("currentPageLanguageCode") != null && !sameLanguage) 1109 { 1110 1111 switch(userLanguage) 1112 { 1113 case "da": 1114 userLanguageTranslated = '@Translate("daNativeName")' 1115 userLanguageFrontpageId += document.getElementById("Page" + userLanguage).innerText; 1116 break; 1117 case "en": 1118 userLanguageTranslated = '@Translate("enNativeName")' 1119 userLanguageFrontpageId += document.getElementById("Page" + userLanguage).innerText; 1120 break; 1121 case "nb": 1122 userLanguageTranslated = '@Translate("nbNativeName")' 1123 userLanguageFrontpageId += document.getElementById("Page" + userLanguage).innerText; 1124 break; 1125 case "nn": 1126 userLanguageTranslated = '@Translate("nnNativeName")' 1127 userLanguageFrontpageId += document.getElementById("Page" + "nb").innerText; 1128 userLanguage = "nb"; 1129 break; 1130 1131 1132 } 1133 1134 var userLanguageTranslated2 = userLanguageTranslated; 1135 if (currentPageLanguageCode === "da") 1136 { 1137 userLanguageTranslated2 = userLanguageTranslated2 + "e"; 1138 } 1139 1140 var langMes = document.getElementsByClassName("mes__content__message")[0]; 1141 var message = langMes.innerText.replace("#", userLanguageTranslated); 1142 message = message.replace("_", userLanguageTranslated2); 1143 langMes.innerText = langMes.innerText = message; 1144 var yesButton = document.getElementsByClassName("mes__content__buttons__yes")[0]; 1145 var noButton = document.getElementsByClassName("mes__content__buttons__no")[0]; 1146 yesButton.href = userLanguageFrontpageId; 1147 1148 var langMesContainer = document.getElementsByClassName("lang-mes")[0]; 1149 langMesContainer.style.display = "flex"; 1150 1151 // yesButton.addEventListener("click",function (){ 1152 // setCookie(userLanguage); 1153 // }); 1154 1155 noButton.addEventListener("click",function (){ 1156 setCookie("False"); 1157 langMesContainer.style.display = "none"; 1158 }); 1159 1160 function setCookie(cvalue) { 1161 const d = new Date(); 1162 d.setTime(d.getTime() + (30*24*60*60*1000)); 1163 let expires = "expires="+ d.toUTCString(); 1164 document.cookie = "LanguageWebsite" + "=" + cvalue + ";" + expires + ";path=/"; 1165 } 1166 }} 1167 }); 1168 </script> 1169 } 1170 </div> 1171 1172 <div class="js-video-modal modal fade in video-modal" id="videoModal" tabindex="-1" role="dialog" aria-labelledby="videoModal" aria-hidden="true"> 1173 <div class="modal-dialog modal-lg mw-100 px-5"> 1174 <!-- Modal content--> 1175 <div class="modal-content"> 1176 <div class="modal-header d-flex justify-content-end"> 1177 <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal"> 1178 <span class="icon icon-close"></span> 1179 </button> 1180 </div> 1181 <div class="modal-body embed-responsive embed-responsive-16by9"> 1182 <iframe class="js-video-container modal-iframe video-modal__iframe embed-responsive-item" src="" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe> 1183 </div> 1184 </div> 1185 </div> 1186 </div> 1187 1188 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1189 <div class="position-fixed d-flex flex-column mobile-nav-buttons d-lg-none"> 1190 <button type="button" class="btn btn-icon btn-icon--round btn-primary btn-mobile-nav btn-mobile-nav--menu js-aside-btn" data-view="navigation"> 1191 <span class="icon icon-navigation"></span> 1192 <div class="btn-mobile-nav--text">MENU</div> 1193 </button> 1194 </div> 1195 1196 <div class="mobile-menu aside-panel js-aside js-view-navigation"> 1197 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="navigation"></div> 1198 <div class="page-container position-relative h-100"> 1199 <div class="side-modal side-modal--navigation aside-panel__content flex-column js-view-navigation"> 1200 <button type="button" class="btn btn-link btn-close js-aside-close-btn text-white" data-view="navigation"> 1201 @Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span> 1202 </button> 1203 <div class="container-fluid aside-panel__container"> 1204 <div class="aside-panel__scroll-content"> 1205 <nav role="navigation" class="js-nav-panel"> 1206 <!-- lvl1 list --> 1207 <ul class="nav-list list-unstyled"> 1208 @RenderNavigation(new 1209 { 1210 StartLevel = 1, 1211 EndLevel = 3, 1212 expandmode = "all", 1213 Template = "mobile-navigation.xslt", 1214 Id = "mobile-nav" 1215 }) 1216 <li class="language-picker-item"> 1217 <a class="dropdown-item" href="https://www.junget.com/da-dk"> 1218 <img width="28" height="20" src="/webroot/images/da-dk.svg" alt="Junget - Denmark"> 1219 </a> 1220 <a class="dropdown-item" href="https://www.junget.com/en-gb"> 1221 <img width="28" height="20" src="/webroot/images/en-gb.svg" alt="Junget"> 1222 </a> 1223 <a class="dropdown-item" href="https://www.junget.com/nb-no"> 1224 <img width="28" height="20" src="/webroot/images/nb-NO.svg" alt="Junget"> 1225 </a> 1226 </li> 1227 </ul> 1228 </nav> 1229 </div> 1230 </div> 1231 </div> 1232 <div class="js-aside-close-btn nav-close-layer" data-view="navigation"></div> 1233 </div> 1234 </div> 1235 1236 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 1237 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.2/umd/popper.min.js"></script> 1238 <script src="/webroot/js-static/swiper-bundle.js" type="text/javascript"></script> 1239 @{ 1240 var masterScripts = VestjyskMarketing.Helpers.Utilities.CacheBuster("/webroot/dist/main.js"); 1241 } 1242 <script src="@masterScripts" type="text/javascript"></script> 1243 <script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js" defer=""></script> 1244 1245 @RenderSnippet("GATracking") 1246 1247 @if (MainUserMain != null && MainUserMain.HasGroup(24) && myJungetPageList.Contains(Pageview.ID)) 1248 { 1249 // Bass Jacobsen 1250 <script src="/webroot/js-static/bootstrap3-typeahead.min.js" type="text/javascript"></script> 1251 <script src="/webroot/js-static/bloodhound.min.js" type="text/javascript"></script> 1252 1253 <script type="text/javascript"> 1254 $(document).ready(function () { 1255 // instantiate the bloodhound suggestion engine 1256 var datas = new Bloodhound({ 1257 datumTokenizer: Bloodhound.tokenizers.whitespace, 1258 queryTokenizer: Bloodhound.tokenizers.whitespace, 1259 prefetch: { url: '/da-dk/customerfeed-json', cache: false }, 1260 remote: { url: '/da-dk/customerfeed-json' } 1261 }); 1262 1263 // initialize the bloodhound suggestion engine 1264 datas.initialize(); 1265 1266 $(".typeahead").typeahead({ 1267 items: 15, 1268 display: 'name', 1269 highlight: true, 1270 minLength: 1, 1271 hint: true, 1272 fitToElement: true, 1273 source: datas.ttAdapter(), 1274 highlighter: function (item) { 1275 var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&'); 1276 1277 //split to separate HTML tags 1278 var item_parts = item.split(/(<[^>]+>)/g); 1279 1280 //Highlight only if it's not a tag 1281 var ret = ""; 1282 for (var i = 0; i < item_parts.length; i++) { 1283 if (item_parts[i].match(/(<[^>]+>)/)) { 1284 //this is a tag. 1285 ret += item_parts[i]; 1286 } else { 1287 //highlight if necessary 1288 ret += item_parts[i].replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { 1289 return '<strong>' + match + '</strong>'; 1290 }); 1291 } 1292 } 1293 return ret; 1294 }, 1295 updater: function (item) { 1296 $("#DWExtranetSecondaryUserSelector").val(item.id); 1297 return item; 1298 } 1299 }); 1300 }); 1301 </script> 1302 } 1303 1304 @if (Pageview.Area.Item["Aktiv"] != null && Pageview.Area.Item["Aktiv"].ToString() == "True" && Pageview.User == null) 1305 { 1306 string img = Pageview.Area.Item["Billede"].ToString(); 1307 string header = Pageview.Area.Item["Overskrift"].ToString(); 1308 string body = Pageview.Area.Item["Br_dtekst"].ToString(); 1309 string buttonText = Pageview.Area.Item["KnapTekst"].ToString(); 1310 int cartPageID = GetPageIdByNavigationTag("cartpageid"); 1311 1312 <div id="mymodal" class="modal" tabindex="-1" role="dialog"> 1313 <div class="modal-dialog exit-intent-mw350px" role="document"> 1314 <div class="modal-content"> 1315 <div class="exit-intent"> 1316 @if (!string.IsNullOrEmpty(img)) 1317 { 1318 <img class="img-responsive exit-intent-img" src="/Admin/Public/GetImage.ashx?Image=@img&width=300&height=200&compression=85&crop=0"> 1319 } 1320 @if (!string.IsNullOrEmpty(header)) 1321 { 1322 <h5 class="modal-title font-weight-bold mb-3 text-center">@header</h5> 1323 } 1324 <button type="button" class="close exit-intent-close" data-dismiss="modal" aria-label="Close"> 1325 <span aria-hidden="true">&times;</span> 1326 </button> 1327 @if (!string.IsNullOrEmpty(body)) 1328 { 1329 <div class="text-center"> 1330 <p class="exit-intent-text">@body</p> 1331 </div> 1332 } 1333 @if (!string.IsNullOrEmpty(buttonText)) 1334 { 1335 <a type="button" href="/Default.aspx?ID=@cartPageID" class="btn btn-primary btn-block font-weight-bolder">@buttonText</a> 1336 } 1337 </div> 1338 </div> 1339 </div> 1340 </div> 1341 } 1342 1343 @RenderSnippet("BeforeBodyEndScripts") 1344 </body> 1345 </html>