Error executing template "Designs/Web2020/_parsed/Page.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_0ff6c18b5cf541d19d44e54917f0a3bc.Execute() in D:\dynamicweb.net\Solutions\Skabertrang\fsr.cloud.dynamicweb-cms.com\files\Templates\Designs\Web2020\_parsed\Page.parsed.cshtml:line 212
   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 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 2 @using System.IO 3 @using System.Web.UI 4 @using Dynamicweb.Environment 5 @using System 6 @using System.Text.RegularExpressions; 7 8 @functions{ 9 string Rot13(string value) { 10 var chars = value.ToCharArray(); 11 12 for (var i = 0; i < chars.Length; i++) { 13 var number = (int)chars[i]; 14 15 if (number >= 'a' && number <= 'z') { 16 if (number > 'm') { 17 number -= 13; 18 } else { 19 number += 13; 20 } 21 } else if (number >= 'A' && number <= 'Z') { 22 if (number > 'M') { 23 number -= 13; 24 } else { 25 number += 13; 26 } 27 } 28 chars[i] = (char)number; 29 } 30 return new string(chars); 31 } 32 } 33 34 @helper Rot13_Email(string email, string text = "") { 35 var tpl = new char[] { 36 '<', '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', '>' 37 }; 38 <span class="rot13Email">@Rot13(new string(tpl).Replace("#1", email).Replace("#2", string.IsNullOrWhiteSpace(text) ? email : text).Replace("[a]", "@"))</span> 39 } 40 41 @helper renderStar() { 42 <svg class="star" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 131 125" aria-label="stjerne ikon" alt="Stjerne ikon"> 43 <g data-name="Layer 2"> 44 <g data-name="Layer 1"> 45 <path data-name="Fill 1" class="cls-1 fsr-star" d="M131,52.3c0-8.93-6.89-16.16-13.36-16.16-11.64,0-35.77,18.7-47.84,25.5C72.4,48.47,80.15,28.48,80.15,14c0-8.51-5.61-14-14.65-14C58.17,0,50.85,5.1,50.85,14c0,13.19,7.75,34.44,10.34,47.61-12-6.8-35.33-25.51-47.4-25.51C6,36.13,0,42.94,0,52.3,0,70.58,40.5,67.17,59,69.72,46.53,80.78,19,97.79,19,110.12c0,7.22,8.63,14.88,16,14.88,14.65,0,23.7-35.72,30.6-50.6C72.4,88.43,81,125,96.1,125c7.76,0,15.94-7.66,15.94-14.88C112,96.93,84,80.36,72.4,69.3c18.09-2.55,58.6,1.28,58.6-17"></path> 46 </g> 47 </g> 48 </svg> 49 } 50 51 @helper RenderBreadcrumElement(string name, string path, int counter) { 52 <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 53 <a itemprop="item" href="@path" title="@name"> 54 <span itemprop="name"> 55 @name 56 </span> 57 <meta itemprop="position" content="@counter" /> 58 </a> 59 </li> 60 } 61 @Title("Standard Page") 62 @Description("Template for a standard page") 63 @{ 64 <!-- used in _Nav.cshtml --> 65 string contrastBodyClass = ""; 66 Dynamicweb.Environment.Cookie cookieContrastDarkSet = CookieManager.GetCookie("contrast-dark-set"); 67 string ariaChecked = "false"; 68 string ariaLabel = "aktiver mørk kontrast"; 69 string changeContrastChecked = ""; 70 71 72 if (cookieContrastDarkSet != null && cookieContrastDarkSet.Value == "dark-contrast") { 73 ariaChecked = "true"; 74 ariaLabel = "deaktiver mørk kontrast"; 75 changeContrastChecked = "checked"; 76 contrastBodyClass = "dark-contrast"; 77 } else { 78 ariaChecked = "false"; 79 ariaLabel = "aktiver mørk kontrast"; 80 changeContrastChecked = ""; 81 } 82 <!-- used in _Nav.cshtml --> 83 84 string companyName = Model.Area.Item.GetString("CompanyName"); 85 string companyAddress = Model.Area.Item.GetString("CompanyAddress"); 86 string companyZipAndCity = Model.Area.Item.GetString("Company_Postal") + " " + Model.Area.Item.GetString("CompanyCity"); 87 string companyMail = Model.Area.Item.GetString("CompanyEmail"); 88 string companyPhone = Model.Area.Item.GetString("CompanyPhone"); 89 string companyPhoneClean = companyPhone.Replace(" ", ""); 90 string companyCVR = Model.Area.Item.GetString("CompanyCVR"); 91 92 string companyLinkedin = Model.Area.Item.GetString("SoMeLinkedin"); 93 string companyFacebook = Model.Area.Item.GetString("SoMeFacebook"); 94 string companyTwitter = Model.Area.Item.GetString("SoMeTwitter"); 95 string companyInstagram = Model.Area.Item.GetString("SoMeInstagram"); 96 string companyYouTube = Model.Area.Item.GetString("SoMeYouTube"); 97 98 string openGraphDomain = "https://" + Dynamicweb.Context.Current?.Request?.Url?.Host; 99 string openGraphUrl = Model.Item?.GetItem("OpenGraph")?.GetString("Url"); 100 string openGraphTitle = !string.IsNullOrWhiteSpace(Model.Item?.GetItem("OpenGraph")?.GetString("Title")) ? Model.Item?.GetItem("OpenGraph").GetString("Title") : Model.Name; 101 string openGraphType = !string.IsNullOrWhiteSpace(Model.Item?.GetItem("OpenGraph")?.GetString("Type")) ? Model.Item?.GetItem("OpenGraph").GetString("Type") : "website"; 102 string openGraphDescription = !string.IsNullOrWhiteSpace(Model.Item?.GetItem("OpenGraph")?.GetString("Description")) ? Model.Item?.GetString("Description") : Model.Description; 103 var openGraphImage = Model.Item?.GetItem("OpenGraph")?.GetFile("Image"); 104 int openGraphImageWidth = (Model.Item?.GetItem("OpenGraph")?.GetInt32("ImageWidth") ?? 0) >= 200 ? Model.Item.GetItem("OpenGraph").GetInt32("ImageWidth") : 200; 105 int openGraphImageHeight = (Model.Item?.GetItem("OpenGraph")?.GetInt32("ImageHeight") ?? 0) >= 200 ? Model.Item.GetItem("OpenGraph").GetInt32("ImageHeight") : 200; 106 string facebookPageLink = Model.Area.Item.GetString("SoMeFacebook"); 107 string facebookAppId = Model.Area.Item.GetString("SoMeFacebookAppID"); 108 109 string designBasePath = Pageview.Layout.File.Location; 110 string assetsBasePath = designBasePath + "Assets/"; 111 string bodyClass = Model.Area.FirstActivePage.ID == Model.ID ? "index" : "page"; 112 113 // SITE LINKS 114 int ServiceMenuID = Model.Area.Item.GetInt32("ServiceMenuFolder_ID"); 115 116 string placeholderSearch = Translate("Søg"); 117 118 bool showGlobalWarning = false; 119 string globalMessage = Model.Area.Item.GetString("WarningText"); 120 string globalHeading = Model.Area.Item.GetString("WarningHeading"); 121 string messageId = Regex.Replace(globalHeading.ToLower().Replace(" ", ""), @"[^a-z0-9]", ""); 122 if (string.IsNullOrEmpty(messageId)) { 123 messageId = "stdmessage"; 124 } 125 126 if (Model.Area.Item != null 127 && Model.Area.Item.GetDateTime("WarningStartTime") != DateTime.MinValue && Model.Area.Item.GetDateTime("WarningStartTime") <= DateTime.Now 128 && Model.Area.Item.GetDateTime("WarningEndTime") != DateTime.MinValue && Model.Area.Item.GetDateTime("WarningEndTime") > DateTime.Now 129 && (Dynamicweb.Context.Current.Request.Cookies[messageId] == null || Dynamicweb.Context.Current.Request.Cookies[messageId].Value != "hidden")) { 130 showGlobalWarning = true; 131 } 132 if (Dynamicweb.Context.Current.Request.QueryString.Get("showwarning") == "true") { 133 showGlobalWarning = true; 134 } 135 136 137 // STICKY POPUP -------------------------------------------------------------------------------------------------------------- 138 bool stickyPopupActive = Model.Area.Item.GetBoolean("StickyPopupActive"); 139 140 string stickyPopupHeader = Model.Area.Item.GetString("StickyPopupHeader"); 141 string stickyPopupText = Model.Area.Item.GetString("StickyPopupText"); 142 143 // StickyPopupImage 144 var stickyPopupImageFile = Model.Area.Item.GetFile("StickyPopupImage"); 145 string stickyPopupImageSrc = ""; 146 147 if (stickyPopupImageFile != null) { 148 if (stickyPopupImageFile.Extension == ".gif") { 149 stickyPopupImageSrc = stickyPopupImageFile.PathUrlEncoded; 150 } else { 151 stickyPopupImageSrc = "/Admin/Public/GetImage.ashx?Image=" 152 + stickyPopupImageFile.PathUrlEncoded 153 + "&Width=1110&Crop=7&format=webp&Quality=85"; 154 if (stickyPopupImageFile.HasFocalPoint()) { 155 stickyPopupImageSrc += "&" + stickyPopupImageFile.GetFocalPointParameters(); 156 } 157 } 158 } 159 160 // StickyPopupButtonIcon 161 var stickyPopupButtonIconFile = Model.Area.Item.GetFile("StickyPopupButtonIcon"); 162 string stickyPopupButtonIconSrc = ""; 163 164 if (stickyPopupButtonIconFile != null) { 165 if (stickyPopupButtonIconFile.Extension == ".gif") { 166 stickyPopupButtonIconSrc = stickyPopupButtonIconFile.PathUrlEncoded; 167 } else { 168 stickyPopupButtonIconSrc = "/Admin/Public/GetImage.ashx?Image=" 169 + stickyPopupButtonIconFile.PathUrlEncoded 170 + "&Width=50&Height=50&Crop=5&format=webp&Quality=85"; // du kan ændre størrelsen her 171 if (stickyPopupButtonIconFile.HasFocalPoint()) { 172 stickyPopupButtonIconSrc += "&" + stickyPopupButtonIconFile.GetFocalPointParameters(); 173 } 174 } 175 } 176 177 string stickyPopupLink = Model.Area.Item.GetString("StickyPopupLink"); 178 string stickyPopupLinkText = Model.Area.Item.GetString("StickyPopupLinkText"); 179 180 // /STICKY POPUP -------------------------------------------------------------------------------------------------------------- 181 182 Dictionary<string, List<int>> favIcons = new Dictionary<string, List<int>>() { 183 {"apple-touch-icon", new List<int>(){57,60,72,76,114,120,144,152,180 } }, 184 {"icon", new List<int>(){192,32,96,16 } } 185 }; 186 187 string userAgent = ""; 188 string userDevice = "Unknown"; // Default fallback 189 190 // Check if context and request are available 191 if (Dynamicweb.Context.Current?.Request != null) { 192 userAgent += Dynamicweb.Context.Current.Request.UserAgent; 193 if (!string.IsNullOrEmpty(userAgent)) { 194 var deviceInfo = Dynamicweb.Frontend.Devices.DeviceInfo.ParseFromUserAgentString(userAgent.ToLower()); 195 if (deviceInfo?.DeviceType != null) { 196 userDevice = deviceInfo.DeviceType.ToString(); 197 } 198 } 199 } 200 bool isIpad = userAgent.IndexOf("ipad") > -1 || userAgent.IndexOf("tablet") > -1; 201 if (isIpad) { 202 bodyClass += " ipad-class"; 203 } 204 205 string titleSearch = Translate("Søg"); 206 string mobileTabIndex = "0"; 207 if (!string.IsNullOrWhiteSpace(userDevice) && userDevice == "Desktop") { 208 mobileTabIndex = "-1"; 209 } 210 211 string selectedTheme = ""; 212 if (Model.Item.GetBoolean("AdminSettings")) { 213 selectedTheme = "" + Model.Item.GetList("Theme").SelectedValue; 214 } 215 //linje 170 216 217 } 218 219 @helper iconLink(int size, string rel, string basePath) 220 { 221 string iconfileurl = basePath + "logo.png"; 222 string iconLink = "/Admin/Public/GetImage.ashx?Image=" + iconfileurl + "&Format=png&Width=" + size + "&Height=" + size + "&Crop=6&DoNotUpscale=1"; 223 <link rel="@rel" type="image/png" sizes="@(size)x@(size)" href="@iconLink"> 224 } 225 @helper sns(string introtext) 226 { 227 <div class="text-right w-100"> 228 <p> 229 <small><strong class="align-bottom">@Translate("Del til"):</strong></small> 230 231 @{ 232 if (!string.IsNullOrWhiteSpace(introtext)) { 233 introtext = Dynamicweb.Core.Encoders.HtmlEncoder.UrlEncode(introtext, System.Text.Encoding.UTF8); 234 } 235 string shareTitle = Model.Title; 236 if (Model.Item != null && !string.IsNullOrWhiteSpace(Model.Item.GetString("Title"))) { 237 shareTitle = Model.Item.GetString("Title"); 238 shareTitle = Dynamicweb.Core.Encoders.HtmlEncoder.UrlEncode(shareTitle, System.Text.Encoding.UTF8); 239 } 240 string shareUrl = "https://" + Dynamicweb.Context.Current.Request.Url.Host + Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(Pageview.ID); 241 242 string fbShareUrl = "https://facebook.com/sharer/sharer.php?u=" + shareUrl; 243 string twitterShareUrl = "https://twitter.com/intent/tweet/?text=" + shareTitle + "&amp;url=" + shareUrl; 244 string liShareUrl = "https://www.linkedin.com/shareArticle?mini=true&amp;url=" + shareUrl + "&amp;title=" + shareTitle + "&amp;summary=" + introtext + "&amp;source=" + "https://" + Dynamicweb.Context.Current.Request.Url.Host; 245 } 246 <a class="resp-sharing-button__link" href="@liShareUrl" target="_blank" rel="noopener" aria-label="@Translate("Del på LinkedIn")"> 247 <i class="fab fa-linkedin-in"></i> 248 </a> 249 250 <a class="resp-sharing-button__link" href="@twitterShareUrl" target="_blank" rel="noopener" aria-label="@Translate("Del på Twitter")"> 251 <i class="fab fa-twitter"></i> 252 </a> 253 254 <a class="resp-sharing-button__link" href="@fbShareUrl" target="_blank" rel="noopener" aria-label="@Translate("Del på Facebook")"> 255 <i class="fab fa-facebook-f"></i> 256 </a> 257 258 <button type="button" class="print-button" aria-label="print"><i class="fal fa-print" aria-hidden="true"></i></button> 259 </p> 260 </div> 261 } 262 263 <!DOCTYPE html> 264 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName"> 265 <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# @openGraphType: http://ogp.me/ns/@(openGraphType)#"> 266 <meta charset="utf-8"> 267 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 268 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 269 <meta name="description" content="@Model.Description" /> 270 <meta name="keywords" content="@Model.Keywords" /> 271 <meta name="format-detection" content="telephone=no"> 272 @Model.MetaTags.Replace("?GroupID=\">", "\">") 273 <title>@Model.Name</title> 274 @if (Model.ID == 753 && Model.MetaTags.IndexOf("canon") == -1) { 275 string canon = "https://" + Pageview.Area.DomainLock + Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(Model.ID); 276 <link rel="canonical" href="@canon"> 277 } 278 <!-- OpenGraph --> 279 <meta property="og:url" content="@Pageview.SearchFriendlyUrl" /> 280 <meta property="og:type" content="@openGraphType" /> 281 @if (!string.IsNullOrWhiteSpace(facebookPageLink)) { 282 <meta property="article:publisher" content="@facebookPageLink" /> 283 } 284 @if (!string.IsNullOrWhiteSpace(facebookAppId)) { 285 <meta property="fb:app_id" content="@facebookAppId" /> 286 } 287 <meta property="og:title" content="@openGraphTitle" /> 288 @if (!string.IsNullOrWhiteSpace(openGraphDescription)) { 289 <meta property="og:description" content="@openGraphDescription" /> 290 } 291 @if (openGraphImage != null) { 292 string openGraphImagePath = "/Admin/Public/GetImage.ashx?Image=" + openGraphImage.PathUrlEncoded + "&Width=" + openGraphImageWidth + "&Height=" + openGraphImageHeight + "&Crop=7&format=jpeg&Quality=85"; 293 if (openGraphImage.HasFocalPoint()) { 294 openGraphImagePath += "&" + openGraphImage.GetFocalPointParameters(); 295 } 296 297 Uri uri = new Uri(openGraphDomain + openGraphImage); 298 string listImageUrl = uri.AbsoluteUri; 299 <meta name="image" property="og:image" content="@openGraphImagePath" /> 300 <meta property="og:image:width" content="@openGraphImageWidth" /> 301 <meta property="og:image:height" content="@openGraphImageHeight" /> 302 } 303 <meta property="og:site_name" content='@Model.Area.Name' /> 304 @if (openGraphType == "article") { 305 <meta property="article:published_time" content="@Model.CreatedDate.ToString("yyyy-MM-dd:HH:mm:ss")" /> 306 <meta property="og:updated_time" content="@Model.UpdatedDate.ToString("yyyy-MM-dd:HH:mm:ss")" /> 307 } 308 @*@resourceHtml*@ 309 310 <!--Fav Icon--> 311 @{ 312 string faviconpath = "/Files/Images/Graphics/Fav/"; 313 } 314 @foreach (var i in favIcons) { 315 foreach (int t in i.Value) { 316 @iconLink(t, i.Key, faviconpath) 317 } 318 } 319 320 @*<link rel="manifest" href="@(faviconpath)site.webmanifest">*@ 321 <link rel="mask-icon" href="@(faviconpath)safari-pinned-tab.svg" color="#5a976e"> 322 <link rel="shortcut icon" href="@(faviconpath)favicon.ico"> 323 <meta name="msapplication-TileColor" content="#c4007a"> 324 <meta name="msapplication-TileImage" content="/Admin/Public/GetImage.ashx?Image=@(faviconpath)logo.png&Format=png&Width=144&Height=144&Crop=6&DoNotUpscale=1"> 325 <meta name="msapplication-config" content="@(faviconpath)browserconfig.xml"> 326 <meta name="theme-color" content="#ffffff"> 327 <meta name="google-site-verification" content="B0aoP7mxm154yGmoQSpHTlONi53vmCQ7--xruDKsVMQ" /> 328 <meta name="facebook-domain-verification" content="mwvue0w7rmti91ocv9mhw7msum09si" /> 329 330 331 332 333 <!-- CSS & JS--> 334 335 <link href="https://fonts.googleapis.com/css?family=Merriweather:400,400i,700|Montserrat:300,400,500,700,800&display=swap" rel="stylesheet"> 336 <link href="@(assetsBasePath)twitter-bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" media="screen,print" /> 337 338 <link href="@(assetsBasePath)font-awesome/css/all.min.css" rel="stylesheet" type="text/css" media="screen,print" /> 339 <link href="@(assetsBasePath)Swiper/css/swiper.min.css" rel="stylesheet" type="text/css" media="screen,print" /> 340 <link href="@(designBasePath)css/style.min.css?v=20250619T1622" rel="stylesheet" type="text/css" media="screen,print" /> 341 <link href="@(assetsBasePath)plyr/plyr.min.css" rel="stylesheet" type="text/css" media="screen,print" /> 342 343 @* COOKIEBOT *@ 344 @if (!System.Web.HttpContext.Current.Request.Url.AbsoluteUri.StartsWith("https://stagingweb.fsr.dk")) { 345 <script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="e16a8147-b398-46f2-8a08-b11ccb532ffd" data-blockingmode="auto" type="text/javascript"></script> 346 } 347 @* COOKIEBOT *@ 348 349 350 @*@Model.Area.Item.GetString("ScriptsHead")*@ 351 @*@if (Pageview.Page.NavigationTag == "Counseling") { 352 <script src="https://code.createjs.com/1.0.0/createjs.min.js"></script> 353 }*@ 354 @{ 355 356 <script src="@(assetsBasePath + "jquery/jquery.min.js")"></script> 357 <script src="@(assetsBasePath + "popper.js/umd/popper.min.js")"></script> 358 <script src="@(assetsBasePath + "twitter-bootstrap/js/bootstrap.min.js")"></script> 359 <script async src="@(assetsBasePath + "font-awesome/js/all.min.js")"></script> 360 <script defer src="@(assetsBasePath + "jquery-validate/jquery.validate.min.js")"></script> 361 <script defer src="@(assetsBasePath + "jquery-validate/localization/messages_da.min.js")"></script> 362 <script defer src="@(assetsBasePath + "typeahead/typeahead.bundle.min.js")"></script> 363 <script defer src="@(assetsBasePath + "Swiper/js/swiper.min.js")"></script> 364 <script src="@(assetsBasePath + "handlebars/dist/handlebars.min.js")"></script> 365 <script defer src="@(designBasePath + "js/script.js?v=20260410T1150")"></script> 366 <script defer src="@(designBasePath + "js/zeynep.js")"></script> 367 if (!System.Web.HttpContext.Current.Request.Url.AbsoluteUri.StartsWith("https://stagingweb.fsr.dk")) { 368 <!-- Google Tag Manager --> 369 <script> 370 (function (w, d, s, l, i) { 371 w[l] = w[l] || []; w[l].push({ 372 'gtm.start': 373 new Date().getTime(), event: 'gtm.js' 374 }); var f = d.getElementsByTagName(s)[0], 375 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 376 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 377 })(window, document, 'script', 'dataLayer', 'GTM-WNQG263');</script> 378 <!-- End Google Tag Manager --> 379 380 <!-- Google tag (gtag.js) --> 381 <script async src="https://www.googletagmanager.com/gtag/js?id=AW-967315187"></script> 382 <script> 383 window.dataLayer = window.dataLayer || []; 384 function gtag() { dataLayer.push(arguments); } 385 gtag('js', new Date()); 386 387 gtag('config', 'AW-967315187'); 388 </script> 389 <!-- End Google tag (gtag.js) --> 390 391 } 392 } 393 <style> 394 .login-required-box.tb { 395 min-height: 380px; 396 } 397 398 @@media screen and (max-width: 1199px) { 399 .login-required-box.tb { 400 min-height: 430px; 401 } 402 } 403 </style> 404 <!-- Karla API script --> 405 <script id="karlastatic-script" 406 src="https://static.getkarla.ai/static/js/main.js?key=T6qWCFNKFDfwFDtKswXaajXelGbHjrTf4kJ-ST0CfaE"> 407 </script> 408 </head> 409 410 <body class="@bodyClass @contrastBodyClass @selectedTheme"> 411 412 <!-- Google Tag Manager (noscript) --> 413 <noscript> 414 <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WNQG263" 415 height="0" width="0" style="display:none;visibility:hidden"></iframe> 416 </noscript> 417 <!-- End Google Tag Manager (noscript) --> 418 419 420 @Model.Area.Item.GetString("ScriptsBodyBegin") 421 <a id="skip" href="/Default.aspx?ID=@(Model.ID)#main">@Translate("Spring hovednavigationen over")</a> 422 @if (showGlobalWarning) { 423 <aside id="global-message" class="global-warning-area layout-yellow p-3" data-message-id="@messageId"> 424 <div class="container text-center"> 425 <div class="row"> 426 <div class="col-auto ml-auto"> 427 <div class="global-warning-close text-right d-inline-block" aria-label="@Translate("Luk advarselsbanner")"> 428 <svg aria-hidden="true" focusable="false" data-prefix="fal" data-icon="times-circle" class="svg-inline--fa fa-times-circle" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 464c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm94.8-285.3L281.5 256l69.3 69.3c4.7 4.7 4.7 12.3 0 17l-8.5 8.5c-4.7 4.7-12.3 4.7-17 0L256 281.5l-69.3 69.3c-4.7 4.7-12.3 4.7-17 0l-8.5-8.5c-4.7-4.7-4.7-12.3 0-17l69.3-69.3-69.3-69.3c-4.7-4.7-4.7-12.3 0-17l8.5-8.5c4.7-4.7 12.3-4.7 17 0l69.3 69.3 69.3-69.3c4.7-4.7 12.3-4.7 17 0l8.5 8.5c4.6 4.7 4.6 12.3 0 17z"></path></svg> 429 </div> 430 </div> 431 </div> 432 433 <div class="row"> 434 <div class="col-12"> 435 @if (!string.IsNullOrWhiteSpace(globalHeading)) { 436 <h3>@globalHeading</h3> 437 } 438 @if (!string.IsNullOrWhiteSpace(globalMessage)) { 439 @globalMessage 440 } 441 </div> 442 </div> 443 444 </div> 445 </aside> 446 } 447 448 @*classes are flat, single, multiple, semantic - https://css-tricks.com/reading-position-indicator/ *@ 449 <progress value="0" id="progressBar" class="flat"> 450 <div class="progress-container"> 451 <span class="progress-bar"></span> 452 </div> 453 </progress> 454 455 @*<div id="mobile-menu-overlay"></div>*@ 456 457 @* TOOGLE MOBILE NAV *@ 458 <div class="container"> 459 <div class="floatcontainer"> 460 <div class="inner"> 461 <button type="button" class="btn-open" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> 462 <div> 463 <div class="nav-icon"> 464 <div></div> 465 </div> 466 </div> 467 </button> 468 </div> 469 </div> 470 </div> 471 472 <div class="zeynep-overlay"></div> 473 474 <div class="zeynep" style="transform: translateX(-295px);"> 475 476 <div class="golden-buzz puha"> 477 <div class="login-container"> 478 479 @if (Pageview.User != null) { 480 var mitfsrpage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "mitfsr"); 481 @*<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">*@ 482 @*<a href="/Default.aspx?ID=@mitfsrpage.ID" class="login-btn" title="@Translate("mit fsr")" aria-label="@Translate("mit fsr")"><i class="fal fa-lock-open-alt"></i> @Translate("Mit FSR")</a>*@ 483 <a class="nav-link dropdown-toggle navbarDropdown" href="#" id="navbarDropdown" tabindex="@mobileTabIndex" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 484 <i class="fal fa-lock-open-alt"></i> @Translate("Mit FSR") 485 </a> 486 487 <div class="login-box dropdown-menu logged-in" aria-labelledby="navbarDropdown"> 488 <ul class="line-list white-hover"> 489 <li> 490 <a href="/mit-fsr" title="@Translate("Mit FSR")" aria-label="@Translate("Gå til Mit FSR")">@Translate("Gå til Mit FSR")</a> 491 </li> 492 @*<li><a href="/Admin/Public/ExtranetLogoff.aspx" title="@Translate("Log ud")" aria-label="@Translate("Log ud")">@Translate("Log ud")</a></li>*@ 493 </ul> 494 495 <hr /> 496 497 <a href="/Files/Handlers/B2CLoginHandler.ashx?signout=1" title="@Translate("Log ud")" tabindex="@mobileTabIndex" aria-label="@Translate("Log ud")" class="btn btn-secondary-naked btn-sm btn-block">@Translate("Log ud")</a> 498 499 </div> 500 } else { 501 <a class="nav-link dropdown-toggle navbarDropdown" href="#" tabindex="@mobileTabIndex" id="zeynep-navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 502 <i class="fal fa-lock-alt"></i> @Translate("Mit FSR") 503 </a> 504 505 @* -- LOGIN -- *@ 506 <div class="login-box dropdown-menu" aria-labelledby="zeynep-navbarDropdown"> 507 <form method="get" action="/Files/Handlers/B2CLoginHandler.ashx"> 508 <input type="hidden" name="auth" value="1"> 509 510 <div class="form-group"> 511 <button type="submit" class="btn btn-secondary btn-block">@(Translate("Log ind"))</button> 512 </div> 513 <ul class="line-list white-hover"> 514 <li> 515 <a href="/medlem" title="@Translate("Bliv medlem")" aria-label="@Translate("Bliv medlem")">@Translate("Bliv medlem")</a> 516 </li> 517 </ul> 518 </form> 519 </div> 520 } 521 </div> 522 <div id="zeynep-search-top" class="search-container"> 523 <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown1" tabindex="@mobileTabIndex" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 524 <i class="fal fa-search"></i> @Translate("Søg") 525 </a> 526 <div id="mobile-search-container" class="login-box logged-in d-none" aria-labelledby="navbarDropdown1"> 527 528 @*<form action="/default.aspx"><input type="hidden" name="ID" value="226" /><input class="typeahead" name="search" type="text" placeholder="@titleSearch "><input type="submit" class="search-submit" tabindex="-1" /></form>*@ 529 530 <form action="/Default.aspx" data-toptypeahead="1" data-notfound="@(Translate("Vi fandt desværre ikke noget, som matcher din søgning"))"> 531 532 @*<button id="btn-search" type="button" class="btn search search-activated"></button>*@ 533 534 <div class="input-container"> 535 <input type="hidden" name="ID" value="2908" /> 536 <input class="typeahead" style="display:none;" name="search" type="text" placeholder="@placeholderSearch"> 537 <input type="submit" class="search-submit" tabindex="-1" /> 538 </div> 539 540 </form> 541 </div> 542 543 </div> 544 545 </div> 546 <div class="main-nav d-lg-none" tabindex="@mobileTabIndex" aria-hidden="true"> 547 548 @RenderNavigation(new { 549 startlevel = 1, 550 endlevel = 99, 551 template = "TopBarNav-Mobile.xslt", 552 expandmode = "All", 553 parentid = 0, 554 areaid = Pageview.AreaID, 555 includemode = "All" 556 }) 557 </div> 558 @*<ul><li><a href="#">Home</a></li><li class="has-submenu"><a href="#" data-submenu="stores">Stores</a><div id="stores" class="submenu"><div class="submenu-header" data-submenu-close="stores"><a href="#">Main Menu</a></div><label>Stores</label><ul><li><a href="#">Istanbul</a></li><li><a href="#">Mardin</a></li><li><a href="#">Amed</a></li></ul></div></li><li class="has-submenu"><a href="#" data-submenu="categories">Categories</a><div id="categories" class="submenu"><div class="submenu-header" data-submenu-close="categories"><a href="#">Main Menu</a></div><label>Categories</label><ul><li class="has-submenu"><a href="#" data-submenu="electronics">Electronics</a><div id="electronics" class="submenu"><div class="submenu-header" data-submenu-close="electronics"><a href="#">Categories</a></div><label>Electronics</label><ul><li><a href="#">Camera & Photo</a></li><li><a href="#">Home Audio</a></li><li><a href="#">Tv & Video</a></li><li><a href="#">Computers & Accessories</a></li><li><a href="#">Car & Vehicle Electronics</a></li><li><a href="#">Portable Audio & Video</a></li><li><a href="#">Headphones</a></li><li><a href="#">Accessories & Supplies</a></li><li><a href="#">Video Projectors</a></li><li><a href="#">Office Electronics</a></li><li><a href="#">Wearable Technology</a></li><li><a href="#">Service Plans</a></li></ul></div></li><li><a href="#">Books</a></li><li><a href="#">Video Games</a></li><li><a href="#">Computers</a></li></ul></div></li><li><a href="#">Contact</a></li><li><a href="#">About</a></li></ul>*@ 559 <div class="service-nav d-lg-none" tabindex="@mobileTabIndex" aria-hidden="true"> 560 @RenderNavigation(new { 561 startlevel = 1, 562 endlevel = 99, 563 template = "TopBarNav-Mobile.xslt", 564 expandmode = "All", 565 parentid = ServiceMenuID, 566 areaid = Pageview.AreaID, 567 includemode = "All", 568 569 //_ShowCart = 1, 570 //_CartCount = Dynamicweb.Ecommerce.Common.Context.Cart?.OrderLines?.Count ?? 0, 571 //_CartPageId = GetPageIdByNavigationTag("kurv"), 572 //_CartPageName = Translate("Indkøbskurven") 573 }) 574 </div> 575 </div> 576 577 <div class="zeynep-overlay zeynep-overlay-under"></div> 578 579 580 @* /MOBIL NAV *@ 581 582 583 @using Dynamicweb.Rendering 584 @using Dynamicweb.Frontend 585 @using System.Windows.Media 586 587 @inherits ViewModelTemplate<PageViewModel> 588 589 @using Dynamicweb.Rendering 590 @using Dynamicweb.Frontend 591 @inherits ViewModelTemplate<PageViewModel> 592 @{ 593 var hasAccess = Dynamicweb.Security.UserManagement.User.GetCurrentBackendUser() != null; 594 595 if (!hasAccess) { 596 var itemAccessGroupIds = Model.Item?.GetField("AccessGroups")?.GetRawValueString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).Distinct().ToArray() ?? Array.Empty<int>(); 597 598 hasAccess = !itemAccessGroupIds.Any(); 599 600 if (!hasAccess && Pageview.User != null) { 601 hasAccess = itemAccessGroupIds.Any(o => Pageview.User.HasGroup(o)); 602 } 603 } 604 605 } 606 607 @{ 608 string sectionType = Dynamicweb.Services.Pages.GetPage(Model.TopPage.ID).NavigationTag; 609 if (Model.TopPage.ID == Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "fagligt").ID) { 610 sectionType = Model.Path.Count > 1 && Model.Path[1] != null ? Model.Path[1].Name : ""; 611 } 612 613 string sectionEng = ""; 614 if (!string.IsNullOrEmpty(sectionType)) { 615 sectionEng = FSR.Articles.ArticleHelper.GetSectionInEnglish(sectionType); 616 } 617 618 bool parentCounselingWheelFound = false; 619 Dynamicweb.Content.Page counselingWheelPage = null; 620 string color = ""; 621 string colorHover = ""; 622 if (Model.ItemType == "CounselingWheelPage" && !string.IsNullOrEmpty(Model.Item.GetString("Color"))) { 623 Color colorRGB = (Color)ColorConverter.ConvertFromString(Model.Item.GetString("Color")); 624 color = GetColorStartString(colorRGB.R, colorRGB.G, colorRGB.B); 625 colorHover = GetColorStartString(colorRGB.R * 0.6, colorRGB.G * 0.8, colorRGB.B * 0.8); 626 627 } else if (Model.Path.Where(x => x.ID == Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "Counseling").ID).Any()) { 628 int safetyCounter = 1; 629 var parentPage = Pageview.Page; 630 while (safetyCounter < 10 || !parentCounselingWheelFound) { 631 safetyCounter++; 632 if (parentPage.Parent != null && !parentPage.Parent.IsFolder) { 633 if (parentPage.Parent.ItemType == "CounselingWheelPage") { 634 parentCounselingWheelFound = true; 635 counselingWheelPage = parentPage.Parent; 636 break; 637 } else { 638 parentPage = parentPage.Parent; 639 } 640 } else { 641 break; 642 } 643 } 644 if (parentCounselingWheelFound && counselingWheelPage != null) { 645 if (counselingWheelPage.Item["Color"] != null && !string.IsNullOrWhiteSpace("" + counselingWheelPage.Item["Color"])) { 646 647 Color colorRGB = (Color)ColorConverter.ConvertFromString("" + counselingWheelPage.Item["Color"]); 648 color = GetColorStartString(colorRGB.R, colorRGB.G, colorRGB.B); 649 colorHover = GetColorStartString(colorRGB.R * 0.6, colorRGB.G * 0.8, colorRGB.B * 0.8); 650 } 651 } 652 } 653 bool isBaerdygtighedsakademiet = false; 654 655 if (Model.ID == 8228) { // Bæredygtighedsuddannelse 656 isBaerdygtighedsakademiet = true; 657 } else if (Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "Baerdygtighedsakademiet") != null) { 658 isBaerdygtighedsakademiet = Model.Path.Where(x => x.ID == Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "Baerdygtighedsakademiet").ID).Any(); 659 } 660 661 if (isBaerdygtighedsakademiet) { 662 Color colorRGB = (Color)ColorConverter.ConvertFromString("#143c18"); 663 color = GetColorStartString(colorRGB.R, colorRGB.G, colorRGB.B); 664 //colorHover = GetColorStartString(0, 0, 0); 665 colorHover = GetColorStartString(7, 30, 8); 666 isBaerdygtighedsakademiet = true; 667 } 668 669 //string mainContentClass = "col"; 670 string mainContentClass = "col"; 671 if (Model.Item.GetBoolean("SideNavVisible") || (Model.Item.GetUsers("Contact") != null && Model.Item.GetUsers("Contact").Any())) { 672 mainContentClass += " col-md-8"; 673 } 674 675 string widthLimitedContentClass = Model.Item.GetBoolean("SideNavVisible") || (Model.Item.GetUsers("Contact") != null && Model.Item.GetUsers("Contact").Any()) ? "col-12 col-md-8" : "col-12"; 676 677 //Returns you to current page after login 678 Dynamicweb.Context.Current.Items["returnAfterLogin"] = true; 679 string introtext = string.Empty; 680 681 bool showRightColumn = hasAccess && (Model.Item.GetBoolean("SideNavVisible") || (Model.Item.GetUsers("Contact") != null && Model.Item.GetUsers("Contact").Any())); 682 string mainClass = sectionEng; 683 684 string contentRowClass = "row"; 685 if (showRightColumn) { 686 contentRowClass += " columns-2 mt-4"; 687 } 688 } 689 690 @functions{ 691 public string GetColorStartString(double r, double g, double b) 692 { 693 return "rgba(" + r.ToString("N0") + "," + g.ToString("N0") + "," + b.ToString("N0"); 694 } 695 } 696 697 <header class="tall" data-test="@isBaerdygtighedsakademiet"> 698 <div class="container"> 699 <div class="row"> 700 <div class="col-12 bg-container"> 701 @using Dynamicweb.Rendering 702 @using Dynamicweb.Frontend 703 @inherits ViewModelTemplate<PageViewModel> 704 705 @{ 706 int showCart = 1; 707 int cartCount = Dynamicweb.Ecommerce.Common.Context.Cart?.OrderLines?.Count ?? 0; 708 int cartPageId = GetPageIdByNavigationTag("kurv"); 709 string cartPageName = Translate("Indkøbskurven"); 710 } 711 712 @*// LLA HERE - https://codepen.io/bsngr/pen/frDqh*@ 713 <div class="row justify-content-end"> 714 715 @if (userDevice == "Desktop") { } 716 <div class="col d-none d-lg-block"> 717 <nav class="service-nav d-flex justify-content-end align-items-center"> 718 <div class="justify-content-end"> 719 <label class="switch" title="aktiver kontrast"> 720 721 <input id="change-contrast" type="checkbox" tabindex="0" @changeContrastChecked aria-checked="@ariaChecked" aria-label="@ariaLabel" data-active-label="aktiver mørk kontrast" data-inactive-label="deaktiver mørk kontrast"> 722 <span class="slider round d-flex justify-content-between"> 723 <svg id="contrast-darksun-svg" xmlns="http://www.w3.org/2000/svg" height="20" width="20"><path d="M10 14q-1.667 0-2.833-1.167Q6 11.667 6 10q0-1.667 1.167-2.833Q8.333 6 10 6q1.667 0 2.833 1.167Q14 8.333 14 10q0 1.667-1.167 2.833Q11.667 14 10 14Zm-8.25-3.25q-.312 0-.531-.219Q1 10.312 1 10q0-.312.219-.531.219-.219.531-.219h2q.312 0 .531.219.219.219.219.531 0 .312-.219.531-.219.219-.531.219Zm14.5 0q-.312 0-.531-.219-.219-.219-.219-.531 0-.312.219-.531.219-.219.531-.219h2q.312 0 .531.219Q19 9.688 19 10q0 .312-.219.531-.219.219-.531.219ZM10 4.5q-.312 0-.531-.219-.219-.219-.219-.531v-2q0-.312.219-.531Q9.688 1 10 1q.312 0 .531.219.219.219.219.531v2q0 .312-.219.531-.219.219-.531.219ZM10 19q-.312 0-.531-.219-.219-.219-.219-.531v-2q0-.312.219-.531.219-.219.531-.219.312 0 .531.219.219.219.219.531v2q0 .312-.219.531Q10.312 19 10 19ZM5.042 6.104 4 5.042q-.229-.209-.229-.511 0-.302.229-.531.208-.229.521-.229.312 0 .521.229l1.062 1.042q.229.229.229.531 0 .302-.229.531-.208.229-.521.229-.312 0-.541-.229ZM14.958 16l-1.062-1.042q-.229-.229-.229-.531 0-.302.229-.531.208-.229.521-.229.312 0 .541.229L16 14.958q.229.209.229.511 0 .302-.229.531-.229.229-.521.229-.291 0-.521-.229Zm-1.062-9.896q-.229-.208-.229-.521 0-.312.229-.541L14.958 4q.23-.229.521-.219.292.011.521.219.229.229.229.521 0 .291-.229.521l-1.042 1.062q-.229.229-.531.229-.302 0-.531-.229ZM4 16q-.229-.208-.229-.521 0-.312.229-.521l1.042-1.062q.229-.208.531-.208.302 0 .531.208.229.229.219.531-.011.302-.219.531L5.042 16q-.209.229-.511.229-.302 0-.531-.229Z" /></svg> 724 <svg id="contrast-sun-svg" xmlns="http://www.w3.org/2000/svg" height="20" width="20"><path d="M10 12.5q1.042 0 1.771-.729.729-.729.729-1.771 0-1.042-.729-1.771Q11.042 7.5 10 7.5q-1.042 0-1.771.729Q7.5 8.958 7.5 10q0 1.042.729 1.771.729.729 1.771.729Zm0 1.5q-1.667 0-2.833-1.167Q6 11.667 6 10q0-1.667 1.167-2.833Q8.333 6 10 6q1.667 0 2.833 1.167Q14 8.333 14 10q0 1.667-1.167 2.833Q11.667 14 10 14Zm-8.25-3.25q-.312 0-.531-.219Q1 10.312 1 10q0-.312.219-.531.219-.219.531-.219h2q.312 0 .531.219.219.219.219.531 0 .312-.219.531-.219.219-.531.219Zm14.5 0q-.312 0-.531-.219-.219-.219-.219-.531 0-.312.219-.531.219-.219.531-.219h2q.312 0 .531.219Q19 9.688 19 10q0 .312-.219.531-.219.219-.531.219ZM10 4.5q-.312 0-.531-.219-.219-.219-.219-.531v-2q0-.312.219-.531Q9.688 1 10 1q.312 0 .531.219.219.219.219.531v2q0 .312-.219.531-.219.219-.531.219ZM10 19q-.312 0-.531-.219-.219-.219-.219-.531v-2q0-.312.219-.531.219-.219.531-.219.312 0 .531.219.219.219.219.531v2q0 .312-.219.531Q10.312 19 10 19ZM5.042 6.104 4 5.042q-.229-.209-.229-.511 0-.302.229-.531.208-.229.521-.229.312 0 .521.229l1.062 1.042q.229.229.229.531 0 .302-.229.531-.208.229-.521.229-.312 0-.541-.229ZM14.958 16l-1.062-1.042q-.229-.229-.229-.531 0-.302.229-.531.208-.229.521-.229.312 0 .541.229L16 14.958q.229.209.229.511 0 .302-.229.531-.229.229-.521.229-.291 0-.521-.229Zm-1.062-9.896q-.229-.208-.229-.521 0-.312.229-.541L14.958 4q.23-.229.521-.219.292.011.521.219.229.229.229.521 0 .291-.229.521l-1.042 1.062q-.229.229-.531.229-.302 0-.531-.229ZM4 16q-.229-.208-.229-.521 0-.312.229-.521l1.042-1.062q.229-.208.531-.208.302 0 .531.208.229.229.219.531-.011.302-.219.531L5.042 16q-.209.229-.511.229-.302 0-.531-.229Zm6-6Z" /></svg> 725 </span> 726 </label> 727 </div> 728 @RenderNavigation(new { 729 startlevel = 1, 730 endlevel = 1, 731 template = "TopBarNav.xslt", 732 expandmode = "All", 733 parentid = ServiceMenuID, 734 areaid = Pageview.AreaID, 735 includemode = "All", 736 737 _ShowCart = 1, 738 _CartCount = Dynamicweb.Ecommerce.Common.Context.Cart?.OrderLines?.Count ?? 0, 739 _CartPageId = GetPageIdByNavigationTag("kurv"), 740 _CartPageName = Translate("Indkøbskurven") 741 }) 742 </nav> 743 </div> 744 745 746 747 </div> 748 <div class="row"> 749 750 <nav class="w-100 navbar navbar-expand-lg main-nav"> 751 <div class="col"> 752 753 754 @getLogo() 755 756 </div> 757 758 @{ 759 string containerClass = "col-md-auto ml-auto"; 760 761 if (userDevice != "Desktop") { 762 containerClass += " w-100"; 763 } 764 } 765 766 <div class="@containerClass"> 767 768 @if (userDevice == "Desktop") { 769 770 <div class="collapse navbar-collapse" id="nav"> 771 772 @RenderNavigation(new { 773 startlevel = 1, 774 endlevel = 99, 775 template = "TopBarNav.xslt", 776 expandmode = "All", 777 parentid = 0, 778 areaid = Pageview.AreaID, 779 includemode = "All" 780 }) 781 782 <div class="golden-buzz"> 783 <div class="login-container"> 784 785 @if (Pageview.User != null) { 786 var mitfsrpage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "mitfsr"); 787 788 <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 789 <i class="fal fa-lock-open-alt"></i> @Translate("Mit FSR") 790 </a> 791 792 <div class="login-box dropdown-menu logged-in" aria-labelledby="navbarDropdown"> 793 <ul class="line-list white-hover"> 794 <li> 795 <a href="/mit-fsr" title="@Translate("Mit FSR")" aria-label="@Translate("Gå til Mit FSR")">@Translate("Gå til Mit FSR")</a> 796 </li> 797 798 </ul> 799 800 <a href="/Files/Handlers/B2CLoginHandler.ashx?signout=1" title="@Translate("Log ud")" aria-label="@Translate("Log ud")" class="btn btn-secondary-naked btn-sm btn-block mt-3">@Translate("Log ud")</a> 801 802 </div> 803 } else { 804 <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 805 <i class="fal fa-lock-alt"></i> @Translate("Mit FSR") 806 </a> 807 808 @* -- LOGIN -- *@ 809 <div class="login-box dropdown-menu" aria-labelledby="navbarDropdown"> 810 <form method="get" action="/Files/Handlers/B2CLoginHandler.ashx"> 811 <input type="hidden" name="auth" value="1"> 812 813 814 <div class="form-group"> 815 <button type="submit" class="btn btn-secondary btn-block">@(Translate("Log ind"))</button> 816 </div> 817 <ul class="line-list white-hover"> 818 <li> 819 <a href="/medlem" title="@Translate("Bliv medlem")" aria-label="@Translate("Bliv medlem")">@Translate("Bliv medlem")</a> 820 </li> 821 </ul> 822 </form> 823 </div> 824 } 825 </div> 826 <div id="search-top" class="search-container"> 827 828 829 <form action="/Default.aspx" data-toptypeahead="1" role="search" data-notfound="@(Translate("Vi fandt desværre ikke noget, som matcher din søgning"))"> 830 831 <button id="btn-search" type="button" class="btn search search-disabled" title="@Translate("søg")"></button> 832 833 <div class="input-container search-closed"> 834 <input type="hidden" name="ID" value="2908" /> 835 <input class="typeahead" style="display:none;" name="search" type="text" placeholder="@placeholderSearch"> 836 <input type="submit" class="search-submit" tabindex="-1"/> 837 </div> 838 839 </form> 840 841 </div> 842 843 </div> 844 845 </div> 846 847 } else if (cartCount >= 1) { 848 <a class="basket-link" href="/Default.aspx?Id=@cartPageId" title="Indkøbskurven"> 849 <span class="mr-1"> 850 <svg class="svg-inline--fa fa-shopping-basket fa-w-18" aria-hidden="true" focusable="false" data-prefix="far" data-icon="shopping-basket" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" data-fa-i2svg=""> 851 <path fill="currentColor" d="M564 192h-72.902L362.286 40.457c-8.583-10.099-23.729-11.327-33.83-2.743-10.099 8.584-11.327 23.731-2.742 33.83L428.102 192H147.899L250.287 71.543c8.584-10.099 7.356-25.246-2.743-33.83s-25.246-7.355-33.83 2.743L84.901 192H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h18.667l27.584 198.603C61.546 462.334 81.836 480 105.794 480h364.412c23.958 0 44.248-17.666 47.544-41.397L545.333 240H564c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12zm-93.794 240H105.794L79.127 240h417.745l-26.666 192zM312 296v80c0 13.255-10.745 24-24 24s-24-10.745-24-24v-80c0-13.255 10.745-24 24-24s24 10.745 24 24zm112 0v80c0 13.255-10.745 24-24 24s-24-10.745-24-24v-80c0-13.255 10.745-24 24-24s24 10.745 24 24zm-224 0v80c0 13.255-10.745 24-24 24s-24-10.745-24-24v-80c0-13.255 10.745-24 24-24s24 10.745 24 24z"> 852 </path> 853 </svg> 854 </span> 855 <span class="badge-container"> 856 <span class="badge badge-pill badge"> 857 @cartCount 858 </span> 859 </span> 860 </a> 861 } 862 </div> 863 864 </nav> 865 </div> 866 867 @helper getLogo() { 868 <a href="/" title="@Model.Area.Name" alt="@Model.Area.Name"> 869 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="84.979" viewBox="0 0 186 84.979"> 870 <defs> 871 <style> 872 .a { 873 fill: none; 874 } 875 876 .b { 877 fill: #14143c; 878 } 879 880 .c { 881 clip-path: url(#a); 882 } 883 884 .d { 885 fill: #b7b5aa; 886 } 887 </style> 888 <clipPath id="a"> 889 <path class="a" d="M0,0H185.834V40.784H0Z" transform="translate(0 0.195)"></path> 890 </clipPath> 891 </defs> 892 <path class="b" d="M5.365,13H0v-.21c.658-.194.887-.44.887-2.436V2.646C.887.65.657.4,0,.21V0H5.489C9.227,0,13,1.935,13,6.259a6.278,6.278,0,0,1-2.169,4.93A8.359,8.359,0,0,1,5.365,13ZM3.24,1.239V11.761H5.716a4.67,4.67,0,0,0,3.25-1.234,5.148,5.148,0,0,0,1.455-3.848A5.492,5.492,0,0,0,9,2.6,5.447,5.447,0,0,0,5.036,1.239Z" transform="translate(0 1)"></path> 893 <path class="b" d="M13.7,12.669a.3.3,0,0,1-.3.331.414.414,0,0,1-.278-.1L3.034,2.377V7.316c0,4.94.192,5.084,1.3,5.27v.207H.406v-.207c1.111-.186,1.3-.331,1.3-5.27V1.054A10.157,10.157,0,0,0,0,.207V0H4.145l8.226,8.66V5.477c0-4.939-.192-5.084-1.3-5.27V0H15V.207c-1.111.186-1.3.331-1.3,5.27v7.192" transform="translate(32 1)"></path> 894 <path class="b" d="M3.49,13A7.968,7.968,0,0,1,.2,12.353L0,9.745H.306a3.239,3.239,0,0,0,3.265,2.062c1.245,0,2.327-.566,2.327-1.88,0-1.294-1.388-1.961-2.776-2.871C1.8,6.187.408,5.257.408,3.3c0-2.1,1.959-3.3,4.1-3.3A7.183,7.183,0,0,1,7.347.607V2.749H7.1A3.046,3.046,0,0,0,4.327,1.193c-1.143,0-1.878.647-1.878,1.476,0,1.193,1.265,1.84,2.633,2.73C6.489,6.308,8,7.339,8,9.341,8,11.747,5.51,13,3.49,13" transform="translate(50 1)"></path> 895 <path class="b" d="M3.094,6.531v3.822c0,2.016.237,2.247.847,2.436V13H0v-.21c.611-.189.847-.42.847-2.436V2.646C.847.63.611.4,0,.21V0H3.941V.21C3.33.4,3.094.63,3.094,2.646V6.027L6.956,1.743c.2-.231.63-.672.63-1.008,0-.378-.315-.462-.552-.525V0h3.941V.21A4.5,4.5,0,0,0,8.69,1.68L5.044,5.629,8.079,9.577c1.182,1.533,2.581,3.108,3.763,3.108H12v.252c-.118.021-1.241.063-1.695.063C8.2,13,7.921,12.958,6.7,11.341L3.094,6.531" transform="translate(62 1)"></path> 896 <path class="b" d="M8.111,0V1.911H7.9c-.3-.441-.445-.672-3.134-.672H3.325V5.607H4.913c2.054,0,2.415-.042,2.732-.525h.148V7.371H7.645c-.318-.483-.678-.525-2.732-.525H3.325v4.915H6.184c1.949,0,2.2-.5,2.6-1.155H9L8.682,13H0v-.21c.656-.189.91-.42.91-2.436V2.646C.91.63.656.4,0,.21V0H8.111" transform="translate(77 1)"></path> 897 <path class="b" d="M4.181,13H0v-.21c.666-.194.9-.44.9-2.436V2.646C.9.65.665.4,0,.21V0H4.075A7.982,7.982,0,0,1,7.511.662a2.943,2.943,0,0,1,1.727,2.8c0,1.272-1.036,2.107-1.949,2.843-.232.187-.451.363-.642.538L6.753,7c1.281,1.845,3.947,5.684,6.079,5.684H13v.21A18.051,18.051,0,0,1,11.14,13c-2.795,0-2.853-.082-4.358-2.188-.181-.253-.385-.539-.617-.856L5,8.338c-.363-.515-.554-.567-1.212-.567h-.5v2.583c0,2,.233,2.242.9,2.436V13Zm-.9-11.761V6.758h.648a2.67,2.67,0,0,0,2.009-.814,3.12,3.12,0,0,0,.771-2.185,2.549,2.549,0,0,0-2.738-2.52Z" transform="translate(62 21)"></path> 898 <path class="b" d="M8.111,0V1.911H7.9c-.3-.441-.445-.672-3.134-.672H3.325V5.607H4.913c2.054,0,2.415-.042,2.732-.525h.148V7.371H7.645c-.318-.483-.678-.525-2.732-.525H3.325v4.915H6.184c1.949,0,2.2-.5,2.6-1.155H9L8.682,13H0v-.21c.656-.189.91-.42.91-2.436V2.646C.91.63.656.4,0,.21V0H8.111" transform="translate(77 21)"></path> 899 <path class="b" d="M14,.2c-.689.1-1.085.734-1.794,2.221L7.2,12.919a.137.137,0,0,1-.25,0L1.773,2.241C.981.611.668.306,0,.2V0H4.736V.2C3.9.346,3.693.815,4.257,2.017l3.38,7.257,3.15-6.849c.688-1.467.73-2.058-.5-2.221V0H14V.2" transform="translate(88 21)"></path> 900 <path class="b" d="M3.14,10.354c0,2.016.24,2.247.86,2.436V13H0v-.21c.62-.189.86-.42.86-2.436V2.646C.86.63.62.4,0,.21V0H4V.21C3.38.4,3.14.63,3.14,2.646v7.707" transform="translate(105 21)"></path> 901 <path class="b" d="M3.49,13A7.972,7.972,0,0,1,.2,12.353L0,9.745H.306a3.238,3.238,0,0,0,3.265,2.062c1.245,0,2.327-.566,2.327-1.88,0-1.294-1.388-1.961-2.776-2.871C1.8,6.187.408,5.257.408,3.3c0-2.1,1.959-3.3,4.1-3.3A7.183,7.183,0,0,1,7.347.607V2.749H7.1A3.047,3.047,0,0,0,4.327,1.193c-1.143,0-1.877.647-1.877,1.476,0,1.193,1.265,1.84,2.632,2.73C6.49,6.308,8,7.339,8,9.341,8,11.747,5.51,13,3.49,13" transform="translate(115 21)"></path> 902 <path class="b" d="M7.553,13a8.156,8.156,0,0,1-5.307-1.878A6.143,6.143,0,0,1,0,6.409,5.926,5.926,0,0,1,2.372,1.8,8.1,8.1,0,0,1,7.363,0a8.773,8.773,0,0,1,5.2,1.713A5.733,5.733,0,0,1,15,6.308a6.139,6.139,0,0,1-2.611,5.029A8.533,8.533,0,0,1,7.553,13ZM7.405,1.193A4.425,4.425,0,0,0,3.929,2.729a5.511,5.511,0,0,0-1.236,3.6,5.661,5.661,0,0,0,1.536,3.937,4.806,4.806,0,0,0,3.429,1.541,4.615,4.615,0,0,0,3.371-1.385,4.925,4.925,0,0,0,1.32-3.447,6.088,6.088,0,0,0-1.549-4.3A4.72,4.72,0,0,0,7.405,1.193Z" transform="translate(127 21)"></path> 903 <path class="b" d="M4.18,13H0v-.21c.666-.194.9-.44.9-2.436V2.646C.9.65.665.4,0,.21V0H4.075A7.982,7.982,0,0,1,7.511.662a2.943,2.943,0,0,1,1.727,2.8c0,1.273-1.036,2.107-1.95,2.844-.232.187-.45.362-.641.537L6.753,7c1.281,1.845,3.947,5.684,6.079,5.684H13v.21A18.026,18.026,0,0,1,11.14,13c-2.795,0-2.853-.082-4.358-2.188-.181-.253-.385-.539-.617-.856L5,8.338c-.363-.515-.554-.567-1.212-.567h-.5v2.583c0,2,.233,2.242.9,2.436V13Zm-.9-11.761V6.7h.648a2.683,2.683,0,0,0,2.779-2.94,2.549,2.549,0,0,0-2.738-2.52Z" transform="translate(146 21)"></path> 904 <path class="b" d="M8.111,0V1.911H7.9c-.3-.441-.445-.672-3.134-.672H3.325V5.607H4.913c2.054,0,2.414-.042,2.732-.525h.148V7.371H7.645c-.318-.483-.678-.525-2.732-.525H3.325v4.915H6.184c1.949,0,2.2-.5,2.6-1.155H9L8.682,13H0v-.21c.656-.189.91-.42.91-2.436V2.646C.91.63.656.4,0,.21V0H8.111" transform="translate(161 21)"></path> 905 <path class="b" d="M4.181,13H0v-.21c.666-.194.9-.44.9-2.436V2.646C.9.65.665.4,0,.21V0H4.075A7.982,7.982,0,0,1,7.511.662a2.943,2.943,0,0,1,1.727,2.8c0,1.272-1.036,2.107-1.949,2.843-.232.187-.451.363-.642.538l.1.148c1.282,1.847,3.949,5.691,6.083,5.691H13v.21A18.051,18.051,0,0,1,11.14,13c-2.795,0-2.853-.082-4.358-2.188-.181-.253-.385-.539-.617-.856L5,8.338c-.363-.515-.554-.567-1.212-.567h-.5v2.583c0,2,.233,2.242.9,2.436V13Zm-.9-11.761V6.758h.647a2.671,2.671,0,0,0,2.009-.814,3.12,3.12,0,0,0,.771-2.185,2.549,2.549,0,0,0-2.738-2.52Z" transform="translate(173 21)"></path> 906 <g transform="translate(0 44)"> 907 <path class="a" d="M0,0H185.834V40.784H0Z" transform="translate(0 0.195)"></path> 908 <g class="c"> 909 <path class="b" d="M0,6.465H185.834V0H0Z" transform="translate(0 0.195)"></path> 910 <path class="d" d="M40.19,24.664a18.966,18.966,0,0,1-7.413-1.482l-.436-5.6h.678a5.959,5.959,0,0,0,3.065,3.743,9.27,9.27,0,0,0,4.3,1.088A6.745,6.745,0,0,0,44.5,21.154,4.626,4.626,0,0,0,46.3,17.346c0-2.883-2.785-4.541-5.734-6.3a24.4,24.4,0,0,1-5.056-3.619,7.815,7.815,0,0,1-2.39-5.677A8.035,8.035,0,0,1,33.305,0h3.468a4.115,4.115,0,0,0-.022.413A5.026,5.026,0,0,0,38.643,4.13a26.362,26.362,0,0,0,4.2,2.9l.058.035c3.923,2.36,7.171,4.68,7.171,9.184a7.635,7.635,0,0,1-3.143,6.272A11.351,11.351,0,0,1,40.19,24.664Zm33.341-.573H65v-.478a2.073,2.073,0,0,0,1.6-1.214,12.011,12.011,0,0,0,.478-4.335V.509c0-.176,0-.344,0-.509h4.363V10.075h2.278c4.342,0,6.833-2.563,6.833-7.031A6.636,6.636,0,0,0,79.878,0h5.048a8.224,8.224,0,0,1,.331,2.373c0,2.931-2.739,5.329-4.94,7.255-.274.24-.532.466-.777.686.181.251.377.525.587.818a73.824,73.824,0,0,0,6.087,7.687c2.862,3.021,5.344,4.553,7.378,4.553h.387v.479a22.4,22.4,0,0,1-3.053.238c-3.135,0-4.754-.124-6.058-.861-1.326-.75-2.356-2.15-4.225-4.692-.332-.451-.674-.917-1.055-1.43l-2.713-3.635c-.9-1.214-1.458-1.387-3.053-1.387H71.447v5.979a12,12,0,0,0,.479,4.335,2.075,2.075,0,0,0,1.605,1.214v.478Zm-64.519,0H0v-.478A2.074,2.074,0,0,0,1.605,22.4a12.008,12.008,0,0,0,.478-4.335V.509c0-.176,0-.344,0-.509H6.444V7.539h3.634c4.635,0,5.519-.088,6.25-1.2h.339v4.64h-.339c-.732-1.108-1.616-1.2-6.25-1.2H6.444v8.275c0,2.34.156,3.6.539,4.335s.983.987,2.029,1.214v.477Z" transform="translate(76.402 16.337)"></path> 911 </g> 912 </g> 913 <path class="b" d="M3.714,13H0v-.2c.671-.1,1.053-.668,1.795-2.221L6.8.081A.133.133,0,0,1,6.927,0a.131.131,0,0,1,.125.081l5.174,10.678C13.033,12.417,13.346,12.7,14,12.8V13H9.264v-.2a.907.907,0,0,0,.721-.4c.151-.288.074-.736-.242-1.41l-.8-1.747H3.816l-.6,1.339c-.395.841-.6,1.435-.4,1.793.124.227.412.363.906.428V13ZM6.348,3.613,4.325,8.106H8.419Z" transform="translate(14)"></path> 914 <path class="d" d="M13,5.439a1.6,1.6,0,0,0-1.326-1.681c-1.155,0-3.55,1.946-4.748,2.653C7.185,5.04,7.954,2.962,7.954,1.459A1.359,1.359,0,0,0,6.5,0,1.425,1.425,0,0,0,5.046,1.459,33.909,33.909,0,0,0,6.073,6.411c-1.2-.707-3.507-2.653-4.7-2.653A1.512,1.512,0,0,0,0,5.439c0,1.9,4.019,1.547,5.858,1.812C4.618,8.4,1.881,10.17,1.881,11.452A1.759,1.759,0,0,0,3.464,13C4.917,13,5.816,9.285,6.5,7.738,7.185,9.2,8.039,13,9.536,13a1.72,1.72,0,0,0,1.583-1.548c0-1.371-2.78-3.095-3.934-4.245C8.98,6.942,13,7.341,13,5.439" transform="translate(173 56)"></path> 915 </svg> 916 </a> 917 } 918 919 @if (Model.Item.GetItem("BannerImage") != null && Model.Item.GetItem("BannerImage").GetFile("File") != null) { 920 921 <div class="banner"> 922 <div class="banner-container"> 923 @{ 924 var bannerImageItem = Model.Item.GetItem("BannerImage"); 925 926 if (bannerImageItem != null && bannerImageItem.GetFile("File") != null) { 927 var bannerImageItemFile = bannerImageItem.GetFile("File"); 928 bannerImageItemFile.Name = bannerImageItemFile.Name.Replace(" ", "&nbsp;"); 929 930 string bannerImageSrc = "/Admin/Public/GetImage.ashx?Image=" + bannerImageItemFile.PathUrlEncoded + "&Width=692&Height=350&Crop=7&format=webp&Quality=85"; 931 if (bannerImageItemFile.HasFocalPoint()) { 932 bannerImageSrc += "&" + bannerImageItemFile.GetFocalPointParameters(); 933 } 934 string bannerImageTitle = !string.IsNullOrWhiteSpace(bannerImageItem.GetString("Title")) ? bannerImageItem.GetString("Title") : Model.Item.GetItem("BannerImage").GetString("Title"); 935 <img src='@bannerImageSrc' alt="@bannerImageItem.GetString("Alt")" title="@bannerImageTitle" class="img-fluid"> 936 } 937 } 938 <div class="banner-text-container d-flex"> 939 <div class="align-self-center"> 940 @if (!string.IsNullOrWhiteSpace(Model.Item.GetString("BannerText"))) { 941 @Model.Item.GetString("BannerText") 942 } 943 </div> 944 </div> 945 </div> 946 </div> 947 } 948 949 @*<div class="row header-bottom"> 950 <div class="col-12 col-lg-6"> 951 <ol itemscope itemtype="https://schema.org/BreadcrumbList" class="breadcrumb" data-itemtypes="Page"> 952 <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 953 <a itemprop="item" href="/" title="@Translate("Forside")"> 954 <span itemprop="name"> 955 @Translate("Forside") 956 </span> 957 <meta itemprop="position" content="1" /> 958 </a> 959 </li> 960 @{ 961 int pathCounter = 2; 962 } 963 @foreach (var i in Model.Path) { 964 if (i.Name != "Service menu" && i.Name != "System") { 965 var breadcrumbPage = Dynamicweb.Services.Pages.GetPage(i.ID); 966 967 if (breadcrumbPage.Active && !breadcrumbPage.IsFolder && breadcrumbPage.ShowInLegend) { 968 <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 969 <a itemprop="item" href="/Default.aspx?ID=@i.ID" title="@i.Name"> 970 <span itemprop="name"> 971 @i.Name 972 </span> 973 <meta itemprop="position" content="@pathCounter" /> 974 </a> 975 </li> 976 pathCounter++; 977 } 978 } 979 } 980 </ol> 981 </div> 982 @if (Model.Path.Where(x => x.Name == "Obligatorisk efteruddannelse").Any()) { 983 var ecomPage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "ecom"); 984 if (ecomPage != null) { 985 986 string linkOEWithFilter = "/Default.aspx?ID=" + ecomPage.ID + "&GroupIds=GRP$OBLIGATORISK$EFTERUDDANNELSE"; 987 <div class="col-12 col-lg-6"> 988 <div class="filter-container"> 989 <div id="allcourselink" onclick="window.location.href='@linkOEWithFilter'" title="@Translate("Se alle OE kurser")" class="btn btn-yellow float-right" style="cursor:pointer;"> 990 @Translate("Se alle") <strong>@Translate("OE")</strong> @Translate("kurser") 991 <i class="fal fa-arrow-right"></i> 992 </div> 993 </div> 994 </div> 995 } 996 } 997 </div>*@ 998 999 1000 1001 @* ------------------------------- *@ 1002 1003 <div class="row header-bottom justify-content-between"> 1004 <div class="col-6"> 1005 <ol itemscope itemtype="https://schema.org/BreadcrumbList" class="breadcrumb" data-itemtypes="Page"> 1006 <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 1007 <a itemprop="item" href="/" title="@Translate("Forside")"> 1008 <span itemprop="name"> 1009 @Translate("Forside") 1010 </span> 1011 <meta itemprop="position" content="1" /> 1012 </a> 1013 </li> 1014 @{ 1015 int pathCounter = 2; 1016 } 1017 @foreach (var i in Model.Path) { 1018 if (Dynamicweb.Content.Services.Pages.GetPage(i.ID).IsFolder) { 1019 continue; 1020 } 1021 <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> 1022 <a itemprop="item" href="/Default.aspx?ID=@i.ID" title="@i.Name"> 1023 <span itemprop="name"> 1024 @i.Name 1025 </span> 1026 <meta itemprop="position" content="@pathCounter" /> 1027 1028 </a> 1029 </li> 1030 pathCounter++; 1031 } 1032 </ol> 1033 </div> 1034 1035 @{ 1036 var buttons = Model.Item.GetItems("ListButtons"); 1037 } 1038 1039 @if (buttons != null && buttons.Any()) { 1040 int buttonCounter = 0; 1041 1042 <aside class="aside col-12 col-md-6 col-lg-4 align-self-end"> 1043 <div class="row"> 1044 <div class="col-12"> 1045 <div id="accordionSubjects" class="accordion mb-4"> 1046 1047 @foreach (var i in buttons) { 1048 string buttonLink = i.GetString("Link"); 1049 string buttonText = i.GetString("Text"); 1050 bool buttonNewWindow = i.GetBoolean("TargetBlank"); 1051 1052 string buttonBgColor = i.GetString("ButtonBackgroundColor"); 1053 string buttonTextColor = i.GetString("ButtonTextColor"); 1054 string uniqueClass = ""; 1055 1056 if (!string.IsNullOrWhiteSpace(buttonBgColor) && !string.IsNullOrWhiteSpace(buttonTextColor)) { 1057 // Convert the hex color to RGB 1058 int r = int.Parse(buttonBgColor.Substring(1, 2), System.Globalization.NumberStyles.HexNumber); 1059 int g = int.Parse(buttonBgColor.Substring(3, 2), System.Globalization.NumberStyles.HexNumber); 1060 int b = int.Parse(buttonBgColor.Substring(5, 2), System.Globalization.NumberStyles.HexNumber); 1061 1062 // Define the hover color (darker by 20%) 1063 int hoverR = (int)(r * 0.8); 1064 int hoverG = (int)(g * 0.8); 1065 int hoverB = (int)(b * 0.8); 1066 1067 uniqueClass = "btn-custom-" + buttonCounter; 1068 1069 <style> 1070 .@uniqueClass { 1071 background-color: rgba( @r, @g, @b, 1) !important; 1072 border: 1px solid rgba( @r, @g, @b, 1) !important; 1073 color: @buttonTextColor !important; 1074 } 1075 1076 .@uniqueClass:hover, .@uniqueClass:active { 1077 background-color: rgba(@hoverR, @hoverG, @hoverB, 1) !important; 1078 border: 1px solid rgba(@hoverR, @hoverG, @hoverB, 1) !important; 1079 color: @buttonTextColor !important; 1080 } 1081 </style> 1082 } 1083 1084 string buttonClass = "btn btn-yellow " + uniqueClass + " float-right anchorLink mt-3 mt-md-0 ml-2"; 1085 buttonCounter++; 1086 if (buttonCounter != buttons.Count) { 1087 buttonClass += " mb-md-2"; 1088 } 1089 1090 <a class="@buttonClass" href="@buttonLink" title="@buttonText"> 1091 <span>@buttonText</span> 1092 <i class="fal fa-arrow-right"></i> 1093 </a> 1094 } 1095 1096 @if (Model.Path.Where(x => x.Name == "Obligatorisk efteruddannelse").Any()) { 1097 var ecomPage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "ecom"); 1098 if (ecomPage != null) { 1099 string linkOEWithFilter = "/Default.aspx?ID=" + ecomPage.ID + "&GroupIds=GRP$OBLIGATORISK$EFTERUDDANNELSE"; 1100 <div class="filter-container"> 1101 <div id="allcourselink" onclick="window.location.href='@linkOEWithFilter'" title="@Translate("Se alle OE kurser")" class="btn btn-yellow float-right" style="cursor:pointer;"> 1102 @Translate("Se alle") <strong>@Translate("OE")</strong> @Translate("kurser") 1103 <i class="fal fa-arrow-right"></i> 1104 </div> 1105 </div> 1106 } 1107 } 1108 </div> 1109 </div> 1110 </div> 1111 </aside> 1112 } else if (Model.Path.Where(x => x.Name == "Obligatorisk efteruddannelse").Any()) { 1113 var ecomPage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "ecom"); 1114 if (ecomPage != null) { 1115 string linkOEWithFilter = "/Default.aspx?ID=" + ecomPage.ID + "&GroupIds=GRP$OBLIGATORISK$EFTERUDDANNELSE"; 1116 <div class="col-12 col-lg-6"> 1117 <div class="filter-container"> 1118 <div id="allcourselink" onclick="window.location.href='@linkOEWithFilter'" title="@Translate("Se alle OE kurser")" class="btn btn-yellow float-right" style="cursor:pointer;"> 1119 @Translate("Se alle") <strong>@Translate("OE")</strong> @Translate("kurser") 1120 <i class="fal fa-arrow-right"></i> 1121 </div> 1122 </div> 1123 </div> 1124 } 1125 } 1126 </div> 1127 1128 1129 @* ------------------------------- *@ 1130 1131 </div> 1132 </div> 1133 </div> 1134 </header> 1135 1136 @if (!string.IsNullOrWhiteSpace(color)) { 1137 // .section-box {margin: 15px; background:@(color+", 0.3)");} 1138 //.section-box:hover {background:@(color+", 0.35)");} 1139 1140 <style> 1141 .section-box .section-box-content h2 {color:@(color+", 1)");} 1142 .section-box .section-box-content p {color:#504e4d;} 1143 1144 .box.bordered svg .a, .section-box .section-box-icon {fill:@(color+", 1)");} 1145 .fa-long-arrow-right {color:@(color+", 1)");} 1146 1147 @*main .accordion h3 {color:@(color+", 1)");}*@ 1148 1149 main .accordion .card .card-header {background:@(color+", 1)");} 1150 main .accordion .card .card-header:active, 1151 main .accordion .card .card-header:focus, 1152 main .accordion .card .card-header:hover, 1153 main .accordion .card .card-header[aria-expanded=true], 1154 main .accordion .card[data-inpath="1"] .card-header {background:@(colorHover+", 1)");} 1155 </style> 1156 if (isBaerdygtighedsakademiet) { 1157 <style> 1158 header .bg-container { 1159 background: linear-gradient(to left,@(color+", 1)") 36%,#fff 36%) 1160 } 1161 header .bg-container:before{ 1162 background:@(color+", 1)"); 1163 } 1164 </style> 1165 } 1166 } 1167 1168 1169 <main id="main" class="@mainClass"> 1170 <div class="container"> 1171 <div class="row"> 1172 1173 <div class="col-12"> 1174 <div class="row"> 1175 @Model.Placeholder("quickspots", "Spots", "sort:1") 1176 1177 </div> 1178 </div> 1179 </div> 1180 <div class="row"> 1181 <div class="@mainContentClass"> 1182 <div class="row"> 1183 @if (!string.IsNullOrWhiteSpace(Model.Item.GetString("Heading")) || !string.IsNullOrWhiteSpace(Model.Item.GetString("Introduction")) || !string.IsNullOrWhiteSpace(@Model.Item.GetString("Text"))) { 1184 <article id="article-content" class="col-12"> 1185 @if (!string.IsNullOrWhiteSpace(Model.Item.GetString("Heading"))) { 1186 <h1 class="mb-3">@Model.Item.GetString("Heading")</h1> 1187 } 1188 1189 @if (!string.IsNullOrWhiteSpace(Model.Item.GetString("Introduction"))) { 1190 introtext = Model.Item.GetString("Introduction"); 1191 <p class="intro-text mb-3">@Model.Item.GetString("Introduction")</p> 1192 <hr /> 1193 } 1194 1195 @if (hasAccess && !string.IsNullOrWhiteSpace(Model.Item.GetString("Text"))) { 1196 <div class="editor-text"> 1197 @Model.Item.GetString("Text") 1198 </div> 1199 } 1200 </article> 1201 } 1202 1203 @if (hasAccess) { 1204 <div class="col-12"> 1205 <div class="@contentRowClass"> 1206 @Model.Placeholder("content", "Indhold", "sort:2") 1207 </div> 1208 </div> 1209 1210 } else if (Pageview.User != null) { 1211 @*<div class="login-required-box"> 1212 <hr /> 1213 @Model.Area.Item.GetString("NoAccessText") 1214 <hr /> 1215 </div>*@ 1216 <div class="login-required-box tb-no-access"> 1217 1218 <div class="bg-blue"> 1219 1220 <div class="row"> 1221 <div class="col-12 col-md-5 position-absolute"> 1222 <div class="iroogn-02"> 1223 @Model.Area.Item.GetString("NoAccessText") 1224 </div> 1225 </div> 1226 1227 <div class="col-12 col-md-7 mr-auto"> 1228 <h3>@Translate("Vil du læse mere?")</h3> 1229 1230 <p> 1231 @Translate("Du har desværre ikke adgang til denne side med dit nuværende abonnement"). 1232 </p> 1233 <p> 1234 @Translate("Er du i tvivl om, hvad du har adgang til, kan du se dine abonnementer på") <a href="/mit-fsr">Mit FSR</a> 1235 </p> 1236 </div> 1237 </div> 1238 </div> 1239 </div> 1240 } else { 1241 @*<div class="login-required-box"> 1242 <div class="col-12"> 1243 <div class="mb-4"> 1244 @Model.Area.Item.GetString("NotLoggedInText") 1245 </div> 1246 </div> 1247 1248 @if (System.Web.HttpContext.Current.Request.Url.DnsSafeHost.IndexOf("local") > -1) { 1249 @RenderParagraphContent(3) 1250 } else { 1251 1252 @RenderParagraphContent(2) 1253 } 1254 1255 <hr /> 1256 </div>*@ 1257 <div class="col-12"> 1258 <div class="login-required-box tb"> 1259 <div class="bg-blue"> 1260 <div class="row"> 1261 <div class="col-12 col-md-5 position-absolute"> 1262 <div class="iroogn-02"> 1263 @Model.Area.Item.GetString("NotLoggedInText") 1264 </div> 1265 </div> 1266 <div class="col-12 col-md-7 mr-auto"> 1267 <h3>@Translate("Log ind for at læse videre")</h3> 1268 </div> 1269 1270 <div class="col-12 col-md-7 mr-auto"> 1271 <div class="row"> 1272 @if (System.Web.HttpContext.Current.Request.Url.DnsSafeHost.IndexOf("local") > -1) { 1273 @RenderParagraphContent(3) 1274 } else { 1275 @RenderParagraphContent(2) 1276 } 1277 </div> 1278 </div> 1279 <div class="col-12 col-md-12 mt-5"> 1280 <div class="row"> 1281 <div class="col-12 col-md-7"> 1282 <ul class="line-list white-hover"> 1283 <li> 1284 <a href="/medlem">@(Translate("Bliv medlem"))</a> 1285 </li> 1286 </ul> 1287 <p> 1288 @Translate("login issues") <a href="mailto:medlemsservice@fsr.dk">@(Translate("kontakt medlemsservice"))</a> 1289 </p> 1290 </div> 1291 </div> 1292 </div> 1293 </div> 1294 </div> 1295 </div> 1296 </div> 1297 } 1298 1299 </div> 1300 1301 </div> 1302 1303 @if (showRightColumn) { 1304 string asideClass = "aside col-md-4"; 1305 // Find medarbejder side (på live / på staging): 503 1306 if (Pageview.ID == 503) { 1307 asideClass += " please-be-sticky"; 1308 } 1309 // SKAL FLYTTES OVER I CSS line 3109'ish 1310 // main:has(#coursepicker), main:has(aside.please-be-sticky) {# sticky-anchor 1311 1312 @*<style> 1313 @@media (min-width: 767px) { 1314 main:has(#coursepicker) #sticky-anchor, main:has(aside.please-be-sticky) #sticky-anchor { 1315 width: 100%; 1316 } 1317 1318 main:has(#coursepicker) .fixed, main:has(aside.please-be-sticky) .fixed { 1319 position: fixed; 1320 top: 0; 1321 z-index: 1; 1322 transform: translateY(30px); 1323 } 1324 1325 main:has(#coursepicker) #sticky.stick, main:has(aside.please-be-sticky) #sticky.stick { 1326 position: fixed; 1327 top: 0; 1328 z-index: 10; 1329 } 1330 } 1331 </style>*@ 1332 1333 // /SKAL FLYTTES OVER I CSS 1334 1335 <aside class="@asideClass"> 1336 <div class="row"> 1337 1338 @if (Model.Item.GetBoolean("SideNavVisible")) { 1339 var parentPage = Pageview.Page; 1340 1341 1342 while (true) { 1343 if (parentPage.Parent != null && !parentPage.Parent.IsFolder) { 1344 parentPage = parentPage.Parent; 1345 continue; 1346 } 1347 1348 break; 1349 } 1350 1351 <div class="col-12 d-none d-lg-block"> 1352 <div id="accordionSubjects" class="accordion mb-4 d-none d-lg-block"> 1353 <h3 data-parentid="@(parentPage.ID)">@Translate("Find mere om")</h3> 1354 @{ 1355 var pathNames = Model.Path.Select(x => x.Name.ToLower()); 1356 int startLevel = 3; 1357 if (pathNames.Contains("service menu")) { 1358 startLevel = 1; 1359 } else if (pathNames.Contains("rådgivning")) { 1360 startLevel = 4; 1361 } 1362 if (Model.Item.GetBoolean("SideNavLevel")) { 1363 startLevel++; 1364 } 1365 //int startLevel = Model.Path.Where(x => x.Name.ToLower() == "service menu").Any() ? 1 : Model.Path.Count + 1; 1366 1367 } 1368 1369 @RenderNavigation(new 1370 { 1371 startlevel = startLevel, 1372 endlevel = 99, 1373 template = "SecondaryNav.xslt", 1374 expandmode = "Path", 1375 areaid = Pageview.AreaID, 1376 parentid = parentPage.ID 1377 }) 1378 1379 </div> 1380 </div> 1381 } 1382 <div id="sticky-anchor"></div> 1383 1384 <div id="sticky" class="static-sidebar"> 1385 @if (Model.Item.GetUsers("Contact").Any()) { 1386 string contactDirection = "Ascending"; 1387 if (Model.Item.GetList("ContactSortDirection") != null && !string.IsNullOrEmpty(Model.Item.GetList("ContactSortDirection").SelectedValue)) { 1388 contactDirection = Model.Item.GetList("ContactSortDirection").SelectedValue; 1389 } 1390 var sortedContacts = contactDirection == "Ascending" ? Model.Item.GetUsers("Contact").OrderBy(x => x.Name) : Model.Item.GetUsers("Contact").OrderByDescending(x => x.Name); 1391 <div class="col-12 bg-right grey-box-right contact-box mt-5"> 1392 <div> 1393 <h3>@Translate("Kontakt")</h3> 1394 @foreach (var i in sortedContacts) { 1395 1396 var userToFixLackOfCvr = Dynamicweb.Security.UserManagement.User.GetUserByID(i.ID); 1397 1398 string phoneTime = ""; 1399 //string phoneTime = "" + i.CustomFields.Where(x => x.Key == "AccessUser_PhoneTime").FirstOrDefault().Value.Value; 1400 if (userToFixLackOfCvr.CustomFieldValues.Where(x => x.CustomField.SystemName == "AccessUser_PhoneTime").Any() && userToFixLackOfCvr.CustomFieldValues.Where(x => x.CustomField.SystemName == "AccessUser_PhoneTime").FirstOrDefault().Value != null) { 1401 phoneTime = "" + userToFixLackOfCvr.CustomFieldValues.Where(x => x.CustomField.SystemName == "AccessUser_PhoneTime").FirstOrDefault().Value; 1402 } 1403 1404 if (!string.IsNullOrWhiteSpace(i.Image)) { 1405 string contactImagePath = "/Admin/Public/GetImage.ashx?Image=" + i.Image + "&Width=120&Height=120&Crop=0&format=webp&Quality=85"; 1406 1407 <img src="@contactImagePath" class="img-fluid rounded-circle" alt="" title=""> 1408 } 1409 <p> 1410 <strong>@i.Name</strong> 1411 1412 @if (!string.IsNullOrWhiteSpace(@i.Title)) { 1413 @i.Title 1414 <br /> 1415 } 1416 1417 @if (!string.IsNullOrWhiteSpace(@i.Address)) { 1418 @i.Address 1419 <br /> 1420 } 1421 1422 @if (!string.IsNullOrWhiteSpace(@i.Zip) && !string.IsNullOrWhiteSpace(@i.City)) { 1423 string zipCity = @i.Zip + " " + @i.City; 1424 1425 <span>@zipCity</span> 1426 <br /> 1427 } 1428 1429 1430 @*@if (!string.IsNullOrWhiteSpace(i.Email)) {@Rot13_Email(i.Email)} 1431 @if (!string.IsNullOrWhiteSpace(i.Phone)) {@renderStar()<a href="tel:@i.Phone.Trim().Insert((i.Phone.Length / 2), " ")">@i.Phone.Trim().Insert((i.Phone.Length / 2), " ")</a>} 1432 @if (!string.IsNullOrWhiteSpace(i.PhoneMobile)) {@renderStar()<a href="tel:@i.PhoneMobile.Trim().Insert((i.PhoneMobile.Length / 2), " ")">@i.PhoneMobile.Trim().Insert((i.PhoneMobile.Length / 2), " ")</a>} 1433 *@ 1434 1435 @if (!string.IsNullOrWhiteSpace(i.Email)) { 1436 <span class="d-inline-block"> 1437 <i class="fal fa-envelope"></i> 1438 @Rot13_Email(i.Email) 1439 </span> 1440 } 1441 1442 @if (!string.IsNullOrWhiteSpace(i.Phone)) { 1443 @renderStar() 1444 <span class="d-inline-block"> 1445 <i class="fal fa-phone"></i> 1446 <a href="tel:@i.Phone.Trim().Insert((i.Phone.Length / 2), " ")"> 1447 @i.Phone.Trim().Insert((i.Phone.Length / 2), " ") 1448 </a> 1449 </span> 1450 1451 } 1452 1453 @if (!string.IsNullOrWhiteSpace(i.PhoneMobile)) { 1454 @renderStar() 1455 <span class="d-inline-block"> 1456 <i class="fal fa-mobile-android-alt"></i> 1457 <a href="tel:@i.PhoneMobile.Trim().Insert((i.PhoneMobile.Length / 2), " ")"> 1458 @i.PhoneMobile.Trim().Insert((i.PhoneMobile.Length / 2), " ") 1459 </a> 1460 </span> 1461 } 1462 1463 @*<pre>@i.CVR</pre>*@ 1464 1465 @if (userToFixLackOfCvr != null && !string.IsNullOrWhiteSpace(userToFixLackOfCvr.VatRegNumber)) { 1466 <br /><br /> 1467 <strong class="d-inline-block">CVR:</strong> @userToFixLackOfCvr.VatRegNumber 1468 } 1469 1470 @if (!string.IsNullOrWhiteSpace(phoneTime)) { 1471 <br /><br /> 1472 <strong>@Translate("Telefontid"):</strong> 1473 @phoneTime 1474 <br /> 1475 } 1476 1477 </p> 1478 } 1479 1480 </div> 1481 </div> 1482 1483 } 1484 @if (Model.Item.GetUsers("Educators").Any()) { 1485 string contactDirection = "Ascending"; 1486 var sortedEducators = contactDirection == "Ascending" ? Model.Item.GetUsers("Educators").OrderBy(x => x.Email) : Model.Item.GetUsers("Educators").OrderByDescending(x => x.Email); 1487 string imageBasePath = "/Files/Images/Kurser og uddannelse/Undervisere"; 1488 string serverPath = System.Web.HttpContext.Current.Server.MapPath(imageBasePath); 1489 //Undervisere her LLA 1490 1491 int educatorCount = Model.Item.GetUsers("Educators").Count(); 1492 string educatorsTitle = educatorCount > 1 ? "Undervisere" : "Underviser"; 1493 1494 <div class=""> 1495 1496 @*<div class="bg-right col-12 instruere-box blue mt-7 ml-3">*@ 1497 <div class="bg-right blue col-12 contact-box grey-box-right mt-5"> 1498 1499 <h3>@educatorsTitle</h3> 1500 1501 1502 @foreach (var educator in sortedEducators) { 1503 string educatorImage = ""; 1504 if (!string.IsNullOrWhiteSpace(educator.Image)) { 1505 educatorImage = educator.Image; 1506 } else { 1507 string imageFileName = $"{educator.Email.Split('@')[0]}"; 1508 1509 string[] searchExtensions = { ".jpg", ".jpeg", ".png" }; 1510 string imageFilePath = null; 1511 1512 foreach (var file in Directory.EnumerateFiles(serverPath, $"{imageFileName}.*", SearchOption.TopDirectoryOnly)) { 1513 1514 string fileExtension = Path.GetExtension(file); 1515 if (searchExtensions.Any(ext => string.Equals(ext, fileExtension, StringComparison.OrdinalIgnoreCase))) { 1516 imageFilePath = file; 1517 break; 1518 } 1519 } 1520 if (!string.IsNullOrEmpty(imageFilePath)) { 1521 educatorImage = imageBasePath + imageFilePath.Substring(serverPath.Length).Replace('\\', '/'); 1522 } 1523 } 1524 <div> 1525 @if (!string.IsNullOrWhiteSpace(educatorImage)) { 1526 educatorImage = "/Admin/Public/GetImage.ashx?Image=" + educatorImage + "&format=webp&Quality=85&Width=250&Height=250&Crop=2"; 1527 <img src="@educatorImage" alt="Portræt billede af @educator.Name" class="rounded-circle" /> 1528 } 1529 1530 <p class="mb-4"> 1531 @if (!string.IsNullOrWhiteSpace(educator.Name)) { 1532 <strong> @educator.Name</strong> 1533 } 1534 1535 @if (!string.IsNullOrWhiteSpace(educator.JobTitle)) { 1536 <span class="d-block"> @educator.JobTitle</span> 1537 } 1538 1539 @if (!string.IsNullOrWhiteSpace(educator.Company)) { 1540 <span class="d-block"> @educator.Company</span> 1541 } 1542 </p> 1543 </div> 1544 } 1545 1546 1547 1548 </div> 1549 1550 </div> 1551 } 1552 </div> 1553 </div> 1554 </aside> 1555 } 1556 1557 @*IncludeFile("Includes/_Ribbon.cshtml")*@ 1558 1559 <div id="container-bottom" class="col-12"> 1560 <div class="row"> 1561 @if (hasAccess) { 1562 @Model.Placeholder("contentwidthfull", "Fuld bredde", "sort:3") 1563 1564 <div class="@widthLimitedContentClass"> 1565 <div class="row"> 1566 @Model.Placeholder("contentwidthlimited", "Begrænset bredde", "sort:4") 1567 </div> 1568 </div> 1569 } 1570 @{ 1571 int obligatedAfterEducationPageID = 131; 1572 bool pageIsSubOfObligatedAfterEducation = Model.Path.Where(x => x.ID == obligatedAfterEducationPageID).Any(); 1573 string backgroundColor = string.Empty; 1574 string textColor = string.Empty; 1575 var ribbonItems = new List<ItemViewModel>(); 1576 if (Model.Item.GetBoolean("RibbonVisible") && Model.Item.GetItem("Ribbon") != null) { 1577 1578 if (Model.Item.GetItem("Ribbon").GetItems("List") != null && Model.Item.GetItem("Ribbon").GetItems("List").Any()) { 1579 ribbonItems = (List<ItemViewModel>)Model.Item.GetItem("Ribbon").GetItems("List"); 1580 } 1581 1582 backgroundColor = Model.Item.GetItem("Ribbon").GetString("ListBackgroundColor"); 1583 textColor = Model.Item.GetItem("Ribbon").GetString("ListTextColor"); 1584 } 1585 } 1586 @if (pageIsSubOfObligatedAfterEducation && !ribbonItems.Any()) { 1587 foreach (var i in Model.Path.Reverse().Skip(1)) { 1588 var parentPage = Dynamicweb.Services.Pages.GetPage(i.ID); 1589 if (parentPage != null && parentPage.ItemType != "") { 1590 1591 var meta = Dynamicweb.Content.Items.ItemManager.Metadata.GetItemType(parentPage.Item); 1592 var columnsField = meta.GetAllFields().Find("Ribbon"); 1593 var editor = columnsField.CreateEditorInstance(false); 1594 var fieldValue = parentPage.Item["Ribbon"]; 1595 var fieldViewModel = (Dynamicweb.Frontend.ItemViewModel)editor.GetViewModelValue(fieldValue, columnsField); 1596 bool ribbonVisible = parentPage.Item["RibbonVisible"] != null && (bool)parentPage.Item["RibbonVisible"]; 1597 if (fieldViewModel != null && ribbonVisible && fieldViewModel.GetItems("List") != null && fieldViewModel.GetItems("List").Any()) { 1598 ribbonItems = (List<ItemViewModel>)fieldViewModel.GetItems("List"); 1599 1600 backgroundColor = fieldViewModel.GetString("ListBackgroundColor"); 1601 textColor = fieldViewModel.GetString("ListTextColor"); 1602 1603 break; 1604 } 1605 } 1606 if (i.ID == obligatedAfterEducationPageID) { 1607 break; 1608 } 1609 } 1610 } 1611 1612 @if (hasAccess && ribbonItems.Any() && Dynamicweb.Context.Current.Request.Url.ToString().IndexOf("productid=") == -1) { 1613 1614 string textColorClass = ""; 1615 if (!string.IsNullOrWhiteSpace(textColor)) { 1616 textColorClass = "text-controller-" + Model.ID; 1617 } 1618 1619 <div id="background-controller-@Model.ID" class="col-12 bg-left blue spot-ribbon @textColorClass" data-color="@backgroundColor"> 1620 <div class="row"> 1621 @foreach (var card in ribbonItems) { 1622 var imageItem = card.GetItem("Image"); 1623 string Ribbontitle = card.GetString("Title"); 1624 var textItem = card.GetItem("Text"); 1625 var linkItem = card.GetItem("Link"); 1626 if (imageItem == null || textItem == null || linkItem == null) { 1627 continue; 1628 } 1629 1630 if (ribbonItems.Count > 1) { 1631 <a href="@linkItem.GetString("Link")" title="@linkItem.GetString("Text")" aria-label="@linkItem.GetString("Text")" class="spot col-12 col-lg-4"> 1632 <div class="d-flex flex-column h-100"> 1633 @if (imageItem.GetFile("File") != null) { 1634 string spotImagePath = "/Admin/Public/GetImage.ashx?Image=" + imageItem.GetFile("File").PathUrlEncoded + "&Width=692&Height=416&Crop=7&format=webp&Quality=85"; 1635 if (imageItem.GetFile("File").HasFocalPoint()) { 1636 spotImagePath += "&" + imageItem.GetFile("File").GetFocalPointParameters(); 1637 } 1638 1639 1640 <div class="zoom"> 1641 <img src="@spotImagePath" alt="@imageItem.GetString("Alt")" title="@imageItem.GetString("Title")" class="img-fluid" /> 1642 </div> 1643 } 1644 <div class="intro-text"> 1645 @Ribbontitle 1646 </div> 1647 <div class="intro-content"> 1648 @textItem.GetString("Text") 1649 </div> 1650 <div class="mt-auto"> 1651 @if (!string.IsNullOrWhiteSpace(linkItem.GetString("Text"))) { 1652 <span class="line-link">@linkItem.GetString("Text")</span> 1653 } 1654 </div> 1655 </div> 1656 </a> 1657 } else { 1658 <a href="@linkItem.GetString("Link")" title="@linkItem.GetString("Text")" aria-label="@linkItem.GetString("Text")" class="spot col-12 col-lg-12 mb-0"> 1659 <div class="row"> 1660 <div class="col-lg-6"> 1661 <div class="d-flex flex-column h-100"> 1662 @if (imageItem.GetFile("File") != null) { 1663 string spotImagePath = "/Admin/Public/GetImage.ashx?Image=" + imageItem.GetFile("File").PathUrlEncoded + "&Width=692&Height=416&Crop=7&format=webp&Quality=85"; 1664 if (imageItem.GetFile("File").HasFocalPoint()) { 1665 spotImagePath += "&" + imageItem.GetFile("File").GetFocalPointParameters(); 1666 } 1667 1668 1669 <div class="zoom"> 1670 <img src="@spotImagePath" alt="@imageItem.GetString("Alt")" title="@imageItem.GetString("Title")" class="img-fluid" /> 1671 </div> 1672 } 1673 </div> 1674 </div> 1675 1676 <div class="col-lg-6"> 1677 <div class="intro-text"> 1678 @Ribbontitle 1679 </div> 1680 <div class="intro-content"> 1681 @textItem.GetString("Text") 1682 </div> 1683 <div class="mt-auto"> 1684 @if (!string.IsNullOrWhiteSpace(linkItem.GetString("Text"))) { 1685 <span class="line-link">@linkItem.GetString("Text")</span> 1686 } 1687 </div> 1688 </div> 1689 </div> 1690 1691 </a> 1692 } 1693 } 1694 </div> 1695 </div> 1696 } 1697 1698 @if (Model.Item.GetBoolean("ShowBecomeMember")) { 1699 <style> 1700 // --------------------------- 1701 .login-required-box.tb { 1702 min-height: 380px; 1703 } 1704 1705 @@media screen and (max-width: 1199px) { 1706 .login-required-box.tb { 1707 min-height: 430px; 1708 } 1709 } 1710 // --------------------------- 1711 1712 .become-member.become-member-v2 { 1713 margin-top: 9rem; 1714 } 1715 @@media screen and (max-width: 991px) { 1716 .become-member.become-member-v2 { 1717 margin-top: 4rem; 1718 } 1719 } 1720 .become-member.become-member-v2 > h2 { 1721 position: absolute; 1722 top: -87px; 1723 text-align: center; 1724 z-index: 10; 1725 font-size: 4rem; 1726 font-weight: 800; 1727 color: #000; 1728 width: 100%; 1729 } 1730 @@media screen and (max-width: 991px) { 1731 .become-member.become-member-v2 > h2 { 1732 position: relative; 1733 top: auto; 1734 } 1735 } 1736 .become-member.become-member-v2 .benefits-left { 1737 color: #14143C; 1738 } 1739 1740 .become-member.become-member-v2 .benefits-left h2 { 1741 color: #000000; 1742 margin-bottom: 15px; 1743 } 1744 1745 @@media screen and (min-width: 768px) { 1746 .become-member.become-member-v2 .benefits-left >.row>div svg { 1747 min-height: 85px; 1748 } 1749 } 1750 1751 .become-member.become-member-v2 .benefits-right > div { 1752 padding-right: 2rem; 1753 } 1754 @@media screen and (max-width: 1199px) { 1755 .become-member.become-member-v2 .benefits-right > div { 1756 padding-right: 2rem; 1757 left: 0; 1758 } 1759 } 1760 @@media screen and (max-width: 991px) { 1761 .become-member.become-member-v2 .benefits-right > div { 1762 position: absolute; 1763 bottom: 0; 1764 left: 2rem; 1765 } 1766 } 1767 .become-member.become-member-v2 .benefits-right > div p { 1768 font-size: 1.45rem; 1769 font-weight: 500; 1770 line-height: 1.5rem; 1771 color: #ffffff; 1772 } 1773 1774 @@media screen and (max-width: 1199px) { 1775 .become-member.become-member-v2 .benefits-right > div p { 1776 font-size: 1.25rem; 1777 max-width: 425px; 1778 margin-bottom: 5px; 1779 color: #000; 1780 } 1781 } 1782 1783 @@media screen and (max-width: 991px) { 1784 .become-member.become-member-v2 .benefits-right > div p { 1785 color: #fff; 1786 } 1787 } 1788 1789 .become-member.become-member-v2 .benefits-right > div .line-link { 1790 margin-top: 35px; 1791 } 1792 @@media screen and (max-width: 1199px) { 1793 .become-member.become-member-v2 .benefits-right > div .line-link { 1794 margin-top: 0; 1795 } 1796 } 1797 @@media screen and (max-width: 991px) { 1798 .become-member.become-member-v2 .benefits-right > div .line-link { 1799 margin-top: 30px; 1800 } 1801 } 1802 1803 1804 </style> 1805 1806 1807 @* -- -- NEW VERSION (2020) -- -- *@ 1808 <a href="/medlem" title="Bliv medlem af FSR" aria-label="Bliv medlem af FSR" class="col-12 bg-right become-member become-member-v2"> 1809 @*<h2>@Translate("Gratis medlem")?</h2>*@ 1810 1811 <div class="row"> 1812 <div class="col-12 col-lg-6"> 1813 <div class="benefits-left"> 1814 <h2 class="color-black">@Translate("Medlemsfordele")</h2> 1815 <div class="row"> 1816 <div class="col-12 col-md-4"> 1817 <div class="row"> 1818 <div class="col-4 col-md-12"> 1819 <svg xmlns="http://www.w3.org/2000/svg" width="73" height="70.407" viewBox="0 0 73 70.407"> 1820 <defs> 1821 <style>.become-member.become-member-v2 .b{fill:none !important;stroke:#444969;stroke-linecap:round;stroke-linejoin:round;stroke-width:3px;}</style> 1822 </defs> 1823 <g transform="translate(-783.881 -543.255)"> 1824 <path class="b" d="M842.868,544.755h.681a4.223,4.223,0,0,1,4.211,4.211v54.77a4.223,4.223,0,0,1-4.211,4.213h-.681c-2.344,0-16.871-21.473-32.42-21.473h-19.36a5.724,5.724,0,0,1-5.707-5.707v-8.835a5.726,5.726,0,0,1,5.707-5.707h19.36c15.551,0,30.076-21.471,32.42-21.471Z" transform="translate(0)"></path> 1825 <path class="b" d="M814.653,554.785a10.671,10.671,0,0,1,0,20.49" transform="translate(33.043 11.322)"></path> 1826 <line class="b" y2="20.25" transform="translate(810.815 566.227)"></line> 1827 <path class="b" d="M801.912,564.353c.785,4.479-.364,9.154,2.359,13.439l4.609,7.253c1.158,1.824-.711,4.994-2.8,4.994h-6.919a5.243,5.243,0,0,1-4.807-3.8l-5.186-21.882Z" transform="translate(4.276 22.123)"></path> 1828 </g> 1829 </svg> 1830 </div> 1831 <div class="col-8 col-md-12 d-flex"> 1832 <span class="align-self-center w-100">@Translate("Faglige nyheder")</span> 1833 </div> 1834 </div> 1835 </div> 1836 <div class="col-12 col-md-4"> 1837 <div class="row"> 1838 <div class="col-4 col-md-12"> 1839 <svg xmlns="http://www.w3.org/2000/svg" width="85" height="85.001" viewBox="0 0 85 85.001"> 1840 <path class="a" d="M73,29H58.874V26.812l-4.145,1.68a6.849,6.849,0,0,1-2.59.508H32.229a6.927,6.927,0,0,1-3.719-1.086L2.793,12.119A5.79,5.79,0,0,1,0,7.1,5.939,5.939,0,0,1,.747,4.218,5.6,5.6,0,0,1,3.173,1.9,5.207,5.207,0,0,1,4.6,1.417a5.491,5.491,0,0,1,3.84.652l14.35,7.969A5.756,5.756,0,0,1,26.634,6.38l16.314-4.5a12.51,12.51,0,0,1,3.264-.435h5.435a6.948,6.948,0,0,1,3.63,1.03l3.6,2.212V0H73V29ZM61.7,2.9V26.1h8.476V2.9ZM5.67,4.218H5.66a2.954,2.954,0,0,0-.541.051,2.6,2.6,0,0,0-.707.236A2.786,2.786,0,0,0,3.2,5.655,3,3,0,0,0,2.821,7.1a2.906,2.906,0,0,0,1.4,2.518L29.978,25.436a4.165,4.165,0,0,0,2.251.664H52.137a4.154,4.154,0,0,0,1.554-.3l5.182-2.1V8.072l-5.05-3.1a4.159,4.159,0,0,0-2.177-.618H46.232a9.642,9.642,0,0,0-2.552.345L27.373,9.173a2.926,2.926,0,0,0-2.078,2.558c-.012.122,0,.471,0,.474a2.643,2.643,0,0,0,.082.536A2.843,2.843,0,0,0,28.1,14.877h.006c.176-.015,1.03-.2,1.647-.341l14.629-4.013.728,2.8L30.435,17.356a13.523,13.523,0,0,1-2.328.426,5.7,5.7,0,0,1-5.461-4.291,1.059,1.059,0,0,1-.025-.153c0-.037-.008-.074-.016-.112L7.044,4.6A2.708,2.708,0,0,0,5.67,4.218Z" transform="translate(12 56)"></path> 1841 <path class="a" d="M85,49H25.5V30.6a15.422,15.422,0,0,1-8.068-2.642l-.857-.576H14.167v4.324H0V0H14.167V2.777l1.439.051c.056,0,.112,0,.168,0a4.151,4.151,0,0,0,1.888-.456L20.836.761A7.084,7.084,0,0,1,24,0H41.851a12.412,12.412,0,0,1,4.862.987A12.59,12.59,0,0,1,50.83,3.8l7.6,7.731H85V49ZM28.333,21.357V46.118H82.166V14.412h-36.6L48.4,17.294H72.25v1.441A5.723,5.723,0,0,0,77.917,24.5h1.417V36.03H77.917a5.723,5.723,0,0,0-5.666,5.764v1.441h-34V41.794a5.723,5.723,0,0,0-5.666-5.764H31.167V24.5h1.417a5.643,5.643,0,0,0,4.541-2.342L34.708,19.7A10.158,10.158,0,0,1,29.1,21.386C28.847,21.386,28.588,21.376,28.333,21.357Zm10.82,2.855A8.427,8.427,0,0,1,34,27.263v6a8.612,8.612,0,0,1,6.965,7.087H69.534A8.612,8.612,0,0,1,76.5,33.267v-6a8.612,8.612,0,0,1-6.966-7.087H50.564a5.769,5.769,0,0,1-.464,5.172,7.083,7.083,0,0,1,9.892-.528,7.369,7.369,0,0,1,.969,10.029,7.085,7.085,0,0,1-9.8,1.443,7.364,7.364,0,0,1-1.863-9.9,5.638,5.638,0,0,1-8-.007Zm16.1,1.73a4.324,4.324,0,1,0,4.25,4.323A4.292,4.292,0,0,0,55.25,25.942ZM2.833,2.883V28.823h8.5V2.883ZM14.167,5.661V24.5h3.258L19,25.561a12.623,12.623,0,0,0,6.5,2.156V20.753A10.234,10.234,0,0,1,22.614,19.1l-.831-.684,1.786-2.239.822.677a7.41,7.41,0,0,0,9.548-.144l.992-.865,8.358,8.5a2.808,2.808,0,0,0,4.018-.008A2.93,2.93,0,0,0,47.3,20.25L37.292,10.069l2-2.037,3.438,3.5H54.423l-5.6-5.693a9.792,9.792,0,0,0-3.2-2.186,9.652,9.652,0,0,0-3.78-.768H24a4.215,4.215,0,0,0-1.9.456L18.928,4.955a7.05,7.05,0,0,1-3.171.76c-.084,0-.17,0-.254,0Z"></path> 1842 </svg> 1843 </div> 1844 <div class="col-8 col-md-12 d-flex"> 1845 <span class="align-self-center w-100">@Translate("Rabat på kurser")</span> 1846 </div> 1847 </div> 1848 </div> 1849 <div class="col-12 col-md-4"> 1850 <div class="row"> 1851 <div class="col-4 col-md-12"> 1852 <svg xmlns="http://www.w3.org/2000/svg" width="102.271" height="75.877" viewBox="0 0 102.271 75.877"> 1853 <defs> 1854 <style>.become-member.become-member-v2 .b{fill:none;stroke:#444969;stroke-linecap:round;stroke-linejoin:round;stroke-width:3px;}</style> 1855 </defs> 1856 <g transform="translate(-646.5 -460.5)"> 1857 <g transform="translate(648 462)"> 1858 <path class="b" d="M1162.88,273.455s0-16.192-11.465-18.672a12.2,12.2,0,1,0-9.442,0c-11.461,2.481-11.462,18.671-11.462,18.671" transform="translate(-1097.061 -200.578)"></path> 1859 <g transform="translate(0 0)"> 1860 <path class="b" d="M1044.968,138.788a12.2,12.2,0,1,0-16.921,11.251c-11.461,2.481-11.461,18.671-11.461,18.671" transform="translate(-1016.585 -126.589)"></path> 1861 <path class="b" d="M1089.774,193.352a12.2,12.2,0,1,0-13.395,19.83c-11.461,2.481-11.462,18.671-11.462,18.671" transform="translate(-1050.726 -171.193)"></path> 1862 <g transform="translate(60.223)"> 1863 <path class="b" d="M1258.013,138.788a12.2,12.2,0,1,1,16.921,11.251c11.461,2.481,11.462,18.671,11.462,18.671" transform="translate(-1247.348 -126.589)"></path> 1864 <path class="b" d="M1221.691,193.352a12.2,12.2,0,1,1,13.395,19.83c11.461,2.481,11.462,18.671,11.462,18.671" transform="translate(-1221.691 -171.193)"></path> 1865 </g> 1866 <path class="b" d="M1168.483,138.788a12.2,12.2,0,0,0-24.4,0" transform="translate(-1106.649 -126.589)"></path> 1867 </g> 1868 </g> 1869 </g> 1870 </svg> 1871 </div> 1872 <div class="col-8 col-md-12 d-flex"> 1873 <span class="align-self-center w-100">@Translate("Arrangementer og events")</span> 1874 </div> 1875 </div> 1876 1877 </div> 1878 </div> 1879 </div> 1880 </div> 1881 <div class="col-12 col-lg-6"> 1882 <div class="benefits-right"> 1883 <img src="/Admin/Public/GetImage.ashx?Image=/Files/Images/Graphics/Content/Medlemsfordele_banner.jpg&Width=491&Height=296&Crop=7&format=webp&Quality=85" alt="1 person forklarer en anden at hvis du er ansat i en medlemsvirksomhed, så kan du blive interessemedlem gratis" title="Bliv medlem" /> 1884 <div> 1885 @*<p>@Translate("Er du ansat i en medlemsvirksomhed, kan du blive gratis interessemedlem")</p>*@ 1886 <span class="line-link">@Translate("Læs mere")</span> 1887 </div> 1888 </div> 1889 </div> 1890 </div> 1891 </a> 1892 1893 1894 } 1895 1896 <div class="col-12 col-md-12 align-items-end d-flex sns some"> 1897 @sns(Model.Item.GetString("Introduction")) 1898 </div> 1899 </div> 1900 1901 </div> 1902 1903 1904 </div> 1905 </div> 1906 </main> 1907 1908 <style> 1909 #background-controller-@Model.ID{ 1910 background-color: @(backgroundColor); 1911 } 1912 1913 .text-controller-@Model.ID, 1914 .text-controller-@Model.ID .intro-text, 1915 .text-controller-@Model.ID h4, 1916 .text-controller-@Model.ID p, 1917 .text-controller-@Model.ID a 1918 .text-controller-@Model.ID a.line-link, 1919 .text-controller-@Model.ID a:link.line-link, 1920 .text-controller-@Model.ID a .line-link, 1921 .text-controller-@Model.ID a:link .line-link 1922 { 1923 color: @(textColor) !important; 1924 } 1925 1926 .text-controller-@Model.ID a .line-link:before, 1927 .text-controller-@Model.ID a.line-link:before, 1928 .text-controller-@Model.ID a:link .line-link:before, 1929 .text-controller-@Model.ID a:link.line-link:before { 1930 background-color: @(textColor) !important; 1931 } 1932 1933 .spot-ribbon.text-controller-@Model.ID .spot .line-link:after { 1934 background: @(textColor); 1935 opacity: 0.1; 1936 filter: invert(1) 1937 } 1938 1939 1940 @* TIL CK - Stylen er smidt i stylesheetet, men jeg kan ikke compile det, vil du gøre det for mig og slette dette? *@ 1941 .bg-right.blue { 1942 background: #d2e9f3; 1943 } 1944 1945 .bg-right.blue:before { 1946 } 1947 1948 .instruere-box { 1949 padding: 2rem; 1950 } 1951 .instruere-box p { 1952 max-width: 250px; 1953 } 1954 1955 .instruere-box img { 1956 /*max-width: 250px;*/ 1957 max-width: 100px; 1958 margin-bottom: 1rem; 1959 margin-top: -4rem; 1960 } 1961 1962 .instruere-box:last-of-type { 1963 margin-bottom: 3rem; 1964 } 1965 </style> 1966 1967 1968 1969 <script> 1970 1971 function sticky_relocate() { 1972 const sticky = document.querySelector('.static-sidebar'); 1973 const window_top = window.scrollY; 1974 const sticky_anchor = document.querySelector('#sticky-anchor'); 1975 const footer_top = document.querySelector('#container-bottom').offsetTop; 1976 const div_top = sticky_anchor.getBoundingClientRect().top + window_top; 1977 const div_height = sticky.offsetHeight; 1978 let padding = 0; // tweak here or get from margins etc 1979 1980 if (window_top + div_height > footer_top - padding) { 1981 const negTop = (window_top + div_height - footer_top + padding) * -1; 1982 sticky.style.top = negTop + 'px'; 1983 } else if (window_top >= div_top) { 1984 sticky.classList.add('stick'); 1985 sticky.style.top = 0; 1986 } else { 1987 sticky.classList.remove('stick'); 1988 } 1989 } 1990 1991 (@(showRightColumn ? 1 : 0) === 1) && window.addEventListener('scroll', sticky_relocate); 1992 (@(showRightColumn ? 1 : 0) === 1) && window.addEventListener('resize', sticky_relocate); // optional, to handle window resizing 1993 1994 if (document.getElementById('coursepicker') !== null) { 1995 document.getElementById('allcourselink').setAttribute("onclick", "javascript:document.getElementById('coursepicker').scrollIntoView();"); 1996 1997 // Ændre teksten i knappen 1998 document.getElementById('allcourselink').innerHTML = '@Translate("Se vores kurser") <i class="fal fa-arrow-down"></i>'; 1999 2000 } 2001 </script> 2002 2003 <footer> 2004 <div class="container"> 2005 <div class="row"> 2006 <div class="col"> 2007 <address> 2008 <p> 2009 <strong>@companyName</strong> 2010 <br /> 2011 @companyAddress 2012 <br /> 2013 @companyZipAndCity 2014 </p> 2015 <p> 2016 @Translate("Telefon"): 2017 <a href="tel:@companyPhoneClean">@companyPhone</a> 2018 <br /> 2019 @Translate("E-mail"): 2020 @Rot13_Email(companyMail) 2021 </p> 2022 <p> 2023 @Translate("CVR"): 2024 @companyCVR 2025 </p> 2026 @*<p><a href="#" title="">Intranet</a></p>*@ 2027 2028 </address> 2029 </div> 2030 <div class="col-12 col-sm-6 col-md-8 ml-auto"> 2031 <div class="row"> 2032 <div class="col some"> 2033 2034 @if (!string.IsNullOrWhiteSpace(companyLinkedin)) { 2035 <a href="@companyLinkedin" target="_blank" title="LinkedIn"> 2036 <i class="fab fa-linkedin-in"></i> 2037 </a> 2038 } 2039 2040 @if (!string.IsNullOrWhiteSpace(companyTwitter)) { 2041 <a href="@companyTwitter" target="_blank" title="Twitter"> 2042 <i class="fab fa-twitter"></i> 2043 </a> 2044 } 2045 2046 @if (!string.IsNullOrWhiteSpace(companyFacebook)) { 2047 <a href="@companyFacebook" target="_blank" title="Facebook"> 2048 <i class="fab fa-facebook-f"></i> 2049 </a> 2050 } 2051 @if (!string.IsNullOrWhiteSpace(companyInstagram)) { 2052 <a href="@companyInstagram" target="_blank" title="Instagram"> 2053 <i class="fab fa-instagram"></i> 2054 </a> 2055 } 2056 @if (!string.IsNullOrWhiteSpace(companyYouTube)) { 2057 <a href="@companyYouTube" target="_blank" title="Youtube"> 2058 <i class="fab fa-youtube"></i> 2059 </a> 2060 } 2061 </div> 2062 </div> 2063 <div class="row"> 2064 2065 <div class="col footer-link-container"> 2066 2067 <div class="row"> 2068 @for (int i = 1; i <= 3; i++) { 2069 var itemsList = Model.Area.Item.GetItems("FooterLinksColumn" + i); 2070 if (itemsList != null && itemsList.Any()) { 2071 <div class="col-12 col-md-12 col-lg-4"> 2072 <ul class="line-list"> 2073 @foreach (var column in itemsList) { 2074 <li> 2075 <a href=" @column.GetString("Link")"> 2076 <span> 2077 @column.GetString("Text") 2078 </span> 2079 </a> 2080 </li> 2081 } 2082 </ul> 2083 </div> 2084 } 2085 } 2086 2087 </div> 2088 </div> 2089 </div> 2090 </div> 2091 </div> 2092 <div class="row"> 2093 <div class="col-12 text-center footer-payment-options" style="color:#ffffff"> 2094 Sikker betaling: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 481.23 289.89" alt="Dankort" aria-label="Dankort"> 2095 <g> 2096 <path class="svg-dankort-cl1" d="M144.96,2.89C66.62,2.89,2.89,66.61,2.89,144.94s63.73,142.07,142.07,142.07h191.33c78.33,0,142.05-63.73,142.05-142.07S414.62,2.89,336.29,2.89h-191.33Z" /> 2097 <path class="svg-dankort-cl3 svg-dankort-contur" d="M336.29,289.89h-191.33C65.03,289.89,0,224.87,0,144.94S65.03,0,144.96,0h191.33c79.92,0,144.94,65.02,144.94,144.94s-65.02,144.95-144.94,144.95M144.96,2.89C66.62,2.89,2.89,66.61,2.89,144.94s63.73,142.07,142.07,142.07h191.33c78.33,0,142.05-63.73,142.05-142.07S414.62,2.89,336.29,2.89h-191.33Z" /> 2098 <path class="svg-dankort-cl2" d="M369.74,136.26l63.62,75.67c13.18-19.04,20.92-42.13,20.92-66.99,0-26.24-8.62-50.51-23.17-70.13l-61.37,61.46Z" /> 2099 <path class="svg-dankort-cl2" d="M189.45,68.42c47.51,0,83.31,12.09,87,52.12l50-52.13h99.57c-21.66-25.35-53.85-41.46-89.73-41.46h-191.33c-35.89,0-68.09,16.1-89.75,41.46h134.23Z" /> 2100 <path class="svg-dankort-cl2" d="M111.16,118.89l-16.97,46.65h68.46c20.24,0,26.36-8.38,30.89-24.51,4.48-15.95-6.78-22.14-20.61-22.14h-61.77Z" /> 2101 <path class="svg-dankort-cl2" d="M326.86,218.3l-52.89-66.83c-9.78,45.57-41.79,66.83-101.8,66.83H52.59c21.63,27.18,55,44.65,92.36,44.65h191.33c37.36,0,70.71-17.45,92.34-44.64h-101.77Z" /> 2102 </g> 2103 </svg> 2104 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80.21 26.61" alt="Visa" aria-label="Visa"> 2105 2106 <g> 2107 <path class="svg-visa-cl1" d="M39.71.47l-5.36,25.74h-6.48L33.23.47h6.48ZM66.98,17.09l3.41-9.67,1.96,9.67h-5.37ZM74.21,26.21h5.99L74.97.47h-5.53c-1.25,0-2.3.74-2.76,1.89l-9.73,23.85h6.81l1.35-3.84h8.31l.79,3.84h0ZM57.3,17.81c.03-6.79-9.14-7.17-9.08-10.2.02-.92.88-1.9,2.75-2.16.93-.12,3.49-.22,6.39,1.15l1.14-5.46c-1.56-.58-3.57-1.14-6.06-1.14-6.41,0-10.91,3.5-10.95,8.51-.04,3.71,3.22,5.77,5.67,7.01,2.53,1.26,3.38,2.07,3.36,3.2-.02,1.73-2.02,2.49-3.88,2.52-3.26.05-5.15-.91-6.66-1.63l-1.18,5.64c1.52.71,4.31,1.33,7.21,1.37,6.81,0,11.27-3.46,11.29-8.81h0ZM30.45.47l-10.5,25.74h-6.85L7.93,5.67c-.31-1.26-.59-1.73-1.54-2.26C4.84,2.54,2.26,1.72,0,1.22L.15.47h11.03c1.4,0,2.67.96,2.99,2.62l2.73,14.9L23.64.47h6.81Z" /> 2108 </g> 2109 </svg> 2110 <svg class="svg-icon mastercard-svg-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 71.08 43.83" aria-label="Mastercard"> 2111 2112 <g> 2113 <rect class="svg-mastercard-cl1" x="25.93" y="4.69" width="19.22" height="34.45" /> 2114 <path class="svg-mastercard-cl2" d="M27.15,21.91c0-7,3.29-13.21,8.36-17.23C31.79,1.77,27.09,0,21.97,0,9.82,0,0,9.8,0,21.91s9.82,21.91,21.97,21.91c5.13,0,9.82-1.77,13.55-4.69-5.06-3.96-8.36-10.23-8.36-17.23Z" /> 2115 <path class="svg-mastercard-cl3" d="M71.08,21.91c0,12.11-9.82,21.91-21.97,21.91-5.13,0-9.82-1.77-13.55-4.69,5.13-4.02,8.36-10.23,8.36-17.23s-3.29-13.21-8.36-17.23c3.72-2.92,8.42-4.69,13.55-4.69,12.14,0,21.97,9.86,21.97,21.91Z" /> 2116 </g> 2117 </svg> 2118 <div class="col-12 text-right copyright" style="top:2px;right:0;">© @Model.Item.GetString("CompanyName") @DateTime.Now.Year</div> 2119 2120 </div> 2121 </div> 2122 </div> 2123 </footer> 2124 2125 2126 @Model.Area.Item.GetString("ScriptsBodyEnd") 2127 2128 @{ 2129 } 2130 2131 <div class="modal fade" id="modal-ordercart" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static" data-keyboard="false"> 2132 <div class="modal-dialog modal-dialog-centered" role="document"> 2133 <div class="modal-content"> 2134 <div class="modal-body"></div> 2135 </div> 2136 </div> 2137 </div> 2138 2139 <script type="text/javascript"> 2140 function addCourse2Cart(productId) { 2141 var $modal = $('#modal-ordercart'); 2142 var $body = $('.modal-body', $modal); 2143 2144 var redirect = '/Files/Handlers/MiscHandler.ashx?methodName=AfterAddCourse2Cart&_=' + (new Date()).getTime(); 2145 2146 var memberSubscriberGroup = ''; @*'@(cartModal_Member?.SubscriberGroup?.Value ?? string.Empty)'.toUpperCase();*@ 2147 var notAllowed = { 2148 subscriberGroups : ['REV_UM', 'SKAT_UM', 'CSR_UM', 'IT_UM', 'MED_ØVR'/*, 'EJMEDL_PER'*/], 2149 courses : ['41004', '41005', '41006', '41009', '41011', '41012', '41013', '41014'] 2150 }; 2151 2152 if (notAllowed.subscriberGroups.includes(memberSubscriberGroup) && notAllowed.courses.includes(productId)) { 2153 $body.empty().html([ 2154 '<div class="text-center py-lg-3">', 2155 '<h4>@(Translate("Kursusnr.")): <strong>' + productId + '</strong></h4>', 2156 2157 '<p>Interessemedlemmer der <u>ikke</u> er ansat i en medlemsvirksomshed, kan desværre ikke deltage på dette kursus.</p>', 2158 2159 '<div class="row justify-content-center">', 2160 '<div class="col-auto">', 2161 '<button type="button" class="btn btn-primary btn-block mb-2" data-dismiss="modal">@(Translate("Luk"))</button>', 2162 '</div>', 2163 '</div>', 2164 '</div>' 2165 ].join('')); 2166 2167 $modal.modal(); 2168 return; 2169 } 2170 2171 $body.empty().html([ 2172 '<div class="text-center py-lg-3">', 2173 '<div class="fa-2x">', 2174 '<i class="fas fa-spinner fa-pulse"></i> @(Translate("Vent venligst..."))', 2175 '</div>', 2176 '</div>' 2177 ].join('')); 2178 2179 async function _add() { 2180 var before = await postAsync('/Files/Handlers/MiscHandler.ashx?methodName=BeforeAddCourse2Cart', { 'ProductId' : productId }); 2181 2182 if (before.Error) { 2183 var err = before.Error; 2184 2185 if (err == 'Product_NotFound') 2186 err = 'Kursus findes ikke!'; 2187 2188 if (err == 'Product_AlreadyAdded') 2189 err = 'Kursus er allerede tilføjet i kurven!'; 2190 2191 if (err == 'Order_Normal:Product_InclVAT' || err == 'Order_InclVAT:Product_Normal') 2192 err = 'Det er ikke muligt at tilføje dette kursus pga. der er konflikt med hensyn til betaling.<br />Færdiggør indkøbskurven og prøv igen.'; 2193 2194 if (err == 'Order_InclVAT:Product_InclVAT') 2195 err = 'Der er 1 kursus i indkøbskurven som skal færdiggøres før dette kursus kan tilføje.'; 2196 2197 $body.empty().html([ 2198 '<div class="text-center py-lg-3">', 2199 '<p>' + err + '</p>', 2200 2201 '<div class="row">', 2202 '<div class="col-sm-6">', 2203 '<button type="button" class="btn btn-primary btn-block mb-2" data-dismiss="modal">@(Translate("Luk"))</button>', 2204 '</div>', 2205 '<div class="col-sm-6">', 2206 '<a href="/Default.aspx?Id=@(GetPageIdByNavigationTag("kurv"))" class="btn btn-secondary btn-block">@(Translate("Gå til indkøbskurven"))</a>', 2207 '</div>', 2208 '</div>', 2209 '</div>' 2210 ].join('')); 2211 return; 2212 } 2213 2214 var data = await postAsync('/Default.aspx', { 2215 'CartCmd' : 'Add', 2216 'ProductId' : productId, 2217 'Quantity' : 1, 2218 'Redirect' : redirect 2219 }); 2220 2221 if (!data) { 2222 $body.empty().html([ 2223 '<div class="text-center py-lg-3">', 2224 '<p>@(Translate("Noget gik galt. Prøv venligst igen"))!</p>', 2225 2226 '<div class="row">', 2227 '<div class="col-sm-6">', 2228 '<button type="button" class="btn btn-primary btn-block mb-2" data-dismiss="modal">@(Translate("Luk"))</button>', 2229 '</div>', 2230 '<div class="col-sm-6">', 2231 '<a href="/Default.aspx?Id=@(GetPageIdByNavigationTag("kurv"))" class="btn btn-secondary btn-block">@(Translate("Gå til indkøbskurven"))</a>', 2232 '</div>', 2233 '</div>', 2234 '</div>' 2235 ].join('')); 2236 return; 2237 } 2238 2239 $body.empty().html([ 2240 '<div class="text-center py-lg-3">', 2241 '<h4>@(Translate("Kursusnr.")): <strong>' + data.ProductId + '</strong></h4>', 2242 2243 '<p>@(Translate("Er tilføjet til indkøbskurven"))!</p>', 2244 2245 '<div class="row">', 2246 '<div class="col-sm-6">', 2247 '<button type="button" class="btn btn-primary btn-block mb-2" data-dismiss="modal">@(Translate("Fortsæt med at handle"))</button>', 2248 '</div>', 2249 '<div class="col-sm-6">', 2250 '<a href="/Default.aspx?Id=@(GetPageIdByNavigationTag("kurv"))" class="btn btn-secondary btn-block">@(Translate("Gå til indkøbskurven"))</a>', 2251 '</div>', 2252 '</div>', 2253 '</div>' 2254 ].join('')); 2255 2256 var $li = $('li.nav-item[data-cartcount]', '.service-nav'); 2257 var $badge = $('span.badge', $li); 2258 2259 $li.attr('data-cartcount', data.OrderLines.length); 2260 $badge.html(data.OrderLines.length); 2261 2262 } 2263 2264 $modal.off('shown.bs.modal'); 2265 $modal.on('shown.bs.modal', function() { 2266 setTimeout(_add, 500); 2267 }); 2268 2269 $modal.modal(); 2270 } 2271 </script> 2272 2273 2274 @RenderSnippet("ParagraphJs") 2275 2276 2277 2278 2279 2280 @* STICKY POPUP --------------------------------------------------------------------------------------------- *@ 2281 2282 @if (stickyPopupActive) { 2283 2284 @* Button trigger modal *@ 2285 if (!string.IsNullOrEmpty(stickyPopupButtonIconSrc)) { 2286 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#sticky-popup"> 2287 <img src="@stickyPopupButtonIconSrc" alt=""> 2288 </button> 2289 } 2290 2291 @* Modal *@ 2292 <div class="modal" id="sticky-popup" data-backdrop="false" data-keyboard="false" tabindex="-1" aria-labelledby="sticky-popup-title" aria-hidden="true"> 2293 <div class="modal-dialog"> 2294 <div class="modal-content"> 2295 2296 <div class="modal-body text-center"> 2297 2298 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 2299 <span aria-hidden="true">&times;</span> 2300 </button> 2301 2302 @if (!string.IsNullOrWhiteSpace(stickyPopupHeader)) { 2303 <h3 class="modal-title" id="sticky-popup-title">@stickyPopupHeader</h3> 2304 } 2305 @if (!string.IsNullOrWhiteSpace(stickyPopupText)) { 2306 <p>@stickyPopupText</p> 2307 } 2308 @if (!string.IsNullOrEmpty(stickyPopupImageSrc)) { 2309 <img src="@(stickyPopupImageSrc)"> 2310 } 2311 2312 @if (!string.IsNullOrWhiteSpace(stickyPopupLink) && !string.IsNullOrWhiteSpace(stickyPopupLinkText)) { 2313 <a href="@stickyPopupLink" title="" class="btn"> 2314 <span> 2315 @stickyPopupLinkText 2316 </span> 2317 </a> 2318 } 2319 2320 </div> 2321 </div> 2322 </div> 2323 </div> 2324 2325 } 2326 2327 @* COOKIE SCRIPT *@ 2328 2329 <script> 2330 // Helper til at sætte cookie 2331 function setCookie(name, value, days) { 2332 const d = new Date(); 2333 d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000)); 2334 document.cookie = name + "=" + value + ";expires=" + d.toUTCString() + ";path=/"; 2335 } 2336 2337 // Helper til at hente cookie 2338 function getCookie(name) { 2339 const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); 2340 return match ? match[2] : null; 2341 } 2342 2343 // Tjek om URL indeholder en parameter vi vil udelukke 2344 function hasExcludedParams() { 2345 const excluded = ["utm", "msdynmkt"]; // kan nemt udvides 2346 2347 // 1) Tjek query params (?utm_source=... osv.) 2348 const urlParams = new URLSearchParams(window.location.search); 2349 for (const key of urlParams.keys()) { 2350 for (const ex of excluded) { 2351 if (key.toLowerCase().startsWith(ex)) { 2352 return true; 2353 } 2354 } 2355 } 2356 2357 // 2) Tjek hash (#msdynmkt_trackingcontext=... osv.) 2358 const hash = window.location.hash.toLowerCase(); 2359 for (const ex of excluded) { 2360 if (hash.includes(ex)) { 2361 return true; 2362 } 2363 } 2364 2365 return false; 2366 } 2367 2368 // Når dokumentet er klar 2369 document.addEventListener("DOMContentLoaded", function () { 2370 // Hvis vi har ekskluderede parametre → vis aldrig popup 2371 if (hasExcludedParams()) return; 2372 2373 // Tjek cookie 2374 if (!getCookie("sticky-popup-250825")) { 2375 // Vent 5 sek før vi viser modal 2376 setTimeout(function () { 2377 $('#sticky-popup').modal('show'); 2378 }, 5000); 2379 } 2380 2381 // Hvis modal lukkes via kryds → sæt cookie 2382 $('#sticky-popup').on('hide.bs.modal', function () { 2383 setCookie("sticky-popup-250825", "hidden", 7); // varer i 7 dage 2384 }); 2385 2386 // Hvis brugeren klikker på linket → sæt cookie 2387 const btn = document.querySelector('#sticky-popup a.btn'); 2388 if (btn) { 2389 btn.addEventListener('click', function () { 2390 setCookie("sticky-popup-250825", "hidden", 7); 2391 }); 2392 } 2393 }); 2394 </script> 2395 2396 2397 @* /COOKIESCRIPT *@ 2398 2399 @* /STICKY POPUP --------------------------------------------------------------------------------------------- *@ 2400 2401 2402 2403 @*Google adservice cookie*@ 2404 @if (!System.Web.HttpContext.Current.Request.Url.AbsoluteUri.StartsWith("https://stagingweb.fsr.dk")) { 2405 2406 <script type="text/javascript"> 2407 /* <![CDATA[ */ 2408 var google_conversion_id = 967315187; 2409 var google_custom_params = window.google_tag_params; 2410 var google_remarketing_only = true; 2411 /* ]]> */ 2412 </script> 2413 <script type="text/javascript" src="https://www.googleadservices.com/pagead/conversion.js"> 2414 </script> 2415 <noscript> 2416 <div style="display: inline;"> 2417 <img height="1" width="1" style="border-style: none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/967315187/?guid=ON&amp;script=0" /> 2418 </div> 2419 </noscript> 2420 <script type="text/javascript"> 2421 (function (e, t, o, n, p, r, i) { e.visitorGlobalObjectAlias = n; e[e.visitorGlobalObjectAlias] = e[e.visitorGlobalObjectAlias] || function () { (e[e.visitorGlobalObjectAlias].q = e[e.visitorGlobalObjectAlias].q || []).push(arguments) }; e[e.visitorGlobalObjectAlias].l = (new Date).getTime(); r = t.createElement("script"); r.src = o; r.async = true; i = t.getElementsByTagName("script")[0]; i.parentNode.insertBefore(r, i) })(window, document, "https://diffuser-cdn.app-us1.com/diffuser/diffuser.js", "vgo"); 2422 vgo('setAccount', '252609999'); 2423 vgo('setTrackByDefault', true); 2424 2425 vgo('process'); 2426 </script> 2427 <script type="text/javascript"> 2428 _linkedin_partner_id = "1237129"; 2429 window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || []; 2430 window._linkedin_data_partner_ids.push(_linkedin_partner_id); 2431 </script> 2432 <script type="text/javascript"> 2433 (function (l) { 2434 if (!l) { 2435 window.lintrk = function (a, b) { window.lintrk.q.push([a, b]) }; 2436 window.lintrk.q = [] 2437 } 2438 var s = document.getElementsByTagName("script")[0]; 2439 var b = document.createElement("script"); 2440 b.type = "text/javascript"; b.async = true; 2441 b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; 2442 s.parentNode.insertBefore(b, s); 2443 })(window.lintrk); 2444 </script> 2445 <noscript> 2446 <img height="1" width="1" style="display:none;" alt="linkedin" src="https://px.ads.linkedin.com/collect/?pid=1237129&fmt=gif" /> 2447 </noscript> 2448 } 2449 2450 2451 @using Dynamicweb.Rendering 2452 @using Dynamicweb.Frontend 2453 @inherits ViewModelTemplate<PageViewModel> 2454 @if (Dynamicweb.Security.UserManagement.User.GetCurrentBackendUser() != null || Pageview.User != null && Pageview.User.AllowBackend) { 2455 <div class="dropdown page-edit dropup" style="position: fixed; bottom: 5rem; right: 10px; z-index: 100"> 2456 <button class="btn btn-secondary dropdown-toggle" type="button" id="page-edit-button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 2457 @Translate("Page actions") 2458 </button> 2459 <div class="dropdown-menu dropdown-menu-right" aria-labelledby="page-edit-button"> 2460 @if (Pageview.Page.Item == null) { 2461 <a class="dropdown-item" target="backend" href="/Admin/Content/ParagraphList.aspx?PageID=@Pageview.Page.ID">@Translate("Edit paragraphs")</a> 2462 } else { 2463 <a class="dropdown-item" target="backend" href="/Admin/Content/Items/Editing/ItemEdit.aspx?PageID=@Pageview.Page.ID">@Translate("Edit page")</a> 2464 <a class="dropdown-item" target="backend" href="/Admin/Content/ParagraphList.aspx?PageID=@Pageview.Page.ID&amp;mode=viewParagraphs">@Translate("Edit paragraphs")</a> 2465 } 2466 </div> 2467 </div> 2468 2469 } 2470 <script defer src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?version=4.8.0&features=Element.prototype.classList%2CObject.assign"></script> 2471 <script defer="" src="https://unpkg.com/focus-visible"></script> 2472 2473 @if (Dynamicweb.Security.UserManagement.User.IsFrontendUserLoggedIn()) { 2474 <script type="text/javascript"> 2475 (function () { 2476 async function fetchSessID() { 2477 var response = await fetch('/Files/Handlers/MiscHandler.ashx?methodName=SessID', { 2478 method: 'POST', 2479 headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 2480 }); 2481 var json = await response.json(); 2482 } 2483 2484 setInterval(fetchSessID, 1000 * 60 * 5); 2485 })(); 2486 </script> 2487 } 2488 2489 <!-- Start of HubSpot Embed Code --> 2490 <script data-cookieconsent="statistics" type="text/javascript" id="hs-script-loader" async defer src="https://js-eu1.hs-scripts.com/146079294.js"></script> 2491 <!-- End of HubSpot Embed Code --> 2492 2493 <script> 2494 var KarlaStaticTag_fxr0de2yqx9 = document.currentScript; 2495 2496 function loadKarla() { 2497 new KarlaStatic({ model: "xrek9klq32x05Y9JUGAj", type: "search" }); 2498 new KarlaStatic({ model: "9vs6iNioWFTQvA9zKdH7", type: "search" }); 2499 } 2500 2501 if (window.KarlaStatic) { 2502 loadKarla(); 2503 } else { 2504 var KarlaScript = document.getElementById("karlastatic-script"); 2505 KarlaScript.onload = loadKarla; 2506 } 2507 </script> 2508 </body> 2509 </html> 2510