Error executing template "Designs/Junget/_parsed/PageShopList.parsed.cshtml"
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.SqlClient.SqlException: Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception: The wait operation timed out
--- End of inner exception stack trace ---
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at Dynamicweb.Data.Database.CreateDataReader(IDbCommand command, CommandBehavior behavior)
at Dynamicweb.Data.Database.CreateDataReader(CommandBuilder commandBuilder, IDbConnection connection, IDbTransaction transaction, CommandBehavior behavior, Int32 commandTimeout)
at Dynamicweb.Data.Database.CreateDataReader(CommandBuilder commandBuilder, IDbConnection connection, IDbTransaction transaction, Int32 commandTimeout)
at Dynamicweb.Content.Items.Queries.Repository.GetDisabledPagesIds(Int32 areaId, Boolean includeParagraphs, Boolean checkPermissions, List`1 effectiveItemTypes)
at Dynamicweb.Content.Items.Queries.Repository.SelectByAreaId(Int32 areaId, Query query, Boolean includeParagraphs, Boolean checkPermissions, Boolean includeInheritedItems)
at Dynamicweb.ItemPublisher.Frontend.GetItems()
at Dynamicweb.ItemPublisher.Frontend.List()
at Dynamicweb.ItemPublisher.Frontend.GetContent()
at Dynamicweb.ItemPublisher.Frontend.GetContentBySettings(String settings)
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Dynamicweb.Extensibility.AddIns.AddInManager.InvokeFunction(Object instance, String functionName, Object[] arguments)
at Dynamicweb.Rendering.TemplateBase`1.RenderItemList(Object settings)
at CompiledRazorTemplates.Dynamic.RazorEngine_a0867ef618204c4a9810c61ce4983d7f.Execute() in D:\Web\Junget\Website\Files\Templates\Designs\Junget\_parsed\PageShopList.parsed.cshtml:line 918
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-sm-3 col-12">
550 Sælger:<br><strong>
551 @userName
552 </strong>
553 </div>
554 <div class="col-sm-5 col-12">
555 <form action="@linkMyPage" class="form-inline" method="get">
556 <div class="form-group has-search">
557 <div id="bloodhound">
558 <span class="icon icon-search form-control-feedback"></span>
559 <input type="hidden" name="DWExtranetSecondaryUserSelector" id="DWExtranetSecondaryUserSelector" value="">
560 <input type="text" class="form-control typeahead" data-provide="typeahead" autocomplete="off" placeholder="Indtast kundenavn eller -nummer...">
561 <button type="submit" class="btn btn-primary my-junget__login-btn">@Translate("Log ind")</button>
562 </div>
563 </div>
564 </form>
565 </div>
566 <div class="col-sm-4 col-12 text-right">
567 @{
568 if (secondaryUserHeader != null)
569 {
570 <text>Kunde:<br><strong><a href="/da-dk/mit-junget" style="color: #fff;">@secondaryUserHeader.Company (@secondaryUserHeader.CustomerNumber)</a></strong></text>
571 }
572 }
573 </div>
574 </div>
575 </div>
576 </div>
577 }
578 else
579 {
580 <div class="curve curve-light-gray">
581 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewbox="0 0 1440 40" preserveaspectratio="none">
582 <path d="M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path>
583 <path d="M0,0h1440v40H0V0z M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path>
584 </svg>
585 </div>
586 }
587 </header>
588
589 <div class="aside-panel js-aside js-view-phone">
590 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="phone"></div>
591 <div class="side-modal is-phone-panel aside-panel__content flex-column js-view-phone">
592 <div class="container p-0">
593 <button type="button" class="btn btn-link btn-close js-aside-close-btn float-right" data-view="phone">@Translate("PanelCloseSearchButtonText", "LUK") <span class="icon icon-close ml-2"></span></button>
594 </div>
595 <div class="aside-panel__container container p-0">
596 <div class="aside-panel__scroll-content">
597 <ul class="phone-panel">
598 <li class="phone-call">
599 <a href='@(Translate("CallNowPhoneNumber","tel:+45 89 36 55 00"))'>
600 @(Translate("Ring nu"))
601 </a>
602 </li>
603 <li class="phone-call">
604 <a class="js-aside-btn" href="#" data-view="contacts">
605 @(Translate("Find medarbejder"))
606 </a>
607 </li>
608 </ul>
609 </div>
610 </div>
611 </div>
612 </div>
613
614 @if (!string.IsNullOrWhiteSpace(searchPage))
615 {
616 <div class="aside-panel js-aside js-view-search">
617 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="search"></div>
618 <div class="side-modal is-search-panel aside-panel__content flex-column js-view-search">
619 <div class="container p-0">
620 <button type="button" class="btn btn-link btn-close js-aside-close-btn float-right" data-view="search">@Translate("PanelCloseSearchButtonText", "LUK") <span class="icon icon-close ml-2"></span></button>
621 </div>
622 <div class="aside-panel__container container p-0">
623 <div class="aside-panel__scroll-content">
624 <form class="search-bar js-search-form mb-6" action="/@searchPage">
625 <input class="search-bar__input js-search-input" name="q" type="text" placeholder='@Translate("HeaderSearch", "SØG")'>
626 <button class="search-bar__button" type="submit" data-icon="search"></button>
627 </form>
628 <div class="loading js-search-loading text-center">
629 <svg version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="40px" height="40px" viewbox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
630 <path fill="#000" d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z">
631 <animatetransform attributetype="xml" attributename="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.6s" repeatcount="indefinite"></animatetransform>
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647 </path>
648 </svg>
649 </div>
650 <div class="row no-gutters search__result js-search-result"></div>
651 </div>
652 </div>
653 </div>
654 </div>
655 }
656
657 @if (!string.IsNullOrWhiteSpace(sharpeningLink))
658 {
659 <section class="aside-panel js-aside js-view-sharpening">
660 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="sharpening"></div>
661 <div class="side-modal aside-panel__content flex-column js-view-sharpening">
662 <button type="button" class="btn btn-link btn-close js-aside-close-btn" data-view="sharpening">@Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span></button>
663 <div class="container-fluid aside-panel__container">
664 <div class="aside-panel__scroll-content">
665 <div class="h2 mb-6">@Translate("SharpeningHeadline")</div>
666 <h5 class="h5 mb-7 text-primary">@Translate("SharpeningSubheader")</h5>
667 @if (String.IsNullOrEmpty(System.Web.HttpContext.Current.Request.QueryString["pid"]))
668 {
669 @RenderParagraphContent(Int32.Parse(sharpeningLink.Split('#')[1]))
670 }
671 else
672 {
673 <div>Formular er sendt afsted</div>
674 }
675 </div>
676 </div>
677 </div>
678 </section>
679 }
680
681 @if (!string.IsNullOrWhiteSpace(serviceLink))
682 {
683 <section class="aside-panel js-aside js-view-service">
684 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="service"></div>
685 <div class="side-modal aside-panel__content flex-column js-view-service">
686 <button type="button" class="btn btn-link btn-close js-aside-close-btn" data-view="service">@Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span></button>
687 <div class="container-fluid aside-panel__container">
688 <div class="aside-panel__scroll-content">
689 <div class="h2 mb-6">@Translate("ServiceHeadline")</div>
690 <h5 class="h5 mb-7 text-primary">@Translate("ServiceSubheader")</h5>
691 @if (String.IsNullOrEmpty(System.Web.HttpContext.Current.Request.QueryString["pid"]))
692 {
693 @RenderParagraphContent(Int32.Parse(serviceLink.Split('#')[1]))
694 }
695 else
696 {
697 <div>Formular er sendt afsted</div>
698 }
699 </div>
700 </div>
701 </div>
702 </section>
703 }
704
705 @if (!string.IsNullOrWhiteSpace(loginLink))
706 {
707 <section class="aside-panel js-aside js-view-login">
708 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="login"></div>
709 <div class="side-modal aside-panel__content flex-column js-view-login">
710 <button type="button" class="btn btn-link btn-close js-aside-close-btn" data-view="login">@Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span></button>
711 <div class="container-fluid aside-panel__container">
712 <div class="aside-panel__scroll-content">
713 @if (Dynamicweb.Context.Current.Request.Form["LoginAction"] != "Recovery")
714 {
715 @RenderParagraphContent(Int32.Parse(loginLink.Split('#')[1]))
716 }
717 </div>
718 </div>
719 </div>
720 </section>
721 }
722
723 @if (!string.IsNullOrWhiteSpace(minicartLink))
724 {
725 <div class="aside-panel js-aside js-view-cart">
726 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="cart"></div>
727 <div class="side-modal aside-panel__content flex-column js-view-cart">
728 <button type="button" class="btn btn-link btn-close js-aside-close-btn" data-view="cart">@Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span></button>
729 <div class="container-fluid aside-panel__container">
730 <div class="aside-panel__scroll-content js-product-cart">
731 @RenderParagraphContent(Int32.Parse(minicartLink.Split('#')[1]))
732 <div class="my-6 text-right">
733 <a href="@((mainUserHeader != null && mainUserHeader.HasGroup(24)) ? salesmanCartLink : mycartLink)" class="btn-lg btn-success d-md-inline-block ml-auto px-9">@Translate("GoToCheckoutButton", "GÅ TIL KASSEN")</a>
734 </div>
735 </div>
736 </div>
737 </div>
738 </div>
739 }
740 <div class="view">
741 @using Dynamicweb.Frontend.Devices
742 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
743
744
745
746 @{
747 var topPage = Dynamicweb.Frontend.PageView.GetPageviewByPageID(Int32.Parse(GetString("DwTopPageID")));
748 string textWhite = GetBoolean("Item.TextColorWhite") ? "text-white" : "";
749 bool hasBackgroundColor = GetBoolean("Item.BackgroundColorWhite");
750 string headline = GetString("Item.Name");
751 string spotHeadline = GetString("Item.SpotHeadline");
752 string spotImage = GetString("Item.SpotImage");
753 string spotImageAlt = GetString("Item.SpotImageAlt");
754 string subheader = GetString("Item.Subheader");
755 string topImage = !string.IsNullOrWhiteSpace(GetString("Item.Image")) ? GetString("Item.Image").Replace(" ", "%20") : topPage.Page.Item["TopImage"].ToString().Replace(" ", "%20");
756 string filterTag = GetString("Item.Category") != "empty" ? GetString("Item.Category") : "";
757 string imageAlt = !string.IsNullOrWhiteSpace(GetString("Item.ImageAlt")) ? GetString("Item.ImageAlt") : headline;
758 bool hasBreadcrumb = !GetBoolean("Item.HideBreakcrumbs");
759 bool isTopPageShop = topPage.Equals(Pageview);
760 bool hideButton = GetBoolean("Item.HideButton");
761 }
762
763 @if ((!string.IsNullOrWhiteSpace(topImage) || !string.IsNullOrWhiteSpace(headline) || !string.IsNullOrWhiteSpace(subheader)))
764 {
765 <div class="hero js-hero shop-hero">
766 @if (!string.IsNullOrWhiteSpace(topImage))
767 {
768 <div class="hero__image-holder">
769 <picture class="hero__image image-ratio--hero-small">
770 <!--[if IE 9]><video style="display: none;"><![endif]-->
771 <source srcset="/Admin/Public/GetImage.ashx?Image=@topImage&width=1440&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)">
772 <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)">
773 <!--[if IE 9]></video><![endif]-->
774 <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">
775 </picture>
776
777 <div class="hero__curve-holder">
778 <div class="curve curve-bcg-lighter-gray">
779 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewbox="0 0 1440 40" preserveaspectratio="none">
780 <path d="M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path>
781 <path d="M0,0h1440v40H0V0z M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path>
782 </svg>
783 </div>
784 </div>
785 </div>
786 }
787
788 @if (string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["ProductId"]))
789 {
790 <div class="hero__text-holder @textWhite">
791 <div class="container-fluid">
792 @if (!string.IsNullOrWhiteSpace(headline))
793 {
794 <h1 class="hero__title">@headline</h1>
795 }
796 @if (!string.IsNullOrWhiteSpace(subheader))
797 {
798 <h2 class="hero__subtitle">@subheader</h2>
799 }
800 </div>
801 </div>
802 }
803 </div>
804 }
805
806 <div class='page-content shop-page @(hasBackgroundColor ? "bg-white" : "pb-0")@(isTopPageShop ? " shop-page-top" : string.Empty)'>
807 @if (!GetBoolean("Item.HideBreakcrumbs"))
808 {
809 <div class="@if (Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop) { <text>pt-9</text> }">
810 @GetValue("DwNavigation(breadcrumb)")
811 </div>
812 <div id="content">@GetValue("DwContent(content)")</div>
813 }
814
815 @if (string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["ProductId"]))
816 {
817 <section class='grinding container-fluid @(hasBreadcrumb ? "" : "pt-9")@(isTopPageShop ? " top-shop" : string.Empty)'>
818 <div class="row no-gutters">
819 <div class='col-12 col-md-7 col-lg-8 grinding-content left-content @(hideButton ? "is-active" : "js-toggle-class")' data-trigger-once="true">
820 <div id="left-content">@GetValue("DwContent(leftcontent)")</div>
821
822 @if (!hideButton)
823 {
824 <button type="button" class="show-more-btn btn btn-outline-primary text-uppercase">
825 <span class="text-more">@Translate("ecom-read-more", "Læs mere")</span>
826 <span class="text-less d-none">@Translate("ecom-read-less", "Minimer tekst")</span>
827 </button>
828
829 }
830
831
832
833 </div>
834 <div class="col-12 col-md-4 col-lg-3 ml-md-auto">
835 <div id="right-content">@GetValue("DwContent(rightcontent)")</div>
836 </div>
837 </div>
838 </section>
839 }
840
841 @{
842 var pageItem = Dynamicweb.Frontend.PageView.Current().Item;
843
844 Dynamicweb.Content.Page pageParent = Pageview.Page.Parent;
845
846 if (pageParent != null)
847 {
848
849 IEnumerable<Dynamicweb.Content.Page> categories = Dynamicweb.Services.Pages.GetPagesByParentID(pageParent.ID);
850 categories = categories != null && categories.Any() ? categories.Where(x => x.Item != null && (x.ItemType.Equals("ShopCategoryList") || x.ItemType.Equals("PageProductCategory") || x.ItemType.Equals("PageShopList"))) : categories;
851
852 if (categories != null && categories.Any())
853 {
854
855 string categoriesClass = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["ProductId"]) ? " category-product-detail" : string.Empty;
856
857 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["ProductId"]))
858 {
859 Dynamicweb.Content.Page category = categories != null && categories.Any() ? categories.First(x => x.Equals(Pageview.Page)) : null;
860
861 if (category != null)
862 {
863 <section class="text d-md-none">
864 <div class="container-fluid">
865 <p class="h1 text-center text-primary mb-7">@category.MenuText</p>
866 </div>
867 </section>
868 }
869 }
870
871 <div class="quick-category-list__container swiper-container d-md-none">
872 <div class="quick-category-list swiper-wrapper @(categoriesClass)">
873 @foreach (Dynamicweb.Content.Page category in categories)
874 {
875 if (!category.Published)
876 {
877 continue;
878 }
879 string category_class = "quick-category-list__item swiper-slide";
880
881 if (category.Equals(Pageview.Page))
882 {
883 category_class += " active";
884 }
885
886 <div class="@category_class">
887 <a href="/Default.aspx?Id=@(category.ID)">
888 <span>@category.MenuText</span>
889 </a>
890 </div>
891 }
892 </div>
893 </div>
894 }
895
896 }
897
898 }
899
900 </div>
901 <div id="bottom-content">@GetValue("DwContent(bottomcontent)")</div>
902
903 @if (!string.IsNullOrWhiteSpace(filterTag))
904 {
905 @RenderItemList(new
906 {
907 ItemType = "PageMemberPage",
908 ListSourceType = "SelfArea",
909 ItemFieldsList = "*",
910 ListTemplate = "/ItemPublisher/List/Employees.cshtml",
911 ListPageSize = 1000,
912 ListOrderBy = "Sort",
913 Filter = "Category contains \"" + filterTag + "\""
914 })
915 }
916 else
917 {
918 @RenderItemList(new
919 {
920 ItemType = "PageMemberPage",
921 ListSourceType = "SelfArea",
922 ItemFieldsList = "*",
923 ListTemplate = "/ItemPublisher/List/EmployeesAccordion.cshtml",
924 ListPageSize = 1000,
925 ListOrderBy = "Sort"
926 })
927 }
928 <a href="javascript:window.goBack()" class="button-back d-md-none"> </a>
929 @if (!String.IsNullOrEmpty(Pageview.Area.Item["CookiebarText"].ToString()) && !String.IsNullOrEmpty(Pageview.Area.Item["CookiebarButtonText"].ToString()))
930 {
931 <!--googleoff: all-->
932 <aside class="cookiebar js-cookiebar" data-id="cookie-accept">
933 <div class="cookiebar__container p-2 p-lg-4 text-center text-lg-left">
934 <div class="cookiebar__body">
935 <div>@Pageview.Area.Item["CookiebarText"]</div>
936 </div>
937 <div class="cookiebar__button-container mt-3 mt-lg-0">
938 <a href="#" class="btn-secondary btn js-cookiebar-close">@Pageview.Area.Item["CookiebarButtonText"]</a>
939 </div>
940 </div>
941 </aside><!-- .cookiebar -->
942 <!--googleon: all-->
943 }
944
945 </div>
946 <footer class="footer">
947 <div class="curve curve-bcg-light-gray">
948 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewbox="0 0 1440 40" preserveaspectratio="none">
949 <path d="M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path>
950 <path d="M0,0h1440v40H0V0z M0,0v2c213.3,25.3,453.3,38,720,38s506.7-12.7,720-38V0H0z"></path>
951 </svg>
952 </div>
953 <div class="bg-light-gray pb-5">
954 <div class="container-fluid">
955 <div class="row no-gutters">
956 <div class="col-12 col-sm-6 col-md-4 col-lg-3">
957 <div class="footer__headline">@GetString("Item.Area.FooterColumnOne")</div>
958 <nav class="navbar">
959 <ul class="navbar-nav d-block">
960 @foreach (var item in GetLoop("Item.Area.FooterColumnOneLinks"))
961 {
962 string link = item.GetString("Item.Area.FooterColumnOneLinks.Link");
963
964 <li class="footer__item">
965 <span class="footer__icon icon icon-chevron-right"></span>
966 <a class="footer__link" href="@link">@item.GetString("Item.Area.FooterColumnOneLinks.Name")</a>
967 </li>
968 }
969 </ul>
970 </nav>
971 </div>
972 <div class="col-12 col-sm-6 col-md-4 col-lg-3 pl-md-2">
973 <div class="footer__headline h2">@GetString("Item.Area.FooterColumnTwo")</div>
974 <div class="footer__item">@GetString("Item.Area.FooterInfo")</div>
975 <nav class="navbar">
976 <ul class="navbar-nav d-block">
977 @foreach (var item in GetLoop("Item.Area.FooterColumnTwoLinks"))
978 {
979 string link = item.GetString("Item.Area.FooterColumnTwoLinks.Link");
980
981 <li class="footer__item">
982 <span class="footer__icon icon icon-chevron-right"></span>
983 <a class="footer__link" href="@link">@item.GetString("Item.Area.FooterColumnTwoLinks.Name")</a>
984 </li>
985 }
986 </ul>
987 </nav>
988 </div>
989 <div class="ml-auto d-flex align-items-end align-right">
990 @if (Pageview.Area.ID == 8)
991 {
992 <img class="mr-2 mb-3" src="/Files/System/Images/Shop/visa_mastercard.png" alt="visa mastercard" height="20">
993 <img class="mr-3 mb-3" src="/Files/System/Images/Shop/vipps.svg" alt="vipps" height="20">
994 }
995 else
996 {
997 <img class="mr-2 mb-3" src="/Files/System/Images/Shop/dankort_visa_mastercard.png" alt="Dankort visa mastercard" height="20">
998 <img class="mr-3 mb-3" src="/Files/System/Images/Shop/icon-mobilepay.png" alt="mobilepay" height="20">
999 }
1000
1001 @foreach (var item in GetLoop("Item.Area.FooterSocialMediaLinks"))
1002 {
1003 string link = item.GetString("Item.Area.FooterSocialMediaLinks.Link");
1004 string alt = item.GetString("Item.Area.FooterSocialMediaLinks.Name");
1005 string image = item.GetString("Item.Area.FooterSocialMediaLinks.Icon");
1006 string target = link.Contains("www") ? "_blank" : "_self";
1007
1008 <a class="mr-3" href="@link" target="@target">
1009 <img class="img-fluid" src="/Admin/Public/GetImage.ashx?Image=@image&width=40&height=40&Compression=80&format=webP" alt="@alt">
1010 </a>
1011 }
1012 @{
1013 string co2Link = GetString("Item.Area.Co2NeutraltLink");
1014 string co2Billede = GetString("Item.Area.Co2NeutraltBillede");
1015 }
1016 <a class="mr-3" href="@co2Link" target="_blank">
1017 <img src="@co2Billede" alt="co2 neutral" width="100">
1018 </a>
1019 </div>
1020 </div>
1021 </div>
1022 </div>
1023 </footer>
1024 @using Dynamicweb.Content
1025 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
1026
1027
1028 @{
1029 var cookieName = "LanguageWebsite";
1030 var cookieValue = "";
1031
1032 if (Dynamicweb.Context.Current.Request.Cookies[cookieName] != null)
1033 {
1034 cookieValue = Dynamicweb.Context.Current.Request.Cookies[cookieName].Value;
1035 }
1036
1037 var areaService = new AreaService();
1038 var activeAreas = areaService.GetAreas().Where(a => a.Active);
1039
1040 //tuple list of two strings
1041 var frontpageIds = new List<Tuple<string, string>>();
1042
1043 if (cookieValue != "False" && cookieValue != "")
1044 {
1045 if (Pageview.Area.CultureInfo.TwoLetterISOLanguageName != cookieValue)
1046 {
1047 foreach (var activeArea in activeAreas)
1048 {
1049 if (activeArea.CultureInfo.TwoLetterISOLanguageName == cookieValue)
1050 {
1051 Dynamicweb.Context.Current.Response.Redirect("/Default.aspx?ID=" + pageService.GetFirstPageForArea(activeArea.ID).ID);
1052 }
1053 }
1054 }
1055 }
1056
1057 else if (cookieValue != "False")
1058 {
1059 var currentLanguage = Pageview.Area.CultureInfo.TwoLetterISOLanguageName;
1060 var pageLanguageNativeName = Translate(currentLanguage + "NativeName");
1061
1062
1063 foreach (var activeArea in activeAreas)
1064 {
1065 var frontpage = pageService.GetFirstPageForArea(activeArea.ID);
1066
1067 var frontpageCode = activeArea.CultureInfo.TwoLetterISOLanguageName;
1068 frontpageIds.Add(new Tuple<string, string>(frontpageCode, frontpage.ID.ToString()));
1069 }
1070
1071 <div style="display: none" class="lang-mes">
1072 <div id="currentLanguage" style="display: none">@pageLanguageNativeName</div>
1073 <div id="currentPageLanguageCode" style="display: none">@currentLanguage</div>
1074
1075 @foreach (var frontpageId in frontpageIds)
1076 {
1077 var id = "Page" + frontpageId.Item1;
1078 <div id="@id" style="display: none">@frontpageId.Item2</div>
1079 }
1080 <div class="lang-mes__content">
1081 <div class="mes__content__message">@Translate("LanMes") </div>
1082 <div class="mes__content__buttons">
1083 <a class="mes__content__buttons__yes mes-button" href="javascript:void(0)">@Translate("Yes")</a>
1084 <a class="mes__content__buttons__no mes-button" href="javascript:void(0)">@Translate("No")</a>
1085 </div>
1086 </div>
1087 </div>
1088 }
1089
1090
1091 <script>
1092
1093 document.addEventListener("DOMContentLoaded",function (){
1094
1095 var userLanguage = navigator.language.split("-")[0].toLowerCase();
1096 var userLanguageTranslated = "";
1097 var userLanguageFrontpageId = "Default.Aspx?ID=";
1098 var currentPageLanguageCode = "";
1099
1100 if (document.getElementById("currentPageLanguageCode") != null){
1101 currentPageLanguageCode = document.getElementById("currentPageLanguageCode").innerText;
1102
1103 var sameLanguage = currentPageLanguageCode === userLanguage;
1104
1105 sameLanguage = sameLanguage || (currentPageLanguageCode === "nb" && userLanguage === "nn");
1106
1107
1108 if (document.getElementById("currentPageLanguageCode") != null && !sameLanguage)
1109 {
1110
1111 switch(userLanguage)
1112 {
1113 case "da":
1114 userLanguageTranslated = '@Translate("daNativeName")'
1115 userLanguageFrontpageId += document.getElementById("Page" + userLanguage).innerText;
1116 break;
1117 case "en":
1118 userLanguageTranslated = '@Translate("enNativeName")'
1119 userLanguageFrontpageId += document.getElementById("Page" + userLanguage).innerText;
1120 break;
1121 case "nb":
1122 userLanguageTranslated = '@Translate("nbNativeName")'
1123 userLanguageFrontpageId += document.getElementById("Page" + userLanguage).innerText;
1124 break;
1125 case "nn":
1126 userLanguageTranslated = '@Translate("nnNativeName")'
1127 userLanguageFrontpageId += document.getElementById("Page" + "nb").innerText;
1128 userLanguage = "nb";
1129 break;
1130
1131
1132 }
1133
1134 var userLanguageTranslated2 = userLanguageTranslated;
1135 if (currentPageLanguageCode === "da")
1136 {
1137 userLanguageTranslated2 = userLanguageTranslated2 + "e";
1138 }
1139
1140 var langMes = document.getElementsByClassName("mes__content__message")[0];
1141 var message = langMes.innerText.replace("#", userLanguageTranslated);
1142 message = message.replace("_", userLanguageTranslated2);
1143 langMes.innerText = langMes.innerText = message;
1144 var yesButton = document.getElementsByClassName("mes__content__buttons__yes")[0];
1145 var noButton = document.getElementsByClassName("mes__content__buttons__no")[0];
1146 yesButton.href = userLanguageFrontpageId;
1147
1148 var langMesContainer = document.getElementsByClassName("lang-mes")[0];
1149 langMesContainer.style.display = "flex";
1150
1151 // yesButton.addEventListener("click",function (){
1152 // setCookie(userLanguage);
1153 // });
1154
1155 noButton.addEventListener("click",function (){
1156 setCookie("False");
1157 langMesContainer.style.display = "none";
1158 });
1159
1160 function setCookie(cvalue) {
1161 const d = new Date();
1162 d.setTime(d.getTime() + (30*24*60*60*1000));
1163 let expires = "expires="+ d.toUTCString();
1164 document.cookie = "LanguageWebsite" + "=" + cvalue + ";" + expires + ";path=/";
1165 }
1166 }}
1167 });
1168 </script>
1169 }
1170 </div>
1171
1172 <div class="js-video-modal modal fade in video-modal" id="videoModal" tabindex="-1" role="dialog" aria-labelledby="videoModal" aria-hidden="true">
1173 <div class="modal-dialog modal-lg mw-100 px-5">
1174 <!-- Modal content-->
1175 <div class="modal-content">
1176 <div class="modal-header d-flex justify-content-end">
1177 <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">
1178 <span class="icon icon-close"></span>
1179 </button>
1180 </div>
1181 <div class="modal-body embed-responsive embed-responsive-16by9">
1182 <iframe class="js-video-container modal-iframe video-modal__iframe embed-responsive-item" src="" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
1183 </div>
1184 </div>
1185 </div>
1186 </div>
1187
1188 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
1189 <div class="position-fixed d-flex flex-column mobile-nav-buttons d-lg-none">
1190 <button type="button" class="btn btn-icon btn-icon--round btn-primary btn-mobile-nav btn-mobile-nav--menu js-aside-btn" data-view="navigation">
1191 <span class="icon icon-navigation"></span>
1192 <div class="btn-mobile-nav--text">MENU</div>
1193 </button>
1194 </div>
1195
1196 <div class="mobile-menu aside-panel js-aside js-view-navigation">
1197 <div class="aside-panel__bcg js-aside-bcg js-aside-close-btn" data-view="navigation"></div>
1198 <div class="page-container position-relative h-100">
1199 <div class="side-modal side-modal--navigation aside-panel__content flex-column js-view-navigation">
1200 <button type="button" class="btn btn-link btn-close js-aside-close-btn text-white" data-view="navigation">
1201 @Translate("PanelCloseButtonText", "LUK") <span class="icon icon-close ml-2"></span>
1202 </button>
1203 <div class="container-fluid aside-panel__container">
1204 <div class="aside-panel__scroll-content">
1205 <nav role="navigation" class="js-nav-panel">
1206 <!-- lvl1 list -->
1207 <ul class="nav-list list-unstyled">
1208 @RenderNavigation(new
1209 {
1210 StartLevel = 1,
1211 EndLevel = 3,
1212 expandmode = "all",
1213 Template = "mobile-navigation.xslt",
1214 Id = "mobile-nav"
1215 })
1216 <li class="language-picker-item">
1217 <a class="dropdown-item" href="https://www.junget.com/da-dk">
1218 <img width="28" height="20" src="/webroot/images/da-dk.svg" alt="Junget - Denmark">
1219 </a>
1220 <a class="dropdown-item" href="https://www.junget.com/en-gb">
1221 <img width="28" height="20" src="/webroot/images/en-gb.svg" alt="Junget">
1222 </a>
1223 <a class="dropdown-item" href="https://www.junget.com/nb-no">
1224 <img width="28" height="20" src="/webroot/images/nb-NO.svg" alt="Junget">
1225 </a>
1226 </li>
1227 </ul>
1228 </nav>
1229 </div>
1230 </div>
1231 </div>
1232 <div class="js-aside-close-btn nav-close-layer" data-view="navigation"></div>
1233 </div>
1234 </div>
1235
1236 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
1237 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.2/umd/popper.min.js"></script>
1238 <script src="/webroot/js-static/swiper-bundle.js" type="text/javascript"></script>
1239 @{
1240 var masterScripts = VestjyskMarketing.Helpers.Utilities.CacheBuster("/webroot/dist/main.js");
1241 }
1242 <script src="@masterScripts" type="text/javascript"></script>
1243 <script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js" defer=""></script>
1244
1245 @RenderSnippet("GATracking")
1246
1247 @if (MainUserMain != null && MainUserMain.HasGroup(24) && myJungetPageList.Contains(Pageview.ID))
1248 {
1249 // Bass Jacobsen
1250 <script src="/webroot/js-static/bootstrap3-typeahead.min.js" type="text/javascript"></script>
1251 <script src="/webroot/js-static/bloodhound.min.js" type="text/javascript"></script>
1252
1253 <script type="text/javascript">
1254 $(document).ready(function () {
1255 // instantiate the bloodhound suggestion engine
1256 var datas = new Bloodhound({
1257 datumTokenizer: Bloodhound.tokenizers.whitespace,
1258 queryTokenizer: Bloodhound.tokenizers.whitespace,
1259 prefetch: { url: '/da-dk/customerfeed-json', cache: false },
1260 remote: { url: '/da-dk/customerfeed-json' }
1261 });
1262
1263 // initialize the bloodhound suggestion engine
1264 datas.initialize();
1265
1266 $(".typeahead").typeahead({
1267 items: 15,
1268 display: 'name',
1269 highlight: true,
1270 minLength: 1,
1271 hint: true,
1272 fitToElement: true,
1273 source: datas.ttAdapter(),
1274 highlighter: function (item) {
1275 var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&');
1276
1277 //split to separate HTML tags
1278 var item_parts = item.split(/(<[^>]+>)/g);
1279
1280 //Highlight only if it's not a tag
1281 var ret = "";
1282 for (var i = 0; i < item_parts.length; i++) {
1283 if (item_parts[i].match(/(<[^>]+>)/)) {
1284 //this is a tag.
1285 ret += item_parts[i];
1286 } else {
1287 //highlight if necessary
1288 ret += item_parts[i].replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
1289 return '<strong>' + match + '</strong>';
1290 });
1291 }
1292 }
1293 return ret;
1294 },
1295 updater: function (item) {
1296 $("#DWExtranetSecondaryUserSelector").val(item.id);
1297 return item;
1298 }
1299 });
1300 });
1301 </script>
1302 }
1303
1304 @if (Pageview.Area.Item["Aktiv"] != null && Pageview.Area.Item["Aktiv"].ToString() == "True" && Pageview.User == null)
1305 {
1306 string img = Pageview.Area.Item["Billede"].ToString();
1307 string header = Pageview.Area.Item["Overskrift"].ToString();
1308 string body = Pageview.Area.Item["Br_dtekst"].ToString();
1309 string buttonText = Pageview.Area.Item["KnapTekst"].ToString();
1310 int cartPageID = GetPageIdByNavigationTag("cartpageid");
1311
1312 <div id="mymodal" class="modal" tabindex="-1" role="dialog">
1313 <div class="modal-dialog exit-intent-mw350px" role="document">
1314 <div class="modal-content">
1315 <div class="exit-intent">
1316 @if (!string.IsNullOrEmpty(img))
1317 {
1318 <img class="img-responsive exit-intent-img" src="/Admin/Public/GetImage.ashx?Image=@img&width=300&height=200&compression=85&crop=0">
1319 }
1320 @if (!string.IsNullOrEmpty(header))
1321 {
1322 <h5 class="modal-title font-weight-bold mb-3 text-center">@header</h5>
1323 }
1324 <button type="button" class="close exit-intent-close" data-dismiss="modal" aria-label="Close">
1325 <span aria-hidden="true">×</span>
1326 </button>
1327 @if (!string.IsNullOrEmpty(body))
1328 {
1329 <div class="text-center">
1330 <p class="exit-intent-text">@body</p>
1331 </div>
1332 }
1333 @if (!string.IsNullOrEmpty(buttonText))
1334 {
1335 <a type="button" href="/Default.aspx?ID=@cartPageID" class="btn btn-primary btn-block font-weight-bolder">@buttonText</a>
1336 }
1337 </div>
1338 </div>
1339 </div>
1340 </div>
1341 }
1342
1343 @RenderSnippet("BeforeBodyEndScripts")
1344 </body>
1345 </html>