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