Error executing template "Designs/SF2019/_parsed/Page.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_c34c9846424e44ceb94f89ce0a24d2be.Execute() in E:\dynamicweb.net\Solutions\Upsite\SilkeborgForsyningWebsite.net.dynamicweb.dk\Application\Files\Templates\Designs\SF2019\_parsed\Page.parsed.cshtml:line 96
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @using Dynamicweb.Environment 3 4 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 5 @using Newtonsoft.Json 6 @using System.Web 7 @using System.IO 8 @SnippetStart("RenderWarningIcon") 9 <span class="counter warning-counter"><text>0</text></span> 10 @SnippetEnd("RenderWarningIcon") 11 12 13 @functions{ 14 string Rot13(string value) { 15 var chars = value.ToCharArray(); 16 17 for (var i = 0; i < chars.Length; i++) { 18 var number = (int)chars[i]; 19 20 if (number >= 'a' && number <= 'z') { 21 if (number > 'm') { 22 number -= 13; 23 } else { 24 number += 13; 25 } 26 } else if (number >= 'A' && number <= 'Z') { 27 if (number > 'M') { 28 number -= 13; 29 } else { 30 number += 13; 31 } 32 } 33 chars[i] = (char)number; 34 } 35 return new string(chars); 36 } 37 } 38 39 @helper Rot13_Email(string email, string text = "") { 40 var tpl = new char[] { 41 '<', 'a', ' ', 'h', 'r', 'e', 'f', '=', '"', 'm', 'a', 'i', 'l', 't', 'o', ':', '#', '1', '"', ' ', 'r', 'e', 'l', '=', '"', 'n', 'o', 'f', 'o', 'l', 'l', 'o', 'w', '"', '>', '#', '2', '<', '/', 'a', '>' 42 }; 43 <span class="rot13Email">@Rot13(new string(tpl).Replace("#1", email).Replace("#2", string.IsNullOrWhiteSpace(text) ? email : text).Replace("[a]", "@"))</span> 44 } 45 46 @{ 47 string companyName = GetString("Item.Area.Company_Name"); 48 string companyAddress = GetString("Item.Area.Company_Address"); 49 string companyZipAndCity = GetString("Item.Area.Company_Postal") + " " + GetString("Item.Area.Company_City"); 50 string companyMail = GetString("Item.Area.Company_Email"); 51 string companyPhone = GetString("Item.Area.Company_Phone"); 52 string companyPhoneClean = companyPhone.Replace(" ", ""); 53 54 string companyLogo = GetString("Item.Area.Company_Logo"); 55 string companyLogoAlternative = GetString("Item.Area.Company_Logo_Alternative"); 56 57 string companyPhoneService = GetString("Item.Area.Company_Customer_Service"); 58 string companyPhoneServiceClean = companyPhoneService.Replace(" ", ""); 59 60 string companyPhoneWathSewage = GetString("Item.Area.Company_Watchphone_Sewage"); 61 string companyPhoneWathSewageClean = companyPhoneWathSewage.Replace(" ", ""); 62 63 string companyPhoneWathWater = GetString("Item.Area.Company_Watchphone_Water"); 64 string companyPhoneWathWaterClean = companyPhoneWathWater.Replace(" ", ""); 65 66 string Contact_Formular_Btn_Text = GetString("Item.Area.Contact_Formular_Btn_Text"); 67 68 string footerText = GetString("Item.Area.Footer_Text"); 69 string footerEkstraText = GetString("Item.Area.Footer_EkstraText"); 70 71 string googleAnalytics = GetString("Item.Area.Google_Analytics_Code"); 72 73 string topPageName = GetString("DwTopPageName"); 74 int topPageId = GetInteger("DwTopPageID"); 75 76 var pageService = Dynamicweb.Services.Pages; 77 var indexPage = Dynamicweb.Services.Pages.GetFirstPageForArea(Pageview.AreaID); 78 var topPage = Dynamicweb.Services.Pages.GetPage(GetInteger("DwTopPageID")); 79 80 string designBaseUrl = GetString("Template:DesignBaseUrl"); 81 string commentLogo = designBaseUrl + "img/Icons/icon-commenting.png"; 82 commentLogo = "/Admin/Public/GetImage.ashx?Image=" + commentLogo + "&Format=" + commentLogo.Substring(commentLogo.LastIndexOf(".")) + "&Width=" + 48 + "&Crop=6&DoNotUpscale=1"; 83 84 var bannerCookie = Dynamicweb.Environment.CookieManager.GetCookie("infobanner"); 85 86 87 int ServiceMenuID = GetInteger("Item.Area.Service_Menu_ID"); 88 int searchPageID = 4868; 89 var searchPage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "searchresult"); 90 91 92 string device = Dynamicweb.Frontend.Devices.DeviceInfo.ParseFromUserAgentString(Dynamicweb.Context.Current.Request.UserAgent).DeviceType.ToString(); 93 bool isMobile = device == "Mobile"; 94 int image_full_width = isMobile || device == "Bot" ? 400 : device == "Tablet" ? 720 : 1140; 95 string pageTitle = GetString("Title"); 96 if (Pageview.Item.SystemName == "Waste_Place") { 97 pageTitle = GetString("Item.Text"); 98 if (pageTitle.IndexOf("(pil)") > 0) { 99 pageTitle = pageTitle.Substring(pageTitle.IndexOf("(pil)") + 6); 100 } 101 102 Dynamicweb.Frontend.PageView.Current().Meta.Title = pageTitle; 103 } 104 if (GetString("Item.SystemName") == "Page_News") { 105 pageTitle = "Nyhed - " + pageTitle; 106 Dynamicweb.Frontend.PageView.Current().Meta.Title = pageTitle; 107 } 108 109 // COOKIE-------------------------- - 110 IList<string> AllowedCookieCategories = new List<string>() { "Essential" }; 111 foreach (string s in CookieManager.GetCategories()) { 112 if (s == "Essential") { 113 continue; 114 } else if (CookieManager.CookieOptInLevelExists && (CookieManager.GetCookieOptInLevel() == CookieOptInLevel.All || (CookieManager.CookieOptInLevelExists && System.Web.HttpContext.Current.Request.Cookies.Get("Dynamicweb.CookieOptInLevel").Value.IndexOf(s) > -1))) { 115 AllowedCookieCategories.Add(s); 116 } 117 } 118 119 //var categories = Dynamicweb.Environment.CookieManager.GetCategories(); 120 string cookieChoiceId = "cookie-choice-renew"; 121 string cookieWarningClass = "custom-cookie"; 122 if (Dynamicweb.Environment.CookieManager.CookieOptInLevelExists) { 123 cookieWarningClass += " \" style=\"display:none\" tab-index=\"-1\" aria-hidden=\"true\""; 124 } else { 125 cookieChoiceId += "\" style=\"display:none;"; 126 } 127 var cookieSettingsPage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "cookiesettings"); 128 129 //bool cookieActivated = cookieSettingsPage != null && cookieSettingsPage.Item["CookieActivated"] != null ? (bool)cookieSettingsPage.Item["CookieActivated"] : false; 130 bool cookieActivated = true; 131 132 // /COOKIE --------------------------- 133 } 134 135 @helper iconLink(string image_name, int size, string rel, string type = "") 136 { 137 string iconfileurl = GetString("Template:DesignBaseUrl") + "img/Icons/Fav/" + image_name + "-" + size + "x" + size + ".png"; 138 string iconLink = "/Admin/Public/GetImage.ashx?Image=" + iconfileurl + "&Format=" + iconfileurl.Substring(iconfileurl.LastIndexOf(".")) + "&Width=" + size + "&Crop=6&DoNotUpscale=1"; 139 if (!string.IsNullOrWhiteSpace(iconLink)) { 140 <link rel="@rel" sizes="@(size)x@(size)" href="@iconLink"> 141 } else { 142 <link rel="@rel" type="@type" sizes="@(size)x@(size)" href="@iconLink"> 143 } 144 } 145 <!DOCTYPE html> 146 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName"> 147 <head> 148 <meta charset="utf-8"> 149 <title>@GetValue("Title")</title> 150 @GetValue("MetaTags") 151 @GetValue("CopyRightNotice") 152 153 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 154 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 155 <meta name="msapplication-TileColor" content="#ffffff"> 156 <meta name="msapplication-TileImage" content="/Admin/Public/GetImage.ashx?Image=@(designBaseUrl)img/Icons/Fav/ms-icon-144x144.png&Format=.png&Width=144&Crop=6&DoNotUpscale=1"> 157 <meta name="theme-color" content="#ffffff"> 158 <meta name="facebook-domain-verification" content="u5pkvaq9s1j7c8z4yt55ies6rlbq83"> 159 <meta name="google-site-verification" content="W5IayHAQaI_rbHR4gTAOV4Bqo2smwdjZRjXLCvndh5M"> 160 @RenderSnippet("OpenGraph") 161 @* FAV *@ 162 @iconLink("apple-icon", 57, "apple-touch-icon") 163 @iconLink("apple-icon", 60, "apple-touch-icon") 164 @iconLink("apple-icon", 72, "apple-touch-icon") 165 @iconLink("apple-icon", 76, "apple-touch-icon") 166 @iconLink("apple-icon", 114, "apple-touch-icon") 167 @iconLink("apple-icon", 120, "apple-touch-icon") 168 @iconLink("apple-icon", 144, "apple-touch-icon") 169 @iconLink("apple-icon", 152, "apple-touch-icon") 170 @iconLink("apple-icon", 180, "apple-touch-icon") 171 @iconLink("android-icon", 192, "icon", "image/png") 172 @iconLink("favicon", 32, "icon", "image/png") 173 @iconLink("favicon", 96, "icon", "image/png") 174 @iconLink("favicon", 16, "icon", "image/png") 175 <link rel="manifest" href="@(designBaseUrl)img/Icons/Fav/manifest.json"> 176 177 @if (!string.IsNullOrWhiteSpace(googleAnalytics) && AllowedCookieCategories.Contains("Statistical")) { 178 <!-- Google Tag Manager --> 179 <script> 180 (function (w, d, s, l, i) { 181 w[l] = w[l] || []; w[l].push({ 182 'gtm.start': new Date().getTime(), event: 'gtm.js' 183 }); 184 var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; 185 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 186 })(window, document, 'script', 'dataLayer', 'GTM-5T3TJQR');</script> 187 <!-- End Google Tag Manager --> 188 } 189 190 @*<link rel="stylesheet" href="@(designBaseUrl)assets/fontawesome-pro/css/fontawesome.min.css">*@ 191 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" integrity="sha512-1ycn6IcaQQ40/MKBW2W4Rhis/DbILU74C1vSrLJxCq57o941Ym01SwNsOMqvEBFlcgUa6xLiPY/NS5R+E6ztJQ==" crossorigin="anonymous" referrerpolicy="no-referrer"> 192 193 <!-- BOOTSTRAP --> 194 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> 195 <link href="/Files/Templates/Designs/SF2019/assets/formvalidation/css/formValidation.min.css" rel="stylesheet"> 196 197 <!-- CUSTOM --> 198 <link href="@(designBaseUrl)css/simple-lightbox.min.css" rel="stylesheet"> 199 <link href="@(designBaseUrl)css/style.min.css?v=3" rel="stylesheet"> 200 201 <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script> 202 203 <script defer="" src="@(designBaseUrl)assets/fontawesome-pro/js/all.min.js"></script> 204 205 206 207 @if (AllowedCookieCategories.Contains("Marketing")) { 208 <!-- Facebook Pixel Code --> 209 <script> 210 !function (f, b, e, v, n, t, s) { 211 if (f.fbq) return; n = f.fbq = function () { 212 n.callMethod ? 213 n.callMethod.apply(n, arguments) : n.queue.push(arguments) 214 }; 215 if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; 216 n.queue = []; t = b.createElement(e); t.async = !0; 217 t.src = v; s = b.getElementsByTagName(e)[0]; 218 s.parentNode.insertBefore(t, s) 219 }(window, document, 'script', 220 'https://connect.facebook.net/en_US/fbevents.js'); 221 fbq('init', '1159581371178090'); 222 fbq('track', 'PageView'); 223 </script> 224 <noscript> 225 <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1159581371178090&ev=PageView&noscript=1"> 226 </noscript> 227 <!-- End Facebook Pixel Code --> 228 } 229 230 @GetValue("Stylesheets") 231 @GetValue("Javascripts") 232 </head> 233 234 <body data-rootpage="@topPageName" data-rootpageid="@topPageId" class=""> 235 236 @{ 237 string skibText = "Spring hovednavigationen over"; 238 } 239 240 <a id="skip" class="sr-only sr-only-focusable" tabindex="0" href="/Default.aspx?ID=@(Pageview.ID)#content" title="@skibText" role="link">@skibText</a> 241 242 @* -- -- -- -- -- MOBILE NAV -- -- -- -- -- *@ 243 <div class="container-fluid d-lg-none"> 244 <div class="floatcontainer"> 245 <div class="inner"> 246 <button type="button" class="btn-open" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> 247 <div> 248 <div class="nav-icon"> 249 <div></div> 250 </div> 251 </div> 252 </button> 253 </div> 254 </div> 255 </div> 256 257 <div class="zeynep-overlay"></div> 258 259 <div class="zeynep d-lg-none" style="transform: translateX(-295px);"> 260 261 <div class="golden-buzz"> 262 @{ 263 string searchInputValue = "" + Dynamicweb.Context.Current.Request.QueryString.Get("Search"); 264 } 265 @if (searchPage != null) { 266 <div class="container"> 267 <div class="top-search"> 268 <div class="typeahead-wrapper"> 269 <div class="typeahead-input"> 270 <form method="get" action="/Default.aspx" role="search" onsubmit="searchSubmit(this)"> 271 <input type="hidden" name="Id" value="@searchPageID"> 272 273 <div class="input-group mb-3 search-field-wrapper"> 274 <input type="text" class="form-control" id="search-field" name="q" autocomplete="off" placeholder="Indtast søgeord" aria-label="Recipient's username" aria-describedby="search-btn" value=""> 275 <button class="btn btn-outline-secondary" type="submit" id="search-btn"> 276 <span class="sr-only sr-only-focusable">@Translate("Search")</span> 277 278 <span> 279 @Skabertrang.Helpers.Icons.Search 280 </span> 281 </button> 282 </div> 283 284 </form> 285 </div> 286 <div class="typeahead-menu tt-empty"></div> 287 </div> 288 </div> 289 </div> 290 } 291 292 </div> 293 294 <div class="main-nav"> 295 296 @RenderNavigation(new 297 { 298 startlevel = 1, 299 endlevel = 2, 300 template = "TopBarNav-Mobile.xslt", 301 expandmode = "All", 302 parentid = 0, 303 areaid = Pageview.AreaID, 304 includemode = "All" 305 }) 306 307 </div> 308 309 @* FOR LIVE: parentid = *@ 310 @* FOR LOCAL: parentid = 4807 *@ 311 @* FOR KVALITET: parentid = *@ 312 <div class="service-nav"> 313 314 @RenderNavigation(new 315 { 316 startlevel = 1, 317 endlevel = 99, // ÆNDRET TIL 99 fra 2, hvor det ikke fungere 318 template = "TopBarNav-Mobile.xslt", 319 expandmode = "All", 320 parentid = ServiceMenuID, 321 areaid = Pageview.AreaID, 322 includemode = "All", 323 }) 324 325 326 </div> 327 328 </div> 329 330 <div class="zeynep-overlay zeynep-overlay-under"></div> 331 @* -- -- -- -- -- /MOBILE NAV -- -- -- -- -- *@ 332 333 <header id="navSticky" class=""> 334 <div class="container d-none d-lg-block"> 335 <div class="row header-top"> 336 337 <div class="col-md-12"> 338 <nav class="service-menu navbar-default navbar-expand-md top-nav" aria-label="service menu"> 339 <div id="mymenu" class="collapse navbar-collapse w-100 mb-auto top-nav"> 340 @RenderNavigation(new 341 { 342 startlevel = 1, 343 endlevel = 99, 344 template = "TopBarNav.xslt", 345 expandmode = "All", 346 parentid = ServiceMenuID, 347 areaid = Pageview.AreaID, 348 includemode = "All" 349 }) 350 </div> 351 </nav> 352 </div> 353 354 </div> 355 </div> 356 357 <div class="container align-items-center justify-content-between"> 358 <div class="row"> 359 <div class="col-12 col-md-7 col-xl-8"> 360 <a href="/" class="logo" aria-label="Logo"> 361 <img src="@companyLogo" alt="@companyName" class="img-fluid"> 362 </a> 363 </div> 364 365 <div class="col-12 col-md-5 col-xl-4 top-search-col d-none d-lg-block"> 366 <div class="top-search-wrapper w-100"> 367 <div class="top-search pull-right"> 368 <div class="typeahead-wrapper"> 369 <div class="typeahead-input"> 370 <form method="get" action="/Default.aspx" role="search" onsubmit="searchSubmit(this)"> 371 <input type="hidden" name="Id" value="@searchPageID"> 372 373 <div class="input-group mb-3 search-field-wrapper"> 374 <input type="text" class="form-control" id="search-field" name="q" autocomplete="off" placeholder="Indtast søgeord" aria-label="Recipient's username" aria-describedby="search-btn" value=""> 375 <button class="btn btn-outline-secondary" type="submit" id="search-btn"> 376 <span class="sr-only sr-only-focusable">@Translate("Søg")</span> 377 <span> 378 <svg class="search-icon-svg" xmlns="http://www.w3.org/2000/svg" width="17.751" height="17.755" viewbox="0 0 17.751 17.755"> 379 <path class="a" d="M22.042,20.963,17.106,15.98a7.035,7.035,0,1,0-1.068,1.082l4.9,4.951a.76.76,0,0,0,1.072.028A.765.765,0,0,0,22.042,20.963ZM11.577,17.122a5.555,5.555,0,1,1,3.929-1.627A5.521,5.521,0,0,1,11.577,17.122Z" transform="translate(-4.5 -4.493)"></path> 380 </svg> 381 </span> 382 </button> 383 </div> 384 385 </form> 386 </div> 387 <div class="typeahead-menu tt-empty"></div> 388 </div> 389 </div> 390 </div> 391 </div> 392 </div> 393 </div> 394 395 @{ 396 string alertHeadline = GetString("Item.Area.Alert_Headline"); 397 string alertText = GetString("Item.Area.Alert_Text"); 398 bool alertShown = GetBoolean("Item.Area.Alert_Shown"); 399 } 400 401 @if (alertShown && (!string.IsNullOrWhiteSpace(alertHeadline) || !string.IsNullOrWhiteSpace(alertText))) { 402 403 var alert_cookie = Dynamicweb.Environment.CookieManager.GetCookie("hidealert"); 404 405 if (alert_cookie == null || string.IsNullOrWhiteSpace(alert_cookie.Value)) { 406 string title = Translate("Luk"); 407 string ariaLabel = Translate("Luk advarsel"); 408 <div id="alert-box" class="jumbotron"> 409 <div class="container text-center"> 410 411 <i onclick="hideAlertBox()" class="fal fa-times-circle" aria-label="@ariaLabel" title="@title"></i> 412 413 @if (!string.IsNullOrWhiteSpace(alertHeadline)) { 414 <h1>@alertHeadline</h1> 415 } 416 @if (!string.IsNullOrWhiteSpace(alertText)) { 417 <text>@alertText</text> 418 } 419 </div> 420 </div> 421 } 422 423 } 424 425 </header> 426 427 <div id="main-nav" class="d-none d-lg-block"> 428 <div class="container"> 429 430 <nav class="navbar navbar-default main-nav CustomHidden"> 431 @{ 432 Dynamicweb.Content.Page selfservicePage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "selfservicePage"); 433 434 int dataInpathSelfservicePage = selfservicePage != null && Pageview.ID == selfservicePage.ID ? 1 : 0; 435 } 436 <ul class="scroolNav ps-0"> 437 @foreach (Dynamicweb.Content.Page rootPage in pageService.GetRootPagesForArea(GetInteger("DwAreaID")).Where(x => x.Active && x != selfservicePage)) { 438 var childPages = pageService.GetPagesByParentID(rootPage.ID).Where(x => x.Active); 439 440 if (rootPage.ItemType != "Page_Root" || !rootPage.Active) { 441 continue; 442 } 443 444 string rootPageArea = (string)rootPage.Item["Site_Area"]; 445 446 string liClass = "nav-tab area-color-" + rootPageArea; 447 if (childPages.Any()) { 448 liClass += " hasChildren"; 449 } 450 451 int dataInpath = 0; 452 if (topPage.ID == rootPage.ID || topPage.MenuText == rootPage.MenuText) { 453 dataInpath = 1; 454 } 455 456 string rootPageIcon = (string)rootPage.Item["Site_Area"]; 457 string wrapperclass = "columnParent scroll-dropdown hidden d-none area-color-" + rootPageIcon; 458 459 <li class="@liClass" data-inpath="@dataInpath"> 460 <a href="@rootPage.GetPageHrefValue()"> 461 @rootPage.MenuText 462 463 @if (rootPageIcon == "warning_counter") { 464 465 @RenderSnippet("RenderWarningIcon") 466 467 } 468 </a> 469 470 @if (childPages.Any()) { 471 472 string rootPageInfoText = (string)rootPage.Item["Info_Text"]; 473 string iconClass = "icon icon-" + rootPageIcon; 474 475 <div class="@wrapperclass" data-root-page="@rootPage.ID"> 476 <div class="row pb-5"> 477 <div class="col-10"> 478 <ul class="column_2 ps-0"> 479 480 @foreach (var childPage in childPages) { 481 482 if (!childPage.Active) { 483 continue; 484 } 485 486 <li><a href="@childPage.GetPageHrefValue()">@childPage.MenuText</a></li> 487 } 488 </ul> 489 </div> 490 @if (!string.IsNullOrWhiteSpace(rootPageIcon)) { 491 <div class="col-2"> 492 493 <div class="d-flex h-100 nav-icon"> 494 @Skabertrang.Helpers.Icons.GetIcon(rootPageIcon) 495 </div> 496 497 </div> 498 } 499 500 </div> 501 502 @if (!string.IsNullOrWhiteSpace(rootPageInfoText)) { 503 504 string rootPageInfoLink = (string)rootPage.Item["Info_Link"]; 505 string rootPageInfoLinkText = (string)rootPage.Item["Info_Link_Text"]; 506 507 string rootpageinfotextclass = !string.IsNullOrWhiteSpace(rootPageInfoLink) ? "col-12 col-sm-6" : "col-12 col-cm-8"; 508 509 <div class="info"> 510 <a href="@rootPageInfoLink" class="row"> 511 512 <div class="@rootpageinfotextclass"> 513 @rootPageInfoText 514 </div> 515 @if (!string.IsNullOrWhiteSpace(rootPageInfoLink)) { 516 <div class="col-12 col-sm-6"> 517 <div class="d-flex h-100 pb-4"> 518 <span class="btn btn-primary ms-auto mt-auto"> 519 520 @if (!string.IsNullOrWhiteSpace(rootPageInfoLinkText)) { 521 @rootPageInfoLinkText 522 } else { 523 @Translate("Menu_Info_Button", "Læs mere") 524 525 } 526 527 </span> 528 </div> 529 </div> 530 } 531 </a> 532 </div> 533 } 534 </div> 535 } 536 </li> 537 } 538 </ul> 539 540 @if (selfservicePage != null) { 541 <ul class="scroolNav ps-0" id="right-nav"> 542 <li class="area-color-customer_service nav-tab" data-inpath="@dataInpathSelfservicePage"> 543 <a href="/Default.aspx?ID=@selfservicePage.ID" class="btn btn-primary"> 544 @selfservicePage.MenuText 545 </a> 546 </li> 547 548 </ul> 549 } 550 551 </nav> 552 </div> 553 </div> 554 555 <main> 556 557 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 558 @using Dynamicweb.Core.Helpers 559 560 561 @SnippetStart("sidebar") 562 @GetValue("DwContent(contentsidebar)") 563 @SnippetEnd("sidebar") 564 565 @{ 566 string page_banner = GetString("Item.Banner_Image"); 567 string page_banner_alt = GetString("Item.Banner_Image_Alt"); 568 string page_banner_title = GetString("Item.Banner_Image_Title"); 569 string page_text = GetString("Item.Text"); 570 string page_heading = GetString("Item.Heading"); 571 //var indexPage = pageService.GetFirstPageForArea(Pageview.AreaID); 572 //var topPage = pageService.GetPage(GetInteger("DwTopPageID")); 573 574 var selfservice_list = GetLoop("Item.SelfService_List.Options"); 575 bool page_show_latest_news = GetBoolean("Item.Show_Latest_News"); 576 577 string page_area = GetString("Item.Site_Area"); 578 if (string.IsNullOrEmpty(page_area) && topPage != null && !topPage.IsFolder && topPage.Item["Site_Area"] != null) { 579 page_area = (string)topPage.Item["Site_Area"]; 580 } 581 582 Dictionary<Dynamicweb.Content.Page, System.Collections.Generic.IEnumerable<Dynamicweb.Content.Page>> menuPages = new Dictionary<Dynamicweb.Content.Page, System.Collections.Generic.IEnumerable<Dynamicweb.Content.Page>>(); 583 584 // LLA --------------------------- 585 string colClass = "col-md-8"; 586 bool rightCol = false; 587 string selfserviceList = GetString("Item.SelfService_List"); 588 string sidebar = GetString("DwContent(contentsidebar)"); 589 int pageID = GetInteger("DwPageID"); 590 591 if (!string.IsNullOrWhiteSpace(selfserviceList) || page_show_latest_news || !string.IsNullOrWhiteSpace(sidebar)) { 592 rightCol = true; 593 } 594 // Selvbetjening - 4819 595 // Nyheder - 4813 596 if (pageID == 4819 || pageID == 4813) { 597 colClass = "col-md-12"; 598 599 } else if (!rightCol) { 600 //colClass = "col-md-12"; 601 colClass = "col-md-8"; 602 } 603 604 // DELETE FOLLOWING ----------------- 605 bool isLocalSpecialIndex = Dynamicweb.Context.Current.Request.Url.GetLeftPart(UriPartial.Authority).IndexOf("https://localhost:") == 0; 606 bool isLocalIndex = isLocalSpecialIndex || Dynamicweb.Context.Current.Request.Url.GetLeftPart(UriPartial.Authority) == "http://silkeborgforsyning.local.dynamicweb.dk"; 607 608 } 609 610 @SnippetStart("OpenGraph") 611 @{ 612 // Opengraph ------------------------ 613 string openGraphDomain = Dynamicweb.Context.Current.Request.Url.Scheme + "://" + Dynamicweb.Context.Current.Request.Url.Host; 614 615 string openGraphDescription = page_text; 616 617 var openGraphImage = page_banner; 618 619 string openGraphImageAlt = page_banner_alt; 620 621 string facebookAppId = GetString("Item.SoMeFacebookAppID"); 622 623 // Opengraph end -------------------- 624 } 625 626 <!-- OpenGraph --> 627 <meta property="og:url" content="@Pageview.SearchFriendlyUrl"> 628 <meta property="og:type" content="website"> 629 <meta property="og:title" content="@page_heading"> 630 @if (!string.IsNullOrWhiteSpace(facebookAppId)) { 631 <meta property="fb:app_id" content="@facebookAppId"> 632 } 633 @if (!string.IsNullOrWhiteSpace(openGraphDescription)) { 634 string stripDescription = StringHelper.StripHtml(openGraphDescription); 635 if (stripDescription.Length > 200) { 636 stripDescription = HttpUtility.HtmlDecode(stripDescription.Substring(0, 200)); 637 } else { 638 stripDescription = HttpUtility.HtmlDecode(stripDescription); 639 } 640 641 <meta property="og:description" content="@HttpUtility.HtmlDecode(stripDescription)"> 642 } 643 644 @if (openGraphImage != null) { 645 <meta name="image" property="og:image" content="@(openGraphDomain + openGraphImage)"> 646 if (!string.IsNullOrWhiteSpace(openGraphImageAlt)) { 647 <meta property="og:image:alt" content="@openGraphImageAlt"> 648 } 649 } 650 <meta property="og:site_name" content='@Pageview.Area.Name'> 651 652 <!-- OpenGraph end --> 653 654 @SnippetEnd("OpenGraph") 655 656 <div class="container-fluid g-0"> 657 658 659 @if (!string.IsNullOrWhiteSpace(page_banner)) { 660 page_banner = "/Admin/Public/GetImage.ashx?Image=" + page_banner + "&Format=webp&Quality=85&Width=1920&Height=260&Crop=7&DoNotUpscale=false"; 661 662 <div class="img-cover-bg"> 663 <img src="@page_banner" class="img-fluid w-100" alt="@page_banner_alt" title="@page_banner_title"> 664 </div> 665 } 666 667 </div> 668 669 <div class="container mb-5 mt-3"> 670 <div class="row"> 671 672 <div class="col-md-12"> 673 <div class="row"> 674 <div class="col-12"> 675 <nav class="mb-4" aria-label="breadcrumb"> 676 677 @RenderNavigation(new { 678 startlevel = 1, 679 endlevel = 99, 680 template = "Breadcrumb.xslt", 681 expandmode = "All", 682 parentid = 0, 683 areaid = Pageview.AreaID, 684 includemode = "All", 685 _pageFirstId = indexPage.ID, 686 _pageFirstTitle = (string)indexPage.Item["Title"] 687 }) 688 </nav> 689 </div> 690 691 <div class="@colClass"> 692 693 <div id="content" class="page"> 694 695 <section class="row"> 696 @if (!string.IsNullOrWhiteSpace(page_heading) || !string.IsNullOrWhiteSpace(page_text)) { 697 <article class="col-md-12 editor"> 698 @if (!string.IsNullOrWhiteSpace(page_heading)) { 699 <h1>@page_heading</h1> 700 } 701 @if (!string.IsNullOrWhiteSpace(page_text)) { 702 @page_text 703 } 704 </article> 705 } 706 707 @GetValue("DwContent(contentarea)") 708 709 </section> 710 </div> 711 </div> 712 713 @if (rightCol) { 714 <aside class="col-md-4 custom-left-side"> 715 716 <!-- SUB MENU --> 717 718 719 720 721 @if (!string.IsNullOrWhiteSpace(GetString("Item.SelfService_List"))) { 722 723 <div class="box-container layout-grey p-4 mb-4 sub-menu hidden-sm hidden-xs"> 724 <div class="flex-item-top"> 725 <h3>@Translate("Genveje til selvbetjening")</h3> 726 <ul> 727 @foreach (var s in selfservice_list.Where(o => o.GetBoolean("Item.SelfService_List.Option.IsSelected"))) { 728 Dynamicweb.Content.Page selfServicePage = pageService.GetPageForItem("Page_SelfService", s.GetString("Item.SelfService_List.Option.Value")); 729 if (selfServicePage.Active) { 730 string selfServicePageLink = "/Default.aspx?ID=" + selfServicePage.ID; 731 <li><a href="@selfServicePageLink">@s.GetString("Item.SelfService_List.Option.Label")</a></li> 732 } 733 734 } 735 </ul> 736 </div> 737 738 <div class="flex-item-bottom"> 739 740 @Skabertrang.Helpers.Icons.GetIcon("customerservice") 741 @*<i class="icon icon-customer_service"></i>*@ 742 743 </div> 744 </div> 745 746 } 747 748 <!-- LATEST NEWS FOR AREA --> 749 @if (page_show_latest_news) { 750 DateTime now = DateTime.Now; 751 752 //pageService.GetPagesForItems( new List<string>() { "Page_News" }); 753 foreach (var i in Dynamicweb.Services.Pages.GetPagesForItems(new List<string>() { "Page_News" }) 754 .Where(x => x.Active && x.Item["Site_Area"] != null && ((string)x.Item["Site_Area"]).IndexOf(page_area) > -1 755 && x.Item["Publishing_Date_Start"] != null 756 && ((DateTime)x.Item["Publishing_Date_Start"] < now 757 && (x.Item["Unpublishing_Date_Start"] == null || (DateTime)x.Item["Unpublishing_Date_Start"] > now))) 758 .OrderByDescending(x => x.Item["Is_Pinned"]).ThenByDescending(x => x.Item["Publishing_Date_Start"])) { 759 760 string list_image = ""+ i.Item["Preview_Image"]; 761 string list_image_title = "" + i.Item["Preview_Image_Title"]; 762 string list_image_alt = "" + i.Item["Preview_Image_ALt"]; 763 string list_text = ""+ i.Item["Preview_Text"]; 764 765 <a href="/Default.aspx?ID=@i.ID" class="box-container layout-grey d-block p-4 mb-4"> 766 <div class="mb-5"> 767 @if (!string.IsNullOrWhiteSpace(list_image)) { 768 <img src="@list_image" class="img-fluid w-100" alt="@list_image_alt" title="@list_image_title"> 769 } 770 <h3 class="mt-4"> 771 @i.MenuText 772 </h3> 773 @list_text 774 </div> 775 776 <div class="row"> 777 <div class="col-md-7 col-sm-6"> 778 @if (i.Item["Site_Area"] != null) { 779 foreach (string t in ((string)i.Item["Site_Area"]).Split(',')) { 780 @*<i class="icon icon-@t"></i>*@ 781 @Skabertrang.Helpers.Icons.GetIcon(t) 782 } 783 } 784 </div> 785 <div class="col-md-5 col-sm-6 col-xs-8 text-end"> 786 <span type="button" class="btn btn-primary">@Translate("News_Spot_Button", "Læs mere")</span> 787 </div> 788 </div> 789 </a> 790 break; 791 } 792 } 793 794 <div class="row box-row"> 795 @RenderSnippet("sidebar") 796 </div> 797 798 </aside> 799 } 800 801 </div> 802 </div> 803 804 </div> 805 </div> 806 807 @SnippetStart("PageJs") 808 <script> 809 function goBack() { 810 window.history.back(); 811 } 812 813 $(document).ready(function () { 814 $('#nav-container').on({ 815 focusout: function (e) { 816 $(this).data('submenuTimer', setTimeout(function () { 817 $(".nav-tabs > a.hasChildren.active").removeClass('active'); 818 $('#nav-container').find(".nav-dropdown").addClass('hidden'); 819 }.bind(this), 0)); 820 }, 821 focusin: function (e) { 822 clearTimeout($(this).data('submenuTimer')); 823 }, 824 keydown: function (e) { 825 if (e.which === 27) { 826 $(".nav-tabs > a.hasChildren.active").removeClass('active'); 827 $('#nav-container').find(".nav-dropdown").addClass('hidden'); 828 e.preventDefault(); 829 } 830 } 831 }); 832 }); 833 $(".nav-tabs > a.hasChildren").click(function (evt) { 834 evt.preventDefault(); 835 $(this).siblings().removeClass('active'); 836 $(this).toggleClass('active'); 837 838 var currentRootPageId = $(this).attr('data-root-page'); 839 var parentRow = $(this).closest('#nav-container'); 840 $('#nav-container').find(".nav-dropdown[data-root-page='" + currentRootPageId + "']").toggleClass('hidden'); 841 $('#nav-container').find(".nav-dropdown[data-root-page!='" + currentRootPageId + "']").addClass('hidden'); 842 }); 843 844 $(".scroolNav > li.hasChildren > a").click(function (evt) { 845 846 evt.preventDefault(); 847 848 var $parentLi = $(this).parent('li'); 849 var $parentLiSiblings = $parentLi.siblings(); 850 851 $parentLiSiblings.removeClass('active'); 852 $parentLiSiblings.find(".scroll-dropdown").addClass('hidden'); 853 854 $parentLi.toggleClass('active'); 855 $parentLi.find(".scroll-dropdown").toggleClass('hidden'); 856 }); 857 858 // STICKY MENU 859 $(window).scroll(function () { 860 if ($(this).scrollTop() > 650) { 861 862 $('.scroll').removeClass('CustomHidden'); 863 $('.scroll').addClass('show'); 864 } else { 865 $('.scroll').addClass('CustomHidden'); 866 $('.scroll').removeClass('show'); 867 $('.scroll-dropdown').addClass('hidden'); 868 $('.scroolNav > li.active').removeClass('active'); 869 } 870 }); 871 872 //$(".nav-tabs > a").mouseenter(function () { 873 // $(this).siblings().removeClass('active'); 874 // $(this).addClass('active'); 875 876 877 // var currentRootPageId = $(this).attr('data-root-page'); 878 // var parentRow = $(this).closest('#nav-container'); 879 // $('#nav-container').find(".nav-dropdown[data-root-page='" + currentRootPageId + "']").removeClass('hidden'); 880 // $('#nav-container').find(".nav-dropdown[data-root-page!='" + currentRootPageId + "']").addClass('hidden'); 881 //}); 882 //$("#nav-container").mouseleave(function () { 883 // $(".nav-tabs > a").removeClass('active'); 884 // $('#nav-container .nav-dropdown').addClass('hidden'); 885 //}); 886 887 (function () { 888 $('a').click(function (e) { e.stopPropagation(); }) 889 }).on('click', 'a', function (e) { e.stopPropagation(); }) 890 </script> 891 <!-- https://stackoverflow.com/questions/18325779/bootstrap-3-collapse-show-state-with-chevron-icon --> 892 @SnippetEnd("PageJs") 893 894 895 </main> 896 897 <footer id="footer" class="layout-dark-blue"> 898 <div class="container"> 899 <div class="row"> 900 <div class="col-md-12 mb-5"> 901 <img src="@companyLogoAlternative" alt="@companyName" title="@companyName" class="img-fluid logo footer-logo"> 902 </div> 903 <div class="col-12"> 904 <div class="row"> 905 906 <div class="col-lg-12 col-xl-8"> 907 <div class="row"> 908 909 910 <div class="col-lg-6 col-xl-6"> 911 <h3>@Translate("Kontakt")</h3> 912 <address> 913 <p> 914 @companyAddress 915 <br> 916 @companyZipAndCity 917 </p> 918 <p> 919 @Translate("Telefon"): <a href="tel:@companyPhoneClean" target="_top">@companyPhone</a> 920 <br> 921 @Translate("Email"): @Skabertrang.Helpers.Text.Rot13_Email(companyMail) 922 </p> 923 </address> 924 925 @footerText 926 </div> 927 928 <div class="col-lg-6 col-xl-6 "> 929 @footerEkstraText 930 </div> 931 932 933 </div> 934 </div> 935 936 <div class="col-lg-12 col-xl-4 "> 937 938 <div class="row"> 939 @foreach (var group in GetLoop("Item.Area.Footer_Links")) { 940 <div class="col-lg-6 col-xl-12 footer-space"> 941 <h3>@group.GetString("Item.Area.Footer_Links.Text")</h3> 942 <ul class="list-unstyled"> 943 @foreach (var link in group.GetLoop("Item.Area.Footer_Links.List")) { 944 string footerLink = link.GetString("Item.Area.Footer_Links.List.Link"); 945 <li> 946 <a href="@footerLink">@link.GetString("Item.Area.Footer_Links.List.Text")</a> 947 </li> 948 } 949 </ul> 950 </div> 951 } 952 </div> 953 </div> 954 955 </div> 956 </div> 957 958 <div class="col-md-12 text-right"> 959 <div class="linkToIntranet"> 960 <a href="https://intranet.silkeborgforsyning.dk/forside" target="_blank" title="Silkeborg Forsyning Intranet"> 961 <i class="fal fa-lock-alt"></i> 962 </a> 963 </div> 964 </div> 965 </div> 966 </div> 967 968 </footer> 969 970 971 <!-- ------------------------------------------------------------------- --> 972 @* -- -- -- -- -- COOKIE -- -- -- -- -- *@ 973 @if (cookieSettingsPage != null && cookieSettingsPage.Item["CookieCategories"] != null) { 974 var cookieCategoryItems = Dynamicweb.Content.Items.ItemList.GetItemListById((int)cookieSettingsPage.Item["CookieCategories"]).Relations; 975 976 if (cookieCategoryItems.Any()) { 977 978 <div id="cookie-choice-renew" title="Cookie valg" aria-label="renew-consent"> 979 <svg class="svg-inline--fa fa-cookie-bite fa-w-16" aria-hidden="true" focusable="false" data-prefix="fal" data-icon="cookie-bite" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512" data-fa-i2svg=""><path fill="currentColor" d="M352 328c-13.25 0-24 10.74-24 24 0 13.25 10.75 24 24 24s24-10.75 24-24c0-13.26-10.75-24-24-24zM184 192c0-13.26-10.75-24-24-24s-24 10.74-24 24c0 13.25 10.75 24 24 24s24-10.75 24-24zm8 136c-13.25 0-24 10.74-24 24 0 13.25 10.75 24 24 24s24-10.75 24-24c0-13.26-10.75-24-24-24zm96-96c-13.25 0-24 10.74-24 24 0 13.25 10.75 24 24 24s24-10.75 24-24c0-13.26-10.75-24-24-24zm222.52 23.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45C249.57.5 242.9 0 236.26 0c-20.68 0-41.18 4.85-59.79 14.33l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.28a132.555 132.555 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.14c6.86 1.09 13.76 1.62 20.64 1.62 20.72 0 41.25-4.88 59.89-14.38l69.13-35.22a132.221 132.221 0 0 0 57.79-57.81l35.1-68.88c12.56-24.63 17.01-52.57 12.91-79.9zm-41.42 65.36L434 390.07c-9.68 19-24.83 34.15-43.81 43.82l-69.13 35.22C307.08 476.23 291.39 480 275.7 480c-5.21 0-10.47-.41-15.63-1.23l-76.7-12.14c-21-3.33-40.05-13.04-55.09-28.08l-54.77-54.76c-15.1-15.09-24.84-34.23-28.18-55.33l-12.08-76.27c-3.35-21.12.02-42.36 9.72-61.41l35.1-68.88c9.68-19 24.83-34.15 43.81-43.82L191 42.85c11.33-5.77 23.8-9.33 36.51-10.46 13.15 63.15 63.84 112.95 127.25 124.86 11.91 63.42 61.71 114.11 124.87 127.25-1.1 12.73-4.64 25.14-10.53 36.68z"></path></svg> 980 </div> 981 982 <div id="cookieWarningContainer" class="@cookieWarningClass"> 983 <form id="cookieWarningForm" method="post" action="/Admin/Public/CookieOptInLevelConfig.aspx"> 984 <input type="hidden" name="cmd" value="SetCookieOptInLevel"> 985 <input type="hidden" name="OptInLevel" id="OptInLevel" value="1"> 986 987 <fieldset> 988 <legend>@cookieSettingsPage.Item["CookieHeader"]</legend> 989 <div class="modal-header"> 990 <div class="row"> 991 <div class="col-xs-12 editor"> 992 @cookieSettingsPage.Item["CookieIntro"] 993 <hr class="mt-4 mb-2 w-100"> 994 <p class="text-center"> 995 <button type="button" class="btn btn-primary-naked ml-3" onclick="setOptInCookie(1);" tapindex="1">@Translate("Tillad valgte")</button> 996 <button type="button" class="rm-button btn btn-primary ml-3" onclick="setOptInCookie(2);">@Translate("Tillad alle")</button> 997 <button type="submit" style="display: none; visibility: hidden;">Send</button> 998 </p> 999 </div> 1000 </div> 1001 </div> 1002 @{ 1003 string showDetails = Translate("Vis detaljer"); 1004 string hideDetails = Translate("Skjul detaljer"); 1005 <div class="p-4"> 1006 <div class="row justify-content-md-center"> 1007 @foreach (Dynamicweb.Content.Items.Item category in cookieCategoryItems) { 1008 string categoryName = "" + category["Name"]; 1009 string categorySysName = "" + category["SysName"]; 1010 string categoryID = "cookecategory-" + category.Id; 1011 string categoryDescription = "" + category["Description"]; 1012 var cookies = Dynamicweb.Content.Items.ItemList.GetItemListById((int)category["Cookies"]).Relations; 1013 string translateLabel = Translate("Accepter") + " " + categoryName + " " + Translate("cookies"); 1014 1015 if (cookies.Any()) { 1016 <div class="col-sm-4 col-xs-4 checkbox-container"> 1017 <div class="custom-control custom-checkbox text-center" data-nogutter="1"> 1018 <span class="d-block">@categoryName</span> 1019 @if (categorySysName == "Essential") { 1020 <input type="checkbox" class="custom-control-input" id="chk-cookie-@categorySysName" value="@categorySysName" checked="checked" disabled='disabled'> 1021 } else { 1022 if (AllowedCookieCategories.Contains(categorySysName)) { 1023 <input type="checkbox" class="custom-control-input" checked="checked" id="chk-cookie-@categorySysName" name="OptInCategory" value="@categorySysName"> 1024 } else { 1025 <input type="checkbox" class="custom-control-input" id="chk-cookie-@categorySysName" name="OptInCategory" value="@categorySysName"> 1026 } 1027 } 1028 <label class="custom-control-label" for="chk-cookie-@categorySysName"><span class="sr-only">@translateLabel</span></label> 1029 </div> 1030 </div> 1031 } 1032 } 1033 </div> 1034 1035 <div class="row"> 1036 <div class="col-12"> 1037 <p class="text-center"> 1038 <a class="btn btn-primary-naked mr-3 collapsed" id="cookie-details-button" data-toggle="collapse" role="button" aria-expanded="false" data-open-text="Vis detaljer" data-close-text="Skjul detaljer" aria-controls="collapse-cookie-info-container">Vis detaljer</a> 1039 </p> 1040 </div> 1041 </div> 1042 </div> 1043 <div class="collapse" id="collapse-cookie-info-container"> 1044 <div class="cookie-info-container"> 1045 @foreach (Dynamicweb.Content.Items.Item category in cookieCategoryItems) { 1046 string categoryName = "" + category["Name"]; 1047 string categorySysName = "" + category["SysName"]; 1048 string categoryID = "cookecategory-" + category.Id; 1049 string categoryDescription = "" + category["Description"]; 1050 var cookies = Dynamicweb.Content.Items.ItemList.GetItemListById((int)category["Cookies"]).Relations; 1051 if (cookies.Any()) { 1052 <div class="d-block toogle-f-content" data-toggle="collapse" role="button" aria-expanded="false" aria-controls="collapse-cookie-info-@categoryID" tabindex="0"> 1053 <div class="row"> 1054 <div class="col-xs-12 col-sm-3 cookie-info-container-title"> 1055 1056 <div class="plus-tab"> 1057 <div class="plus-btn"> 1058 <span></span> 1059 <span></span> 1060 <span></span> 1061 </div> 1062 </div> 1063 1064 <strong>@categoryName</strong> 1065 1066 </div> 1067 <div class="col-xs-12 col-sm-9"> 1068 @categoryDescription 1069 </div> 1070 </div> 1071 </div> 1072 <div class="collapse" id="collapse-cookie-info-@categoryID"> 1073 @foreach (Dynamicweb.Content.Items.Item cookie in cookies) { 1074 string titleClass = "col-xs-12 col-sm-3"; 1075 string contentClass = "col-xs-12 col-sm-9"; 1076 string dataProcessor = Translate("Databehandler"); 1077 1078 string privacyPolicyLink = cookie["PrivacyPolicy"].ToString(); 1079 1080 string privacyPolicy = Translate("Privatlivspolitik"); 1081 1082 <div class="collapse-cookie-detail"> 1083 <div class="row collapse-cookie-info-header"> 1084 <div class="@titleClass"> 1085 <strong> 1086 @dataProcessor 1087 </strong> 1088 </div> 1089 <div class="@contentClass"> 1090 <p>@cookie["DataProcessor"]</p> 1091 </div> 1092 </div> 1093 1094 <div class="row"> 1095 <div class="@titleClass"> 1096 <strong> 1097 @Translate("Formål") 1098 </strong> 1099 </div> 1100 <div class="@contentClass"> 1101 @cookie["Purpose"] 1102 </div> 1103 </div> 1104 <div class="row"> 1105 <div class="@titleClass"> 1106 <strong> 1107 @privacyPolicy 1108 </strong> 1109 </div> 1110 <div class="@contentClass"> 1111 <p><a target="_blank" href="@privacyPolicyLink" tabindex="0">@privacyPolicyLink</a></p> 1112 </div> 1113 </div> 1114 <div class="row"> 1115 <div class="@titleClass"> 1116 <strong> 1117 @Translate("Udløb") 1118 </strong> 1119 </div> 1120 <div class="@contentClass"> 1121 <p>@cookie["Expires"]</p> 1122 </div> 1123 </div> 1124 <div class="row"> 1125 <div class="@titleClass"> 1126 <strong> 1127 @Translate("Navn") 1128 </strong> 1129 </div> 1130 <div class="@contentClass"> 1131 <p>@cookie["Name"]</p> 1132 </div> 1133 </div> 1134 <div class="row"> 1135 <div class="@titleClass"> 1136 <strong> 1137 @Translate("Udbyder") 1138 </strong> 1139 </div> 1140 <div class="@contentClass"> 1141 <p>@cookie["Provider"]</p> 1142 </div> 1143 </div> 1144 1145 </div> 1146 } 1147 </div> 1148 1149 } 1150 } 1151 </div> 1152 </div> 1153 } 1154 </fieldset> 1155 </form> 1156 1157 </div> 1158 } 1159 } 1160 1161 1162 @* -- -- -- -- -- /COOKIE -- -- -- -- -- *@ 1163 1164 1165 <!-- ------------------------------------------------------------------- --> 1166 @{ 1167 string popperJsPath = "https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"; 1168 } 1169 <script src="@(designBaseUrl)js/plugins.js"></script> 1170 <script src="@popperJsPath" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script> 1171 <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js" integrity="sha384-Atwg2Pkwv9vp0ygtn1JAojH0nYbwNJLPhwyoVbhoPwBhjQPR5VtM2+xf0Uwh9KtT" crossorigin="anonymous"></script> 1172 <script src="https://cdnjs.cloudflare.com/ajax/libs/typeahead.js/0.11.1/typeahead.bundle.min.js"></script> 1173 <script src="@(designBaseUrl)assets/formvalidation/js/formValidation.min.js"></script> 1174 <script src="@(designBaseUrl)assets/formvalidation/js/framework/bootstrap.min.js"></script> 1175 <script src="@(designBaseUrl)assets/formvalidation/js/language/da_DK.js"></script> 1176 1177 <script src="@(designBaseUrl)js/simple-lightbox.min.js"></script> 1178 <script src="@(designBaseUrl)js/custom.min.js"></script> 1179 1180 <script async="async" src="/Files/Templates/Designs/SF2019/js/zeynep.js"></script> 1181 1182 @* -- WCAG -- *@ 1183 <script src="https://cdn.polyfill.io/v2/polyfill.js?features=Element.prototype.classList"></script> 1184 <script src="https://unpkg.com/focus-visible"></script> 1185 1186 @RenderSnippet("PageJs") 1187 @RenderSnippet("ParagraphJs") 1188 @RenderSnippet("MapScript") 1189 @RenderSnippet("RenderWarningIconScript") 1190 1191 </body> 1192 </html> 1193 1194 @* -- -- -- -- -- SKAL FLYTTES -- -- -- -- -- *@ 1195 <script> 1196 1197 // GO BACK -------------------------------------------------------------------------------------------------------------------- 1198 function goBack() { 1199 window.history.back(); 1200 } 1201 1202 $(document).ready(function () { 1203 $('#nav-container').on({ 1204 focusout: function (e) { 1205 $(this).data('submenuTimer', setTimeout(function () { 1206 $(".nav-tabs > a.hasChildren.active").removeClass('active'); 1207 $('#nav-container').find(".nav-dropdown").addClass('d-none'); 1208 }.bind(this), 0)); 1209 }, 1210 focusin: function (e) { 1211 clearTimeout($(this).data('submenuTimer')); 1212 }, 1213 keydown: function (e) { 1214 if (e.which === 27) { 1215 $(".nav-tabs > a.hasChildren.active").removeClass('active'); 1216 $('#nav-container').find(".nav-dropdown").addClass('d-none'); 1217 e.preventDefault(); 1218 } 1219 } 1220 }); 1221 }); 1222 $(".nav-tabs > a.hasChildren").click(function (evt) { 1223 evt.preventDefault(); 1224 $(this).siblings().removeClass('active'); 1225 $(this).toggleClass('active'); 1226 1227 var currentRootPageId = $(this).attr('data-root-page'); 1228 var parentRow = $(this).closest('#nav-container'); 1229 $('#nav-container').find(".nav-dropdown[data-root-page='" + currentRootPageId + "']").toggleClass('d-none'); 1230 $('#nav-container').find(".nav-dropdown[data-root-page!='" + currentRootPageId + "']").addClass('d-none'); 1231 }); 1232 1233 $(".scroolNav > li.hasChildren > a").click(function (evt) { 1234 1235 evt.preventDefault(); 1236 1237 var $parentLi = $(this).parent('li'); 1238 var $parentLiSiblings = $parentLi.siblings(); 1239 1240 $parentLiSiblings.removeClass('active'); 1241 $parentLiSiblings.find(".scroll-dropdown").addClass('d-none'); 1242 1243 $parentLi.toggleClass('active'); 1244 $parentLi.find(".scroll-dropdown").toggleClass('d-none'); 1245 }); 1246 1247 // STICKY MENU ---------------------------------------------------------------------------------------------------------------- 1248 $(window).scroll(function () { 1249 if ($(this).scrollTop() > 650) { 1250 1251 $('.scroll').removeClass('CustomHidden'); 1252 $('.scroll').addClass('show'); 1253 } else { 1254 $('.scroll').addClass('CustomHidden'); 1255 $('.scroll').removeClass('show'); 1256 $('.scroll-dropdown').addClass('d-none'); 1257 $('.scroolNav > li.active').removeClass('active'); 1258 } 1259 }); 1260 var lightbox = new SimpleLightbox('.gallery a', { /* options */ }); 1261 </script> 1262 @* COOKIE --------------------------------- *@ 1263 <script> 1264 document.getElementById("cookie-choice-renew").onclick = function () { 1265 showCookieChoice(); 1266 }; 1267 document.getElementById("cookie-details-button").onclick = function () { 1268 1269 if (this.classList.contains("opened")) { 1270 this.text = this.getAttribute("data-open-text"); 1271 this.classList.remove("opened"); 1272 document.getElementById("collapse-cookie-info-container").classList.remove("show"); 1273 } else { 1274 this.text = this.getAttribute("data-close-text"); 1275 this.classList.add("opened"); 1276 1277 document.getElementById("collapse-cookie-info-container").classList.add("show"); 1278 } 1279 }; 1280 var cookieExtraInfoElements = document.getElementsByClassName("toogle-f-content"); 1281 for (var i = 0; i < cookieExtraInfoElements.length; i++) { 1282 1283 // --------------------------------------------------------------------------------- 1284 1285 // Get the input field 1286 var input = cookieExtraInfoElements[i]; 1287 1288 // Execute a function when the user releases a key on the keyboard 1289 input.addEventListener("click", toggleExtraInfo); 1290 input.addEventListener("keyup", toggleExtraInfo); 1291 1292 // --------------------------------------------------------------------------------- 1293 } 1294 function toggleExtraInfo(event) { 1295 // Number 13 is the "Enter" key on the keyboard 1296 if (event.keyCode === 13 || event.type == "click") { 1297 // Cancel the default action, if needed 1298 1299 event.preventDefault(); 1300 1301 var elementToToggle = this.getAttribute("aria-controls"); 1302 if (this.classList.contains("opened")) { 1303 this.classList.remove("opened"); 1304 document.getElementById(elementToToggle).classList.remove("show"); 1305 } else { 1306 this.classList.add("opened"); 1307 document.getElementById(elementToToggle).classList.add("show"); 1308 } 1309 1310 // Trigger the button element with a click 1311 cookieExtraInfoElements[i].onclick = function () { 1312 var elementToToggle = this.getAttribute("aria-controls"); 1313 if (this.classList.contains("opened")) { 1314 this.classList.remove("opened"); 1315 document.getElementById(elementToToggle).classList.remove("show"); 1316 } else { 1317 this.classList.add("opened"); 1318 document.getElementById(elementToToggle).classList.add("show"); 1319 } 1320 } 1321 } 1322 } 1323 1324 function setOptInCookie(optInLevel) { 1325 document.getElementById("OptInLevel").value = optInLevel; 1326 var formElement = document.getElementById("cookieWarningForm"); 1327 if (optInLevel == 1) { 1328 var essentialElement = document.createElement('input'); 1329 if (document.getElementById('cookie-essential') === null) { 1330 essentialElement.setAttribute("name", "OptInCategory"); 1331 essentialElement.setAttribute("value", "Essential"); 1332 essentialElement.setAttribute("type", "hidden"); 1333 essentialElement.setAttribute("id", "cookie-essential"); 1334 formElement.appendChild(essentialElement); 1335 } 1336 1337 if (document.getElementById("chk-cookie-Marketing") != null && document.getElementById("chk-cookie-Marketing").checked && typeof fbq !== 'undefined') { 1338 fbq('consent', 'grant'); 1339 } 1340 } 1341 if (optInLevel == 2) { 1342 if (document.getElementById("chk-cookie-Statistical") != null) { 1343 document.getElementById("chk-cookie-Statistical").checked = true; 1344 } 1345 if (document.getElementById("chk-cookie-Marketing") != null) { 1346 document.getElementById("chk-cookie-Marketing").checked = true; 1347 } 1348 if (typeof fbq !== 'undefined') { 1349 fbq('consent', 'grant'); 1350 } 1351 } 1352 var formData = new FormData(formElement); 1353 1354 var xmlhttp = new XMLHttpRequest(); 1355 xmlhttp.onreadystatechange = function () { 1356 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 1357 hideCookieChoice(); 1358 return false; 1359 } 1360 } 1361 1362 xmlhttp.open(formElement.method, formElement.action); 1363 xmlhttp.send(formData); 1364 1365 return false; 1366 } 1367 function showCookieChoice() { 1368 1369 var cookieWarningContainer = document.getElementById("cookieWarningContainer"); 1370 cookieWarningContainer.style.display = "flex"; 1371 cookieWarningContainer.removeAttribute("tab-index"); 1372 cookieWarningContainer.removeAttribute("aria-hidden"); 1373 document.getElementById("cookie-choice-renew").style.display = "none"; 1374 } 1375 function hideCookieChoice() { 1376 1377 var cookieWarningContainer = document.getElementById("cookieWarningContainer"); 1378 cookieWarningContainer.style.display = "none"; 1379 cookieWarningContainer.setAttribute("tab-index", "-1"); 1380 cookieWarningContainer.setAttribute("aria-hidden", "true"); 1381 document.getElementById("cookie-choice-re new").style.display = "block"; 1382 } 1383 </script> 1384 @* COOKIE --------------------------------- *@ 1385 1386 <script> 1387 $(".nav-item[data-dropdown='1']").on("keydown", function (event) { 1388 if (event.which == 13) 1389 1390 if ($(this).hasClass("dd-active")) { 1391 $(this).removeClass("dd-active") 1392 } else { 1393 $(this).addClass("dd-active") 1394 } 1395 }); 1396 </script>