Error executing template "Designs/Rapido/_parsed/NewsArticle.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<RenderPageContent>b__150_0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 6200
at RazorEngine.Templating.TemplateWriter.ToString()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 273
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 187
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<RenderMain>b__148_0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 6176
at RazorEngine.Templating.TemplateWriter.ToString()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 273
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 187
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 295
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 187
at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.Execute() in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 6158
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
2
3 @using System.Web;
4 @using Dynamicweb.Frontend
5 @using Dynamicweb.Frontend.Devices
6 @using Dynamicweb.Extensibility
7 @using Dynamicweb.Content
8 @using Dynamicweb.Security
9 @using Dynamicweb.Core
10 @using System
11 @using System.Web
12 @using System.IO
13 @using Dynamicweb.Rapido.Blocks
14 @using System.Net
15
16 @{
17 //hack for redirecting back to order - because of bug in DW - if a user was logged in. It was logged off in Subscriber and two cookies set
18 //now check up on this and redirct back.
19 //cant redirect correctly in subscriber because Extranetlogoff wont pass with two queries
20 if(HttpContext.Current.Request.QueryString["forced_redirect_order_quote"] == "1")
21 {
22 string completedOrderid = HttpContext.Current.Request.Cookies["CompletedOrderIdTemp"] != null ? HttpContext.Current.Request.Cookies["CompletedOrderIdTemp"].Value.ToString() : "";
23 string completeOrderSecret = HttpContext.Current.Request.Cookies["CompletedOrderSecretTemp"] != null ? HttpContext.Current.Request.Cookies["CompletedOrderSecretTemp"].Value.ToString() : "";
24
25 int cartPageRedirect = GetPageIdByNavigationTag("CartPage");
26 if (!String.IsNullOrEmpty(completedOrderid) && !String.IsNullOrEmpty(completeOrderSecret) && cartPageRedirect > 0)
27 {
28 //reset cookies
29 HttpCookie cookieOrderId = new HttpCookie("CompletedOrderIdTemp")
30 {
31 Value = "",
32 Expires = DateTime.Now.AddDays(-1)
33 };
34 HttpContext.Current.Response.Cookies.Add(cookieOrderId);
35
36 HttpCookie cookieSecret = new HttpCookie("CompletedOrderSecretTemp")
37 {
38 Value = "",
39 Expires = DateTime.Now.AddDays(-1)
40 };
41 HttpContext.Current.Response.Cookies.Add(cookieSecret);
42
43 //redirect
44 HttpContext.Current.Response.Redirect("/Default.aspx?ID=" + cartPageRedirect + "&CompletedOrderId=" + completedOrderid + "&CompletedOrderSecret=" + completeOrderSecret, true);
45 }
46 }
47 }
48
49
50 @functions {
51 BlocksPage masterPage = BlocksPage.GetBlockPage("Master");
52
53 string getFontFamily(params string[] items)
54 {
55 var itemParent = Pageview.AreaSettings;
56 foreach (var item in items)
57 {
58 itemParent = itemParent.GetItem(item);
59 if (itemParent == null)
60 {
61 return null;
62 }
63 }
64
65 var googleFont = itemParent.GetGoogleFont("FontFamily");
66 if (googleFont == null)
67 {
68 return null;
69 }
70 return googleFont.Family.Replace(" ", "+");
71 }
72 }
73
74 @{
75 //Font settings
76 var fonts = new string[] {
77 getFontFamily("Layout", "HeaderFont"),
78 getFontFamily("Layout", "SubheaderFont"),
79 getFontFamily("Layout", "TertiaryHeaderFont"),
80 getFontFamily("Layout", "Header", "ToolsFont"),
81 getFontFamily("Layout", "Header", "NavigationFont"),
82 getFontFamily("Layout", "MobileNavigation", "Font"),
83 getFontFamily("ProductList", "Facets", "HeaderFont"),
84 getFontFamily("ProductPage", "PriceFontDesign"),
85 getFontFamily("Ecommerce", "SaleSticker", "Font"),
86 getFontFamily("Ecommerce", "NewSticker", "Font"),
87 getFontFamily("Ecommerce", "CustomSticker", "Font")
88 };
89
90 string autoCssLink = "/Files/Templates/Designs/Rapido/css/rapido/rapido_" + Model.Area.ID.ToString() + ".min.css?ticks=" + Model.Area.UpdatedDate.Ticks;
91 string favicon = Model.Area.Item.GetItem("Layout").GetFile("LogoFavicon") != null ? Model.Area.Item.GetItem("Layout").GetFile("LogoFavicon").Path : "/Files/Images/favicon.png";
92 bool useFontAwesomePro = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetBoolean("UseFontAwesomePro");
93 string fontAwesomeCssLink = "/Files/Templates/Designs/Rapido/css/fonts/FontAwesomeFree/css/fontawesome-all.min.css";
94 if (useFontAwesomePro)
95 {
96 fontAwesomeCssLink = "/Files/Templates/Designs/Rapido/css/fonts/FontAwesomePro/css/fontawesome-all.min.css";
97 }
98 //force logout if not proper user
99 int failedLoginPageId = Model.Area.Item.GetItem("Custom").GetInt32("FailedLoginRedirectPage");
100 if (Pageview.User != null && false)
101 {
102 List<int> acceptedGroups = new List<int> { 323, 572, 569, 568 };
103
104 //if user does not have any of the accepted groups, log out
105 if (!Pageview.User.Groups.Any(x => acceptedGroups.Contains(x.ID)))
106 {
107
108 string urlFailedLoginPage = "/";
109 if (failedLoginPageId > 0)
110 {
111 urlFailedLoginPage = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(failedLoginPageId);
112 }
113 HttpContext.Current.Response.Redirect("/Admin/Public/ExtranetLogoff.aspx?Redirect="+ urlFailedLoginPage, true);
114 }
115 }
116 }
117
118 @{
119 Block master = new Block()
120 {
121 Id = "Master",
122 BlocksList = new List<Block> {
123 new Block {
124 Id = "MasterTopSnippets",
125 SortId = 10
126 },
127 new Block {
128 Id = "MasterMain",
129 SortId = 20,
130 Template = RenderMain(),
131 SkipRenderBlocksList = true,
132 BlocksList = new List<Block> {
133 new Block {
134 Id = "MasterHeader",
135 SortId = 10,
136 Template = RenderMasterHeader(),
137 SkipRenderBlocksList = true
138 },
139 new Block {
140 Id = "MasterPageContent",
141 SortId = 20,
142 Template = RenderPageContent()
143 }
144 }
145 },
146 new Block {
147 Id = "MasterFooter",
148 SortId = 30
149 },
150 new Block {
151 Id = "MasterReferences",
152 SortId = 40
153 },
154 new Block {
155 Id = "MasterBottomSnippets",
156 SortId = 50
157 }
158 }
159 };
160
161 masterPage.Add(master);
162 }
163
164 @* Include the required Grid builder (Contains the methods @RenderBlockList and @RenderBlock) *@
165 @using System.Text.RegularExpressions
166 @using System.Collections.Generic
167 @using System.Reflection
168 @using System.Web.UI.HtmlControls
169 @using Dynamicweb.Rapido.Blocks.Components
170 @using Dynamicweb.Rapido.Blocks.Components.Articles
171 @using Dynamicweb.Rapido.Blocks.Components.Documentation
172 @using Dynamicweb.Rapido.Blocks
173
174
175 @*--- START: Base block renderers ---*@
176
177 @helper RenderBlockList(List<Block> blocks)
178 {
179 blocks = blocks.OrderBy(item => item.SortId).ToList();
180
181 foreach (Block item in blocks)
182 {
183 <!-- START: @item.Id -->
184
185 if (item.Design == null)
186 {
187 @RenderBlock(item)
188 }
189 else if (item.Design.RenderType == RenderType.None) {
190 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
191
192 <div class="@cssClass dw-mod">
193 @RenderBlock(item)
194 </div>
195 }
196 else if (item.Design.RenderType != RenderType.Hide)
197 {
198 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
199
200 if (!item.SkipRenderBlocksList) {
201 if (item.Design.RenderType == RenderType.Row)
202 {
203 <div class="grid grid--align-content-start @cssClass dw-mod" id="Block__@item.Id">
204 @RenderBlock(item)
205 </div>
206 }
207
208 if (item.Design.RenderType == RenderType.Column)
209 {
210 string hidePadding = item.Design.HidePadding ? "u-no-padding" : "";
211 string size = item.Design.Size ?? "12";
212 size = Regex.IsMatch(size, @"\d") ? "md-" + item.Design.Size : item.Design.Size;
213
214 <div class="grid__col-lg-@item.Design.Size grid__col-md-@item.Design.Size grid__col-sm-12 grid__col-xs-12 @hidePadding @cssClass dw-mod" id="Block__@item.Id">
215 @RenderBlock(item)
216 </div>
217 }
218
219 if (item.Design.RenderType == RenderType.Table)
220 {
221 <table class="table @cssClass dw-mod" id="Block__@item.Id">
222 @RenderBlock(item)
223 </table>
224 }
225
226 if (item.Design.RenderType == RenderType.TableRow)
227 {
228 <tr class="@cssClass dw-mod" id="Block__@item.Id">
229 @RenderBlock(item)
230 </tr>
231 }
232
233 if (item.Design.RenderType == RenderType.TableColumn)
234 {
235 <td class="@cssClass dw-mod" id="Block__@item.Id">
236 @RenderBlock(item)
237 </td>
238 }
239
240 if (item.Design.RenderType == RenderType.CardHeader)
241 {
242 <div class="card-header @cssClass dw-mod">
243 @RenderBlock(item)
244 </div>
245 }
246
247 if (item.Design.RenderType == RenderType.CardBody)
248 {
249 <div class="card @cssClass dw-mod">
250 @RenderBlock(item)
251 </div>
252 }
253
254 if (item.Design.RenderType == RenderType.CardFooter)
255 {
256 <div class="card-footer @cssClass dw-mod">
257 @RenderBlock(item)
258 </div>
259 }
260 }
261 else
262 {
263 @RenderBlock(item)
264 }
265 }
266
267 <!-- END: @item.Id -->
268 }
269 }
270
271 @helper RenderBlock(Block item)
272 {
273 if (item.Template != null)
274 {
275 @BlocksPage.RenderTemplate(item.Template)
276 }
277
278 if (item.Component != null)
279 {
280 string methodName = item.Component.HelperName;
281 dynamic[] methodParameters = new dynamic[1];
282 methodParameters[0] = item.Component;
283 Type methodType = this.GetType();
284 MethodInfo generalMethod = methodType.GetMethod(methodName);
285
286 if (generalMethod != null) {
287 @generalMethod.Invoke(this, methodParameters).ToString();
288 } else {
289 throw new Exception(item.Component.GetType().Name + " method '" + methodName +"' could not be invoked");
290 }
291 }
292
293 if (item.BlocksList.Count > 0 && !item.SkipRenderBlocksList)
294 {
295 @RenderBlockList(item.BlocksList)
296 }
297 }
298
299 @*--- END: Base block renderers ---*@
300
301
302 @* Include the components *@
303 @using Dynamicweb.Rapido.Blocks.Components
304 @using Dynamicweb.Rapido.Blocks.Components.General
305 @using Dynamicweb.Rapido.Blocks
306
307
308 @* Components *@
309 @using System.Reflection
310 @using Dynamicweb.Rapido.Blocks.Components.General
311
312
313 @* Component *@
314
315 @helper RenderIcon(Icon settings) {
316 if (settings != null)
317 {
318 dynamic[] methodParameters = new dynamic[1];
319 methodParameters[0] = settings;
320 MethodInfo customMethod = this.GetType().GetMethod("RenderIconCustom");
321
322 if (customMethod != null)
323 {
324 @customMethod.Invoke(this, methodParameters).ToString();
325 } else {
326 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
327
328 if (settings.Name != null)
329 {
330 if (String.IsNullOrEmpty(settings.Label)) {
331 <i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i>
332 } else {
333 if (settings.LabelPosition == IconLabelPosition.Before) {
334 <span>@settings.Label <i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i></span>
335 } else {
336 <span><i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i> @settings.Label</span>
337 }
338 }
339 }
340 }
341 }
342 }
343 @using System.Reflection
344 @using Dynamicweb.Rapido.Blocks.Components.General
345 @using Dynamicweb.Rapido.Blocks.Components
346
347
348 @* Component *@
349
350 @helper RenderButton(Button settings) {
351 dynamic[] methodParameters = new dynamic[1];
352 methodParameters[0] = settings;
353 MethodInfo customMethod = this.GetType().GetMethod("RenderButtonCustom");
354
355 if (customMethod != null)
356 {
357 @customMethod.Invoke(this, methodParameters).ToString();
358 }
359 else
360 {
361 string target;
362 string disabled = settings.Disabled ? "disabled" : "";
363 string buttonType = settings.ButtonType == ButtonType.Submit ? "submit" : "button";
364 buttonType = settings.ButtonType == ButtonType.Reset ? "reset" : buttonType;
365 string buttonLayout = settings.ButtonLayout.ToString().ToLower();
366
367 switch (settings.Target)
368 {
369 case LinkTargetType.Blank:
370 target = "_blank";
371 break;
372 case LinkTargetType.Parent:
373 target = "_parent";
374 break;
375 case LinkTargetType.Self:
376 target = "_self";
377 break;
378 case LinkTargetType.Top:
379 target = "_top";
380 break;
381 default:
382 target = "_self";
383 break;
384 }
385
386 string onClickAction = settings.OnClick != null ? settings.OnClick : "";
387 string noOpener = target == "_blank" ? "rel=\"noopener\"" : "";
388
389 if (!String.IsNullOrEmpty(settings.ConfirmText))
390 {
391 string modalId = settings.Id;
392 @RenderConfirmDialog(settings);
393 onClickAction = "document.getElementById('" + modalId + "ModalTrigger').checked = true";
394 }
395
396 if (settings.Icon != null)
397 {
398 if (settings.IconPosition == null) {
399 settings.Icon.LabelPosition = IconLabelPosition.After;
400 } else {
401 settings.Icon.LabelPosition = settings.IconPosition == IconPosition.Before ? IconLabelPosition.After : IconLabelPosition.Before;
402 }
403 if (settings.Icon.Label == null) {
404 settings.Icon.Label = settings.Title;
405 }
406 }
407 string content = settings.Icon == null ? settings.Title : Convert.ToString(RenderIcon(settings.Icon));
408
409 if (!String.IsNullOrEmpty(settings.Link) && String.IsNullOrEmpty(settings.ConfirmText))
410 {
411 <a href="@settings.Link" target="@target" @noOpener class="btn btn--@buttonLayout @settings.CssClass @disabled dw-mod" onclick="@onClickAction" @ComponentMethods.AddAttributes(settings.ExtraAttributes) @disabled>@content</a>
412 }
413 else
414 {
415 <button type="@buttonType" class="btn btn--@buttonLayout @settings.CssClass @disabled dw-mod" onclick="@onClickAction" @ComponentMethods.AddAttributes(settings.ExtraAttributes) @disabled>@content</button>
416 }
417 }
418 }
419
420
421 @helper RenderConfirmDialog(Button settings) {
422 dynamic[] methodParameters = new dynamic[1];
423 methodParameters[0] = settings;
424 MethodInfo customMethod = this.GetType().GetMethod("RenderConfirmDialogCustom");
425
426 if (customMethod != null)
427 {
428 @customMethod.Invoke(this, methodParameters).ToString();
429 } else {
430 string modalTriggerId = settings.Id + "ModalTrigger";
431
432 <!-- Trigger for the confirm modal -->
433 <input type="checkbox" id="@modalTriggerId" class="modal-trigger" />
434
435 <!-- Login modal -->
436 <div class="modal-container">
437 <label for="@modalTriggerId" class="modal-overlay"></label>
438 <div class="modal modal--xs">
439 <div class="modal__header">
440 <h2>@settings.ConfirmText</h2>
441 </div>
442 <div class="modal__body">
443 @RenderButton(new Button { Title = Translate("OK"), ButtonLayout = ButtonLayout.Primary, OnClick = settings.OnClick, CssClass = "u-full-width", Link = settings.Link })
444 </div>
445 </div>
446 </div>
447 }
448 }
449 @using System.Reflection
450 @using Dynamicweb.Rapido.Blocks.Components
451 @using Dynamicweb.Rapido.Blocks.Components.General
452 @using Dynamicweb.Rapido.Blocks
453
454
455 @* Component *@
456
457 @helper RenderRating(Rating settings)
458 {
459 dynamic[] methodParameters = new dynamic[1];
460 methodParameters[0] = settings;
461 MethodInfo customMethod = this.GetType().GetMethod("RenderRatingCustom");
462
463 if (customMethod != null)
464 {
465 @customMethod.Invoke(this, methodParameters).ToString();
466 } else {
467 if (settings.Score > 0)
468 {
469 int rating = settings.Score;
470 string iconType = "fa-star";
471
472 switch (settings.Type.ToString()) {
473 case "Stars":
474 iconType = "fa-star";
475 break;
476 case "Hearts":
477 iconType = "fa-heart";
478 break;
479 case "Lemons":
480 iconType = "fa-lemon";
481 break;
482 case "Bombs":
483 iconType = "fa-bomb";
484 break;
485 }
486
487 <div class="u-ta-right">
488 @for (int i = 0; i < settings.OutOf; i++)
489 {
490 <i class="@(rating > i ? "fas" : "far") @iconType"></i>
491 }
492 </div>
493 }
494 }
495 }
496 @using System.Reflection
497 @using Dynamicweb.Rapido.Blocks.Components.General
498 @using Dynamicweb.Rapido.Blocks.Components
499
500
501 @* Component *@
502
503 @helper RenderFieldListOption(FieldListOption settings) {
504 dynamic[] methodParameters = new dynamic[1];
505 methodParameters[0] = settings;
506 MethodInfo customMethod = this.GetType().GetMethod("RenderFieldListOptionCustom");
507
508 if (customMethod != null)
509 {
510 @customMethod.Invoke(this, methodParameters).ToString();
511 } else {
512 string disabled = settings.Disabled ? "disabled" : "";
513 string selected = settings.Checked ? "checked" : "";
514
515 if (settings.Type.ToString() == "RadioButton")
516 {
517 <input class="form__control @disabled dw-mod" onchange="@settings.OnChange" onclick="@settings.OnClick" type="radio" name="@settings.Name" id="@settings.Id" value="@settings.Value" @selected @disabled @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
518 <label for="@settings.Id" class="u-inline @disabled dw-mod">@settings.Label</label>
519 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
520 }
521
522 if (settings.Type.ToString() == "Checkbox")
523 {
524 @RenderCheckboxField(settings)
525 }
526
527 if (settings.Type.ToString() == "SelectOption")
528 {
529 <option value="@settings.Value" id="@settings.Id" onclick="@settings.OnClick" class="@disabled" @disabled @selected @ComponentMethods.AddAttributes(settings.ExtraAttributes) >@settings.Name</option>
530 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
531 }
532 }
533 }
534
535 @using System.Reflection
536 @using Dynamicweb.Rapido.Blocks.Components.General
537 @using Dynamicweb.Rapido.Blocks.Components
538
539
540 @* Component *@
541
542 @helper RenderNavigation(Navigation settings) {
543 dynamic[] methodParameters = new dynamic[1];
544 methodParameters[0] = settings;
545 MethodInfo customMethod = this.GetType().GetMethod("RenderNavigationCustom");
546
547 if (customMethod != null)
548 {
549 @customMethod.Invoke(this, methodParameters).ToString();
550 } else {
551 @RenderNavigation(new
552 {
553 id = settings.Id,
554 cssclass = settings.CssClass,
555 startLevel = settings.StartLevel,
556 endlevel = settings.EndLevel,
557 expandmode = settings.Expandmode,
558 template = settings.Template
559 })
560 }
561 }
562 @using System.Reflection
563 @using Dynamicweb.Rapido.Blocks.Components.General
564 @using Dynamicweb.Rapido.Blocks.Components
565
566
567 @* Component *@
568
569 @helper RenderBreadcrumbNavigation(BreadcrumbNavigation settings) {
570 dynamic[] methodParameters = new dynamic[1];
571 methodParameters[0] = settings;
572 MethodInfo customMethod = this.GetType().GetMethod("RenderBreadcrumbNavigationCustom");
573
574 if (customMethod != null)
575 {
576 @customMethod.Invoke(this, methodParameters).ToString();
577 } else {
578 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
579 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
580 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
581 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
582 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
583
584 @RenderNavigation(settings)
585 }
586 }
587 @using System.Reflection
588 @using Dynamicweb.Rapido.Blocks.Components.General
589
590
591 @* Component *@
592
593 @helper RenderHeading(Heading settings) {
594 dynamic[] methodParameters = new dynamic[1];
595 methodParameters[0] = settings;
596 MethodInfo customMethod = this.GetType().GetMethod("RenderHeadingCustom");
597
598 if (customMethod != null)
599 {
600 @customMethod.Invoke(this, methodParameters).ToString();
601 } else {
602 string startTag = "<h" + settings.Level.ToString() + " class=\"" + settings.CssClass + "\">";
603 string endTag = "</h" + settings.Level.ToString() + "\">";
604
605 if (settings.Icon != null)
606 {
607 if (settings.IconPosition == null) {
608 settings.Icon.LabelPosition = IconLabelPosition.After;
609 } else {
610 settings.Icon.LabelPosition = settings.IconPosition == IconPosition.Before ? IconLabelPosition.After : IconLabelPosition.Before;
611 }
612 if (settings.Icon.Label == null) {
613 settings.Icon.Label = settings.Title;
614 }
615
616 @startTag@RenderIcon(settings.Icon)@endTag
617 } else {
618 @startTag@settings.Title@endTag
619 }
620 }
621 }
622 @using System.Reflection
623 @using Dynamicweb.Rapido.Blocks.Components
624 @using Dynamicweb.Rapido.Blocks.Components.General
625 @using Dynamicweb.Rapido.Blocks
626
627
628 @* Component *@
629
630 @helper RenderImage(Image settings)
631 {
632 if (settings.Path != null)
633 {
634 dynamic[] methodParameters = new dynamic[1];
635 methodParameters[0] = settings;
636 MethodInfo customMethod = this.GetType().GetMethod("RenderImageCustom");
637
638 if (customMethod != null)
639 {
640 @customMethod.Invoke(this, methodParameters).ToString();
641 } else {
642 <div>
643 @if (settings.Link != null)
644 {
645 <a href="@settings.Link">
646
647 @RenderTheImage(settings);
648 </a>
649 }
650 else
651 {
652 @RenderTheImage(settings);
653 }
654 </div>
655 }
656 }
657 }
658
659 @functions {
660 string getImagePathFromSettings(ImageSettings settings)
661 {
662 string result = "";
663
664 if (settings != null)
665 {
666 result += settings.Width != 0 ? "Width=" + settings.Width + "&" : "";
667 result += settings.Height != 0 ? "Height=" + settings.Height + "&" : "";
668 result += "Crop=" + settings.Crop + "&";
669 result += "Compression=" + 99 + "&";
670 result += "DoNotUpscale=" + settings.DoNotUpscale.ToString() + "&";
671 result += "FillCanvas=" + settings.FillCanvas.ToString() + "&";
672 }
673
674 return result;
675 }
676 }
677
678 @helper RenderTheImage(Image settings)
679 {
680 if (settings != null)
681 {
682 dynamic[] methodParameters = new dynamic[1];
683 methodParameters[0] = settings;
684 MethodInfo customMethod = this.GetType().GetMethod("RenderTheImageCustom");
685
686 if (customMethod != null)
687 {
688 @customMethod.Invoke(this, methodParameters).ToString();
689 } else {
690 string placeholderImage = "/Files/Images/placeholder.gif";
691 string imageEngine = "/Admin/Public/GetImage.ashx?";
692
693 string imageStyle = "";
694
695 switch (settings.Style)
696 {
697 case ImageStyle.Ball:
698 imageStyle = "grid__cell-img--ball";
699 break;
700 }
701
702 if (settings.Style == ImageStyle.Ball || settings.Style == ImageStyle.Circle)
703 {
704 if (settings.ImageDefault != null)
705 {
706 settings.ImageDefault.Height = settings.ImageDefault.Width;
707 }
708 if (settings.ImageMedium != null)
709 {
710 settings.ImageMedium.Height = settings.ImageMedium.Width;
711 }
712 if (settings.ImageSmall != null)
713 {
714 settings.ImageSmall.Height = settings.ImageSmall.Width;
715 }
716 }
717
718 string defaultImage = imageEngine;
719 string imageSmall = "";
720 string imageMedium = "";
721
722 if (settings.DisableImageEngine) {
723 defaultImage = settings.Path;
724 } else {
725 if (settings.ImageDefault != null)
726 {
727 defaultImage += getImagePathFromSettings(settings.ImageDefault);
728
729 if (settings.Path.GetType() != typeof(string))
730 {
731 defaultImage += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
732 defaultImage += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
733 }
734 else
735 {
736 defaultImage += settings.Path != null ? "Image=" + settings.Path : "";
737 }
738 }
739
740 if (settings.ImageSmall != null)
741 {
742 imageSmall = "data-src-small=\"" + imageEngine;
743 imageSmall += getImagePathFromSettings(settings.ImageSmall);
744
745 if (settings.Path.GetType() != typeof(string))
746 {
747 imageSmall += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
748 imageSmall += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
749 }
750 else
751 {
752 imageSmall += settings.Path != null ? "Image=" + settings.Path : "";
753 }
754
755 imageSmall += "\"";
756 }
757
758 if (settings.ImageMedium != null)
759 {
760 imageMedium = "data-src-medium=\"" + imageEngine;
761 imageMedium += getImagePathFromSettings(settings.ImageMedium);
762
763 if (settings.Path.GetType() != typeof(string))
764 {
765 imageMedium += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
766 imageMedium += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
767 }
768 else
769 {
770 imageMedium += settings.Path != null ? "Image=" + settings.Path : "";
771 }
772
773 imageMedium += "\"";
774 }
775 }
776
777 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
778 if (!String.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick); }
779 if (!String.IsNullOrEmpty(settings.Title)) { optionalAttributes.Add("alt", settings.Title); }
780
781 if (settings.DisableLazyLoad) {
782 <img class="grid__cell-img @imageStyle @settings.CssClass dw-mod" src="@defaultImage" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
783 } else {
784 <img class="grid__cell-img b-lazy @imageStyle @settings.CssClass dw-mod" src="@placeholderImage" data-src="@defaultImage" @imageSmall @imageMedium @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
785 }
786
787 if (settings.Caption != null)
788 {
789 <span class="image-caption dw-mod">@settings.Caption</span>
790 }
791 }
792 }
793 }
794 @using System.Reflection
795 @using Dynamicweb.Rapido.Blocks.Components.General
796 @using Dynamicweb.Rapido.Blocks.Components
797
798
799 @* Component *@
800
801 @helper RenderTextField(TextField settings) {
802 dynamic[] methodParameters = new dynamic[1];
803 methodParameters[0] = settings;
804 MethodInfo customMethod = this.GetType().GetMethod("RenderTextFieldCustom");
805
806 if (customMethod != null)
807 {
808 @customMethod.Invoke(this, methodParameters).ToString();
809 } else {
810 int maxLength = settings.MaxLength != 0 ? settings.MaxLength : 524288;
811 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
812 if (settings.Type == TextFieldType.Password) { optionalAttributes.Add("autocomplete", "off"); };
813 if (!String.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick.ToString()); }
814 if (!String.IsNullOrEmpty(settings.Placeholder)) { optionalAttributes.Add("placeholder", settings.Placeholder); }
815 if (settings.Disabled) { optionalAttributes.Add("disabled", settings.Disabled.ToString()); }
816 if (settings.Required) { optionalAttributes.Add("required", settings.Required.ToString()); }
817 if (settings.MaxLength != 0) { optionalAttributes.Add("maxlength", settings.MaxLength.ToString()); }
818
819 <div class="form__field-group dw-mod">
820 @if (!String.IsNullOrEmpty(settings.Label))
821 {
822 <label for="@settings.Id">@settings.Label</label>
823 }
824
825 <input type="@settings.Type" class="u-full-width @settings.CssClass dw-mod" name="@settings.Id" id="@(settings.Id)" value="@settings.Value" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
826
827 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
828 </div>
829 }
830 }
831 @using System.Reflection
832 @using Dynamicweb.Rapido.Blocks.Components.General
833 @using Dynamicweb.Rapido.Blocks.Components
834
835
836 @* Component *@
837
838 @helper RenderNumberField(NumberField settings) {
839 dynamic[] methodParameters = new dynamic[1];
840 methodParameters[0] = settings;
841 MethodInfo customMethod = this.GetType().GetMethod("RenderNumberFieldCustom");
842
843 if (customMethod != null)
844 {
845 @customMethod.Invoke(this, methodParameters).ToString();
846 } else {
847 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
848 if (!String.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick.ToString()); }
849 if (settings.Disabled) { optionalAttributes.Add("disabled", settings.Disabled.ToString()); }
850 if (settings.Required) { optionalAttributes.Add("required", settings.Required.ToString()); }
851 if (settings.Max != 0) { optionalAttributes.Add("max", settings.Max.ToString()); }
852 if (settings.Min != 0) { optionalAttributes.Add("min", settings.Min.ToString()); }
853 if (settings.Step != 0) { optionalAttributes.Add("step", settings.Step.ToString()); }
854
855 <div class="form__field-group dw-mod">
856 @if (!String.IsNullOrEmpty(settings.Label))
857 {
858 <div>
859 <label for="@settings.Id">@settings.Label</label>
860 </div>
861 }
862
863 <input type="Number" class="u-w70px @settings.CssClass dw-mod" name="@settings.Id" id="@(settings.Id)" value="@settings.Value" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
864
865 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
866 </div>
867 }
868 }
869 @using System.Reflection
870 @using Dynamicweb.Rapido.Blocks.Components.General
871 @using Dynamicweb.Rapido.Blocks.Components
872
873
874 @* Component *@
875
876 @helper RenderTextareaField(TextareaField settings) {
877 dynamic[] methodParameters = new dynamic[1];
878 methodParameters[0] = settings;
879 MethodInfo customMethod = this.GetType().GetMethod("RenderTextareaFieldCustom");
880
881 if (customMethod != null)
882 {
883 @customMethod.Invoke(this, methodParameters).ToString();
884 } else {
885 int maxLength = settings.MaxLength != 0 ? settings.MaxLength : 524288;
886 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
887 if (!String.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick.ToString()); }
888 if (!String.IsNullOrEmpty(settings.Placeholder)) { optionalAttributes.Add("placeholder", settings.Placeholder); }
889 if (settings.Disabled) { optionalAttributes.Add("disabled", settings.Disabled.ToString()); }
890 if (settings.Required) { optionalAttributes.Add("required", settings.Required.ToString()); }
891 if (settings.MaxLength != 0) { optionalAttributes.Add("maxlength", settings.MaxLength.ToString()); }
892 if (settings.Rows != 0) { optionalAttributes.Add("rows", settings.Rows.ToString()); }
893
894 <div class="form__field-group dw-mod">
895 @if (!String.IsNullOrEmpty(@settings.Label))
896 {
897 <label for="@settings.Id">@settings.Label</label>
898 }
899
900 <textarea class="u-full-width @settings.CssClass dw-mod" name="@settings.Id" id="@(settings.Id)" value="@settings.Value" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)></textarea>
901
902 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
903 </div>
904 }
905 }
906 @using System.Reflection
907 @using Dynamicweb.Rapido.Blocks.Components.General
908 @using Dynamicweb.Rapido.Blocks.Components
909
910
911 @* Component *@
912
913 @helper RenderHiddenField(HiddenField settings) {
914 dynamic[] methodParameters = new dynamic[1];
915 methodParameters[0] = settings;
916 MethodInfo customMethod = this.GetType().GetMethod(settings.HelperName + "Custom");
917
918 if (customMethod != null)
919 {
920 @customMethod.Invoke(this, methodParameters).ToString();
921 } else {
922 <input type="hidden" name="@settings.Id" id="@(settings.Id)" value="@settings.Value" @ComponentMethods.AddAttributes(settings.ExtraAttributes)/>
923 }
924 }
925 @using System.Reflection
926 @using Dynamicweb.Rapido.Blocks.Components.General
927 @using Dynamicweb.Rapido.Blocks.Components
928
929
930 @* Component *@
931
932 @helper RenderCheckboxField(dynamic settings) {
933 dynamic[] methodParameters = new dynamic[1];
934 methodParameters[0] = settings;
935 MethodInfo customMethod = this.GetType().GetMethod("RenderCheckboxFieldCustom");
936
937 if (customMethod != null)
938 {
939 @customMethod.Invoke(this, methodParameters).ToString();
940 } else {
941 settings.Type = FieldListOptionType.Checkbox;
942 string disabled = settings.Disabled ? "disabled" : "";
943 string required = settings.Required ? "required" : "";
944 string checkedString = settings.Checked == true ? "checked" : "";
945 string id = settings.Id != null ? settings.Id : settings.Label.Replace(" ", "");
946
947 <div class="form__field-group dw-mod">
948 <input type="checkbox" class="form__control @settings.CssClass @disabled dw-mod" name="@settings.Name" id="@id" value="@settings.Value" onclick="@settings.OnClick" @disabled @required @checkedString @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
949
950 @if (!String.IsNullOrEmpty(settings.Label))
951 {
952 <label for="@id" class="@disabled dw-mod">@settings.Label</label>
953 }
954
955 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
956 </div>
957 }
958 }
959 @using System.Reflection
960 @using Dynamicweb.Rapido.Blocks.Components.General
961 @using Dynamicweb.Rapido.Blocks.Components
962
963
964 @* Component *@
965
966 @helper RenderCheckboxListField(CheckboxListField settings) {
967 dynamic[] methodParameters = new dynamic[1];
968 methodParameters[0] = settings;
969 MethodInfo customMethod = this.GetType().GetMethod("RenderCheckboxListFieldCustom");
970
971 if (customMethod != null)
972 {
973 @customMethod.Invoke(this, methodParameters).ToString();
974 } else {
975 string disabled = settings.Disabled ? "disabled" : "";
976
977 <div class="form__field-group @settings.CssClass u-margin-bottom @disabled dw-mod" @disabled @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
978 @if (!String.IsNullOrEmpty(settings.Label))
979 {
980 <div class="u-bold u-margin-bottom">@settings.Label</div>
981 }
982
983 @foreach (var item in settings.Options)
984 {
985 item.Type = FieldListOptionType.Checkbox;
986 @RenderFieldListOption(item)
987 }
988
989 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
990 </div>
991 }
992 }
993
994 @using System.Reflection
995 @using Dynamicweb.Rapido.Blocks.Components.General
996 @using Dynamicweb.Rapido.Blocks.Components
997
998
999 @* Component *@
1000
1001 @helper RenderSelectField(SelectField settings) {
1002 dynamic[] methodParameters = new dynamic[1];
1003 methodParameters[0] = settings;
1004 MethodInfo customMethod = this.GetType().GetMethod("RenderSelectFieldCustom");
1005
1006 if (customMethod != null)
1007 {
1008 @customMethod.Invoke(this, methodParameters).ToString();
1009 } else {
1010 string disabled = settings.Disabled ? "disabled" : "";
1011 string required = settings.Required ? "required" : "";
1012
1013 if (settings.Default != null)
1014 {
1015 settings.Default.Type = FieldListOptionType.SelectOption;
1016 }
1017
1018 <div class="form__field-group u-full-width dw-mod">
1019 @if (!String.IsNullOrEmpty(settings.Label))
1020 {
1021 <label for="@settings.Id">@settings.Label</label>
1022 }
1023
1024 <div class="form__field-combi u-no-margin dw-mod">
1025 <select id="@settings.Id" class="u-full-width @settings.CssClass dw-mod" onchange="@settings.OnChange" @ComponentMethods.AddAttributes(settings.ExtraAttributes) >
1026 @if (settings.Default.Value != null)
1027 {
1028 @RenderFieldListOption(settings.Default)
1029 }
1030
1031 @foreach (var item in settings.Options)
1032 {
1033 item.Type = FieldListOptionType.SelectOption;
1034 @RenderFieldListOption(item)
1035 }
1036 </select>
1037 @if (settings.ActionButton.Link != null || settings.ActionButton.OnClick != null) {
1038 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1039 @RenderButton(settings.ActionButton);
1040 }
1041 </div>
1042
1043 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
1044 </div>
1045 }
1046 }
1047 @using System.Reflection
1048 @using Dynamicweb.Rapido.Blocks.Components.General
1049 @using Dynamicweb.Rapido.Blocks.Components
1050
1051
1052 @* Component *@
1053
1054 @helper RenderRadioButtonField(RadioButtonField settings) {
1055 dynamic[] methodParameters = new dynamic[1];
1056 methodParameters[0] = settings;
1057 MethodInfo customMethod = this.GetType().GetMethod("RenderRadioButtonFieldCustom");
1058
1059 if (customMethod != null)
1060 {
1061 @customMethod.Invoke(this, methodParameters).ToString();
1062 } else {
1063 string disabled = settings.Disabled ? "disabled" : "";
1064
1065 <div class="form__field-group @settings.CssClass u-margin-bottom @disabled" @disabled @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1066 @if (!String.IsNullOrEmpty(settings.Label))
1067 {
1068 <div class="u-bold u-margin-bottom">@settings.Label</div>
1069 }
1070
1071 @foreach (var item in settings.Options)
1072 {
1073 item.Type = FieldListOptionType.RadioButton;
1074
1075 if (settings.Name != null)
1076 {
1077 item.Name = settings.Name;
1078 }
1079
1080 if (settings.RenderOptionsInline)
1081 {
1082 @RenderFieldListOption(item)
1083 }
1084 else
1085 {
1086 <div>
1087 @RenderFieldListOption(item)
1088 </div>
1089 }
1090 }
1091
1092 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage })
1093 </div>
1094 }
1095 }
1096 @using System.Reflection
1097 @using Dynamicweb.Rapido.Blocks.Components.General
1098 @using Dynamicweb.Rapido.Blocks.Components
1099
1100
1101 @* Component *@
1102
1103 @helper RenderNotificationMessage(NotificationMessage settings) {
1104 dynamic[] methodParameters = new dynamic[1];
1105 methodParameters[0] = settings;
1106 MethodInfo customMethod = this.GetType().GetMethod("RenderNotificationMessageCustom");
1107
1108 if (customMethod != null)
1109 {
1110 @customMethod.Invoke(this, methodParameters).ToString();
1111 } else {
1112 if (!String.IsNullOrEmpty(settings.Message))
1113 {
1114 string messageTypeClass = settings.MessageType.ToString().ToLower();
1115 <div class="field-@messageTypeClass @settings.CssClass u-full-width dw-mod">@settings.Message</div>
1116 }
1117 }
1118 }
1119 @using System.Reflection
1120 @using Dynamicweb.Rapido.Blocks.Components.General
1121
1122
1123 @* Component *@
1124
1125 @helper RenderHandlebarsRoot(HandlebarsRoot settings) {
1126 dynamic[] methodParameters = new dynamic[1];
1127 methodParameters[0] = settings;
1128 MethodInfo customMethod = this.GetType().GetMethod("RenderHandlebarsRootCustom");
1129
1130 if (customMethod != null)
1131 {
1132 @customMethod.Invoke(this, methodParameters).ToString();
1133 } else {
1134 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : "";
1135
1136 <div class="@settings.CssClass dw-mod js-handlebars-root" id="@settings.Id" data-template="@settings.ScriptTemplate" data-json-feed="@settings.FeedUrl" data-init-onload="@settings.InitOnLoad.ToString()" data-preloader="@settings.Preloader" @preRender>
1137 @if (settings.SubBlocks != null) {
1138 @RenderBlockList(settings.SubBlocks)
1139 }
1140 </div>
1141 }
1142 }
1143 @using System.Reflection
1144 @using Dynamicweb.Rapido.Blocks.Components.General
1145 @using Dynamicweb.Rapido.Blocks.Components
1146 @using System.Text.RegularExpressions
1147
1148
1149 @* Component *@
1150
1151 @helper RenderSticker(Sticker settings) {
1152 dynamic[] methodParameters = new dynamic[1];
1153 methodParameters[0] = settings;
1154 MethodInfo customMethod = this.GetType().GetMethod("RenderStickerCustom");
1155
1156 if (customMethod != null)
1157 {
1158 @customMethod.Invoke(this, methodParameters).ToString();
1159 }
1160 else
1161 {
1162 if (!String.IsNullOrEmpty(settings.Title)) {
1163 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : "";
1164 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : "";
1165
1166 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
1167 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) {
1168 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : "";
1169 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : "";
1170 optionalAttributes.Add("style", styleTag);
1171 }
1172
1173 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div>
1174 }
1175 }
1176 }
1177
1178 @using System.Reflection
1179 @using Dynamicweb.Rapido.Blocks.Components.General
1180 @using Dynamicweb.Rapido.Blocks.Components
1181
1182
1183 @* Component *@
1184
1185 @helper RenderStickersCollection(StickersCollection settings) {
1186 dynamic[] methodParameters = new dynamic[1];
1187 methodParameters[0] = settings;
1188 MethodInfo customMethod = this.GetType().GetMethod("RenderStickersCollectionCustom");
1189
1190 if (customMethod != null)
1191 {
1192 @customMethod.Invoke(this, methodParameters).ToString();
1193 }
1194 else
1195 {
1196 if (settings.Stickers.Count > 0) {
1197 string position = settings.Position != null ? "" + "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower() : "";
1198
1199 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1200 @foreach (Sticker sticker in settings.Stickers)
1201 {
1202 @RenderSticker(sticker)
1203 }
1204 </div>
1205 }
1206 }
1207 }
1208
1209 @using System.Reflection
1210 @using Dynamicweb.Rapido.Blocks.Components.General
1211 @using Dynamicweb.Rapido.Blocks.Components
1212
1213
1214
1215 @* Component *@
1216
1217 @helper RenderField(Field settings) {
1218 dynamic[] methodParameters = new dynamic[1];
1219 methodParameters[0] = settings;
1220 MethodInfo customMethod = this.GetType().GetMethod("RenderFieldCustom");
1221
1222 if (customMethod != null)
1223 {
1224 @customMethod.Invoke(this, methodParameters).ToString();
1225 } else {
1226 switch (settings.FieldType)
1227 {
1228 case FieldType.Checkbox:
1229 CheckboxField checkbox = new CheckboxField
1230 {
1231 Label = settings.Label,
1232 Id = settings.Id,
1233 Name = settings.Label.Replace(" ", ""),
1234 Value = settings.Value,
1235 Checked = Convert.ToBoolean(settings.Placeholder),
1236 OnClick = settings.OnClick,
1237 Disabled = settings.Disabled,
1238 Required = settings.Required,
1239 CssClass = settings.CssClass,
1240 ExtraAttributes = settings.ExtraAttributes,
1241 ErrorMessage = settings.ErrorMessage
1242 };
1243
1244 @RenderCheckboxField(checkbox)
1245 break;
1246 case FieldType.Email:
1247 TextField emailField = new TextField
1248 {
1249 Label = settings.Label != null ? settings.Label : Translate("Email"),
1250 Id = settings.Id,
1251 Value = settings.Value,
1252 OnClick = settings.OnClick,
1253 Disabled = settings.Disabled,
1254 Required = settings.Required,
1255 CssClass = settings.CssClass,
1256 ExtraAttributes = settings.ExtraAttributes,
1257 ErrorMessage = settings.ErrorMessage,
1258 Placeholder = settings.Placeholder,
1259 Type = TextFieldType.Email
1260 };
1261
1262 @RenderTextField(emailField)
1263 break;
1264 case FieldType.Hidden:
1265 HiddenField hiddenField = new HiddenField
1266 {
1267 Label = settings.Label,
1268 Id = settings.Id,
1269 Value = settings.Value,
1270 Disabled = settings.Disabled,
1271 Required = settings.Required,
1272 CssClass = settings.CssClass,
1273 ExtraAttributes = settings.ExtraAttributes,
1274 ErrorMessage = settings.ErrorMessage
1275 };
1276
1277 @RenderHiddenField(hiddenField)
1278 break;
1279 case FieldType.Integer:
1280 NumberField numberField = new NumberField
1281 {
1282 Label = settings.Label,
1283 Id = settings.Id,
1284 Value = settings.Value.GetType() == typeof(int) ? Convert.ToInt32(settings.Value) : 1,
1285 OnClick = settings.OnClick,
1286 Disabled = settings.Disabled,
1287 Required = settings.Required,
1288 CssClass = settings.CssClass,
1289 ExtraAttributes = settings.ExtraAttributes,
1290 ErrorMessage = settings.ErrorMessage,
1291 Step = 1
1292 };
1293
1294 @RenderNumberField(numberField)
1295 break;
1296 case FieldType.Password:
1297 TextField passwordField = new TextField
1298 {
1299 Label = settings.Label != null ? settings.Label : Translate("Password"),
1300 Id = settings.Id,
1301 Value = settings.Value,
1302 OnClick = settings.OnClick,
1303 Disabled = settings.Disabled,
1304 Required = settings.Required,
1305 CssClass = settings.CssClass,
1306 ExtraAttributes = settings.ExtraAttributes,
1307 ErrorMessage = settings.ErrorMessage,
1308 Placeholder = settings.Placeholder,
1309 Type = TextFieldType.Password
1310 };
1311
1312 @RenderTextField(passwordField)
1313 break;
1314 case FieldType.Reset:
1315 Button resetField = new Button
1316 {
1317 Title = settings.Label != null ? settings.Label : Translate("Reset"),
1318 Id = settings.Id,
1319 OnClick = settings.OnClick,
1320 Disabled = settings.Disabled,
1321 CssClass = settings.CssClass,
1322 ExtraAttributes = settings.ExtraAttributes,
1323 ButtonLayout = ButtonLayout.Secondary,
1324 ButtonType = ButtonType.Reset
1325 };
1326
1327 @RenderButton(resetField)
1328 break;
1329 case FieldType.Submit:
1330 Button submitField = new Button
1331 {
1332 Title = settings.Label != null ? settings.Label : Translate("Submit"),
1333 Id = settings.Id,
1334 OnClick = settings.OnClick,
1335 Disabled = settings.Disabled,
1336 CssClass = settings.CssClass,
1337 ExtraAttributes = settings.ExtraAttributes,
1338 ButtonLayout = ButtonLayout.Primary,
1339 ButtonType = ButtonType.Submit
1340 };
1341
1342 @RenderButton(submitField)
1343 break;
1344 case FieldType.Tel:
1345 TextField telField = new TextField
1346 {
1347 Label = settings.Label != null ? settings.Label : Translate("Phone"),
1348 Id = settings.Id,
1349 Value = settings.Value,
1350 OnClick = settings.OnClick,
1351 Disabled = settings.Disabled,
1352 Required = settings.Required,
1353 CssClass = settings.CssClass,
1354 ExtraAttributes = settings.ExtraAttributes,
1355 ErrorMessage = settings.ErrorMessage,
1356 Placeholder = settings.Placeholder,
1357 Type = TextFieldType.Tel
1358 };
1359
1360 @RenderTextField(telField)
1361 break;
1362 case FieldType.Text:
1363 TextField textField = new TextField
1364 {
1365 Label = settings.Label,
1366 Id = settings.Id,
1367 Value = settings.Value,
1368 OnClick = settings.OnClick,
1369 Disabled = settings.Disabled,
1370 Required = settings.Required,
1371 CssClass = settings.CssClass,
1372 ExtraAttributes = settings.ExtraAttributes,
1373 ErrorMessage = settings.ErrorMessage,
1374 Placeholder = settings.Placeholder,
1375 Type = TextFieldType.Text
1376 };
1377
1378 @RenderTextField(textField)
1379 break;
1380 case FieldType.Textarea:
1381 TextareaField textareaField = new TextareaField
1382 {
1383 Label = settings.Label,
1384 Id = settings.Id,
1385 Value = settings.Value,
1386 OnClick = settings.OnClick,
1387 Disabled = settings.Disabled,
1388 Required = settings.Required,
1389 CssClass = settings.CssClass,
1390 ExtraAttributes = settings.ExtraAttributes,
1391 ErrorMessage = settings.ErrorMessage,
1392 Placeholder = settings.Placeholder
1393 };
1394
1395 @RenderTextareaField(textareaField)
1396 break;
1397 default:
1398 TextField defaultField = new TextField
1399 {
1400 Label = settings.Label,
1401 Id = settings.Id,
1402 Value = settings.Value,
1403 OnClick = settings.OnClick,
1404 Disabled = settings.Disabled,
1405 Required = settings.Required,
1406 CssClass = settings.CssClass,
1407 ExtraAttributes = settings.ExtraAttributes,
1408 ErrorMessage = settings.ErrorMessage,
1409 Placeholder = settings.Placeholder,
1410 Type = TextFieldType.Text
1411 };
1412
1413 @RenderTextField(defaultField)
1414 break;
1415 }
1416 }
1417 }
1418
1419
1420 @using Dynamicweb.Frontend
1421 @using System.Reflection
1422 @using Dynamicweb.Content.Items
1423 @using System.Web.UI.HtmlControls
1424 @using Dynamicweb.Rapido.Blocks.Components
1425 @using Dynamicweb.Rapido.Blocks
1426
1427
1428 @* Components for the articles *@
1429 @using System.Reflection
1430 @using Dynamicweb.Rapido.Blocks.Components.Articles
1431
1432
1433 @* Component for the articles *@
1434
1435 @helper RenderArticleBanner(dynamic settings) {
1436 dynamic[] methodParameters = new dynamic[1];
1437 methodParameters[0] = settings;
1438 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleBannerCustom");
1439
1440 if (customMethod != null)
1441 {
1442 @customMethod.Invoke(this, methodParameters).ToString();
1443 } else {
1444 string filterClasses = "image-filter image-filter--darken";
1445 settings.Layout = ArticleHeaderLayout.Banner;
1446
1447 if (settings.Image != null)
1448 {
1449 if (settings.Image.Path != null)
1450 {
1451 <section class="multiple-paragraphs-container u-color-light paragraph-container--full-width">
1452 <div class="background-image @filterClasses dw-mod">
1453 <div class="background-image__wrapper @filterClasses dw-mod">
1454 @{
1455 settings.Image.CssClass += "background-image__cover dw-mod";
1456 }
1457 @RenderImage(settings.Image)
1458 </div>
1459 </div>
1460 <div class="center-container dw-mod">
1461 <div class="grid">
1462 <div class="grid__col-md-8 grid__col-xs-12 paragraph-container paragraph-container--height-lg">
1463 <div class="u-left-middle">
1464 <div>
1465 @if (!String.IsNullOrEmpty(settings.Heading))
1466 {
1467 <h1 class="article__header article__header--giant dw-mod" style="color: @settings.TextColor">@settings.Heading</h1>
1468 }
1469 @if (!String.IsNullOrEmpty(settings.Subheading))
1470 {
1471 <div class="article__leadtext dw-mod" style="color: @settings.TextColor">@settings.Subheading</div>
1472 }
1473 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
1474 {
1475 <small class="article__post-info u-margin-bottom--lg dw-mod" style="color: @settings.TextColor">@settings.Author @settings.Date</small>
1476 }
1477 @if (!String.IsNullOrEmpty(settings.Link)) {
1478 <div class="grid__cell">
1479 @RenderButton(new Button { Link= settings.Link, Title= settings.LinkText, ButtonLayout= settings.ButtonLayout })
1480 </div>
1481 }
1482 </div>
1483 </div>
1484 </div>
1485 @if (settings.ExternalParagraphId != 0)
1486 {
1487 <div class="grid__col-md-4 grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-auto dw-mod">
1488 <div class="u-color-light-gray--bg u-color-dark dw-mod">
1489 @RenderParagraphContent(settings.ExternalParagraphId)
1490 </div>
1491 </div>
1492 }
1493 </div>
1494 </div>
1495 </section>
1496 }
1497 else
1498 {
1499 settings.Layout = ArticleHeaderLayout.Clean;
1500 @RenderArticleCleanHeader(settings);
1501 }
1502 }
1503 else
1504 {
1505 settings.Layout = ArticleHeaderLayout.Clean;
1506 @RenderArticleCleanHeader(settings);
1507 }
1508 }
1509 }
1510 @using System.Reflection
1511 @using Dynamicweb.Rapido.Blocks.Components
1512 @using Dynamicweb.Rapido.Blocks.Components.General
1513 @using Dynamicweb.Rapido.Blocks.Components.Articles
1514 @using Dynamicweb.Rapido.Blocks
1515
1516
1517 @* Component for the articles *@
1518
1519 @helper RenderArticleHeader(ArticleHeader settings) {
1520 dynamic[] methodParameters = new dynamic[1];
1521 methodParameters[0] = settings;
1522 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleHeaderCustom");
1523
1524 if (customMethod != null)
1525 {
1526 @customMethod.Invoke(this, methodParameters).ToString();
1527 } else {
1528 switch (settings.Layout)
1529 {
1530 case ArticleHeaderLayout.Clean:
1531 @RenderArticleCleanHeader(settings);
1532 break;
1533 case ArticleHeaderLayout.Split:
1534 @RenderArticleSplitHeader(settings);
1535 break;
1536 case ArticleHeaderLayout.Banner:
1537 @RenderArticleBannerHeader(settings);
1538 break;
1539 case ArticleHeaderLayout.Overlay:
1540 @RenderArticleOverlayHeader(settings);
1541 break;
1542 default:
1543 @RenderArticleCleanHeader(settings);
1544 break;
1545 }
1546 }
1547 }
1548
1549 @helper RenderArticleCleanHeader(ArticleHeader settings) {
1550 dynamic[] methodParameters = new dynamic[1];
1551 methodParameters[0] = settings;
1552 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleCleanHeaderCustom");
1553
1554 if (customMethod != null)
1555 {
1556 @customMethod.Invoke(this, methodParameters).ToString();
1557 }
1558 else
1559 {
1560 string contentColumns = settings.TextLayout != ArticleHeaderTextLayout.Full ? "8" : "12";
1561
1562 <div class="grid grid--align-content-start grid--justify-start">
1563 <div class="grid__col-md-@contentColumns grid__col-sm-12 u-padding--lg dw-mod">
1564 @if (!String.IsNullOrEmpty(settings.Category) || !String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date) || settings.RatingOutOf != 0)
1565 {
1566 <div class="u-border-bottom u-padding-bottom">
1567 @if (!String.IsNullOrEmpty(settings.Category))
1568 {
1569 <div class="u-pull--left">
1570 <div class="article__category dw-mod" style="color: @settings.CategoryColor">@settings.Category</div>
1571 </div>
1572 }
1573 <div class="u-pull--right">
1574 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
1575 {
1576 <small class="article__post-info dw-mod">@settings.Author @settings.Date</small>
1577 }
1578 @if (settings.RatingOutOf != 0)
1579 {
1580 @RenderRating(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf })
1581 }
1582 </div>
1583 </div>
1584 }
1585
1586 <div class="grid__cell">
1587 @if (!String.IsNullOrEmpty(settings.Heading))
1588 {
1589 <h1 class="article__header article__header--giant dw-mod">@settings.Heading</h1>
1590 }
1591 @if (settings.Image != null)
1592 {
1593 if (settings.Image.Path != null)
1594 {
1595 <div class="u-padding-bottom--lg">
1596 @RenderImage(settings.Image)
1597 </div>
1598 }
1599 }
1600 @if (!String.IsNullOrEmpty(settings.Subheading))
1601 {
1602 <div class="article__leadtext dw-mod">@settings.Subheading</div>
1603 }
1604 @if (!String.IsNullOrEmpty(settings.Link))
1605 {
1606 <div class="grid__cell">
1607 @RenderButton(new Button { Link = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout })
1608 </div>
1609 }
1610 </div>
1611 </div>
1612 @if (settings.ExternalParagraphId != 0)
1613 {
1614 <div class="grid__col-md-4 grid__col-sm-12 u-padding--lg u-color-light-gray--bg dw-mod">
1615 @RenderParagraphContent(settings.ExternalParagraphId)
1616 </div>
1617 }
1618 </div>
1619 }
1620 }
1621
1622 @helper RenderArticleSplitHeader(ArticleHeader settings) {
1623 dynamic[] methodParameters = new dynamic[1];
1624 methodParameters[0] = settings;
1625 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleSplitHeaderCustom");
1626
1627 if (customMethod != null)
1628 {
1629 @customMethod.Invoke(this, methodParameters).ToString();
1630 }
1631 else
1632 {
1633 string headerColumnWidth = settings.ExternalParagraphId != 0 ? "4" : "6";
1634
1635 if (settings.Image != null)
1636 {
1637 if (settings.Image.Path != null)
1638 {
1639 <section class="multiple-paragraphs-container paragraph-container--full-width">
1640 <div class="grid">
1641 <div class="grid__col-md-@headerColumnWidth grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-xl dw-mod">
1642 <div class="u-left-middle u-padding--lg">
1643 <div>
1644 @if (!String.IsNullOrEmpty(settings.Category))
1645 {
1646 <div class="article__category dw-mod" style="color: @settings.CategoryColor">@settings.Category</div>
1647 }
1648 @if (!String.IsNullOrEmpty(settings.Heading))
1649 {
1650 <h1 class="article__header article__header--giant dw-mod">@settings.Heading</h1>
1651 }
1652 @if (!String.IsNullOrEmpty(settings.Subheading))
1653 {
1654 <div class="article__leadtext dw-mod">@settings.Subheading</div>
1655 }
1656 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
1657 {
1658 <small class="article__post-info u-pull--left dw-mod">@settings.Author @settings.Date</small>
1659 }
1660 @if (settings.RatingOutOf != 0)
1661 {
1662 <div class="u-pull--right">
1663 @RenderRating(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf })
1664 </div>
1665 }
1666 @if (!String.IsNullOrEmpty(settings.Link)) {
1667 @RenderButton(new Button { Link = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout })
1668 }
1669 </div>
1670 </div>
1671 </div>
1672 <div class="grid__col-md-@headerColumnWidth grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-auto dw-mod" style="background-image:url(/Admin/Public/GetImage.ashx?width=1800&height=1100&crop=0&Compression=85&DoNotUpscale=true&image=@settings.Image.Path); background-position: center center; background-size: cover;"></div>
1673 @if (settings.ExternalParagraphId != 0)
1674 {
1675 <div class="grid__col-md-4 grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-auto u-color-light-gray--bg dw-mod">
1676 @RenderParagraphContent(settings.ExternalParagraphId)
1677 </div>
1678 }
1679 </div>
1680 </section>
1681 }
1682 }
1683 else
1684 {
1685 @RenderArticleCleanHeader(settings);
1686 }
1687 }
1688 }
1689
1690 @helper RenderArticleOverlayHeader(ArticleHeader settings) {
1691 dynamic[] methodParameters = new dynamic[1];
1692 methodParameters[0] = settings;
1693 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleOverlayHeaderCustom");
1694
1695 if (customMethod != null)
1696 {
1697 @customMethod.Invoke(this, methodParameters).ToString();
1698 }
1699 else
1700 {
1701 string contentColumns = settings.TextLayout != ArticleHeaderTextLayout.Full ? "8" : "12";
1702 string contentAlignment = settings.TextLayout == ArticleHeaderTextLayout.Center ? "grid--justify-center" : "";
1703
1704 if (settings.Image != null)
1705 {
1706 if (settings.Image.Path != null)
1707 {
1708 if (settings.ExternalParagraphId == 0)
1709 {
1710 <section class="multiple-paragraphs-container u-color-light paragraph-container--full-width">
1711 <div class="background-image image-filter image-filter--darken dw-mod">
1712 <div class="background-image__wrapper image-filter image-filter--darken dw-mod">
1713 @{
1714 settings.Image.CssClass += "background-image__cover dw-mod";
1715 }
1716 @RenderImage(settings.Image)
1717 </div>
1718 </div>
1719 <div class="center-container dw-mod">
1720 <div class="grid @contentAlignment">
1721 <div class="grid__col-md-@contentColumns grid__col-xs-12 paragraph-container paragraph-container--height-xl dw-mod">
1722 @if (!String.IsNullOrEmpty(settings.Heading))
1723 {
1724 <h1 class="article__header article__header--giant u-padding-top--lg dw-mod" style="color: @settings.TextColor">@settings.Heading</h1>
1725 }
1726 @if (!String.IsNullOrEmpty(settings.Subheading))
1727 {
1728 <div class="article__leadtext dw-mod" style="color: @settings.TextColor">@settings.Subheading</div>
1729 }
1730 <div class="u-margin-top">
1731 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
1732 {
1733 <small class="article__post-info u-pull--left dw-mod" style="color: @settings.TextColor">@settings.Author @settings.Date</small>
1734 }
1735 @if (settings.RatingOutOf != 0)
1736 {
1737 <div class="u-pull--right">
1738 @RenderRating(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf })
1739 </div>
1740 }
1741 </div>
1742 @if (!String.IsNullOrEmpty(settings.Link))
1743 {
1744 <div class="grid__cell">
1745 @RenderButton(new Button { Link= settings.Link, Title= settings.LinkText, ButtonLayout= settings.ButtonLayout })
1746 </div>
1747 }
1748 </div>
1749 </div>
1750 </div>
1751 </section>
1752 }
1753 else
1754 {
1755 @RenderArticleBanner(settings);
1756 }
1757 }
1758 }
1759 else
1760 {
1761 @RenderArticleCleanHeader(settings);
1762 }
1763 }
1764 }
1765
1766 @helper RenderArticleBannerHeader(dynamic settings) {
1767 dynamic[] methodParameters = new dynamic[1];
1768 methodParameters[0] = settings;
1769 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleBannerHeaderCustom");
1770
1771 if (customMethod != null)
1772 {
1773 @customMethod.Invoke(this, methodParameters).ToString();
1774 }
1775 else
1776 {
1777 @RenderArticleBanner(settings);
1778 }
1779 }
1780 @using System.Reflection
1781 @using System.Text.RegularExpressions;
1782 @using Dynamicweb.Frontend
1783 @using Dynamicweb.Content.Items
1784 @using Dynamicweb.Rapido.Blocks.Components
1785 @using Dynamicweb.Rapido.Blocks.Components.Articles
1786 @using Dynamicweb.Rapido.Blocks
1787
1788 @* Component for the articles *@
1789
1790 @helper RenderArticleBodyRow(ArticleBodyRow settings)
1791 {
1792 dynamic[] methodParameters = new dynamic[1];
1793 methodParameters[0] = settings;
1794 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleBodyRowCustom");
1795
1796 if (customMethod != null)
1797 {
1798 @customMethod.Invoke(this, methodParameters).ToString();
1799 } else {
1800 string position = settings.TopLayout == "overlay" ? "article__overlay-offset" : "";
1801 string contentAlignment = settings.TextLayout == "center" ? "grid--justify-center" : "";
1802
1803 <div class="grid grid--align-content-start @contentAlignment @position dw-mod">
1804 @RenderBlockList(settings.SubBlocks)
1805 </div>
1806 }
1807 }
1808 @using System.Reflection
1809 @using Dynamicweb.Rapido.Blocks.Components
1810 @using Dynamicweb.Rapido.Blocks.Components.General
1811 @using Dynamicweb.Rapido.Blocks.Components.Articles
1812 @using Dynamicweb.Rapido.Blocks
1813
1814 @* Component for the articles *@
1815
1816 @helper RenderArticleImage(ArticleImage settings)
1817 {
1818 dynamic[] methodParameters = new dynamic[1];
1819 methodParameters[0] = settings;
1820 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleImageCustom");
1821
1822 if (customMethod != null)
1823 {
1824 @customMethod.Invoke(this, methodParameters).ToString();
1825 }
1826 else
1827 {
1828 if (settings.Image != null)
1829 {
1830 if (settings.Image.Path != null)
1831 {
1832 <div class="u-margin-bottom--lg">
1833 @RenderImage(settings.Image)
1834 </div>
1835 }
1836 }
1837 }
1838 }
1839 @using System.Reflection
1840 @using Dynamicweb.Rapido.Blocks.Components
1841 @using Dynamicweb.Rapido.Blocks.Components.Articles
1842
1843
1844 @* Component for the articles *@
1845
1846 @helper RenderArticleSubHeader(ArticleSubHeader settings)
1847 {
1848 dynamic[] methodParameters = new dynamic[1];
1849 methodParameters[0] = settings;
1850 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleSubHeaderCustom");
1851
1852 if (customMethod != null)
1853 {
1854 @customMethod.Invoke(this, methodParameters).ToString();
1855 } else {
1856 if (!String.IsNullOrEmpty(settings.Title))
1857 {
1858 <h2 class="article__header">@settings.Title</h2>
1859 }
1860 }
1861 }
1862 @using System.Reflection
1863 @using Dynamicweb.Rapido.Blocks.Components
1864 @using Dynamicweb.Rapido.Blocks.Components.Articles
1865 @using Dynamicweb.Rapido.Blocks
1866
1867
1868 @* Component for the articles *@
1869
1870 @helper RenderArticleText(ArticleText settings)
1871 {
1872 dynamic[] methodParameters = new dynamic[1];
1873 methodParameters[0] = settings;
1874 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleTextCustom");
1875
1876 if (customMethod != null)
1877 {
1878 @customMethod.Invoke(this, methodParameters).ToString();
1879 } else {
1880 if (!String.IsNullOrEmpty(settings.Text))
1881 {
1882 string greatTextClass = settings.EnableLargeText == true ? "article__paragraph--great-text" : "";
1883
1884 <div class="article__paragraph @greatTextClass">
1885 @settings.Text
1886 </div>
1887 }
1888 }
1889 }
1890 @using System.Reflection
1891 @using Dynamicweb.Rapido.Blocks.Components
1892 @using Dynamicweb.Rapido.Blocks.Components.Articles
1893 @using Dynamicweb.Rapido.Blocks
1894
1895
1896 @* Component for the articles *@
1897
1898 @helper RenderArticleQuote(ArticleQuote settings)
1899 {
1900 dynamic[] methodParameters = new dynamic[1];
1901 methodParameters[0] = settings;
1902 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleQuoteCustom");
1903
1904 if (customMethod != null)
1905 {
1906 @customMethod.Invoke(this, methodParameters).ToString();
1907 } else {
1908 string text = Regex.Replace(settings.Text, "<.*?>", String.Empty);
1909
1910 <div class="grid u-padding-bottom--lg">
1911 @if (settings.Image != null)
1912 {
1913 if (settings.Image.Path != null) {
1914 <div class="grid__col-3">
1915 <div class="grid__cell-img">
1916 @{
1917 settings.Image.Title = !String.IsNullOrEmpty(settings.Image.Title) ? settings.Image.Title : settings.Author;
1918 settings.Image.CssClass += " article__image article__image--ball";
1919 settings.Image.ImageDefault.Width = 200;
1920 settings.Image.ImageDefault.Height = 200;
1921 }
1922 @RenderImage(settings.Image)
1923 </div>
1924 </div>
1925 }
1926 }
1927 <div class="grid__col-auto">
1928 @if (!String.IsNullOrEmpty(settings.Text))
1929 {
1930 <div class="article__quote dw-mod">
1931 @settings.Text
1932 </div>
1933 }
1934 @if (!String.IsNullOrEmpty(settings.Author))
1935 {
1936 <div class="article__quote-author dw-mod">
1937 - @settings.Author
1938 </div>
1939 }
1940 </div>
1941 </div>
1942 }
1943 }
1944 @using System.Reflection
1945 @using Dynamicweb.Rapido.Blocks.Components
1946 @using Dynamicweb.Rapido.Blocks.Components.Articles
1947 @using Dynamicweb.Rapido.Blocks
1948
1949 @* Component for the articles *@
1950
1951 @helper RenderArticleInfoTable(ArticleInfoTable settings)
1952 {
1953 dynamic[] methodParameters = new dynamic[1];
1954 methodParameters[0] = settings;
1955 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleInfoTableCustom");
1956
1957 if (customMethod != null)
1958 {
1959 @customMethod.Invoke(this, methodParameters).ToString();
1960 } else {
1961 <table class="table table--clean">
1962 @foreach (var row in settings.Rows)
1963 {
1964 string iconColor = row.IconColor != null ? row.IconColor : "u-brand-color-two";
1965
1966 <tr>
1967 @if (!String.IsNullOrEmpty(row.Icon))
1968 {
1969 <td class="u-w32px"><i class="@row.Icon fa-2x @row.IconColor"></i></td>
1970 }
1971 <td class="u-no-margin-on-p-elements">
1972 <div class="u-bold">@row.Title</div>
1973 @if (!String.IsNullOrEmpty(row.SubTitle))
1974 {
1975 if (row.Link == null)
1976 {
1977 <div>@row.SubTitle</div>
1978 }
1979 else
1980 {
1981 <a href="@row.Link" class="u-color-inherit">@row.SubTitle</a>
1982 }
1983 }
1984 </td>
1985 </tr>
1986 }
1987 </table>
1988 }
1989 }
1990 @using System.Reflection
1991 @using Dynamicweb.Rapido.Blocks.Components
1992 @using Dynamicweb.Rapido.Blocks.Components.Articles
1993 @using Dynamicweb.Rapido.Blocks
1994
1995 @* Component for the articles *@
1996
1997 @helper RenderArticleGalleryModal(ArticleGalleryModal settings)
1998 {
1999 dynamic[] methodParameters = new dynamic[1];
2000 methodParameters[0] = settings;
2001 MethodInfo customMethod = this.GetType().GetMethod(settings.HelperName + "Custom");
2002
2003 if (customMethod != null)
2004 {
2005 @customMethod.Invoke(this, methodParameters).ToString();
2006 }
2007 else
2008 {
2009 <input type="checkbox" id="ParagraphGalleryTrigger" class="modal-trigger" />
2010 <div class="modal-container">
2011 <label for="ParagraphGalleryTrigger" id="ParagraphGalleryOverlay" class="modal-overlay"></label>
2012 <div class="modal modal--full" id="ParagraphGallery">
2013 <div class="modal__body modal__body--full">
2014 <img src="/Files/Images/placeholder.gif" alt="" id="ParagraphGalleryModalImage" style="margin: 0 auto;" />
2015 <div class="u-padding u-ta-center" id="ParagraphGalleryModalCaption"></div>
2016 <label class="modal__close-btn dw-mod" for="ParagraphGalleryTrigger"></label>
2017 </div>
2018 </div>
2019 </div>
2020 <script>
2021 function showImageInModal(image) {
2022 let imageNode = document.getElementById('ParagraphGalleryModalImage');
2023 let captionNode = document.getElementById('ParagraphGalleryModalCaption');
2024 let trigger = document.getElementById('ParagraphGalleryTrigger');
2025 imageNode.src = image.src;
2026 if (image.alt != "") {
2027 captionNode.innerText = image.alt;
2028 imageNode.alt = image.alt;
2029 captionNode.style.display = "block";
2030 } else {
2031 captionNode.style.display = "none";
2032 }
2033 trigger.checked = true;
2034 }
2035 </script>
2036 }
2037 }
2038 @using System.Reflection
2039 @using Dynamicweb.Rapido.Blocks.Components
2040 @using Dynamicweb.Rapido.Blocks.Components.Articles
2041 @using Dynamicweb.Rapido.Blocks
2042
2043
2044 @* Component for the articles *@
2045
2046 @helper RenderArticleRelated(ArticleRelated settings)
2047 {
2048 string cardClass = Pageview.Device.ToString() != "Tablet" ? "card u-color-light--bg u-full-height" : "";
2049 string cardFooterClass = Pageview.Device.ToString() != "Tablet" ? "card-footer u-color-light--bg" : "";
2050
2051 <section class="multiple-paragraphs-container u-color-light-gray--bg paragraph-container--full-width">
2052 <div class="center-container dw-mod">
2053 <div class="grid u-padding">
2054 <div class="grid__col-md-12 grid__col-xs-12">
2055 <h2 class="article__header u-no-margin u-margin-top">@settings.Title</h2>
2056 </div>
2057 </div>
2058
2059 <div class="js-handlebars-root u-padding" id="@settings.Title.Replace(" ", String.Empty)" data-template="RelatedSimpleTemplate" data-json-feed="/Default.aspx?ID=@settings.FeedPageId&@settings.Query&ExcludeItemID=@settings.CurrentPageId&PageSize=@settings.PageSize"></div>
2060
2061 <script id="RelatedSimpleTemplate" type="text/x-template">
2062 {{#.}}
2063 <div class="grid u-padding-bottom--lg">
2064 {{#Cases}}
2065 <div class="grid__col-md-3 grid__col-xs-12 image-hover--zoom dw-mod">
2066 <a href="{{link}}" class="u-full-height u-color-light--bg">
2067 {{#if image}}
2068 <div class="u-color-light--bg u-no-padding dw-mod">
2069 <div class="flex-img image-hover__wrapper">
2070 <img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=680&height=314&crop=1&DoNotUpscale=True&Compression=75&image={{image}}" alt="{{title}}" />
2071 </div>
2072 </div>
2073 {{/if}}
2074
2075 <div class="card u-color-light--bg dw-mod">
2076 <h3 class="article-list__item-header u-truncate-text dw-mod">{{title}}</h3>
2077 <p class="article__short-summary dw-mod">{{summary}}</p>
2078 </div>
2079 </a>
2080 </div>
2081 {{/Cases}}
2082 </div>
2083 {{/.}}
2084 </script>
2085 </div>
2086 </section>
2087 }
2088 @using System.Reflection
2089 @using Dynamicweb.Rapido.Blocks.Components
2090 @using Dynamicweb.Rapido.Blocks.Components.Articles
2091 @using Dynamicweb.Rapido.Blocks
2092
2093
2094 @* Component for the articles *@
2095
2096 @helper RenderArticleMenu(ArticleMenu settings)
2097 {
2098 dynamic[] methodParameters = new dynamic[1];
2099 methodParameters[0] = settings;
2100 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleMenuCustom");
2101
2102 if (customMethod != null)
2103 {
2104 @customMethod.Invoke(this, methodParameters).ToString();
2105 } else {
2106 if (!String.IsNullOrEmpty(settings.Title)) {
2107 <div class="u-margin u-border-bottom">
2108 <h3 class="u-no-margin">@settings.Title</h3>
2109 </div>
2110 }
2111
2112 <ul class="menu-left u-margin-bottom dw-mod">
2113 @foreach (var item in settings.Items)
2114 {
2115 @RenderArticleMenuItem(item)
2116 }
2117 </ul>
2118 }
2119 }
2120
2121 @helper RenderArticleMenuItem(ArticleMenuItem settings)
2122 {
2123 dynamic[] methodParameters = new dynamic[1];
2124 methodParameters[0] = settings;
2125 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleMenuItemCustom");
2126
2127 if (customMethod != null)
2128 {
2129 @customMethod.Invoke(this, methodParameters).ToString();
2130 } else {
2131 string link = !String.IsNullOrEmpty(settings.Link) ? settings.Link : "#";
2132
2133 if (!String.IsNullOrEmpty(settings.Title)) {
2134 <li class="menu-left__item dw-mod">
2135 <a href="@link" onclick="@settings.OnClick" class="menu-left__link dw-mod">@settings.Title</a>
2136 </li>
2137 }
2138 }
2139 }
2140 @using System.Reflection
2141 @using Dynamicweb.Rapido.Blocks.Components
2142 @using Dynamicweb.Rapido.Blocks.Components.Articles
2143 @using Dynamicweb.Rapido.Blocks
2144
2145 @* Component for the articles *@
2146
2147 @helper RenderArticleList(ArticleList settings)
2148 {
2149 dynamic[] methodParameters = new dynamic[1];
2150 methodParameters[0] = settings;
2151 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleListCustom");
2152
2153 if (customMethod != null)
2154 {
2155 @customMethod.Invoke(this, methodParameters).ToString();
2156 } else {
2157 if (Pageview != null)
2158 {
2159 bool isParagraph = Pageview.CurrentParagraph != null ? true : false;
2160 string[] sortArticlesListBy = new string[2];
2161
2162 if (isParagraph) {
2163 sortArticlesListBy = Pageview.CurrentParagraph.Item["SortArticlesListBy"] != null && !string.IsNullOrEmpty(Pageview.CurrentParagraph.Item["SortArticlesListBy"].ToString()) ? Pageview.CurrentParagraph.Item["SortArticlesListBy"].ToString().Split('+') : new string[] { "Date", "ASC" };
2164 }
2165 else {
2166 sortArticlesListBy = Pageview.Item["SortArticlesListBy"] != null && !string.IsNullOrEmpty(Pageview.Item["SortArticlesListBy"].ToString()) ? Pageview.Item["SortArticlesListBy"].ToString().Split('+') : new string[] { "Date", "ASC" };
2167 }
2168
2169 string sourcePage = settings.SourcePage != null ? settings.SourcePage : Pageview.ID.ToString();
2170
2171 @RenderItemList(new
2172 {
2173 ItemType = !String.IsNullOrEmpty(settings.ItemType) ? settings.ItemType : "DynamicArticle",
2174 ListSourceType = settings.SourceType,
2175 ListSourcePage = sourcePage,
2176 ItemFieldsList = "*",
2177 Filter = settings.Filter,
2178 ListOrderBy = sortArticlesListBy[0],
2179 ListOrderByDirection = sortArticlesListBy[1],
2180 ListSecondOrderBy = sortArticlesListBy[0] == "Date" ? "InFocusSortId" : "Date",
2181 ListSecondOrderByDirection = "ASC",
2182 IncludeAllChildItems = true,
2183 ListTemplate = settings.Template,
2184 ListPageSize = settings.PageSize.ToString()
2185 });
2186 }
2187 }
2188 }
2189 @using System.Reflection
2190 @using Dynamicweb.Rapido.Blocks.Components.Articles
2191
2192
2193 @* Component for the articles *@
2194
2195 @helper RenderArticleSummary(ArticleSummary settings)
2196 {
2197 dynamic[] methodParameters = new dynamic[1];
2198 methodParameters[0] = settings;
2199 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleSummaryCustom");
2200
2201 if (customMethod != null)
2202 {
2203 @customMethod.Invoke(this, methodParameters).ToString();
2204 } else {
2205 if (!String.IsNullOrEmpty(settings.Text))
2206 {
2207 <div class="article__summary dw-mod">@settings.Text</div>
2208 }
2209 }
2210 }
2211 @using System.Reflection
2212 @using Dynamicweb.Rapido.Blocks.Components
2213 @using Dynamicweb.Rapido.Blocks.Components.Articles
2214 @using Dynamicweb.Rapido.Blocks
2215
2216 @* Component for the articles *@
2217
2218 @helper RenderArticleListCategoryFilter(ArticleListCategoryFilter settings)
2219 {
2220 dynamic[] methodParameters = new dynamic[1];
2221 methodParameters[0] = settings;
2222 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleListCategoryFilterCustom");
2223
2224 if (customMethod != null)
2225 {
2226 @customMethod.Invoke(this, methodParameters).ToString();
2227 } else {
2228 string pageId = Pageview.ID.ToString();
2229 string selectedFilter = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("sourcePage")) ? HttpContext.Current.Request.QueryString.Get("sourcePage") : Translate("All");
2230 var query = HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString());
2231
2232 foreach (var option in settings.Categories)
2233 {
2234 selectedFilter = selectedFilter == option.Value ? option.Key : selectedFilter;
2235 }
2236
2237 if (selectedFilter == pageId)
2238 {
2239 selectedFilter = Translate("All");
2240 }
2241
2242 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
2243 {
2244 <div class="u-pull--right u-margin-left">
2245 <div class="collection u-no-margin">
2246 <h5>@Translate("Category")</h5>
2247 <input type="checkbox" id="CategorySelector" class="dropdown-trigger" />
2248 <div class="dropdown u-w180px dw-mod">
2249 <label class="dropdown__header dropdown__btn dw-mod" for="CategorySelector">@Translate(selectedFilter)</label>
2250 <div class="dropdown__content dw-mod">
2251 @foreach (var option in settings.Categories)
2252 {
2253 <div class="dropdown__item" onclick="QueryArray.setParametersInCurrentURL({ sourceType: 'Page', sourcePage: '@(option.Key.ToLower() == "all" ? pageId : option.Value)' })">@Translate(option.Key)</div>
2254 }
2255 </div>
2256 <label class="dropdown-trigger-off" for="CategorySelector"></label>
2257 </div>
2258 </div>
2259 </div>
2260 }
2261 else
2262 {
2263 <div class="u-full-width u-margin-bottom">
2264 <h5 class="u-no-margin">@Translate("Category")</h5>
2265 <input type="checkbox" id="CategorySelector" class="dropdown-trigger" />
2266 <div class="dropdown u-full-width dw-mod">
2267 <label class="dropdown__header dropdown__btn dw-mod" for="CategorySelector">@Translate(selectedFilter)</label>
2268 <div class="dropdown__content dw-mod">
2269 @foreach (var option in settings.Categories)
2270 {
2271 <div class="dropdown__item" onclick="QueryArray.setParametersInCurrentURL({ sourceType: 'Page', sourcePage: '@(option.Key.ToLower() == "all" ? pageId : option.Value)' })">@Translate(option.Key)</div>
2272 }
2273 </div>
2274 <label class="dropdown-trigger-off" for="CategorySelector"></label>
2275 </div>
2276 </div>
2277 }
2278 }
2279 }
2280 @using System.Reflection
2281 @using Dynamicweb.Rapido.Blocks.Components
2282 @using Dynamicweb.Rapido.Blocks.Components.Articles
2283 @using Dynamicweb.Rapido.Blocks
2284
2285 @* Component for the articles *@
2286
2287 @helper RenderArticleListFilter(ArticleListFilter settings)
2288 {
2289 string selectedFilter = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get(settings.SystemName)) ? HttpContext.Current.Request.QueryString.Get(settings.SystemName) : Translate("All");
2290 var query = HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString());
2291
2292 if (settings.Options != null)
2293 {
2294 foreach (var option in settings.Options)
2295 {
2296 selectedFilter = selectedFilter == option.Value ? option.Name : selectedFilter;
2297 }
2298
2299 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
2300 {
2301 <div class="u-pull--right u-margin-left">
2302 <div class="collection u-no-margin">
2303 <h5>@settings.Label</h5>
2304 <input type="checkbox" id="@(settings.SystemName)Selector" class="dropdown-trigger" />
2305 <div class="dropdown u-w180px dw-mod">
2306 <label class="dropdown__header dropdown__btn dw-mod" for="@(settings.SystemName)Selector">@Translate(selectedFilter)</label>
2307 <div class="dropdown__content dw-mod">
2308 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '')">@Translate("All")</div>
2309 @foreach (var option in settings.Options)
2310 {
2311 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '@option.Value')">@Translate(option.Name)</div>
2312 }
2313 </div>
2314 <label class="dropdown-trigger-off" for="@(settings.SystemName)Selector"></label>
2315 </div>
2316 </div>
2317 </div>
2318 }
2319 else
2320 {
2321 <div class="u-full-width u-margin-bottom">
2322 <h5 class="u-no-margin">@settings.Label</h5>
2323 <input type="checkbox" id="@(settings.SystemName)Selector" class="dropdown-trigger" />
2324 <div class="dropdown u-full-width w-mod">
2325 <label class="dropdown__header dropdown__btn dw-mod" for="@(settings.SystemName)Selector">@Translate(selectedFilter)</label>
2326 <div class="dropdown__content dw-mod">
2327 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '')">@Translate("All")</div>
2328 @foreach (var option in settings.Options)
2329 {
2330 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '@option.Value')">@Translate(option.Name)</div>
2331 }
2332 </div>
2333 <label class="dropdown-trigger-off" for="@(settings.SystemName)Selector"></label>
2334 </div>
2335 </div>
2336 }
2337 }
2338 }
2339 @using System.Reflection
2340 @using Dynamicweb.Rapido.Blocks.Components
2341 @using Dynamicweb.Rapido.Blocks.Components.Articles
2342 @using Dynamicweb.Rapido.Blocks
2343
2344 @* Component for the articles *@
2345
2346 @helper RenderArticleListSearch(ArticleListSearch settings)
2347 {
2348 dynamic[] methodParameters = new dynamic[1];
2349 methodParameters[0] = settings;
2350 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleListSearchCustom");
2351
2352 if (customMethod != null)
2353 {
2354 @customMethod.Invoke(this, methodParameters).ToString();
2355 } else {
2356 string searchString = !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("Title")) ? HttpContext.Current.Request.QueryString.Get("Title").Trim('*') : "";
2357 string className = "u-w340px u-pull--right u-margin-left";
2358
2359 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet")
2360 {
2361 className = "u-full-width";
2362 }
2363
2364 <div class="typeahead u-color-inherit u-margin-bottom dw-mod @className">
2365 <input type="text" class="typeahead-search-field u-no-margin dw-mod" placeholder="@Translate("Search in list")" value="@searchString" id="ArticleListSearchInput" onchange="QueryArray.setParameterInCurrentURL('Title', '*' + document.getElementById('ArticleListSearchInput').value + '*')">
2366 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod"><i class="fas fa-search"></i></button>
2367 </div>
2368 }
2369 }
2370 @using System.Reflection
2371 @using Dynamicweb.Rapido.Blocks.Components
2372 @using Dynamicweb.Rapido.Blocks.Components.Articles
2373 @using Dynamicweb.Rapido.Blocks
2374
2375 @* Component for the articles *@
2376
2377 @helper RenderArticleListNoResultsInfo(ArticleListNoResultsInfo settings)
2378 {
2379 dynamic[] methodParameters = new dynamic[1];
2380 methodParameters[0] = settings;
2381 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleListNoResultsInfoCustom");
2382
2383 if (customMethod != null)
2384 {
2385 @customMethod.Invoke(this, methodParameters).ToString();
2386 } else {
2387 <div class="u-margin-top--lg u-bold u-ta-center u-bold">@Translate(settings.Message)</div>
2388 }
2389 }
2390 @using System.Reflection
2391 @using Dynamicweb.Rapido.Blocks.Components
2392 @using Dynamicweb.Rapido.Blocks.Components.General
2393 @using Dynamicweb.Rapido.Blocks.Components.Articles
2394 @using Dynamicweb.Rapido.Blocks
2395 @using System.Text.RegularExpressions
2396
2397 @* Component for the articles *@
2398
2399 @helper RenderArticleListItem(ArticleListItem settings)
2400 {
2401 switch (settings.Type) {
2402 case ArticleListItemType.Card:
2403 @RenderArticleListItemCard(settings);
2404 break;
2405 case ArticleListItemType.List:
2406 @RenderArticleListItemList(settings);
2407 break;
2408 case ArticleListItemType.Simple:
2409 @RenderArticleListItemSimple(settings);
2410 break;
2411 default:
2412 @RenderArticleListItemCard(settings);
2413 break;
2414 }
2415 }
2416
2417 @helper RenderArticleListItemCard(ArticleListItem settings)
2418 {
2419 <a href="@settings.Link" class="u-full-height u-color-light--bg">
2420 <div class="u-color-light--bg u-no-padding dw-mod">
2421 @if (settings.Logo != null)
2422 {
2423 string backgroundImage = settings.Image != null ? "background-image:url(/Admin/Public/GetImage.ashx?width=992&height=760&crop=0&Compression=75&DoNotUpscale=True&image=" + settings.Image.Path + "); background-size: cover;" : "";
2424 settings.Logo.ImageDefault.Crop = 5;
2425 settings.Logo.ImageDefault.Width = settings.Logo.ImageDefault.Width == 1920 ? 240 : settings.Logo.ImageDefault.Width;
2426 settings.Logo.ImageDefault.Height = settings.Logo.ImageDefault.Height == 1080 ? 200 : settings.Logo.ImageDefault.Height;
2427 <div class="image-hover__wrapper layered-image layered-image--tinted dw-mod" style="@backgroundImage">
2428 @if (settings.Stickers != null)
2429 {
2430 if (settings.Stickers.Position != StickersListPosition.Custom)
2431 {
2432 @RenderStickersCollection(settings.Stickers);
2433 }
2434 }
2435 @* @RenderImage(settings.Logo) *@
2436 <div>
2437 <img class="grid__cell-img b-lazy dw-mod b-loaded" src="@settings.Logo.Path">
2438 </div>
2439 </div>
2440 }
2441 else if (settings.Image != null)
2442 {
2443 <div class="flex-img image-hover__wrapper u-position-relative dw-mod">
2444 @if (settings.Stickers != null)
2445 {
2446 if (settings.Stickers.Position != StickersListPosition.Custom)
2447 {
2448 @RenderStickersCollection(settings.Stickers);
2449 }
2450 }
2451 @RenderImage(settings.Image)
2452 </div>
2453 }
2454 </div>
2455
2456 @if (!String.IsNullOrEmpty(settings.Title) || !String.IsNullOrEmpty(settings.Summary))
2457 {
2458 <div class="card u-color-light--bg dw-mod">
2459 @if (settings.Stickers != null)
2460 {
2461 if (settings.Stickers.Position == StickersListPosition.Custom)
2462 {
2463 @RenderStickersCollection(settings.Stickers);
2464 }
2465 }
2466 @if (!String.IsNullOrEmpty(settings.Title))
2467 {
2468 <h3 class="article-list__item-header u-truncate-text dw-mod">@settings.Title</h3>
2469 }
2470 @if (!String.IsNullOrEmpty(settings.SubTitle))
2471 {
2472 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div>
2473 }
2474 @if (!String.IsNullOrEmpty(settings.Summary))
2475 {
2476 <p class="article__short-summary dw-mod">@settings.Summary</p>
2477 }
2478 </div>
2479 }
2480 </a>
2481 }
2482
2483 @helper RenderArticleListItemList(ArticleListItem settings)
2484 {
2485 <a href="@settings.Link">
2486 <div class="grid u-color-light--bg u-no-padding dw-mod">
2487 <div class="grid__col-md-3">
2488 <div class="u-color-light--bg u-no-padding dw-mod">
2489 @if (settings.Logo != null)
2490 {
2491 string backgroundImage = settings.Image != null ? "background-image:url(/Admin/Public/GetImage.ashx?width=992&height=760&crop=0&Compression=75&DoNotUpscale=True&image=" + settings.Image.Path + "); background-size: cover;" : "";
2492 settings.Logo.ImageDefault.Crop = 5;
2493 settings.Logo.ImageDefault.Width = settings.Logo.ImageDefault.Width == 1920 ? 240 : settings.Logo.ImageDefault.Width;
2494 settings.Logo.ImageDefault.Height = settings.Logo.ImageDefault.Height == 1080 ? 200 : settings.Logo.ImageDefault.Height;
2495 <div class="image-hover__wrapper layered-image layered-image--tinted dw-mod" style="@backgroundImage">
2496 @if (settings.Stickers != null)
2497 {
2498 if (settings.Stickers.Position != StickersListPosition.Custom)
2499 {
2500 @RenderStickersCollection(settings.Stickers);
2501 }
2502 }
2503 @RenderImage(settings.Logo)
2504 </div>
2505 }
2506 else if (settings.Image != null)
2507 {
2508 <div class="flex-img image-hover__wrapper dw-mod">
2509 @if (settings.Stickers != null)
2510 {
2511 if (settings.Stickers.Position != StickersListPosition.Custom)
2512 {
2513 @RenderStickersCollection(settings.Stickers);
2514 }
2515 }
2516 @RenderImage(settings.Image)
2517 </div>
2518 }
2519 </div>
2520 </div>
2521
2522 @if (!String.IsNullOrEmpty(settings.Title) || !String.IsNullOrEmpty(settings.Summary))
2523 {
2524 <div class="grid__col-md-9">
2525 @if (!String.IsNullOrEmpty(settings.Title))
2526 {
2527 <h3 class="article-list__item-header u-truncate-text dw-mod">@settings.Title</h3>
2528 }
2529 @if (settings.Stickers != null)
2530 {
2531 if (settings.Stickers.Position == StickersListPosition.Custom)
2532 {
2533 @RenderStickersCollection(settings.Stickers);
2534 }
2535 }
2536 @if (!String.IsNullOrEmpty(settings.SubTitle))
2537 {
2538 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div>
2539 }
2540 @if (!String.IsNullOrEmpty(settings.Summary))
2541 {
2542 <p class="article__short-summary dw-mod">@settings.Summary</p>
2543 }
2544 </div>
2545 }
2546 </div>
2547 </a>
2548 }
2549
2550 @helper RenderArticleListItemSimple(ArticleListItem settings)
2551 {
2552 <a href="@settings.Link" class="u-color-inherit">
2553 <div class="grid u-color-light--bg u-no-padding dw-mod">
2554 <div class="grid__col-md-12">
2555 @if (!String.IsNullOrEmpty(settings.Title))
2556 {
2557 <div class="article-list-item__header u-truncate-text u-no-margin dw-mod">@settings.Title</div>
2558 }
2559 @if (!String.IsNullOrEmpty(settings.SubTitle))
2560 {
2561 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div>
2562 }
2563 </div>
2564 </div>
2565 </a>
2566 }
2567 @using System.Reflection
2568 @using Dynamicweb.Rapido.Blocks.Components.Articles
2569
2570
2571 @* Component for the articles *@
2572
2573 @helper RenderArticleAuthorAndDate(ArticleAuthorAndDate settings)
2574 {
2575 dynamic[] methodParameters = new dynamic[1];
2576 methodParameters[0] = settings;
2577 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleAuthorAndDateCustom");
2578
2579 if (customMethod != null)
2580 {
2581 @customMethod.Invoke(this, methodParameters).ToString();
2582 } else {
2583 <small class="article__subscription">
2584 @if (!(string.IsNullOrWhiteSpace(settings.Author) && string.IsNullOrWhiteSpace(settings.Date)))
2585 {
2586 <text>@Translate("Written")</text>
2587 }
2588 @if (!string.IsNullOrWhiteSpace(settings.Author))
2589 {
2590 <text>@Translate("by") @settings.Author</text>
2591 }
2592 @if (!string.IsNullOrWhiteSpace(settings.Date))
2593 {
2594 <text>@Translate("on") @settings.Date</text>
2595 }
2596 </small>
2597 }
2598 }
2599 @using System.Reflection
2600 @using Dynamicweb.Rapido.Blocks.Components.Articles
2601
2602
2603 @* Component for the articles *@
2604
2605 @helper RenderArticleLink(ArticleLink settings)
2606 {
2607 dynamic[] methodParameters = new dynamic[1];
2608 methodParameters[0] = settings;
2609 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleLinkCustom");
2610
2611 if (customMethod != null)
2612 {
2613 @customMethod.Invoke(this, methodParameters).ToString();
2614 } else {
2615 if (!String.IsNullOrEmpty(settings.Title))
2616 {
2617 <div class="grid__cell">
2618 @RenderButton(settings)
2619 </div>
2620 }
2621 }
2622 }
2623 @using System.Reflection
2624 @using Dynamicweb.Rapido.Blocks
2625 @using Dynamicweb.Rapido.Blocks.Components.Articles
2626 @using Dynamicweb.Rapido.Blocks.Components.General
2627
2628
2629 @* Component for the articles *@
2630
2631 @helper RenderArticleCarousel(ArticleCarousel settings)
2632 {
2633 dynamic[] methodParameters = new dynamic[1];
2634 methodParameters[0] = settings;
2635 MethodInfo customMethod = this.GetType().GetMethod(settings.HelperName + "Custom");
2636
2637 if (customMethod != null)
2638 {
2639 @customMethod.Invoke(this, methodParameters).ToString();
2640 } else {
2641 <div class="grid">
2642 <div class="grid__col-12">
2643 <div class="carousel" id="carousel_@settings.Id">
2644 <div class="carousel__container js-carousel-slides dw-mod">
2645 @RenderBlockList(settings.SubBlocks)
2646 </div>
2647 </div>
2648 </div>
2649 </div>
2650
2651 <script>
2652 document.addEventListener("DOMContentLoaded", function () {
2653 new CarouselModule("#carousel_@settings.Id", {
2654 slideTime: 0,
2655 dots: true
2656 });
2657 });
2658 </script>
2659 }
2660 }
2661
2662 @helper RenderArticleCarouselSlide(ArticleCarouselSlide settings)
2663 {
2664 dynamic[] methodParameters = new dynamic[1];
2665 methodParameters[0] = settings;
2666 MethodInfo customMethod = this.GetType().GetMethod(settings.HelperName + "Custom");
2667
2668 if (customMethod != null)
2669 {
2670 @customMethod.Invoke(this, methodParameters).ToString();
2671 }
2672 else
2673 {
2674 string imageEngine = "/Admin/Public/GetImage.ashx?";
2675
2676 string defaultImage = settings.ImageSettings != null ? imageEngine : settings.Image;
2677 if (settings.ImageSettings != null)
2678 {
2679 defaultImage += settings.ImageSettings.Width != 0 ? "Width=" + settings.ImageSettings.Width + "&" : "";
2680 defaultImage += settings.ImageSettings.Height != 0 ? "Height=" + settings.ImageSettings.Height + "&" : "";
2681 defaultImage += "Crop=" + settings.ImageSettings.Crop + "&";
2682 defaultImage += "Compression=" + settings.ImageSettings.Compression + "&";
2683 defaultImage += "DoNotUpscale=" + settings.ImageSettings.DoNotUpscale.ToString() + "&";
2684 defaultImage += "FillCanvas=" + settings.ImageSettings.FillCanvas.ToString() + "&";
2685 }
2686 defaultImage += "&Image=" + settings.Image;
2687
2688 <div class="carousel__slide u-min-h300px u-flex dw-mod" style="background-size:cover; background-image:url('@defaultImage')">
2689 <a class="article-carousel-item__wrap" href="@settings.Link" title="@settings.Title">
2690 <h2 class="article-list__item-header u-truncate-text u-color-light dw-mod">@settings.Title</h2>
2691 <div class="article-list__item-info">
2692 @if (settings.Stickers != null)
2693 {
2694 settings.Stickers.Position = StickersListPosition.Custom;
2695 @RenderStickersCollection(settings.Stickers);
2696 }
2697
2698 <small class="u-margin-top--lg u-color-light">
2699 @if (!(string.IsNullOrWhiteSpace(settings.Author) && string.IsNullOrWhiteSpace(settings.Date)))
2700 {
2701 <text>@Translate("Written")</text>
2702 }
2703 @if (!string.IsNullOrWhiteSpace(settings.Author))
2704 {
2705 <text>@Translate("by") @settings.Author</text>
2706 }
2707 @if (!string.IsNullOrWhiteSpace(settings.Date))
2708 {
2709 <text>@Translate("on") @settings.Date</text>
2710 }
2711 </small>
2712 </div>
2713
2714 <h3 class="article__short-summary u-color-light">@settings.Summary</h3>
2715 </a>
2716 @if (settings.UseFilters == true)
2717 {
2718 <div class="background-image image-filter image-filter--darken dw-mod"></div>
2719 }
2720 </div>
2721 }
2722 }
2723 @using System.Text.RegularExpressions
2724 @using Dynamicweb.Rapido.Blocks.Components
2725 @using Dynamicweb.Rapido.Blocks.Components.General
2726 @using Dynamicweb.Rapido.Blocks.Components.Articles
2727 @using Dynamicweb.Rapido.Blocks
2728
2729 @* Component for the articles *@
2730
2731 @helper RenderArticleVideo(ArticleVideo settings)
2732 {
2733 dynamic[] methodParameters = new dynamic[1];
2734 methodParameters[0] = settings;
2735 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleTextCustom");
2736
2737 if (customMethod != null)
2738 {
2739 @customMethod.Invoke(this, methodParameters).ToString();
2740 } else {
2741 if (settings.Url != null)
2742 {
2743 //getting video ID from youtube URL
2744 string videoCode = settings.Url;
2745 Regex regex = new Regex(@".be\/(.[^?]*)");
2746 Match match = regex.Match(videoCode);
2747 string videoId = "";
2748 if (match.Success)
2749 {
2750 videoId = match.Groups[1].Value;
2751 }
2752 else
2753 {
2754 regex = new Regex(@"v=([^&]+)");
2755 match = regex.Match(videoCode);
2756 if (match.Success)
2757 {
2758 videoId = match.Groups[1].Value;
2759 }
2760 }
2761
2762 int autoPlay = settings.AutoPlay == "true" ? 1 : 0;
2763
2764 <div class="video-wrapper">
2765 <div class="js-youtube-video" data-video="@videoId" id="ytPlayer@(Guid.NewGuid().ToString("N"))" data-auto-play="@autoPlay" data-enable-controls="1"></div>
2766 </div>
2767 }
2768 }
2769 }
2770
2771
2772
2773 @* Simple helpers *@
2774
2775 @*Requires the Gallery ItemType that comes with Rapido*@
2776 @helper RenderArticleItemGallery(IList<ItemViewModel> gallery) {
2777 if (gallery != null && gallery.Count > 0)
2778 {
2779 int count = 1;
2780
2781 foreach (var item in gallery)
2782 {
2783 if (item.GetFile("ImagePath") != null)
2784 {
2785 string image = item.GetFile("ImagePath").PathUrlEncoded;
2786 string imagePrefix = "/Admin/Public/GetImage.ashx?width=1200&height=820&crop=5&Compression=99&DoNotUpscale=1&image=";
2787 int imagesCount = gallery.Count;
2788
2789 if (count == 1)
2790 {
2791 <label class="gallery" for="GalleryModalTrigger" onclick="Gallery.openImage(this.querySelector('.js-gallery'))">
2792 <span class="gallery__main-image">
2793 <img src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=992&height=760&crop=0&Compression=99&DoNotUpscale=1&image=@image" class="b-lazy flex-img js-gallery" alt="" data-for="FullImage" data-image="@imagePrefix@image" />
2794 </span>
2795 <span class="gallery__image-counter">
2796 <i class="fas fa-camera fa-2x"></i> <span class="gallery__image-counter__number">@imagesCount</span>
2797 <span class="gallery__image-counter__text">@Translate("See all") <i class="fas fa-angle-right"></i></span>
2798 </span>
2799 </label>
2800 }
2801 else
2802 {
2803 <div class="u-hidden js-gallery" data-for="FullImage" data-image="@imagePrefix@image"></div>
2804 }
2805
2806 count++;
2807 }
2808 }
2809 }
2810 }
2811
2812 @helper RenderArticleItemGalleryModal() {
2813 <!-- Trigger for the gallery modal -->
2814 <input type="checkbox" id="GalleryModalTrigger" class="modal-trigger" />
2815
2816 <!-- Gallery modal -->
2817 <div class="modal-container">
2818 <label for="GalleryModalTrigger" id="GalleryModalOverlay" class="modal-overlay"></label>
2819 <div class="modal modal--full" id="GalleryModal">
2820 <div class="modal__body modal__body--full">
2821 <div class="gallery-slider">
2822 <div class="gallery-slider__image">
2823 <img src="#" alt="" class="modal--full__img" id="FullImage" />
2824 </div>
2825 <div class="gallery-slider__image-counter" id="FullImage_counter"></div>
2826 <label class="gallery-slider__close-btn" for="GalleryModalTrigger"></label>
2827 <button class="gallery-slider__previous-btn" id="FullImage_prev" onclick="Gallery.prevImage('FullImage')"></button>
2828 <button class="gallery-slider__next-btn" id="FullImage_next" onclick="Gallery.nextImage('FullImage')"></button>
2829 </div>
2830 </div>
2831 </div>
2832 </div>
2833 }
2834
2835
2836 @helper RenderMobileFilters(List<Block> subBlocks)
2837 {
2838 if (subBlocks.Count > 0)
2839 {
2840 <div class="grid__col-12">
2841 <input type="checkbox" id="CheckFilters" class="js-remember-state u-hidden" data-expand="CheckFilters" />
2842 <div class="grid u-margin-bottom dw-mod" data-trigger="CheckFilters">
2843 @RenderBlockList(subBlocks)
2844 </div>
2845 <label for="CheckFilters" class="btn btn--secondary btn--full dw-mod js-expand-hide" data-trigger="CheckFilters">@Translate("Select filters")</label>
2846 <label for="CheckFilters" class="btn btn--secondary btn--full dw-mod expandable--collapsed" data-trigger="CheckFilters">@Translate("Close filters")</label>
2847 </div>
2848 }
2849 }
2850
2851 @if (File.Exists(HttpContext.Current.Server.MapPath("/Components/Custom/Custom__Components.cshtml")))
2852 {
2853 <text>@using Dynamicweb.Rapido.Blocks.Components.General
2854 </text>
2855 }
2856
2857
2858 @* Include the Blocks for the page *@
2859 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2860
2861 @using System
2862 @using System.Web
2863 @using System.Collections.Generic
2864 @using Dynamicweb.Rapido.Blocks.Extensibility
2865 @using Dynamicweb.Rapido.Blocks
2866
2867 @{
2868 BlocksPage topSnippetsBlocksPage = BlocksPage.GetBlockPage("Master");
2869
2870 Block tagManager = new Block()
2871 {
2872 Id = "TagManager",
2873 SortId = 1,
2874 Template = RenderGoogleTagManager()
2875 };
2876
2877 Block facebookPixel = new Block()
2878 {
2879 Id = "FacebookPixel",
2880 SortId = 2,
2881 Template = RenderFacebookPixel()
2882 };
2883
2884 topSnippetsBlocksPage.Add(MasterBlockId.MasterTopSnippets, tagManager);
2885 topSnippetsBlocksPage.Add(MasterBlockId.MasterTopSnippets, facebookPixel);
2886 }
2887
2888 @helper RenderGoogleTagManager() {
2889 string GoogleTagManagerID = Model.Area.Item.GetItem("Settings").GetString("GoogleTagManagerID");
2890
2891 if (!string.IsNullOrWhiteSpace(GoogleTagManagerID))
2892 {
2893 <script>
2894 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
2895 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
2896 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
2897 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
2898 })(window,document,'script','dataLayer','@GoogleTagManagerID');
2899 </script>
2900 <!-- Google Tag Manager (noscript) -->
2901 <noscript>
2902 <iframe src="https://www.googletagmanager.com/ns.html?id=@GoogleTagManagerID"
2903 height="0" width="0" style="display:none;visibility:hidden"></iframe>
2904 </noscript>
2905 <!-- End Google Tag Manager (noscript) -->
2906 }
2907 }
2908
2909 @helper RenderFacebookPixel() {
2910 string FacebookPixelID = Model.Area.Item.GetItem("Settings").GetString("FacebookPixelID");
2911
2912 if (!string.IsNullOrWhiteSpace(FacebookPixelID))
2913 {
2914 <!-- Facebook Pixel Code -->
2915 <script>
2916 !function(f,b,e,v,n,t,s)
2917 {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
2918 n.callMethod.apply(n,arguments):n.queue.push(arguments)};
2919 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
2920 n.queue=[];t=b.createElement(e);t.async=!0;
2921 t.src=v;s=b.getElementsByTagName(e)[0];
2922 s.parentNode.insertBefore(t,s)}(window, document,'script',
2923 'https://connect.facebook.net/en_US/fbevents.js');
2924 fbq('init', '@FacebookPixelID');
2925 fbq('track', 'PageView');
2926 </script>
2927 <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=@FacebookPixelID&ev=PageView&noscript=1" alt="" /></noscript>
2928 }
2929 }
2930 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2931
2932 @using System
2933 @using System.Web
2934 @using System.Collections.Generic
2935 @using Dynamicweb.Rapido.Blocks
2936 @using Dynamicweb.Rapido.Blocks.Extensibility
2937 @using Dynamicweb.Security.UserManagement
2938 @using Dynamicweb.Security.UserManagement.ExternalAuthentication
2939 @{
2940 BlocksPage loginBlocksPage = BlocksPage.GetBlockPage("Master");
2941
2942 Block loginModal = new Block()
2943 {
2944 Id = "LoginModal",
2945 SortId = 10,
2946 Template = LoginModal()
2947 };
2948
2949 //loginBlocksPage.Add(MasterBlockId.MasterTopSnippets, loginModal);
2950 }
2951
2952 @helper LoginModal() {
2953 int pageId = Model.TopPage.ID;
2954 string userSignedInError = !Model.LogOnFailed ? "" : "checked";
2955 string userSignedInErrorText = "";
2956 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator");
2957 string forgotPasswordPageLink = "/Default.aspx?ID=" + signInProfilePageId + "&LoginAction=Recovery";
2958 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
2959
2960 if (Model.LogOnFailed) {
2961 switch (Model.LogOnFailedReason)
2962 {
2963 case LogOnFailedReason.PasswordLengthInvalid:
2964 userSignedInErrorText = Translate("Password length is invalid");
2965 break;
2966 case LogOnFailedReason.IncorrectLogin:
2967 userSignedInErrorText = Translate("Invalid email or password");
2968 break;
2969 case LogOnFailedReason.ExceededFailedLogOnLimit:
2970 userSignedInErrorText = Translate("You have exceeded the limit of allowed login attempts. The user account is temporarily locked");
2971 break;
2972 case LogOnFailedReason.LoginLocked:
2973 userSignedInErrorText = Translate("The user account is temporarily locked");
2974 break;
2975 case LogOnFailedReason.PasswordExpired:
2976 userSignedInErrorText = Translate("The password has expired and needs to be renewed");
2977 break;
2978 default:
2979 userSignedInErrorText = Translate("An unknown error occured");
2980 break;
2981 }
2982 }
2983
2984 <!-- Trigger for the login modal -->
2985 <input type="checkbox" id="SignInModalTrigger" class="modal-trigger" @userSignedInError />
2986
2987 <!-- Login modal -->
2988 <div class="modal-container">
2989 <label for="SignInModalTrigger" id="SignInModalOverlay" class="modal-overlay"></label>
2990 <div class="modal modal--xs" id="SignInModal">
2991 <div class="modal__header">
2992 <h2>@Translate("Sign in")</h2>
2993 </div>
2994 <div class="modal__body">
2995 <form method="post" id="LoginForm" class="u-no-margin">
2996 <input type="hidden" name="ID" value="@pageId" />
2997 <input type="hidden" name="DWExtranetUsernameRemember" value="True" />
2998 <input type="hidden" name="DWExtranetPasswordRemember" value="True" />
2999 <input type="text" class="u-full-width" id="LoginUsername" name="username" placeholder="@Translate("Username")" />
3000 <input type="password" class="u-full-width" id="LoginPassword" name="password" placeholder="@Translate("Password")" />
3001 <div class="field-error dw-mod">@userSignedInErrorText</div>
3002
3003 <div class="form__field-group dw-mod">
3004 <input type="checkbox" id="LoginRememberMe" name="Autologin" checked="checked" value="True" class="form__control">
3005 <label for="LoginRememberMe">
3006 @Translate("Remember me", "Remember me")
3007 </label>
3008 </div>
3009
3010 <button type="submit" class="btn btn--primary btn--full dw-mod" name="LoginAction" value="Login" onclick="Buttons.LockButton(event)">@Translate("Sign in")</button>
3011 @{
3012 ProviderCollection providers = Provider.GetActiveProviders();
3013 }
3014
3015 @foreach(Provider LoginProvider in providers)
3016 {
3017 var ProviderName = LoginProvider.Name.ToLower();
3018 <a href="/Admin/Public/Social/ExternalLogin.aspx?action=login&providerID=@LoginProvider.ID" title="@LoginProvider.Name" class="btn btn--clean btn--condensed u-color-@ProviderName dw-mod"><i class="fab fa-@ProviderName fa-1_5x"></i></a>
3019 }
3020
3021 <a class="btn btn--link-clean dw-mod" href="@forgotPasswordPageLink">@Translate("Forgot your password?", "Forgot your password?")</a>
3022
3023
3024 </form>
3025 </div>
3026 </div>
3027 </div>
3028 }
3029
3030
3031 @*if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet")
3032 {
3033 <text>*@@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
3034
3035 @using System
3036 @using System.Web
3037 @using System.Collections.Generic
3038 @using Dynamicweb.Rapido.Blocks.Extensibility
3039 @using Dynamicweb.Rapido.Blocks
3040
3041
3042 @functions {
3043 BlocksPage mobileHeaderBlocksPage = BlocksPage.GetBlockPage("Master");
3044 }
3045
3046 @{
3047 var mobileTopLayout = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetString("Design")) ? Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design").SelectedValue : "nav-left";
3048 bool mobileHideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch");
3049 bool mobileHideCart = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideCart");
3050 bool mobileHideSignIn = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSignIn");
3051
3052
3053 Block mobileHeader = new Block()
3054 {
3055 Id = "MobileTop",
3056 SortId = 10,
3057 Template = RenderMobileTop(),
3058 SkipRenderBlocksList = true
3059 };
3060 mobileHeaderBlocksPage.Add(MasterBlockId.MasterHeader, mobileHeader);
3061
3062 Block mobileHeaderNavigation = new Block()
3063 {
3064 Id = "MobileHeaderNavigation",
3065 SortId = 10,
3066 Template = RenderMobileHeaderNavigation(),
3067 SkipRenderBlocksList = true,
3068 BlocksList = new List<Block> {
3069 new Block {
3070 Id = "MobileHeaderNavigationTrigger",
3071 SortId = 10,
3072 Template = RenderMobileHeaderNavigationTrigger()
3073 }
3074 }
3075 };
3076 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderNavigation);
3077
3078
3079 Block mobileHeaderLogo = new Block()
3080 {
3081 Id = "MobileHeaderLogo",
3082 SortId = 20,
3083 Template = RenderMobileHeaderLogo(),
3084 SkipRenderBlocksList = true
3085 };
3086 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderLogo);
3087
3088 Block mobileHeaderActions = new Block()
3089 {
3090 Id = "MobileHeaderActions",
3091 SortId = 30,
3092 Template = RenderMobileTopActions(),
3093 SkipRenderBlocksList = true
3094 };
3095 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderActions);
3096
3097 if (mobileHideSearch == false)
3098 {
3099 Block mobileHeaderSearch = new Block
3100 {
3101 Id = "MobileHeaderSearch",
3102 SortId = 10,
3103 Template = RenderMobileTopSearch()
3104 };
3105 mobileHeaderBlocksPage.Add("MobileHeaderActions", mobileHeaderSearch);
3106 }
3107
3108 Block mobileHeaderMiniCart;
3109
3110 if (!mobileHideCart)
3111 {
3112 mobileHeaderMiniCart = new Block
3113 {
3114 Id = "MobileHeaderMiniCart",
3115 SortId = 20,
3116 Template = RenderMobileTopMiniCart()
3117 };
3118
3119 Block miniCartCounterScriptTemplate = new Block
3120 {
3121 Id = "MiniCartCounterScriptTemplate",
3122 Template = RenderMobileMiniCartCounterContent()
3123 };
3124 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", miniCartCounterScriptTemplate);
3125 } else {
3126 mobileHeaderMiniCart = new Block
3127 {
3128 Id = "MobileHeaderMiniCart",
3129 SortId = 20
3130 };
3131 }
3132
3133 if (!mobileHideSearch) {
3134 Block mobileHeaderSearchBar = new Block()
3135 {
3136 Id = "MobileHeaderSearchBar",
3137 SortId = 30,
3138 Template = RenderMobileTopSearchBar()
3139 };
3140 mobileHeaderBlocksPage.Add(MasterBlockId.MasterHeader, mobileHeaderSearchBar);
3141 }
3142
3143 switch (mobileTopLayout)
3144 {
3145 case "nav-left":
3146 mobileHeaderNavigation.SortId = 10;
3147 mobileHeaderLogo.SortId = 20;
3148 mobileHeaderActions.SortId = 30;
3149 mobileHeaderBlocksPage.Add("MobileHeaderActions", mobileHeaderMiniCart);
3150 break;
3151 case "nav-right":
3152 mobileHeaderLogo.SortId = 10;
3153 mobileHeaderActions.SortId = 20;
3154 mobileHeaderNavigation.SortId = 30;
3155 mobileHeaderBlocksPage.Add("MobileHeaderActions", mobileHeaderMiniCart);
3156 break;
3157 case "nav-search-left":
3158 mobileHeaderNavigation.SortId = 10;
3159 mobileHeaderLogo.SortId = 20;
3160 mobileHeaderActions.SortId = 30;
3161 mobileHeaderBlocksPage.Add("MobileHeaderNavigation", mobileHeaderMiniCart);
3162 break;
3163 case "search-left":
3164 mobileHeaderActions.SortId = 10;
3165 mobileHeaderLogo.SortId = 20;
3166 mobileHeaderNavigation.SortId = 30;
3167 mobileHeaderMiniCart.SortId = 0;
3168 mobileHeaderBlocksPage.Add("MobileHeaderNavigation", mobileHeaderMiniCart);
3169 break;
3170 }
3171 }
3172
3173
3174 @helper RenderMobileTop() {
3175 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileTop").OrderBy(item => item.SortId).ToList();
3176
3177 <nav class="main-navigation-mobile dw-mod">
3178 <div class="center-container top-container__center-container dw-mod">
3179 <div class="grid grid--align-center">
3180 @RenderBlockList(subBlocks)
3181 </div>
3182 </div>
3183 </nav>
3184 }
3185
3186 @helper RenderMobileHeaderNavigation() {
3187 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderNavigation").OrderBy(item => item.SortId).ToList();
3188
3189 <div class="grid__col-auto-width">
3190 <ul class="menu dw-mod">
3191 @RenderBlockList(subBlocks)
3192 </ul>
3193 </div>
3194 }
3195
3196 @helper RenderMobileHeaderNavigationTrigger() {
3197 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod">
3198 <label for="MobileNavTrigger" class="mobile-nav-trigger-button menu__link menu__link--icon menu__link--mobile dw-mod"></label>
3199 </li>
3200 }
3201
3202 @helper RenderMobileHeaderLogo() {
3203 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderLogo").OrderBy(item => item.SortId).ToList();
3204
3205 var mobileTopLayout = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetString("Design")) ? Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design").SelectedValue : "nav-left";
3206 string centeredLogo = mobileTopLayout != "nav-right" ? "u-ta-center" : "";
3207 string firstPageId = Model.Area.FirstActivePage.ID.ToString();
3208 string businessName = Model.Area.Item.GetItem("Settings").GetString("BusinessName");
3209
3210 string mobileLogo = "/Files/Images/logo-dynamicweb.png";
3211 if (Model.Area.Item.GetItem("Layout").GetItem("MobileTop") != null && Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetFile("Logo") != null)
3212 {
3213 mobileLogo = Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetFile("Logo").PathUrlEncoded;
3214 }
3215
3216 if (Path.GetExtension(mobileLogo).ToLower() != ".svg")
3217 {
3218 mobileLogo = "/Admin/Public/GetImage.ashx?height=40&crop=5&Compression=75&image=" + mobileLogo;
3219 }
3220 else
3221 {
3222 mobileLogo = HttpUtility.UrlDecode(mobileLogo);
3223 }
3224
3225 <div class="grid__col-auto grid__col--bleed">
3226 <div class="grid__cell @centeredLogo">
3227 <a href="/Default.aspx?ID=@firstPageId" class="logo logo--mobile u-inline-block dw-mod">
3228 <img class="grid__cell-img logo__img logo__img--mobile dw-mod" src="@mobileLogo" alt="@businessName" />
3229 </a>
3230 </div>
3231
3232 @RenderBlockList(subBlocks)
3233 </div>
3234 }
3235
3236 @helper RenderMobileTopActions() {
3237 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderActions").OrderBy(item => item.SortId).ToList();
3238
3239 <div class="grid__col-auto-width">
3240 <ul class="menu dw-mod">
3241 @{
3242 string headerButtonText = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonText");
3243 string headerButtonLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonLink");
3244 string headerButtonType = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType") != null ? "btn--" + Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType").SelectedName.ToLower() : "";
3245
3246 <li class="menu__item menu__item--horizontal menu--clean dw-mod">
3247 <a class="btn @headerButtonType dw-mod u-no-margin u-margin-left" style="margin-top: 15px;" href="@headerButtonLink">@headerButtonText</a>
3248 </li>
3249 }
3250 @RenderBlockList(subBlocks)
3251 </ul>
3252 </div>
3253 }
3254
3255 @helper RenderMobileTopSearch() {
3256 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod">
3257 <label for="MobileSearchTrigger" class="menu__link menu__link--icon menu__link--mobile dw-mod">
3258 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue fa-1_5x"></i>
3259 </label>
3260 </li>
3261 }
3262
3263 @helper RenderMobileTopMiniCart() {
3264 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
3265 int cartPageId = GetPageIdByNavigationTag("CartPage");
3266 double cartProductsCount = Model.Cart.TotalProductsCount;
3267
3268 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod" id="miniCartWrapper" onmouseenter="Cart.UpdateMiniCart('miniCartWrapper', 'miniCart', 'cartCounter', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart')">
3269 <div class="mini-cart dw-mod">
3270 <a href="/Default.aspx?ID=@cartPageId&Purge=True" id="miniCartCounterWrap" class="menu__link menu__link--icon menu__link--mobile dw-mod js-mini-cart-button">
3271 <div class="u-inline u-position-relative">
3272 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue fa-1_5x"></i>
3273 <div class="mini-cart__counter dw-mod">
3274 <div class="js-handlebars-root js-mini-cart-counter" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-init-onload="false" data-preloader="false">
3275 <div class="js-mini-cart-counter-content">
3276 @cartProductsCount
3277 </div>
3278 </div>
3279 </div>
3280 </div>
3281 </a>
3282 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
3283 {
3284 <div class="mini-cart-dropdown js-handlebars-root js-mini-cart dw-mod" id="miniCart" data-template="MiniCartContent" data-cart-id="@miniCartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div>
3285 }
3286 </div>
3287 </li>
3288 }
3289
3290 @helper RenderMobileTopSearchBar()
3291 {
3292 string searchFeedId = "";
3293 string searchSecondFeedId = "";
3294 int groupsFeedId;
3295 int productsPageId = GetPageIdByNavigationTag("ProductsPage");
3296 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID;
3297 string resultPageLink;
3298 string searchPlaceholder;
3299 string searchType = "product-search";
3300 string searchTemplate;
3301 string searchContentTemplate = "";
3302 string searchValue = HttpContext.Current.Request.QueryString.Get("Search") ?? "";
3303 bool showGroups = true;
3304
3305 if (Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue == "contentSearch")
3306 {
3307 searchFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true";
3308 resultPageLink = contentSearchPageLink;
3309 searchPlaceholder = Translate("Search page");
3310 groupsFeedId = 0;
3311 searchType = "content-search";
3312 searchTemplate = "SearchPagesTemplate";
3313 showGroups = false;
3314 }
3315 else if (Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue == "combinedSearch")
3316 {
3317 searchFeedId = productsPageId + "&feed=true";
3318 searchSecondFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true";
3319 resultPageLink = Converter.ToString(productsPageId);
3320 searchPlaceholder = Translate("Search products or pages");
3321 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed");
3322 searchType = "combined-search";
3323 searchTemplate = "SearchProductsTemplateWrap";
3324 searchContentTemplate = "SearchPagesTemplateWrap";
3325 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector");
3326 }
3327 else
3328 {
3329 resultPageLink = Converter.ToString(productsPageId);
3330 searchFeedId = productsPageId + "&feed=true";
3331 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed");
3332 searchPlaceholder = Translate("Search products");
3333 searchTemplate = "SearchProductsTemplate";
3334 searchType = "product-search";
3335 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector");
3336 }
3337
3338
3339 <input type="checkbox" id="MobileSearchTrigger" class="mobile-search-trigger" />
3340
3341 <div class="main-navigation-mobile typeahead-mobile dw-mod">
3342 <div class="center-container top-container__center-container dw-mod">
3343 <div class="grid">
3344 <div class="grid__col-auto">
3345 <div class="typeahead-mobile__search-field dw-mod js-typeahead" data-page-size="@(searchType == "combined-search" ? 4 : 8)" id="MobileProductSearch" data-search-feed-id="@searchFeedId" data-search-second-feed-id="@searchSecondFeedId" data-result-page-id="@resultPageLink" data-search-type="@searchType">
3346 <input type="text" class="js-typeahead-search-field u-w160px u-no-margin" placeholder="@searchPlaceholder" value="@searchValue">
3347 @if (string.IsNullOrEmpty(searchSecondFeedId))
3348 {
3349 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></ul>
3350 }
3351 else
3352 {
3353 <div class="dropdown dropdown--absolute-position dropdown--combined grid dropdown--combined-mobile grid">
3354 <div class="js-handlebars-root js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="MobileProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></div>
3355 <div class="js-handlebars-root js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="MobileContentSearchBarContent" data-template="@searchContentTemplate" data-json-feed="/Default.aspx?ID=@searchSecondFeedId" data-init-onload="false"></div>
3356 </div>
3357 }
3358 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue"></i></button>
3359 </div>
3360 </div>
3361 <div class="grid__col-auto-width">
3362 <ul class="menu dw-mod">
3363 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod">
3364 <label for="MobileSearchTrigger" class="menu__link menu__link--icon menu__link--mobile dw-mod">
3365 <i class="fas fa-times fa-1_5x"></i>
3366 </label>
3367 </li>
3368 </ul>
3369 </div>
3370 </div>
3371 </div>
3372 </div>
3373 }
3374
3375 @helper RenderMobileMiniCartCounterContent()
3376 {
3377 bool showPrice = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetBoolean("ShowPrice");
3378 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right";
3379 bool showPriceInMiniCartCounter = Pageview.Device.ToString() != "Mobile" && counterPosition == "right" && showPrice;
3380
3381 <script id="MiniCartCounterContent" type="text/x-template">
3382 {{#.}}
3383 <div class="js-mini-cart-counter-content dw-mod">
3384 @if (showPriceInMiniCartCounter)
3385 {
3386 @Translate("Cart")<text>({{numberofproducts}}) {{totalprice}}</text>
3387 }
3388 else
3389 {
3390 <text>{{numberofproducts}}</text>
3391 }
3392 </div>
3393 {{/.}}
3394 </script>
3395 }
3396 @*</text>
3397 <text>*@@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
3398
3399 @using System
3400 @using System.Web
3401 @using System.Collections.Generic
3402 @using Dynamicweb.Content
3403 @using Dynamicweb.Frontend
3404 @using Dynamicweb.Rapido.Blocks.Extensibility
3405 @using Dynamicweb.Rapido.Blocks
3406
3407 @functions {
3408 BlocksPage mobileNavigationBlocksPage = BlocksPage.GetBlockPage("Master");
3409 }
3410
3411 @{
3412 bool navigationItemsHideSignIn = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSignIn");
3413 bool mobileHideCreateAccountLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideCreateAccount");
3414 bool mobileHideMyProfileLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideProfile");
3415 bool mobileHideMyOrdersLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideOrders");
3416 bool mobileHideMySavedCardsLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideSavedCards");
3417 bool mobileHideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideFavorites");
3418
3419 Block mobileNavigation = new Block()
3420 {
3421 Id = "MobileNavigation",
3422 SortId = 10,
3423 Template = MobileNavigation(),
3424 SkipRenderBlocksList = true
3425 };
3426 mobileNavigationBlocksPage.Add(MasterBlockId.MasterTopSnippets, mobileNavigation);
3427
3428 if (Model.CurrentUser.ID > 0 && !mobileHideCreateAccountLink)
3429 {
3430 Block mobileNavigationSignIn = new Block
3431 {
3432 Id = "MobileNavigationSignIn",
3433 SortId = 10,
3434 Template = RenderMobileNavigationSignIn()
3435 };
3436 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationSignIn);
3437 }
3438
3439 Block mobileNavigationMenu = new Block
3440 {
3441 Id = "MobileNavigationMenu",
3442 SortId = 20,
3443 Template = RenderMobileNavigationMenu()
3444 };
3445 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationMenu);
3446
3447 Block mobileNavigationActions = new Block
3448 {
3449 Id = "MobileNavigationActions",
3450 SortId = 30,
3451 Template = RenderMobileNavigationActions(),
3452 SkipRenderBlocksList = true
3453 };
3454 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationActions);
3455
3456 if (!navigationItemsHideSignIn)
3457 {
3458 if (Model.CurrentUser.ID <= 0)
3459 {
3460 Block mobileNavigationSignInAction = new Block
3461 {
3462 Id = "MobileNavigationSignInAction",
3463 SortId = 10,
3464 Template = RenderMobileNavigationSignInAction()
3465 };
3466 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSignInAction);
3467
3468 if (!mobileHideCreateAccountLink)
3469 {
3470 Block mobileNavigationCreateAccountAction = new Block
3471 {
3472 Id = "MobileNavigationCreateAccountAction",
3473 SortId = 20,
3474 Template = RenderMobileNavigationCreateAccountAction()
3475 };
3476 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationCreateAccountAction);
3477 }
3478 }
3479 else
3480 {
3481 if (!mobileHideMyOrdersLink )
3482 {
3483 Block mobileNavigationOrdersAction = new Block
3484 {
3485 Id = "MobileNavigationOrdersAction",
3486 SortId = 20,
3487 Template = RenderMobileNavigationOrdersAction()
3488 };
3489 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationOrdersAction);
3490 }
3491 if (!mobileHideMyFavoritesLink)
3492 {
3493 Block mobileNavigationFavoritesAction = new Block
3494 {
3495 Id = "MobileNavigationFavoritesAction",
3496 SortId = 30,
3497 Template = RenderMobileNavigationFavoritesAction()
3498 };
3499 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationFavoritesAction);
3500 }
3501 if (!mobileHideMyOrdersLink )
3502 {
3503 Block mobileNavigationSavedCardsAction = new Block
3504 {
3505 Id = "MobileNavigationFavoritesAction",
3506 SortId = 30,
3507 Template = RenderMobileNavigationSavedCardsAction()
3508 };
3509 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSavedCardsAction);
3510 }
3511
3512 Block mobileNavigationPartnerPortalAction = new Block
3513 {
3514 Id = "MobileNavigationPartnerPortalAction",
3515 SortId = 35,
3516 Template = RenderMobileNavigationPartnerPortalAction()
3517 };
3518 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationPartnerPortalAction);
3519
3520 Block mobileNavigationSignOutAction = new Block
3521 {
3522 Id = "MobileNavigationSignOutAction",
3523 SortId = 40,
3524 Template = RenderMobileNavigationSignOutAction()
3525 };
3526 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSignOutAction);
3527 }
3528 }
3529
3530 if (Model.Languages.Count > 1)
3531 {
3532 Block mobileNavigationLanguagesAction = new Block
3533 {
3534 Id = "MobileNavigationLanguagesAction",
3535 SortId = 50,
3536 Template = RenderMobileNavigationLanguagesAction()
3537 };
3538 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationLanguagesAction);
3539 }
3540 }
3541
3542
3543 @helper MobileNavigation()
3544 {
3545 List<Block> subBlocks = this.mobileNavigationBlocksPage.GetBlockListById("MobileNavigation").OrderBy(item => item.SortId).ToList();
3546
3547 bool onlyPreview = Model.Area.Item.GetItem("Ecommerce").GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0;
3548 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
3549 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed");
3550 string mobileTopDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design") != null ? Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design").SelectedValue : "nav-left";
3551 string position = mobileTopDesign == "nav-left" || mobileTopDesign == "nav-search-left" ? "left" : "right";
3552
3553 <!-- Trigger for mobile navigation -->
3554 <input type="checkbox" id="MobileNavTrigger" class="mobile-nav-trigger mobile-nav-trigger--@position" autocomplete="off" />
3555
3556 <!-- Mobile navigation -->
3557 <nav class="mobile-navigation mobile-navigation--@position dw-mod">
3558 <div class="mobile-navigation__wrapper" id="mobileNavigationWrapper">
3559 @RenderBlockList(subBlocks)
3560 </div>
3561 </nav>
3562
3563 <label class="mobile-nav-trigger-off" for="MobileNavTrigger"></label>
3564
3565 if (!onlyPreview)
3566 {
3567 <div class="u-visually-hidden js-handlebars-root js-mini-cart" id="miniCart" data-template="MiniCartContent" data-cart-id="@cartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div>
3568 }
3569 }
3570
3571 @helper RenderMobileNavigationSignIn()
3572 {
3573 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator");
3574 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile");
3575 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
3576 string myProfilePageLink = linkStart + myProfilePageId;
3577 string userName = Model.CurrentUser.FirstName ?? "";
3578 userName += " " + (Model.CurrentUser.LastName ?? "");
3579 userName += userName == "" && Model.CurrentUser.UserName != null ? Model.CurrentUser.UserName : "";
3580
3581 <ul class="menu menu-mobile">
3582 <li class="menu-mobile__item">
3583 <a href="@myProfilePageLink" class="menu-mobile__link dw-mod"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @userName</a>
3584 </li>
3585 </ul>
3586 }
3587
3588 @helper RenderMobileNavigationMenu()
3589 {
3590 bool isSlidesDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetList("Design").SelectedValue == "Slides";
3591 string menuTemplate = isSlidesDesign ? "BaseMenuForMobileSlides.xslt" : "BaseMenuForMobileExpandable.xslt";
3592 string levels = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetString("Levels")) ? Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetString("Levels") : "3";
3593 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar");
3594 int startLevel = renderPagesInToolBar ? 1 : 0;
3595
3596 @RenderNavigation(new
3597 {
3598 id = "mobilenavigation",
3599 cssclass = "menu menu-mobile dwnavigation",
3600 startLevel = @startLevel,
3601 ecomStartLevel = @startLevel + 1,
3602 endlevel = @levels,
3603 expandmode = "all",
3604 template = @menuTemplate
3605 })
3606
3607 if (isSlidesDesign)
3608 {
3609 <script>
3610 function goToLevel(level) {
3611 document.getElementById('mobileNavigationWrapper').style.left = -(level * 100) + "%";
3612 }
3613
3614 document.addEventListener('DOMContentLoaded', function () {
3615 goToLevel(document.getElementById('mobileNavigationWrapper').querySelectorAll('input[type=radio]:checked').length);
3616 });
3617 </script>
3618 }
3619
3620 if (renderPagesInToolBar)
3621 {
3622 @RenderNavigation(new
3623 {
3624 id = "topToolsMobileNavigation",
3625 cssclass = "menu menu-mobile dwnavigation",
3626 template = "ToolsMenuForMobile.xslt"
3627 })
3628 }
3629 }
3630
3631 @helper RenderMobileNavigationActions()
3632 {
3633 List<Block> subBlocks = this.mobileNavigationBlocksPage.GetBlockListById("MobileNavigationActions").OrderBy(item => item.SortId).ToList(); ;
3634
3635 <ul class="menu menu-mobile">
3636 @RenderBlockList(subBlocks)
3637 </ul>
3638 }
3639
3640 @helper RenderMobileNavigationSignInAction()
3641 {
3642 int pageIdSignIn = new PageService().GetPageByNavigationTag(Pageview.AreaID, "SignInPagePartnerPortal").ID;
3643
3644 <li class="menu-mobile__item">
3645 <a href="/Default.Aspx?ID=@pageIdSignIn" for="SignInModalTrigger" class="menu-mobile__link dw-mod menu-mobile__link--highlighted"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @Translate("Sign in")</a>
3646 </li>
3647 }
3648
3649 @helper RenderMobileNavigationCreateAccountAction()
3650 {
3651 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
3652
3653 <li class="menu-mobile__item">
3654 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Default.aspx?ID=@createAccountPageId"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @Translate("Create account")</a>
3655 </li>
3656 }
3657
3658 @helper RenderMobileNavigationProfileAction()
3659 {
3660 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator");
3661 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
3662 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile");
3663 string myProfilePageLink = linkStart + myProfilePageId;
3664
3665 <li class="menu-mobile__item">
3666 <a href="@myProfilePageLink" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @Translate("My Profile")</a>
3667 </li>
3668 }
3669
3670 @helper RenderMobileNavigationOrdersAction()
3671 {
3672 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator");
3673 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
3674 int myOrdersPageId = GetPageIdByNavigationTag("CustomerOrders");
3675 string myOrdersPageLink = linkStart + myOrdersPageId;
3676 string ordersIcon = "fas fa-list";
3677
3678 <li class="menu-mobile__item">
3679 <a href="@myOrdersPageLink" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@ordersIcon menu-mobile__link-icon"></i> @Translate("My Orders")</a>
3680 </li>
3681 }
3682
3683 @helper RenderMobileNavigationFavoritesAction()
3684 {
3685 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator");
3686 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
3687 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites");
3688 string myFavoritesPageLink = linkStart + myFavoritesPageId;
3689 string favoritesIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon") != null ? "fas fa-" + Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon").SelectedValue : "fa fa-star";
3690
3691
3692 <li class="menu-mobile__item">
3693 <a href="@myFavoritesPageLink" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@favoritesIcon menu-mobile__link-icon"></i> @Translate("My Favorites")</a>
3694 </li>
3695 }
3696
3697 @helper RenderMobileNavigationSavedCardsAction()
3698 {
3699 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator");
3700 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
3701 int mySavedCardsPageId = GetPageIdByNavigationTag("SavedCards");
3702 string mySavedCardsPageLink = linkStart + mySavedCardsPageId;
3703 string savedCardsIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SavedCards") != null ? "fas fa-" + Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SavedCards").SelectedValue : "fas fa-credit-card";
3704
3705 <li class="menu-mobile__item">
3706 <a href="@mySavedCardsPageLink" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@savedCardsIcon menu-mobile__link-icon"></i> @Translate("My Saved Cards")</a>
3707 </li>
3708 }
3709
3710 @helper RenderMobileNavigationPartnerPortalAction()
3711 {
3712 int pageId = new PageService().GetPageByNavigationTag(Pageview.AreaID, "SignInPagePartnerPortal").ID;
3713
3714 <li class="menu-mobile__item">
3715 <a href="/Default.Aspx?ID=@pageId" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="far fa-globe menu-mobile__link-icon"></i> @Translate("Partner Portal")</a>
3716 </li>
3717 }
3718
3719 @helper RenderMobileNavigationSignOutAction()
3720 {
3721 int pageId = new PageService().GetFirstPageForArea(Pageview.AreaID).ID;
3722 string signOutIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignOutIcon") != null ? "fas fa-" + Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignOutIcon").SelectedValue : "far fa-sign-out-alt";
3723
3724 <li class="menu-mobile__item">
3725 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId"><i class="@signOutIcon menu-mobile__link-icon"></i> @Translate("Sign out")</a>
3726 </li>
3727 }
3728
3729 @helper RenderMobileNavigationLanguagesAction()
3730 {
3731 bool isSlidesDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetList("Design").SelectedValue == "Slides";
3732
3733 string selectedLanguage = "";
3734 foreach (var lang in Model.Languages)
3735 {
3736 if (lang.IsCurrent)
3737 {
3738 selectedLanguage = lang.Name;
3739 }
3740 }
3741
3742 <li class="menu-mobile__item dw-mod">
3743 @if (isSlidesDesign)
3744 {
3745 <input id="MobileMenuCheck_Language" type="radio" class="expand-trigger" name="mobile-menu-level-1" onclick="goToLevel(1);">
3746 }
3747 else
3748 {
3749 <input id="MobileMenuCheck_Language" type="checkbox" class="expand-trigger">
3750 }
3751 <div class="menu-mobile__link__wrap">
3752 <label for="MobileMenuCheck_Language" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("LanguageIcon").SelectedValue menu-mobile__link-icon"></i> @selectedLanguage</label>
3753 <label for="MobileMenuCheck_Language" class="menu-mobile__trigger"></label>
3754 </div>
3755 <ul class="menu-mobile menu-mobile__submenu expand-menu">
3756 @if (isSlidesDesign)
3757 {
3758 <li class="menu-mobile__item dw-mod">
3759 <div class="menu-mobile__link__wrap">
3760 <input id="MobileMenuCheck_Language_back" type="radio" class="expand-trigger" name="mobile-menu-level-1" onclick="goToLevel(0);" />
3761 <label for="MobileMenuCheck_Language_back" class="menu-mobile__trigger menu-mobile__trigger--back"></label>
3762 <label for="MobileMenuCheck_Language_back" class="menu-mobile__link dw-mod ">@Translate("Back")</label>
3763 </div>
3764 </li>
3765 }
3766 @foreach (var lang in Model.Languages)
3767 {
3768 <li class="menu-mobile__item dw-mod">
3769 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod menu-mobile__link--level-1" href="/Default.aspx?ID=@lang.Page.ID">@lang.Name</a>
3770 </li>
3771 }
3772 </ul>
3773 </li>
3774 }@*</text>
3775 }
3776 else
3777 {
3778 <text>*@@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
3779
3780 @using System
3781 @using System.Web
3782 @using System.Collections.Generic
3783 @using Dynamicweb.Rapido.Blocks.Extensibility
3784 @using Dynamicweb.Rapido.Blocks
3785
3786 @functions {
3787 BlocksPage headerBlocksPage = BlocksPage.GetBlockPage("Master");
3788 }
3789
3790 @{
3791 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
3792 {
3793 Block masterTools = new Block()
3794 {
3795 Id = "MasterDesktopTools",
3796 SortId = 10,
3797 Template = RenderDesktopTools(),
3798 SkipRenderBlocksList = true,
3799 BlocksList = new List<Block>
3800 {
3801 new Block {
3802 Id = "MasterDesktopToolsText",
3803 SortId = 10,
3804 Template = RenderDesktopToolsText(),
3805 Design = new Design
3806 {
3807 Size = "auto",
3808 HidePadding = true,
3809 RenderType = RenderType.Column
3810 }
3811 },
3812 new Block {
3813 Id = "MasterDesktopToolsNavigation",
3814 SortId = 20,
3815 Template = RenderDesktopToolsNavigation(),
3816 Design = new Design
3817 {
3818 Size = "auto-width",
3819 HidePadding = true,
3820 RenderType = RenderType.Column
3821 }
3822 }
3823 }
3824 };
3825 headerBlocksPage.Add("MasterHeader", masterTools);
3826 }
3827
3828 Block masterDesktopExtra = new Block()
3829 {
3830 Id = "MasterDesktopExtra",
3831 SortId = 10,
3832 Template = RenderDesktopExtra(),
3833 SkipRenderBlocksList = true
3834 };
3835 headerBlocksPage.Add("MasterHeader", masterDesktopExtra);
3836
3837 Block masterDesktopNavigation = new Block()
3838 {
3839 Id = "MasterDesktopNavigation",
3840 SortId = 20,
3841 Template = RenderDesktopNavigation(),
3842 SkipRenderBlocksList = true
3843 };
3844 headerBlocksPage.Add("MasterHeader", masterDesktopNavigation);
3845 }
3846
3847 @* Include the Blocks for the page *@
3848 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
3849
3850 @using System
3851 @using System.Web
3852 @using Dynamicweb.Rapido.Blocks.Extensibility
3853 @using Dynamicweb.Rapido.Blocks
3854
3855 @{
3856 Block masterDesktopLogo = new Block
3857 {
3858 Id = "MasterDesktopLogo",
3859 SortId = 10,
3860 Template = RenderDesktopLogo(),
3861 Design = new Design
3862 {
3863 Size = "auto-width",
3864 HidePadding = true,
3865 RenderType = RenderType.Column,
3866 CssClass = "grid--align-self-center"
3867 }
3868 };
3869
3870 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopLogo);
3871 }
3872
3873
3874 @helper RenderDesktopLogo()
3875 {
3876 string firstPageId = Model.Area.FirstActivePage.ID.ToString();
3877 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
3878 string alignClass = topLayout == "two-lines-centered" || topLayout == "two-lines" ? "grid--align-self-center" : "";
3879 string logo = Model.Area.Item.GetItem("Layout").GetFile("LogoImage") != null ? Model.Area.Item.GetItem("Layout").GetFile("LogoImage").PathUrlEncoded : "/Files/Images/logo-dynamicweb.png";
3880 if (Path.GetExtension(logo).ToLower() != ".svg")
3881 {
3882 int logoHeight = Model.Area.Item.GetItem("Layout").GetInt32("LogoHeight");
3883 logoHeight = logoHeight > 0 && Pageview.Device.ToString() != "Mobile" ? logoHeight : 40;
3884 logo = "/Admin/Public/GetImage.ashx?height=" + Converter.ToString(logoHeight) + "&crop=5&Compression=75&image=" + logo;
3885 }
3886 else
3887 {
3888 logo = HttpUtility.UrlDecode(logo);
3889 }
3890
3891 <div class="logo @alignClass dw-mod">
3892 <a href="/Default.aspx?ID=@firstPageId" class="logo__img dw-mod u-block">
3893 <img class="grid__cell-img logo__img dw-mod" src="@logo" alt="@Translate("Logo")" />
3894 </a>
3895 </div>
3896 }
3897 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
3898
3899 @using System
3900 @using System.Web
3901 @using Dynamicweb.Rapido.Blocks.Extensibility
3902 @using Dynamicweb.Rapido.Blocks
3903
3904 @functions {
3905 bool isMegaMenu;
3906 }
3907
3908 @{
3909 isMegaMenu = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("NavigationMegaMenu") != null ? Converter.ToBoolean(Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("NavigationMegaMenu").SelectedValue) : false;
3910 Block masterDesktopMenu = new Block
3911 {
3912 Id = "MasterDesktopMenu",
3913 SortId = 10,
3914 Template = RenderDesktopMenu(),
3915 Design = new Design
3916 {
3917 Size = "auto",
3918 HidePadding = true,
3919 RenderType = RenderType.Column
3920 }
3921 };
3922
3923 if (isMegaMenu)
3924 {
3925 masterDesktopMenu.Design.CssClass = "u-reset-position";
3926 }
3927
3928 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopMenu);
3929 }
3930
3931 @helper RenderDesktopMenu()
3932 {
3933 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
3934 string menuAlignment = topLayout == "minimal-right" ? "grid--align-self-end" : "";
3935 string megamenuPromotionImage = Model.Area.Item.GetItem("Layout").GetItem("Header").GetFile("MegamenuPromotionImage") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetFile("MegamenuPromotionImage").PathUrlEncoded : "";
3936 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar");
3937 bool showOnlyHeaders = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowOnlyHeaders");
3938 int startLevel = renderPagesInToolBar ? 1 : 0;
3939
3940 string promotionLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("MegamenuPromotionLink");
3941
3942 <div class="grid__cell u-flex @(isMegaMenu ? "u-reset-position" : "") @menuAlignment">
3943 @if (!isMegaMenu)
3944 {
3945 @RenderNavigation(new
3946 {
3947 id = "topnavigation",
3948 cssclass = "menu dw-mod dwnavigation u-full-max-width u-flex grid--wrap",
3949 startLevel = startLevel,
3950 ecomStartLevel = startLevel + 1,
3951 endlevel = 5,
3952 expandmode = "all",
3953 template = "BaseMenuWithDropdown.xslt"
3954 });
3955 }
3956 else
3957 {
3958 @RenderNavigation(new
3959 {
3960 id = "topnavigation",
3961 cssclass = "menu dw-mod dwnavigation u-full-max-width u-flex grid--wrap",
3962 startLevel = startLevel,
3963 ecomStartLevel = startLevel + 1,
3964 endlevel = 5,
3965 promotionImage = megamenuPromotionImage,
3966 promotionLink = promotionLink,
3967 expandmode = "all",
3968 showOnlyHeaders = showOnlyHeaders.ToString().ToLower(),
3969 template = "BaseMegaMenu.xslt"
3970 });
3971 }
3972 </div>
3973 }
3974 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
3975
3976 @using System
3977 @using System.Web
3978 @using Dynamicweb.Rapido.Blocks.Extensibility
3979 @using Dynamicweb.Rapido.Blocks
3980
3981 @{
3982 Block masterDesktopActionsMenu = new Block
3983 {
3984 Id = "MasterDesktopActionsMenu",
3985 SortId = 10,
3986 Template = RenderDesktopActionsMenu(),
3987 Design = new Design
3988 {
3989 CssClass = "u-flex"
3990 },
3991 SkipRenderBlocksList = true
3992
3993 };
3994 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopActionsMenu);
3995
3996 if (!string.IsNullOrWhiteSpace(Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonLink")))
3997 {
3998 Block masterDesktopActionsHeaderButton = new Block
3999 {
4000 Id = "MasterDesktopActionsHeaderButton",
4001 SortId = 60,
4002 Template = RenderHeaderButton()
4003 };
4004 masterDesktopActionsMenu.Add(masterDesktopActionsHeaderButton);
4005 }
4006 }
4007
4008 @helper RenderDesktopActionsMenu()
4009 {
4010 List<Block> subBlocks = this.headerBlocksPage.GetBlockListById("MasterDesktopActionsMenu").OrderBy(item => item.SortId).ToList();
4011
4012 <ul class="menu u-flex dw-mod">
4013 @RenderBlockList(subBlocks)
4014 </ul>
4015 }
4016
4017 @helper RenderHeaderButton()
4018 {
4019 string headerButtonText = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonText");
4020 string headerButtonLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonLink");
4021 string headerButtonType = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType") != null ? "btn--" + Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType").SelectedName.ToLower() : "";
4022
4023 <li class="menu__item menu__item--horizontal menu--clean dw-mod">
4024 <a class="btn @headerButtonType dw-mod u-no-margin u-margin-top u-margin-left" href="@headerButtonLink">@headerButtonText</a>
4025 </li>
4026 }
4027 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4028
4029 @using System
4030 @using System.Web
4031 @using Dynamicweb.Core;
4032 @using System.Text.RegularExpressions
4033 @using Dynamicweb.Rapido.Blocks.Extensibility
4034 @using Dynamicweb.Rapido.Blocks
4035
4036 @{
4037 Block masterDesktopActionsMenuLanguageSelector = new Block
4038 {
4039 Id = "MasterDesktopActionsMenuLanguageSelector",
4040 SortId = 40,
4041 Template = RenderLanguageSelector()
4042 };
4043
4044 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuLanguageSelector);
4045 }
4046
4047 @helper RenderLanguageSelector()
4048 {
4049 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4050 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean";
4051 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
4052 string languageViewType = !string.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("LanguageSelector").SelectedValue) ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("LanguageSelector").SelectedValue.ToLower() : "";
4053
4054 if (Model.Languages.Count > 1)
4055 {
4056 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon is-dropdown is-dropdown--no-icon dw-mod">
4057 <div class="@menuLinkClass dw-mod">
4058 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("LanguageIcon").SelectedValue fa-1_5x"></i>
4059 </div>
4060 <div class="menu menu--dropdown menu--dropdown-right languages-dropdown dw-mod grid__cell">
4061 @foreach (var lang in Model.Languages)
4062 {
4063
4064 string langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " u-margin-right\"></span>" + lang.Name;
4065 string cultureName = Regex.Replace(Dynamicweb.Services.Areas.GetArea(lang.ID).CultureInfo.NativeName, @" ?\(.*?\)", string.Empty);
4066 cultureName = char.ToUpper(cultureName[0]) + cultureName.Substring(1);
4067
4068 if (languageViewType == "flag-culture")
4069 {
4070 langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " \"></span> " + cultureName;
4071 }
4072
4073 if (languageViewType == "flag")
4074 {
4075 langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " \"></span>";
4076 }
4077
4078 if (languageViewType == "name")
4079 {
4080 langInfo = lang.Name;
4081 }
4082
4083 if (languageViewType == "culture")
4084 {
4085 langInfo = cultureName;
4086 }
4087
4088 <a href="/Default.aspx?AreaID=@Dynamicweb.Services.Pages.GetPage(lang.Page.ID).Area.ID" class="menu-dropdown__item menu-dropdown__item--link dw-mod">@langInfo</a>
4089 }
4090 </div>
4091 </li>
4092 }
4093 }
4094 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4095
4096 @using System
4097 @using System.Web
4098 @using Dynamicweb.Content
4099 @using Dynamicweb.Rapido.Blocks.Extensibility
4100 @using Dynamicweb.Rapido.Blocks
4101
4102 @{
4103 Block masterDesktopActionsMenuSignIn = new Block
4104 {
4105 Id = "MasterDesktopActionsMenuSignIn",
4106 SortId = 50,
4107 Template = RenderSignIn()
4108 };
4109
4110 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuSignIn);
4111 }
4112
4113 @helper RenderSignIn()
4114 {
4115 bool navigationItemsHideSignIn = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSignIn");
4116 string userInitials = "";
4117 int pageIdSignin = GetPageIdByNavigationTag("SignInPagePartnerPortal");
4118 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
4119 int myDashboardPageId = GetPageIdByNavigationTag("CustomerDashboard");
4120 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile");
4121 int myOrdersPageId = GetPageIdByNavigationTag("CustomerOrders");
4122 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites");
4123 int mySavedCardsPageId = GetPageIdByNavigationTag("SavedCards");
4124 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator");
4125 bool hideCreateAccountLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideCreateAccount");
4126 bool hideMyProfileLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideProfile");
4127 bool hideMyOrdersLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideOrders");
4128 bool hideMySavedCardsLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideSavedCards");
4129 bool hideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideFavorites");
4130 bool hideForgotPasswordLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideForgotPasswordLink");
4131
4132 string linkStart = "/Default.aspx?ID=";
4133 if (Model.CurrentUser.ID <= 0)
4134 {
4135 linkStart += signInProfilePageId + "&RedirectPageId=";
4136 }
4137
4138 string forgotPasswordPageLink = "/Default.aspx?ID=" + signInProfilePageId + "&LoginAction=Recovery";
4139 string myProfilePageLink = linkStart + myProfilePageId;
4140 string myOrdersPageLink = linkStart + myOrdersPageId;
4141 string myFavoritesPageLink = linkStart + myFavoritesPageId;
4142 string mySavedCardsPageLink = linkStart + mySavedCardsPageId;
4143
4144 string profileIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue : "fa fa-user";
4145 string favoritesIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon") != null ? "fas fa-" + Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon").SelectedValue : "fa fa-star";
4146
4147 if (Model.CurrentUser.ID != 0)
4148 {
4149 if (!String.IsNullOrEmpty(Model.CurrentUser.Name))
4150 {
4151 string[] names = Model.CurrentUser.Name.Trim().Split(' ');
4152 userInitials += Model.CurrentUser.Name.Substring(0, 1);
4153
4154 if (names.Length > 1)
4155 {
4156 userInitials += names[names.Length - 1].Substring(0, 1);
4157 }
4158 }
4159 else
4160 {
4161 userInitials += Model.CurrentUser.FirstName != null && Model.CurrentUser.FirstName != "" ? Model.CurrentUser.FirstName.Substring(0, 1) : "";
4162 userInitials += Model.CurrentUser.LastName != null && Model.CurrentUser.LastName != "" ? Model.CurrentUser.LastName.Substring(0, 1) : "";
4163 userInitials += userInitials.Length == 1 && Model.CurrentUser.FirstName != null && Model.CurrentUser.FirstName.Length > 1 ? Model.CurrentUser.FirstName.Substring(1, 2) : "";
4164 userInitials += userInitials == "" && Model.CurrentUser.Email != null && Model.CurrentUser.Email.Length > 1 ? Model.CurrentUser.Email.Substring(0, 2) : "";
4165 userInitials += userInitials == "" ? Model.CurrentUser.UserName.Substring(0, 2) : "";
4166 }
4167 }
4168
4169 if (!navigationItemsHideSignIn)
4170 {
4171 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4172 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu__item--clean";
4173 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
4174
4175 <li class="menu__item menu__item--horizontal menu__item menu__item--icon @liClasses is-dropdown is-dropdown--no-icon dw-mod">
4176 <div class="@menuLinkClass dw-mod">
4177 @if (Model.CurrentUser.ID <= 0)
4178 {
4179 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue fa-1_5x"></i>
4180 }
4181 else
4182 {
4183 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue active fa-1_5x"></i>
4184 }
4185 </div>
4186 <div class="menu menu--dropdown menu--dropdown-right menu--sign-in grid__cell dw-mod">
4187 <ul class="list list--clean dw-mod">
4188 @if (Model.CurrentUser.ID <= 0)
4189 {
4190 <li>
4191 <a href="/Default.Aspx?ID=@pageIdSignin" for="SignInModalTrigger" class="btn btn--primary btn--full u-no-margin sign-in-modal-trigger-button dw-mod" onclick="setTimeout(function () { document.getElementById('LoginUsername').focus() }, 10)">@Translate("Sign in")</a>
4192 </li>
4193
4194 if (!hideCreateAccountLink)
4195 {
4196 @RenderListItem("/default.aspx?ID=" + createAccountPageId, Translate("Create account"));
4197 }
4198 if (!hideForgotPasswordLink)
4199 {
4200 @RenderListItem(forgotPasswordPageLink, Translate("Forgot your password?"))
4201 }
4202 if (!hideMyProfileLink || !hideMyOrdersLink || !hideMyFavoritesLink || !hideMySavedCardsLink)
4203 {
4204 @RenderSeparator()
4205 }
4206 }
4207 @if (!hideMyProfileLink)
4208 {
4209 @RenderListItem(myProfilePageLink, Translate("My Profile"), profileIcon)
4210 }
4211 @if (!hideMyOrdersLink)
4212 {
4213 @RenderListItem(myOrdersPageLink, Translate("My Orders"), "fas fa-list")
4214 }
4215 @if (!hideMyFavoritesLink)
4216 {
4217 @RenderListItem(myFavoritesPageLink, Translate("My Favorites"), favoritesIcon)
4218 }
4219 @if (!hideMySavedCardsLink)
4220 {
4221 @RenderListItem(mySavedCardsPageLink, Translate("My Saved cards"), "fas fa-credit-card")
4222 }
4223 @if (Model.CurrentUser.ID > 0)
4224 {
4225 if (!hideMyProfileLink || !hideMyOrdersLink || !hideMyFavoritesLink || !hideMySavedCardsLink)
4226 {
4227 @RenderSeparator()
4228 }
4229
4230 @RenderListItem("Default.Aspx?ID=" + pageIdSignin, "Partner Portal")
4231 @RenderListItem("/Admin/Public/ExtranetLogoff.aspx?ID=" + pageIdSignin, Translate("Sign out"))
4232 }
4233 </ul>
4234 </div>
4235 </li>
4236 }
4237 }
4238
4239 @helper RenderListItem(string link, string text, string icon = null) {
4240 <li>
4241 <a href="@link" class="list__link dw-mod">
4242 @if (!string.IsNullOrEmpty(icon))
4243 {
4244 <i class="@icon u-margin-right"></i>
4245 }
4246 @text
4247 </a>
4248 </li>
4249 }
4250
4251 @helper RenderSeparator()
4252 {
4253 <li class="list__seperator dw-mod"></li>
4254 }
4255 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4256
4257 @using System
4258 @using System.Web
4259 @using Dynamicweb.Rapido.Blocks.Extensibility
4260 @using Dynamicweb.Rapido.Blocks
4261
4262 @{
4263 bool hideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideFavorites");
4264
4265 Block masterDesktopActionsMenuFavorites = new Block
4266 {
4267 Id = "MasterDesktopActionsMenuFavorites",
4268 SortId = 30,
4269 Template = RenderFavorites()
4270 };
4271
4272 if (!hideMyFavoritesLink && Model.CurrentUser.ID > 0)
4273 {
4274 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuFavorites);
4275 }
4276 }
4277
4278 @helper RenderFavorites()
4279 {
4280 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites");
4281 string myFavoritesPageLink = "/Default.aspx?ID=" + myFavoritesPageId;
4282
4283 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4284 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean";
4285 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
4286
4287 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon dw-mod">
4288 <a href="@myFavoritesPageLink" class="@menuLinkClass dw-mod">
4289 <i class="fas fa-@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon").SelectedValue fa-1_5x"></i>
4290 </a>
4291 </li>
4292 }
4293 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4294
4295 @using System
4296 @using System.Web
4297 @using Dynamicweb.Rapido.Blocks.Extensibility
4298 @using Dynamicweb.Rapido.Blocks
4299
4300 @{
4301 bool onlyPreview = Model.Area.Item.GetItem("Ecommerce").GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0;
4302 bool hideCart = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideCart");
4303 string miniCartLayout = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("Layout") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("Layout").SelectedValue : "dropdown";
4304
4305 if (!onlyPreview && !hideCart)
4306 {
4307 Block masterDesktopActionsMenuMiniCart = new Block
4308 {
4309 Id = "MasterDesktopActionsMenuMiniCart",
4310 SortId = 50,
4311 Template = RenderMiniCart(miniCartLayout == "dropdown"),
4312 SkipRenderBlocksList = true,
4313 BlocksList = new List<Block>()
4314 };
4315
4316 Block miniCartCounterScriptTemplate = new Block
4317 {
4318 Id = "MiniCartCounterScriptTemplate",
4319 Template = RenderMiniCartCounterContent()
4320 };
4321
4322 //dropdown layout is default
4323 RazorEngine.Templating.TemplateWriter layoutTemplate = RenderMiniCartDropdownLayout();
4324 RazorEngine.Templating.TemplateWriter miniCartTriggerTemplate = RenderMiniCartTriggerLink();
4325
4326 switch (miniCartLayout)
4327 {
4328 case "panel":
4329 layoutTemplate = RenderMiniCartPanelLayout();
4330 miniCartTriggerTemplate = RenderMiniCartTriggerLabel();
4331 break;
4332 case "modal":
4333 layoutTemplate = RenderMiniCartModalLayout();
4334 miniCartTriggerTemplate = RenderMiniCartTriggerLabel();
4335 break;
4336 }
4337
4338 masterDesktopActionsMenuMiniCart.BlocksList.Add(new Block
4339 {
4340 Id = "MiniCartTrigger",
4341 Template = miniCartTriggerTemplate
4342 });
4343
4344 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
4345 {
4346 masterDesktopActionsMenuMiniCart.BlocksList.Add(new Block
4347 {
4348 Id = "MiniCartLayout",
4349 Template = layoutTemplate
4350 });
4351 }
4352
4353 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuMiniCart);
4354 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", miniCartCounterScriptTemplate);
4355 }
4356 }
4357
4358 @helper RenderMiniCart(bool hasMouseEnterEvent)
4359 {
4360 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterDesktopActionsMenuMiniCart").OrderBy(item => item.SortId).ToList();
4361 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4362 string liClasses = topLayout != "normal" ? "menu__item--top-level" : "menu--clean";
4363 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
4364 string mouseEvent = "";
4365 string id = "MiniCart";
4366 if (hasMouseEnterEvent) {
4367 mouseEvent = "onmouseenter=\"Cart.UpdateMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '/Default.aspx?ID=" + miniCartFeedPageId + "&feedType=MiniCart')\"";
4368 id = "miniCartTrigger";
4369 }
4370 <li class="menu__item menu__item--horizontal menu__item--icon @liClasses dw-mod" id="@id" @mouseEvent>
4371 @RenderBlockList(subBlocks)
4372 </li>
4373 }
4374
4375 @helper RenderMiniCartTriggerLabel()
4376 {
4377 int cartPageId = GetPageIdByNavigationTag("CartPage");
4378 string cartIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue : "fa fa-cart";
4379 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4380 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
4381 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
4382
4383 <div class="@menuLinkClass dw-mod js-mini-cart-button" onclick="Cart.UpdateMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart')">
4384 <div class="u-inline u-position-relative">
4385 <i class="@cartIcon fa-1_5x"></i>
4386 @RenderMiniCartCounter()
4387 </div>
4388 </div>
4389 }
4390
4391 @helper RenderMiniCartTriggerLink()
4392 {
4393 int cartPageId = GetPageIdByNavigationTag("CartPage");
4394 string cartIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue : "fa fa-cart";
4395 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4396 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
4397
4398 <a href="/Default.aspx?ID=@cartPageId&Purge=True" class="@menuLinkClass menu__item--icon dw-mod js-mini-cart-button">
4399 <div class="u-inline u-position-relative">
4400 <i class="@cartIcon fa-1_5x"></i>
4401 @RenderMiniCartCounter()
4402 </div>
4403 </a>
4404 }
4405
4406 @helper RenderMiniCartCounter()
4407 {
4408 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
4409 string cartProductsCount = Model.Cart.TotalProductsCount.ToString();
4410 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right";
4411 bool showPrice = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetBoolean("ShowPrice");
4412 string cartProductsTotalPrice = showPrice && Model.Cart.TotalPrice != null ? Model.Cart.TotalPrice.Price.Formatted : "";
4413 cartProductsTotalPrice = counterPosition == "right" ? cartProductsTotalPrice : "";
4414
4415 if (showPrice && counterPosition == "right")
4416 {
4417 cartProductsCount = Translate("Cart") + "(" + cartProductsCount + ")";
4418 }
4419
4420 <div class="mini-cart__counter dw-mod">
4421 <div class="js-handlebars-root js-mini-cart-counter" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-init-onload="false" data-preloader="false">
4422 <div class="js-mini-cart-counter-content" data-count="@Model.Cart.TotalProductsCount.ToString()">
4423 @cartProductsCount
4424 @cartProductsTotalPrice
4425 </div>
4426 </div>
4427 </div>
4428 }
4429
4430 @helper RenderMiniCartCounterContent()
4431 {
4432 bool showPrice = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetBoolean("ShowPrice");
4433 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right";
4434 bool showPriceInMiniCartCounter = Pageview.Device.ToString() != "Mobile" && counterPosition == "right" && showPrice;
4435
4436 <script id="MiniCartCounterContent" type="text/x-template">
4437 {{#.}}
4438 <div class="js-mini-cart-counter-content dw-mod" data-count="{{numberofproducts}}">
4439 @if (showPriceInMiniCartCounter)
4440 {
4441 @Translate("Cart")<text>({{numberofproducts}}) {{totalprice}}</text>
4442 }
4443 else
4444 {
4445 <text>{{numberofproducts}}</text>
4446 }
4447 </div>
4448 {{/.}}
4449 </script>
4450 }
4451
4452 @helper RenderMiniCartDropdownLayout()
4453 {
4454 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
4455
4456 <div class="mini-cart mini-cart-dropdown js-mini-cart grid__cell dw-mod" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="dropdown">
4457 <div class="mini-cart-dropdown__inner dw-mod">
4458 <h3 class="u-ta-center dw-mod">@Translate("Shopping cart")</h3>
4459 <div class="mini-cart-dropdown__body u-flex dw-mod">
4460 <div class="js-handlebars-root u-flex grid--direction-column u-full-width dw-mod" id="miniCartContent" data-template="MiniCartContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div>
4461 </div>
4462 </div>
4463 </div>
4464 }
4465
4466 @helper RenderMiniCartPanelLayout()
4467 {
4468 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
4469
4470 <div class="mini-cart grid__cell dw-mod">
4471 <input type="checkbox" id="miniCartTrigger" class="panel-trigger" />
4472 <div class="panel panel--right panel--with-close-btn dw-mod js-mini-cart" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="block">
4473 <label for="miniCartTrigger" class="panel__close-btn" title="@Translate("Close panel")"><i class="fas fa-times"></i></label>
4474 <div class="panel__content u-full-width dw-mod">
4475 <h3 class="panel__header dw-mod u-margin-bottom u-ta-center">@Translate("Shopping cart")</h3>
4476 <div class="panel__content-body panel__content-body--cart dw-mod">
4477 <div class="js-handlebars-root u-flex grid--direction-column u-full-height dw-mod" id="miniCartContent" data-template="MiniCartContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div>
4478 </div>
4479 </div>
4480 </div>
4481 </div>
4482 }
4483
4484 @helper RenderMiniCartModalLayout()
4485 {
4486 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
4487 <div class="mini-cart grid__cell dw-mod">
4488 <input type="checkbox" id="miniCartTrigger" class="modal-trigger" autocomplete="off" />
4489 <div class="modal-container dw-mod js-mini-cart" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="block">
4490 <label for="miniCartTrigger" class="modal-overlay"></label>
4491 <div class="modal modal--top-right dw-mod">
4492 <div class="modal__body u-flex grid--direction-column dw-mod">
4493 <h3 class="dw-mod u-ta-center">@Translate("Shopping cart")</h3>
4494 <div class="js-handlebars-root u-flex grid--direction-column dw-mod" id="miniCartContent" data-template="MiniCartContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div>
4495 </div>
4496 <label class="modal__close-btn modal__close-btn--clean dw-mod" for="miniCartTrigger" title="@Translate("Close modal")"></label>
4497 </div>
4498 </div>
4499 </div>
4500 }
4501 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4502
4503 @using System
4504 @using System.Web
4505 @using Dynamicweb.Rapido.Blocks.Extensibility
4506 @using Dynamicweb.Rapido.Blocks
4507
4508 @{
4509 bool showDownloadCartLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowDownloadCart");
4510
4511 Block masterDesktopActionsMenuDownloadCart = new Block
4512 {
4513 Id = "MasterDesktopActionsMenuDownloadCart",
4514 SortId = 35,
4515 Template = RenderDownloadCart()
4516 };
4517
4518 if (showDownloadCartLink && Model.CurrentUser.ID > 0)
4519 {
4520 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuDownloadCart);
4521 }
4522 }
4523
4524 @helper RenderDownloadCart()
4525 {
4526 int downloadCartPageId = GetPageIdByNavigationTag("DownloadCart");
4527 string downloadCartPageLink = "/Default.aspx?ID=" + downloadCartPageId;
4528
4529 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4530 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean";
4531 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
4532
4533 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon dw-mod">
4534 <a href="@downloadCartPageLink" class="@menuLinkClass dw-mod">
4535 <i class="fas fa-cart-arrow-down fa-1_5x"></i>
4536 </a>
4537 </li>
4538 }
4539 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4540
4541 @using System
4542 @using System.Web
4543 @using Dynamicweb.Rapido.Blocks.Extensibility
4544 @using Dynamicweb.Rapido.Blocks
4545
4546 @functions {
4547 public class SearchConfiguration
4548 {
4549 public string searchFeedId { get; set; }
4550 public string searchSecondFeedId { get; set; }
4551 public int groupsFeedId { get; set; }
4552 public string resultPageLink { get; set; }
4553 public string searchPlaceholder { get; set; }
4554 public string searchType { get; set; }
4555 public string searchTemplate { get; set; }
4556 public string searchContentTemplate { get; set; }
4557 public string searchValue { get; set; }
4558 public bool showGroups { get; set; }
4559
4560 public SearchConfiguration()
4561 {
4562 searchFeedId = "";
4563 searchSecondFeedId = "";
4564 searchType = "product-search";
4565 searchContentTemplate = "";
4566 showGroups = true;
4567 }
4568 }
4569 }
4570 @{
4571 Block masterSearchBar = new Block
4572 {
4573 Id = "MasterSearchBar",
4574 SortId = 40,
4575 Template = RenderSearch("bar"),
4576 Design = new Design
4577 {
4578 Size = "auto",
4579 HidePadding = true,
4580 RenderType = RenderType.Column
4581 }
4582 };
4583
4584 Block masterSearchAction = new Block
4585 {
4586 Id = "MasterDesktopActionsMenuSearch",
4587 SortId = 10,
4588 Template = RenderSearch()
4589 };
4590
4591 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterSearchBar);
4592 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterSearchAction);
4593 }
4594
4595 @helper RenderSearch(string type = "mini-search")
4596 {
4597 string productsPageId = Converter.ToString(GetPageIdByNavigationTag("ProductsPage"));
4598 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID;
4599 string searchType = Model.Area.Item.GetItem("Layout").GetList("TopSearch") != null ? Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue : "productSearch";
4600
4601 SearchConfiguration searchConfiguration = null;
4602
4603 switch (searchType) {
4604 case "contentSearch":
4605 searchConfiguration = new SearchConfiguration() {
4606 searchFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true",
4607 resultPageLink = contentSearchPageLink,
4608 searchPlaceholder = Translate("Search page"),
4609 groupsFeedId = 0,
4610 searchType = "content-search",
4611 searchTemplate = "SearchPagesTemplate",
4612 showGroups = false
4613 };
4614 break;
4615 case "combinedSearch":
4616 searchConfiguration = new SearchConfiguration() {
4617 searchFeedId = productsPageId + "&feed=true",
4618 searchSecondFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true",
4619 resultPageLink = Converter.ToString(productsPageId),
4620 searchPlaceholder = Translate("Search products or pages"),
4621 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed"),
4622 searchType = "combined-search",
4623 searchTemplate = "SearchProductsTemplateWrap",
4624 searchContentTemplate = "SearchPagesTemplateWrap",
4625 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector")
4626 };
4627 break;
4628 default: //productSearch
4629 searchConfiguration = new SearchConfiguration() {
4630 resultPageLink = Converter.ToString(productsPageId),
4631 searchFeedId = productsPageId + "&feed=true",
4632 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed"),
4633 searchPlaceholder = Translate("Search products"),
4634 searchTemplate = "SearchProductsTemplate",
4635 searchType = "product-search",
4636 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector")
4637 };
4638 break;
4639 }
4640 searchConfiguration.searchValue = HttpContext.Current.Request.QueryString.Get("Search") ?? "";
4641
4642 if (type == "mini-search") {
4643 @RenderMiniSearch(searchConfiguration)
4644 } else {
4645 @RenderSearchBar(searchConfiguration)
4646 }
4647 }
4648
4649 @helper RenderSearchBar(SearchConfiguration options)
4650 {
4651 <div class="typeahead typeahead--centered u-color-inherit js-typeahead dw-mod" id="ProductSearchBar"
4652 data-page-size="7"
4653 data-search-feed-id="@options.searchFeedId"
4654 data-search-second-feed-id="@options.searchSecondFeedId"
4655 data-result-page-id="@options.resultPageLink"
4656 data-groups-page-id="@options.groupsFeedId"
4657 data-search-type="@options.searchType">
4658 @if (options.showGroups)
4659 {
4660 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button>
4661 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-groups-content dw-mod" id="ProductSearchBarGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@options.groupsFeedId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul>
4662 }
4663 <div class="typeahead-search-field">
4664 <input type="text" class="u-no-margin u-full-width u-full-height js-typeahead-search-field" placeholder="@options.searchPlaceholder" value="@options.searchValue">
4665 @if (string.IsNullOrEmpty(options.searchSecondFeedId))
4666 {
4667 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="ProductSearchBarContent" data-template="@options.searchTemplate" data-json-feed="/Default.aspx?ID=@options.searchFeedId&feedType=productsOnly" data-init-onload="false"></ul>
4668 }
4669 else
4670 {
4671 <div class="dropdown dropdown--absolute-position dropdown--combined grid">
4672 <div class="js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="ProductSearchBarContent" data-template="@options.searchTemplate" data-init-onload="false"></div>
4673 <div class="js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="ContentSearchBarContent" data-template="@options.searchContentTemplate" data-init-onload="false"></div>
4674 </div>
4675 }
4676 </div>
4677 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue"></i></button>
4678 </div>
4679 }
4680
4681 @helper RenderMiniSearch(SearchConfiguration options)
4682 {
4683 <li class="menu__item menu__item--horizontal menu__item--top-level menu__item--icon u-hidden-xxs is-dropdown is-dropdown--no-icon dw-mod" onmouseover="document.getElementById('headerSearch').focus()">
4684 <div class="menu__link menu__link--icon dw-mod">
4685 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue fa-1_5x"></i>
4686 </div>
4687 <div class="menu menu--dropdown menu--dropdown-right u-no-padding u-w380px grid__cell dw-mod">
4688 <div class="typeahead js-typeahead" id="ProductSearchBar"
4689 data-page-size="7"
4690 data-search-feed-id="@options.searchFeedId"
4691 data-search-second-feed-id="@options.searchSecondFeedId"
4692 data-result-page-id="@options.resultPageLink"
4693 data-search-type="@options.searchType">
4694 <div class="typeahead-search-field">
4695 <input type="text" class="u-no-margin u-full-width js-typeahead-search-field" id="headerSearch" placeholder="@options.searchPlaceholder" value="@options.searchValue">
4696 @if (string.IsNullOrEmpty(options.searchSecondFeedId))
4697 {
4698 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="ProductSearchBarContent" data-template="@options.searchTemplate" data-json-feed="/Default.aspx?ID=@options.searchFeedId&feedType=productsOnly" data-init-onload="false"></ul>
4699 }
4700 else
4701 {
4702 <div class="dropdown dropdown--absolute-position dropdown--combined grid dropdown--right-aligned">
4703 <div class="js-handlebars-root js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="ProductSearchBarContent" data-template="@options.searchTemplate" data-json-feed="/Default.aspx?ID=@options.searchFeedId&feedType=productsOnly" data-init-onload="false"></div>
4704 <div class="js-handlebars-root js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="ContentSearchBarContent" data-template="@options.searchContentTemplate" data-json-feed="/Default.aspx?ID=@options.searchSecondFeedId" data-init-onload="false"></div>
4705 </div>
4706 }
4707 </div>
4708 </div>
4709 </div>
4710 </li>
4711 }
4712 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4713
4714 @using System
4715 @using System.Web
4716 @using Dynamicweb.Rapido.Blocks.Extensibility
4717 @using Dynamicweb.Rapido.Blocks
4718
4719 @{
4720 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4721 bool hideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch");
4722
4723 BlocksPage headerConfigurationPage = BlocksPage.GetBlockPage("Master");
4724
4725 Block configDesktopLogo = headerConfigurationPage.GetBlockById("MasterDesktopLogo");
4726 headerConfigurationPage.RemoveBlock(configDesktopLogo);
4727
4728 Block configDesktopMenu = headerConfigurationPage.GetBlockById("MasterDesktopMenu");
4729 headerConfigurationPage.RemoveBlock(configDesktopMenu);
4730
4731 Block configSearchBar = headerConfigurationPage.GetBlockById("MasterSearchBar");
4732 headerConfigurationPage.RemoveBlock(configSearchBar);
4733
4734 Block configSearchAction = headerConfigurationPage.GetBlockById("MasterDesktopActionsMenuSearch");
4735 headerConfigurationPage.RemoveBlock(configSearchAction);
4736
4737 Block configDesktopActionsMenu = headerConfigurationPage.GetBlockById("MasterDesktopActionsMenu");
4738 headerConfigurationPage.RemoveBlock(configDesktopActionsMenu);
4739
4740 Block configDesktopExtra = headerConfigurationPage.GetBlockById("MasterDesktopExtra");
4741
4742 switch (topLayout)
4743 {
4744 case "condensed": //2
4745 configDesktopLogo.Design.Size = "auto-width";
4746 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo);
4747
4748 configDesktopMenu.SortId = 20;
4749 configDesktopMenu.Design.Size = "auto";
4750 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
4751
4752 configDesktopActionsMenu.SortId = 30;
4753 configDesktopActionsMenu.Design.Size = "auto-width";
4754 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
4755
4756 if (!hideSearch)
4757 {
4758 configSearchBar.SortId = 40;
4759 configSearchBar.Design.Size = "12";
4760 configDesktopExtra.SortId = 50;
4761 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar);
4762 }
4763 break;
4764 case "splitted": //3
4765 configDesktopLogo.Design.Size = "auto";
4766 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
4767
4768 if (!hideSearch)
4769 {
4770 configSearchBar.SortId = 20;
4771 configSearchBar.Design.Size = "auto";
4772 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar);
4773 }
4774
4775 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
4776
4777 configDesktopActionsMenu.SortId = 20;
4778 configDesktopActionsMenu.Design.Size = "auto-width";
4779 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
4780 break;
4781 case "minimal": //4
4782 configDesktopLogo.Design.Size = "auto-width";
4783 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo);
4784
4785 configDesktopMenu.Design.Size = "auto";
4786 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
4787
4788 configDesktopActionsMenu.SortId = 20;
4789 configDesktopActionsMenu.Design.Size = "auto-width";
4790 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
4791
4792 if (!hideSearch)
4793 {
4794 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
4795 }
4796 break;
4797 case "minimal-right": //5
4798 configDesktopLogo.Design.Size = "auto-width";
4799 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo);
4800
4801 configDesktopMenu.Design.Size = "auto";
4802 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
4803
4804 configDesktopActionsMenu.SortId = 20;
4805 configDesktopActionsMenu.Design.Size = "auto-width";
4806 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
4807
4808 if (!hideSearch)
4809 {
4810 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
4811 }
4812 break;
4813 case "two-lines": //6
4814 configDesktopLogo.Design.Size = "auto";
4815 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
4816
4817 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
4818
4819 configDesktopActionsMenu.SortId = 20;
4820 configDesktopActionsMenu.Design.Size = "auto-width";
4821 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
4822
4823 if (!hideSearch)
4824 {
4825 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
4826 }
4827 break;
4828 case "two-lines-centered": //7
4829 configDesktopLogo.Design.Size = "auto";
4830 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
4831
4832 configDesktopMenu.Design.Size = "auto-width";
4833 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
4834
4835 configDesktopActionsMenu.SortId = 20;
4836 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
4837
4838 if (!hideSearch)
4839 {
4840 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
4841 }
4842 break;
4843 case "normal": //1
4844 default:
4845 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
4846
4847 if (!hideSearch)
4848 {
4849 configSearchBar.SortId = 20;
4850 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar);
4851 }
4852
4853 configDesktopActionsMenu.SortId = 30;
4854 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopActionsMenu);
4855
4856 configDesktopActionsMenu.Design.Size = "auto-width";
4857 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
4858 break;
4859 }
4860 }
4861 @if (File.Exists(HttpContext.Current.Server.MapPath("/Files/Templates/Designs/Rapido/MasterBlocks/HeaderBlocks/Custom__Blocks.cshtml")))
4862 {
4863 <text>@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4864
4865 @using System
4866 @using System.Web
4867 @using Dynamicweb.Rapido.Blocks.Extensibility
4868 @using Dynamicweb.Rapido.Blocks
4869
4870 @{
4871
4872 }</text>
4873 }
4874
4875
4876 @helper RenderDesktopTools()
4877 {
4878 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopTools").OrderBy(item => item.SortId).ToList();
4879
4880 <div class="tools-navigation dw-mod">
4881 <div class="center-container grid top-container__center-container dw-mod">
4882 @RenderBlockList(subBlocks)
4883 </div>
4884 </div>
4885 }
4886
4887 @helper RenderDesktopToolsText()
4888 {
4889 string toolsText = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("ToolsText");
4890 if (!string.IsNullOrEmpty(toolsText))
4891 {
4892 <div class="u-margin-top u-margin-bottom">@toolsText</div>
4893 }
4894 }
4895
4896 @helper RenderDesktopToolsNavigation()
4897 {
4898 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar");
4899
4900 if (renderPagesInToolBar)
4901 {
4902 @RenderNavigation(new
4903 {
4904 id = "topToolsNavigation",
4905 cssclass = "menu menu-tools dw-mod dwnavigation",
4906 template = "TopMenu.xslt"
4907 })
4908 }
4909 }
4910
4911 @helper RenderDesktopNavigation()
4912 {
4913 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopNavigation").OrderBy(item => item.SortId).ToList();
4914 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
4915 string alignClass = topLayout == "two-lines-centered" ? "grid--justify-center" : "";
4916 <nav class="main-navigation dw-mod">
4917 <div class="center-container top-container__center-container grid @alignClass dw-mod">
4918 @RenderBlockList(subBlocks)
4919 </div>
4920 </nav>
4921 }
4922
4923 @helper RenderDesktopExtra()
4924 {
4925 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopExtra").OrderBy(item => item.SortId).ToList();
4926
4927 if (subBlocks.Count > 0)
4928 {
4929 <div class="header header-top dw-mod">
4930 <div class="center-container top-container__center-container grid--justify-space-between grid grid--align-center dw-mod">
4931 @RenderBlockList(subBlocks)
4932 </div>
4933 </div>
4934 }
4935 }@*</text>
4936 }*@
4937
4938 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4939
4940 @using System
4941 @using System.Web
4942 @using Dynamicweb.Rapido.Blocks.Extensibility
4943 @using Dynamicweb.Rapido.Blocks
4944
4945 @{
4946 Block impersonationBar = new Block
4947 {
4948 Id = "ImpersonationBar",
4949 SortId = 50,
4950 Template = RenderImpersonationBar(),
4951 Design = new Design
4952 {
4953 Size = "auto-width",
4954 HidePadding = true,
4955 RenderType = RenderType.Column
4956 }
4957 };
4958
4959 if (Model.CurrentUser.ID > 0 && Model.SecondaryUsers.Count > 0)
4960 {
4961 BlocksPage.GetBlockPage("Master").Add("MasterHeader", impersonationBar);
4962 }
4963 }
4964
4965 @helper RenderImpersonationBar()
4966 {
4967 int impersonationPageId = GetPageIdByNavigationTag("Impersonation");
4968
4969 <div class="u-color-warning--bg">
4970 <div class="center-container top-container__center-container dw-mod">
4971 @*Impersonation*@
4972 <div class="grid">
4973 <div class="grid--align-self-center grid__col-x">
4974 @if (Model.CurrentSecondaryUser != null && Model.CurrentSecondaryUser.ID > 0)
4975 {
4976 string stopImpersonateTranslation = Translate("Stop impersonation");
4977 string username = "";
4978 if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.FirstName) && !string.IsNullOrEmpty(Model.CurrentSecondaryUser.LastName))
4979 {
4980 username = Model.CurrentSecondaryUser.FirstName + " " + Model.CurrentSecondaryUser.LastName;
4981 }
4982 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Name))
4983 {
4984 username = Model.CurrentSecondaryUser.Name;
4985 }
4986 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Email))
4987 {
4988 username = Model.CurrentSecondaryUser.Email;
4989 }
4990 else
4991 {
4992 username = Model.CurrentSecondaryUser.UserName;
4993 }
4994 <div class="grid-cell">
4995 <div class="u-pull--left u-bold u-margin-top">
4996 <i class="fas fa-user-secret"></i>
4997 @Pageview.User.UserName<text> </text>@Translate("is impersonating")<text> </text>@username
4998 </div>
4999 <form method="post" class="u-pull--right u-no-margin">
5000 <input type="submit" class="btn btn--secondary dw-mod u-no-margin" name="DwExtranetRemoveSecondaryUser" value="@stopImpersonateTranslation">
5001 </form>
5002 </div>
5003 }
5004 else
5005 {
5006 string viewListTranslation = Translate("View the list of users you can impersonate");
5007 <div class="grid-cell u-bold">
5008 <i class="fas fa-user-secret"></i>
5009 <a href="/Default.aspx?ID=@impersonationPageId" title="@viewListTranslation" class="u-color-font-black">@viewListTranslation</a>
5010 </div>
5011 }
5012 </div>
5013 </div>
5014 </div>
5015 </div>
5016 }
5017 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5018
5019 @using System
5020 @using System.Web
5021 @using System.Collections.Generic
5022 @using Dynamicweb.Rapido.Blocks.Extensibility
5023 @using Dynamicweb.Rapido.Blocks
5024
5025 @{
5026 BlocksPage miniCartBlocksPage = BlocksPage.GetBlockPage("Master");
5027 string orderlinesView = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("OrderlinesView") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("OrderlinesView").SelectedValue : "table";
5028
5029 Block orderLines = new Block
5030 {
5031 Id = "MiniCartOrderLines",
5032 SkipRenderBlocksList = true,
5033 BlocksList = new List<Block>
5034 {
5035 new Block {
5036 Id = "MiniCartOrderLinesList",
5037 SortId = 20,
5038 Template = RenderMiniCartOrderLinesList()
5039 }
5040 }
5041 };
5042
5043 Block orderlinesScriptTemplates = new Block
5044 {
5045 Id = "OrderlinesScriptTemplates"
5046 };
5047
5048 if (orderlinesView == "table")
5049 {
5050 orderLines.Template = RenderMiniCartOrderLinesTable();
5051 orderLines.BlocksList.Add(
5052 new Block {
5053 Id = "MiniCartOrderlinesTableHeader",
5054 SortId = 10,
5055 Template = RenderMiniCartOrderLinesHeader()
5056 }
5057 );
5058
5059 orderlinesScriptTemplates.Template = RenderMiniCartScriptsTableTemplates();
5060 }
5061 else
5062 {
5063 orderLines.Template = RenderMiniCartOrderLinesBlocks();
5064 orderlinesScriptTemplates.Template = RenderMiniCartScriptsListTemplates();
5065 }
5066
5067 miniCartBlocksPage.Add("MasterBottomSnippets", orderlinesScriptTemplates);
5068
5069 Block miniCartScriptTemplates = new Block()
5070 {
5071 Id = "MasterMiniCartTemplates",
5072 SortId = 1,
5073 Template = RenderMiniCartScriptTemplates(),
5074 SkipRenderBlocksList = true,
5075 BlocksList = new List<Block>
5076 {
5077 orderLines,
5078 new Block {
5079 Id = "MiniCartFooter",
5080 Template = RenderMiniCartFooter(),
5081 SortId = 50,
5082 SkipRenderBlocksList = true,
5083 BlocksList = new List<Block>
5084 {
5085 new Block {
5086 Id = "MiniCartFees",
5087 Template = RenderMiniCartFees(),
5088 SortId = 30
5089 },
5090 new Block {
5091 Id = "MiniCartPoints",
5092 Template = RenderMiniCartPoints(),
5093 SortId = 40
5094 },
5095 new Block {
5096 Id = "MiniCartTotal",
5097 Template = RenderMiniCartTotal(),
5098 SortId = 50
5099 },
5100 new Block {
5101 Id = "MiniCartActions",
5102 Template = RenderMiniCartActions(),
5103 SortId = 60
5104 }
5105 }
5106 }
5107 }
5108 };
5109
5110 miniCartBlocksPage.Add("MasterBottomSnippets", miniCartScriptTemplates);
5111 }
5112
5113 @helper RenderMiniCartScriptsTableTemplates()
5114 {
5115 <script id="MiniCartOrderline" type="text/x-template">
5116 {{#unless isEmpty}}
5117 <tr>
5118 <td class="u-w60px"><a href="{{link}}" class="{{hideimage}}"><img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=50&height=50&crop=5&Compression=75&image={{image}}" alt="{{name}}"></a></td>
5119 <td class="u-va-middle">
5120 <a href="{{link}}" class="mini-cart-orderline__name" title="{{name}}">{{name}}</a>
5121 {{#if variantname}}
5122 <a href="{{link}}" class="mini-cart-orderline__name mini-cart-orderline__name--sm">{{variantname}}</a>
5123 {{/if}}
5124 {{#if unitname}}
5125 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm">{{unitname}}</div>
5126 {{/if}}
5127 </td>
5128 <td class="u-ta-right u-va-middle">{{quantity}}</td>
5129 <td class="u-ta-right u-va-middle">
5130 {{#if pointsTotal}}
5131 <span class="u-color--loyalty-points">{{pointsTotal}}</span> @Translate("points")
5132 {{else}}
5133 {{totalprice}}
5134 {{/if}}
5135 </td>
5136 </tr>
5137 {{/unless}}
5138 </script>
5139
5140 <script id="MiniCartOrderlineDiscount" type="text/x-template">
5141 {{#unless isEmpty}}
5142 <tr class="table__row--no-border">
5143 <td class="u-w60px"> </td>
5144 <td><div class="mini-cart-orderline__name dw-mod">{{name}}</div></td>
5145 <td class="u-ta-right"> </td>
5146 <td class="u-ta-right">{{totalprice}}</td>
5147 </tr>
5148 {{/unless}}
5149 </script>
5150 }
5151
5152 @helper RenderMiniCartScriptsListTemplates()
5153 {
5154 int cartOrderlinesFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed");
5155 <script id="MiniCartOrderline" type="text/x-template">
5156 {{#unless isEmpty}}
5157 <div class="mini-cart-orderline grid dw-mod">
5158 <div class="grid__col-4">
5159 <a href="{{link}}" class="{{hideimage}}">
5160 <img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=100&height=100&crop=5&Compression=75&image={{image}}" alt="{{name}}" title="{{name}}">
5161 </a>
5162 </div>
5163 <div class="grid__col-8">
5164 <a href="{{link}}" class="mini-cart-orderline__name mini-cart-orderline__name--truncate mini-cart-orderline__name--md u-padding-right--lg" title="{{name}}">{{name}}</a>
5165 {{#if variantname}}
5166 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Variant"): {{variantname}}</div>
5167 {{/if}}
5168 {{#if unitname}}
5169 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Unit"): {{unitname}}</div>
5170 {{/if}}
5171 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Qty"): {{quantity}}</div>
5172
5173 <div class="grid__cell-footer">
5174 <div class="grid__cell">
5175 <div class="u-pull--left mini-cart-orderline__price dw-mod">
5176 {{#if pointsTotal}}
5177 <span class="u-color--loyalty-points">{{pointsTotal}}</span> @Translate("points")
5178 {{else}}
5179 {{totalprice}}
5180 {{/if}}
5181 </div>
5182 <button type="button" title="@Translate("Remove orderline")" class="btn btn--clean btn--condensed u-pull--right mini-cart-orderline__remove-btn dw-mod" onclick="{{removeFromCartGoogleImpression}}; Cart.UpdateCart('Cart', '/Default.aspx?ID=@cartOrderlinesFeedPageId', 'CartCmd=DelOrderLine&key={{orderLineId}}', true);">@Translate("Remove")</button>
5183 </div>
5184 </div>
5185 </div>
5186 </div>
5187 {{/unless}}
5188 </script>
5189
5190 <script id="MiniCartOrderlineDiscount" type="text/x-template">
5191 {{#unless isEmpty}}
5192 <div class="mini-cart-orderline mini-cart-orderline--discount grid dw-mod">
5193 <div class="grid__col-4">
5194 <div class="mini-cart-orderline__name mini-cart-orderline__name dw-mod">{{name}}</div>
5195 </div>
5196 <div class="grid__col-8">{{totalprice}}</div>
5197 </div>
5198 {{/unless}}
5199 </script>
5200 }
5201
5202 @helper RenderMiniCartScriptTemplates()
5203 {
5204 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterMiniCartTemplates").OrderBy(item => item.SortId).ToList();
5205 bool useGoogleTagManager = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("GoogleTagManagerID"));
5206 string cartPageLink = string.Concat("/Default.aspx?ID=", GetPageIdByNavigationTag("CartPage"));
5207
5208 <script id="MiniCartContent" type="text/x-template">
5209 {{#.}}
5210 {{#unless isEmpty}}
5211 @if (useGoogleTagManager)
5212 {
5213 <text>{{{googleEnchantImpressionEmptyCart OrderLines}}}</text>
5214 }
5215 @RenderBlockList(subBlocks)
5216 {{/unless}}
5217 {{#if isEmpty}}
5218 {{{locationReload '@cartPageLink'}}}
5219 {{/if}}
5220 {{/.}}
5221 </script>
5222 }
5223
5224 @helper RenderMiniCartOrderLinesTable()
5225 {
5226 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartOrderLines").OrderBy(item => item.SortId).ToList();
5227
5228 <div class="u-overflow-auto">
5229 <table class="table mini-cart-table dw-mod">
5230 @RenderBlockList(subBlocks)
5231 </table>
5232 </div>
5233 }
5234
5235 @helper RenderMiniCartOrderLinesBlocks()
5236 {
5237 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartOrderLines").OrderBy(item => item.SortId).ToList();
5238
5239 <div class="u-overflow-auto">
5240 @RenderBlockList(subBlocks)
5241 </div>
5242 }
5243
5244 @helper RenderMiniCartOrderLinesHeader()
5245 {
5246 <thead>
5247 <tr>
5248 <td> </td>
5249 <td>@Translate("Product")</td>
5250 <td class="u-ta-right">@Translate("Qty")</td>
5251 <td class="u-ta-right" width="120">@Translate("Price")</td>
5252 </tr>
5253 </thead>
5254 }
5255
5256 @helper RenderMiniCartOrderLinesList()
5257 {
5258 <text>
5259 {{#OrderLines}}
5260 {{#ifCond template "===" "CartOrderline"}}
5261 {{>MiniCartOrderline}}
5262 {{/ifCond}}
5263 {{#ifCond template "===" "CartOrderlineMobile"}}
5264 {{>MiniCartOrderline}}
5265 {{/ifCond}}
5266 {{#ifCond template "===" "CartOrderlineDiscount"}}
5267 {{>MiniCartOrderlineDiscount}}
5268 {{/ifCond}}
5269 {{/OrderLines}}
5270 </text>
5271 }
5272
5273 @helper RenderMiniCartFees()
5274 {
5275 <div class="grid u-border-top grid--external-bleed-bottom">
5276 <div class="grid__col-6">
5277 {{paymentmethod}}
5278 </div>
5279 <div class="grid__col-6 grid--align-end">{{paymentfee}}</div>
5280 </div>
5281 <div class="grid grid--external-bleed-bottom">
5282 <div class="grid__col-6">
5283 {{shippingmethod}}
5284 </div>
5285 <div class="grid__col-6 grid--align-end">{{shippingfee}}</div>
5286 </div>
5287 }
5288
5289 @helper RenderMiniCartFooter()
5290 {
5291 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartFooter").OrderBy(item => item.SortId).ToList();
5292
5293 <div class="mini-cart__footer dw-mod">
5294 @RenderBlockList(subBlocks)
5295 </div>
5296 }
5297
5298 @helper RenderMiniCartActions()
5299 {
5300 int cartPageId = GetPageIdByNavigationTag("CartPage");
5301
5302 <button type="button" title="@Translate("Empty cart")" class="btn btn--secondary u-full-width dw-mod u-no-margin u-margin-bottom" onclick="googleEnchantImpressionEmptyCart(); Cart.EmptyCart(event);">@Translate("Empty cart")</button>
5303 <a href="/Default.aspx?ID=@cartPageId" title="@Translate("Proceed to checkout")" class="btn btn--primary u-full-width u-no-margin dw-mod">@Translate("Proceed to checkout")</a>
5304 }
5305
5306 @helper RenderMiniCartPoints()
5307 {
5308 <text>
5309 {{#if earnings}}
5310 <div class="grid grid--external-bleed-bottom">
5311 <div class="grid__col-6">@Translate("Earnings")</div>
5312 <div class="grid__col-6 grid--align-end">
5313 <div>
5314 <span class="u-color--loyalty-points">{{earnings}}</span> @Translate("points")
5315 </div>
5316 </div>
5317 </div>
5318 {{/if}}
5319 </text>
5320 }
5321
5322 @helper RenderMiniCartTotal()
5323 {
5324 <div class="mini-cart-totals grid u-margin-bottom dw-mod">
5325 <div class="grid__col-6">@Translate("Total")</div>
5326 <div class="grid__col-6 grid--align-end">{{totalprice}}</div>
5327 </div>
5328 }
5329 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5330
5331 @using Dynamicweb.Rapido.Blocks.Extensibility
5332 @using Dynamicweb.Rapido.Blocks
5333
5334 @{
5335 bool addToCartNotificationOnlyPreview = Model.Area.Item.GetItem("Ecommerce").GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0;
5336 string addToCartNotificationType = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("AddToCartNotificationType") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("AddToCartNotificationType").SelectedValue : "";
5337
5338 if (!addToCartNotificationOnlyPreview && !string.IsNullOrEmpty(addToCartNotificationType)) {
5339 if (addToCartNotificationType == "modal")
5340 {
5341 Block addToCartNotificationModal = new Block
5342 {
5343 Id = "AddToCartNotificationModal",
5344 Template = RenderAddToCartNotificationModal()
5345 };
5346
5347 Block addToCartNotificationScript = new Block
5348 {
5349 Id = "AddToCartNotificationScript",
5350 Template = RenderAddToCartNotificationModalScript()
5351 };
5352 BlocksPage.GetBlockPage("Master").Add("MasterTopSnippets", addToCartNotificationModal);
5353 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", addToCartNotificationScript);
5354 }
5355 else if (addToCartNotificationType == "toggle")
5356 {
5357 Block addToCartNotificationScript = new Block
5358 {
5359 Id = "AddToCartNotificationScript",
5360 Template = RenderAddToCartNotificationToggleScript()
5361 };
5362 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", addToCartNotificationScript);
5363 }
5364 }
5365 }
5366
5367 @helper RenderAddToCartNotificationModal()
5368 {
5369 <div id="LastAddedProductModal" data-template="LastAddedProductTemplate"></div>
5370 }
5371
5372 @helper RenderAddToCartNotificationModalScript()
5373 {
5374 int cartPageId = GetPageIdByNavigationTag("CartPage");
5375
5376 <script id="LastAddedProductTemplate" type="text/x-template">
5377 <!-- Trigger for the login modal -->
5378 <input type="checkbox" id="LastAddedProductModalTrigger" class="modal-trigger" />
5379
5380 <!-- Login modal -->
5381 <div class="modal-container">
5382 <label for="LastAddedProductModalTrigger" class="modal-overlay"></label>
5383 <div class="modal modal--md">
5384 <div class="modal__header">
5385 <h2>@Translate("Product is added to the cart")</h2>
5386 </div>
5387 <div class="modal__body">
5388 <div class="grid">
5389 <div class="grid__col-2">
5390 <a href="{{productInfo.link}}">
5391 <img src="{{productInfo.image}}" alt="{{productInfo.name}}" class="dw-mod" />
5392 </a>
5393 </div>
5394 <div class="u-padding grid--align-self-center">
5395 <span>{{quantity}}</span> x
5396 </div>
5397 <div class="grid__col-auto grid--align-self-center">
5398 <div>{{productInfo.name}}</div>
5399 {{#if productInfo.variantName}}
5400 <small class="u-margin-bottom-5px">{{productInfo.variantName}}</small>
5401 {{/if}}
5402 {{#if productInfo.unitName}}
5403 <small class="u-margin-bottom-5px">{{productInfo.unitName}}</small>
5404 {{/if}}
5405 </div>
5406 </div>
5407 <div class="modal__footer u-margin-top--lg">
5408 <label class="btn btn--secondary u-pull--left u-no-margin dw-mod btn--sm" for="LastAddedProductModalTrigger">@Translate("Continue shopping")</label>
5409 <a href="/Default.aspx?ID=@cartPageId" class="btn btn--primary u-pull--right u-no-margin dw-mod btn--sm">@Translate("Proceed to checkout")</a>
5410 </div>
5411 </div>
5412 <label class="modal__close-btn" for="LastAddedProductModalTrigger"></label>
5413 </div>
5414 </div>
5415 </script>
5416 <script>
5417 document.addEventListener('addToCart', function (event) {
5418 Cart.ShowLastAddedProductModal(event.detail);
5419 });
5420 </script>
5421 }
5422
5423 @helper RenderAddToCartNotificationToggleScript()
5424 {
5425 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
5426
5427 <script>
5428 document.addEventListener('addToCart', function () {
5429 Cart.ToggleMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '@miniCartFeedPageId');
5430 });
5431 </script>
5432 }
5433 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5434
5435 @using System
5436 @using System.Web
5437 @using System.Collections.Generic
5438 @using Dynamicweb.Rapido.Blocks.Extensibility
5439 @using Dynamicweb.Rapido.Blocks
5440
5441 @functions {
5442 BlocksPage footerBlocksPage = BlocksPage.GetBlockPage("Master");
5443 }
5444
5445 @{
5446 string footerColumnOneContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetString("Content");
5447 string footerColumnTwoContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetString("Content");
5448 string footerColumnThreeContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetString("Content");
5449 string footerColumnOneHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetString("Header");
5450 string footerColumnTwoHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetString("Header");
5451 string footerColumnThreeHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetString("Header");
5452
5453 string footerColumnFourContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour")?.GetString("Content");
5454 string footerColumnFourHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour")?.GetString("Header");
5455
5456 Block masterFooterContent = new Block()
5457 {
5458 Id = "MasterFooterContent",
5459 SortId = 10,
5460 Template = RenderFooter(),
5461 SkipRenderBlocksList = true
5462 };
5463 footerBlocksPage.Add(MasterBlockId.MasterFooter, masterFooterContent);
5464
5465 if (!string.IsNullOrEmpty(footerColumnOneContent) || !string.IsNullOrEmpty(footerColumnOneHeader))
5466 {
5467 Block masterFooterColumnOne = new Block
5468 {
5469 Id = "MasterFooterColumnOne",
5470 SortId = 10,
5471 Template = RenderFooterColumn(footerColumnOneHeader, footerColumnOneContent),
5472 Design = new Design {
5473 Size = "auto",
5474 RenderType = RenderType.Column
5475 }
5476 };
5477 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnOne);
5478 }
5479
5480 if (!string.IsNullOrEmpty(footerColumnTwoContent) || !string.IsNullOrEmpty(footerColumnTwoHeader))
5481 {
5482 Block masterFooterColumnTwo = new Block
5483 {
5484 Id = "MasterFooterColumnTwo",
5485 SortId = 20,
5486 Template = RenderFooterColumn(footerColumnTwoHeader, footerColumnTwoContent),
5487 Design = new Design
5488 {
5489 Size = "auto",
5490 RenderType = RenderType.Column
5491 }
5492 };
5493 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnTwo);
5494 }
5495
5496 if (!string.IsNullOrEmpty(footerColumnThreeContent) || !string.IsNullOrEmpty(footerColumnThreeHeader))
5497 {
5498 Block masterFooterColumnThree = new Block
5499 {
5500 Id = "MasterFooterColumnThree",
5501 SortId = 30,
5502 Template = RenderFooterColumn(footerColumnThreeHeader, footerColumnThreeContent),
5503 Design = new Design
5504 {
5505 Size = "auto",
5506 RenderType = RenderType.Column
5507 }
5508 };
5509 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnThree);
5510 }
5511 @*// Added out to enable new footer layout 11-12-2020 KR*@
5512 if (!string.IsNullOrEmpty(footerColumnFourContent) || !string.IsNullOrEmpty(footerColumnFourHeader))
5513 {
5514 Block masterFooterColumnFour = new Block
5515 {
5516 Id = "MasterFooterColumnFour",
5517 SortId = 40,
5518 Template = RenderFooterColumn(footerColumnFourHeader, footerColumnFourContent),
5519 Design = new Design
5520 {
5521 Size = "auto",
5522 RenderType = RenderType.Column
5523 }
5524 };
5525 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnFour);
5526 }
5527
5528 if (Model.Area.Item.GetItem("Layout").GetBoolean("FooterNewsletterSignUp") || (Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks").Count > 0))
5529 {
5530 Block socialLinksAndNewsletterCombined = new Block
5531 {
5532 Id = "SocialLinksAndNewsletterCombined",
5533 SortId = 50,
5534 Template = RenderSocialLinksAndNewsletterCombined(),
5535 Design = new Design
5536 {
5537 Size = "auto",
5538 RenderType = RenderType.Column
5539 }
5540 };
5541 footerBlocksPage.Add("MasterFooterContent", socialLinksAndNewsletterCombined);
5542 }
5543
5544 @*//\ Added out to enable new footer layout 11-12-2020 KR*@
5545 @*// Commented out to enable new footer layout 11-12-2020 KR*@
5546 @*if (Model.Area.Item.GetItem("Layout").GetBoolean("FooterNewsletterSignUp"))
5547 {
5548 Block masterFooterNewsletterSignUp = new Block
5549 {
5550 Id = "MasterFooterNewsletterSignUp",
5551 SortId = 40,
5552 Template = RenderFooterNewsletterSignUp(),
5553 Design = new Design
5554 {
5555 Size = "auto",
5556 RenderType = RenderType.Column
5557 }
5558 };
5559 footerBlocksPage.Add("MasterFooterContent", masterFooterNewsletterSignUp);
5560 }
5561
5562 if (Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks").Count > 0)
5563 {
5564 Block masterFooterSocialLinks = new Block
5565 {
5566 Id = "MasterFooterSocialLinks",
5567 SortId = 50,
5568 Template = RenderFooterSocialLinks(),
5569 Design = new Design
5570 {
5571 Size = "auto",
5572 RenderType = RenderType.Column
5573 }
5574 };
5575 footerBlocksPage.Add("MasterFooterContent", masterFooterSocialLinks);
5576 }*@
5577 @*//\ Commented out to enable new footer layout 11-12-2020 KR*@
5578
5579 if (Model.Area.Item.GetItem("Layout").GetItems("FooterPayments") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterPayments").Count > 0)
5580 {
5581 Block masterFooterPayments = new Block
5582 {
5583 Id = "MasterFooterPayments",
5584 SortId = 60,
5585 Template = RenderFooterPayments(),
5586 Design = new Design
5587 {
5588 Size = "12",
5589 RenderType = RenderType.Column
5590 }
5591 };
5592 footerBlocksPage.Add("MasterFooterContent", masterFooterPayments);
5593 }
5594
5595 Block masterFooterCopyright = new Block
5596 {
5597 Id = "MasterFooterCopyright",
5598 SortId = 70,
5599 Template = RenderFooterCopyright(),
5600 Design = new Design
5601 {
5602 Size = "12",
5603 RenderType = RenderType.Column
5604 }
5605 };
5606 footerBlocksPage.Add("MasterFooterContent", masterFooterCopyright);
5607 }
5608
5609 @helper RenderFooter() {
5610 List<Block> subBlocks = this.footerBlocksPage.GetBlockListById("MasterFooterContent").OrderBy(item => item.SortId).ToList();
5611
5612 <footer class="footer dw-mod">
5613 <div class="center-container top-container__center-container dw-mod">
5614 <div class="grid grid--external-bleed-x">
5615 @RenderBlockList(subBlocks)
5616 </div>
5617 </div>
5618 </footer>
5619 }
5620
5621 @helper RenderFooterColumn(string header, string content) {
5622 <h3 class="footer__heading dw-mod">@header</h3>
5623 <div class="footer__content dw-mod">
5624 @content
5625 </div>
5626 }
5627
5628
5629 @helper RenderFooterNewsletterSignUp()
5630 {
5631 string newsletterSignUpPageId = GetPageIdByNavigationTag("NewsletterSignUp").ToString();
5632 <h3 class="footer__heading dw-mod">@Translate("Mailing list")</h3>
5633 <p style="margin-bottom: 1.4rem;">@Translate("Sign up if you would like to receive occasional treats from us", "Sign up if you would like to receive occasional treats from us")</p>
5634 <p btn="" btn--secondary="" dw-mod=""><a class="btn btn--primary dw-mod" href="@Translate("HubSpot Newsletter SignUp Link")" style="text-align: center;">@Translate("Subscribe")</a></p>
5635 <div class="footer__content dw-mod">
5636 <!-- NEWSLETTER DW FOOTER REMOVED AND PUT IN - /workspace/ EGH 30943 CODE -->
5637 </div>
5638 }
5639
5640 @helper RenderFooterSocialLinks() {
5641 <h3 class="footer__heading dw-mod">@Translate("Social links")</h3>
5642 <div class="footer__content dw-mod" style="margin-bottom:1rem;">
5643 <div class="collection dw-mod">
5644 @foreach (var socialitem in Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks"))
5645 {
5646 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel;
5647 string socialIconClass = socialIcon.SelectedValue;
5648 string socialIconTitle = socialIcon.SelectedName;
5649 string socialLink = socialitem.GetString("Link");
5650
5651 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px" rel="noopener"><i class="@socialIconClass fa-2x"></i></a>
5652 }
5653 </div>
5654 </div>
5655 }
5656
5657 @helper RenderFooterPayments() {
5658 <div class="footer__content dw-mod">
5659 <div class="collection dw-mod">
5660 @foreach (var payment in Model.Area.Item.GetItem("Layout").GetItems("FooterPayments"))
5661 {
5662 var paymentItem = payment.GetValue("CardTypeOrVerifiedPayment") as Dynamicweb.Frontend.ListViewModel;
5663 string paymentImage = null;
5664 string paymentTitle = paymentItem.SelectedName;
5665 ListOptionViewModel selected = paymentItem.SelectedOptions.FirstOrDefault();
5666 if (selected != null)
5667 {
5668 paymentImage = selected.Icon;
5669 }
5670
5671 <div class="footer__card-type">
5672 <img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=60&Compression=75&image=@paymentImage" alt="@paymentTitle" title="@paymentTitle" />
5673 </div>
5674 }
5675 </div>
5676 </div>
5677 }
5678
5679 @helper RenderFooterCopyright() {
5680 <div class="grid__col-12 footer__copyright dw-mod">
5681 @Model.Area.Item.GetItem("Layout").GetString("FooterCopyrightText")<p><font color="white">© @DateTime.Now.Year Egholm A|S - All rights reserved | @Translate("Legal-Info-Footer", "Legal Info") | @Translate("Privacy-Policy-Footer", "Privacy Policy") | @Translate("Cookie-Policy-Footer", "Cookie Policy") @Translate("Impressum-Footer")</font></p>
5682 </div>
5683 }
5684 @*//New helper to enable new footer layout 11-12-2020 KR*@
5685 @helper RenderSocialLinksAndNewsletterCombined(){
5686 if (Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks").Count > 0){
5687 @RenderFooterSocialLinks()
5688 }
5689 if (Model.Area.Item.GetItem("Layout").GetBoolean("FooterNewsletterSignUp")){
5690 @RenderFooterNewsletterSignUp()
5691 }
5692 }
5693 @*//\ New helper to enable new footer layout 11-12-2020 KR*@
5694 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
5695
5696 @using System
5697 @using System.Web
5698 @using System.Collections.Generic
5699 @using Dynamicweb.Rapido.Blocks.Extensibility
5700 @using Dynamicweb.Rapido.Blocks
5701 @using Dynamicweb.Ecommerce.Common
5702
5703 @{
5704 BlocksPage referencesBlocksPage = BlocksPage.GetBlockPage("Master");
5705
5706 Block masterScriptReferences = new Block()
5707 {
5708 Id = "MasterScriptReferences",
5709 SortId = 1,
5710 Template = RenderMasterScriptReferences()
5711 };
5712 referencesBlocksPage.Add(MasterBlockId.MasterReferences, masterScriptReferences);
5713 }
5714
5715 @helper RenderMasterScriptReferences()
5716 {
5717 <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
5718 <script src="/Files/Templates/Designs/Rapido/js/handlebars-v4.0.12.min.js"></script>
5719 <script src="/Files/Templates/Designs/Rapido/js/master.min.js"></script>
5720
5721 if (Model.Area.Item.GetItem("Custom").GetBoolean("UseCustomJavascript"))
5722 {
5723 <script src="/Files/Templates/Designs/Rapido/js/custom.min.js?q=12399999"></script>
5724 PushPromise("/Files/Templates/Designs/Rapido/js/custom.min.js");
5725 }
5726
5727 PushPromise("/Files/Templates/Designs/Rapido/js/handlebars-v4.0.12.min.js");
5728 PushPromise("/Files/Templates/Designs/Rapido/js/master.min.js");
5729 }
5730 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5731
5732 @using System
5733 @using System.Web
5734 @using System.Collections.Generic
5735 @using Dynamicweb.Rapido.Blocks.Extensibility
5736 @using Dynamicweb.Rapido.Blocks
5737
5738 @{
5739 BlocksPage searchBlocksPage = BlocksPage.GetBlockPage("Master");
5740 bool navigationItemsHideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch");
5741
5742 if (!navigationItemsHideSearch)
5743 {
5744 Block masterSearchScriptTemplates = new Block()
5745 {
5746 Id = "MasterSearchScriptTemplates",
5747 SortId = 1,
5748 Template = RenderSearchScriptTemplates()
5749 };
5750
5751 searchBlocksPage.Add(MasterBlockId.MasterBottomSnippets, masterSearchScriptTemplates);
5752 }
5753 }
5754
5755 @helper RenderSearchScriptTemplates()
5756 {
5757 int productsPageId = GetPageIdByNavigationTag("ProductsPage");
5758 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID;
5759 bool useFacebookPixel = !string.IsNullOrWhiteSpace(Pageview.AreaSettings.GetItem("Settings").GetString("FacebookPixelID"));
5760 bool onlyPreview = Model.Area.Item.GetItem("Ecommerce").GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0;
5761 bool useGoogleTagManager = !string.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("GoogleTagManagerID"));
5762 bool showPrice = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HidePriceInSearchResults");
5763 bool showAddToCartButton = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HideAddToCartButton");
5764 bool showViewButton = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HideViewButton");
5765 bool showAddToDownloadButton = Pageview.AreaSettings.GetItem("Layout").GetBoolean("ShowAddToDownloadButton");
5766 bool pointShopOnly = Pageview.AreaSettings.GetItem("Ecommerce").GetBoolean("PointShopOnly");
5767
5768 <script id="SearchGroupsTemplate" type="text/x-template">
5769 {{#.}}
5770 <li class="dropdown__item dw-mod" onclick="Search.UpdateGroupSelection(this)" data-group-id="{{id}}">{{name}}</li>
5771 {{/.}}
5772 </script>
5773
5774 <script id="SearchProductsTemplate" type="text/x-template">
5775 {{#each .}}
5776 {{#Product}}
5777 {{#ifCond template "!==" "SearchMore"}}
5778 <li class="dropdown__item dropdown__item--seperator dw-mod">
5779 @if (useFacebookPixel)
5780 {
5781 <text>{{{facebookPixelSearch name number priceDouble currency searchParameter}}}</text>
5782 }
5783 @if (useGoogleTagManager)
5784 {
5785 <text>{{{googleEnchantImpression 'Search results' currency googleImpression}}}</text>
5786 }
5787 <div>
5788 <a href="{{link}}" class="js-typeahead-link u-color-inherit u-pull--left" onclick="{{googleImpressionClick}}" title="{{name}}">
5789 <div class="u-margin-right u-pull--left {{noimage}} u-hidden-xs u-hidden-xxs"><img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=45&height=36&crop=5&FillCanvas=True&Compression=75&image={{image}}" alt="{{name}}"></div>
5790 <div class="u-pull--left">
5791 <div class="u-bold u-max-w220px u-truncate-text js-typeahead-name">{{name}}</div>
5792 @if (showPrice && !onlyPreview)
5793 {
5794 if (pointShopOnly)
5795 {
5796 <text>
5797 {{#if havePointPrice}}
5798 <div>
5799 <span class="u-color--loyalty-points">{{points}}</span> @Translate("points")
5800 </div>
5801 {{else}}
5802 <small class="help-text u-no-margin">@Translate("Not available")</small>
5803 {{/if}}
5804 {{#unless canBePurchasedWithPoints}}
5805 {{#if havePointPrice}}
5806 <small class="help-text u-no-margin">@Translate("Not enough points to buy this")</small>
5807 {{/if}}
5808 {{/unless}}
5809 </text>
5810 }
5811 else
5812 {
5813 <div>{{price}}</div>
5814 }
5815 }
5816 </div>
5817 </a>
5818 <div class="u-margin-left u-pull--right">
5819 @if (showAddToCartButton && !onlyPreview) {
5820 if (pointShopOnly)
5821 {
5822 <button type="button" class="btn btn--primary btn--condensed btn--full u-no-margin dw-mod {{hideBuyOptions}} js-ignore-click-outside {{#unless canBePurchasedWithPoints}}js-stay-disabled{{/unless}}" name="CartCmd" value="addWithPoints"
5823 onclick="Cart.AddToCart(event, {
5824 id: '{{productId}}',
5825 quantity: 1,
5826 buyForPoints: true,
5827 productInfo: {{productInfo}}
5828 }); {{facebookPixelAction}}" {{disabledBuyButton}}>
5829 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue js-ignore-click-outside"></i>
5830 </button>
5831 } else {
5832 <button type="button" class="btn btn--primary btn--condensed btn--full u-no-margin dw-mod {{hideBuyOptions}} js-ignore-click-outside"
5833 onclick="Cart.AddToCart(event, {
5834 id: '{{productId}}',
5835 quantity: 1,
5836 productInfo: {{productInfo}}
5837 }); {{facebookPixelAction}}">
5838 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue js-ignore-click-outside"></i>
5839 </button>
5840 }
5841 <a href="{{link}}" onclick="{{googleImpressionClick}}" class="btn btn--secondary btn--condensed btn--full u-no-margin dw-mod {{hideViewMore}} js-ignore-click-outside" title="@Translate("View")">@Translate("View")</a>
5842 }
5843 else if (showViewButton)
5844 {
5845 <a href="{{link}}" onclick="{{googleImpressionClick}}" class="btn btn--secondary btn--condensed btn--full u-no-margin dw-mod js-ignore-click-outside" title="@Translate("View")">@Translate("View")</a>
5846 }
5847 @if (showAddToDownloadButton)
5848 {
5849 <button type="button" class="btn btn--primary u-no-margin btn--condensed dw-mod js-add-to-downloads" title="@Translate("Add")" data-product-id="{{productId}}">
5850 <i class="fas fa-plus js-button-icon"></i>
5851 </button>
5852 }
5853 </div>
5854 </div>
5855 </li>
5856 {{/ifCond}}
5857 {{#ifCond template "===" "SearchMore"}}
5858 {{>SearchMoreProducts}}
5859 {{/ifCond}}
5860 {{/Product}}
5861 {{else}}
5862 <li class="dropdown__item dropdown__item--seperator dw-mod">
5863 @Translate("Your search gave 0 results")
5864 </li>
5865 {{/each}}
5866 </script>
5867
5868 <script id="SearchMoreProducts" type="text/x-template">
5869 <li class="dropdown__item dropdown__item--not-selectable {{stickToBottom}} dw-mod">
5870 <a href="/Default.aspx?ID=@productsPageId&Search={{searchParameter}}&GroupID={{groupId}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link">
5871 @Translate("View all")
5872 </a>
5873 </li>
5874 </script>
5875
5876 <script id="SearchMorePages" type="text/x-template">
5877 <li class="dropdown__item dropdown__item--not-selectable {{stickToBottom}} dw-mod">
5878 <a href="/Default.aspx?ID=@contentSearchPageLink&Search={{searchParameter}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link">
5879 @Translate("View all")
5880 </a>
5881 </li>
5882 </script>
5883
5884 <script id="SearchPagesTemplate" type="text/x-template">
5885 {{#each .}}
5886 {{#ifCond template "!==" "SearchMore"}}
5887 <li class="dropdown__item dropdown__item--seperator dw-mod">
5888 <div>
5889 <a href="/Default.aspx?ID={{id}}" class="js-typeahead-link u-pull--left u-color-inherit">
5890 <div class="u-margin-right u-pull--left"><i class="fa {{icon}} u-w20px u-ta-center"></i></div>
5891 <div class="u-pull--left">
5892 <div class="u-bold u-truncate-text u-max-w220px js-typeahead-name">{{name}}</div>
5893 </div>
5894 </a>
5895 </div>
5896 </li>
5897 {{/ifCond}}
5898 {{#ifCond template "===" "SearchMore"}}
5899 {{>SearchMorePages}}
5900 {{/ifCond}}
5901 {{else}}
5902 <li class="dropdown__item dropdown__item--seperator dropdown__item--not-selectable dw-mod">
5903 @Translate("Your search gave 0 results")
5904 </li>
5905 {{/each}}
5906 </script>
5907
5908 <script id="SearchPagesTemplateWrap" type="text/x-template">
5909 <div class="dropdown__column-header">@Translate("Pages")</div>
5910 <ul class="dropdown__list u-min-w220px u-full-width u-margin-bottom dw-mod">
5911 {{>SearchPagesTemplate}}
5912 </ul>
5913 </script>
5914
5915 <script id="SearchProductsTemplateWrap" type="text/x-template">
5916 <div class="dropdown__column-header">@Translate("Products")</div>
5917 <ul class="dropdown__list u-min-w220px u-full-width u-margin-bottom dw-mod">
5918 {{>SearchProductsTemplate}}
5919 </ul>
5920 </script>
5921 }
5922
5923
5924 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
5925
5926 @using System
5927 @using System.Web
5928 @using System.Collections.Generic
5929 @using Dynamicweb.Rapido.Blocks.Extensibility
5930 @using Dynamicweb.Rapido.Blocks
5931
5932 @{
5933 BlocksPage bottomSnippetsBlocksPage = BlocksPage.GetBlockPage("Master");
5934
5935 Block primaryBottomSnippets = new Block()
5936 {
5937 Id = "MasterJavascriptInitializers",
5938 SortId = 100,
5939 Template = RenderPrimaryBottomSnippets()
5940 };
5941 bottomSnippetsBlocksPage.Add(MasterBlockId.MasterReferences, primaryBottomSnippets);
5942 }
5943
5944 @helper RenderPrimaryBottomSnippets() {
5945 bool isWireframeMode = Model.Area.Item.GetItem("Settings").GetBoolean("WireframeMode");
5946 bool useGoogleTagManager = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("GoogleTagManagerID"));
5947
5948 if (isWireframeMode)
5949 {
5950 <script>
5951 Wireframe.Init(true);
5952 </script>
5953 }
5954
5955
5956 if (useGoogleTagManager)
5957 {
5958 <script>
5959 document.addEventListener('addToCart', function(event) {
5960 var googleImpression = event.detail.productInfo.googleImpression;
5961 dataLayer.push({
5962 'event': 'addToCart',
5963 'ecommerce': {
5964 'currencyCode': '@(Dynamicweb.Ecommerce.Services.Currencies.GetDefaultCurrency()?.Code)',
5965 'add': {
5966 'products': [{
5967 'name': googleImpression.name,
5968 'id': googleImpression.id,
5969 'price': googleImpression.price,
5970 'brand': googleImpression.brand,
5971 'category': googleImpression.category,
5972 'variant': googleImpression.variant,
5973 'quantity': event.detail.quantity
5974 }]
5975 }
5976 }
5977 });
5978 });
5979 </script>
5980 }
5981
5982 //if digitalwarehouse
5983 if (Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowDownloadCart"))
5984 {
5985 string cartContextId = Converter.ToString(HttpContext.Current.Application["DownloadCartContext"]);
5986
5987 if (string.IsNullOrEmpty(cartContextId)) {
5988 var moduleProps = Dynamicweb.Modules.Properties.GetParagraphModuleSettings(GetPageIdByNavigationTag("DownloadCart"), "eCom_CartV2");
5989 var cartSettings = new Dynamicweb.Ecommerce.Cart.ModuleSettings(moduleProps);
5990 cartContextId = cartSettings.OrderContextID;
5991 HttpContext.Current.Application["DownloadCartContext"] = cartContextId;
5992 }
5993
5994 <script>
5995 let downloadCart = new DownloadCart({
5996 cartPageId: @GetPageIdByNavigationTag("MiniCartFeed"),
5997 contextId: "@cartContextId",
5998 addButtonText: "@Translate("Add")",
5999 removeButtonText: "@Translate("Remove")"
6000 });
6001 </script>
6002 }
6003
6004 <!--$$Javascripts-->
6005 }
6006 @if (File.Exists(HttpContext.Current.Server.MapPath("/MasterBlocks/Custom__Blocks.cshtml")))
6007 {
6008 <text>@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
6009
6010 @using System
6011 @using System.Web
6012 @using System.Collections.Generic
6013 @using Dynamicweb.Rapido.Blocks
6014
6015 @{
6016 BlocksPage masterCustomBlocksPage = BlocksPage.GetBlockPage("Master");
6017
6018 }</text>
6019 }
6020
6021
6022 @functions {
6023 public class ManifestIcon
6024 {
6025 public string src { get; set; }
6026 public string type { get; set; }
6027 public string sizes { get; set; }
6028 }
6029
6030 public class Manifest
6031 {
6032 public string name { get; set; }
6033 public string short_name { get; set; }
6034 public string start_url { get; set; }
6035 public string display { get; set; }
6036 public string background_color { get; set; }
6037 public string theme_color { get; set; }
6038 public List<ManifestIcon> icons { get; set; }
6039 }
6040 }
6041 @{
6042 if (!String.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("AppName")) && Model.Area.Item.GetItem("Settings").GetFile("AppIcon") != null) {
6043 Manifest manifest = new Manifest
6044 {
6045 name = Model.Area.Item.GetItem("Settings").GetString("AppName"),
6046 short_name = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("AppShortName")) ? Model.Area.Item.GetItem("Settings").GetString("AppShortName") : Model.Area.Item.GetItem("Settings").GetString("AppName"),
6047 start_url = "/",
6048 display = "standalone",
6049 background_color = Model.Area.Item.GetItem("Settings").GetString("AppBackgroundColor"),
6050 theme_color = Model.Area.Item.GetItem("Settings").GetString("AppThemeColor")
6051 };
6052
6053 manifest.icons = new List<ManifestIcon> {
6054 new ManifestIcon {
6055 src = "/Admin/Public/GetImage.ashx?width=192&height=192&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded,
6056 sizes = "192x192",
6057 type = "image/png"
6058 },
6059 new ManifestIcon {
6060 src = "/Admin/Public/GetImage.ashx?width=512&height=512&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded,
6061 sizes = "512x512",
6062 type = "image/png"
6063 },
6064 new ManifestIcon {
6065 src = "/Admin/Public/GetImage.ashx?width=1024&height=1024&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded,
6066 sizes = "1024x1024",
6067 type = "image/png"
6068 }
6069 };
6070
6071 string manifestFilePath = HttpContext.Current.Request.MapPath("/Files/Templates/Designs/Rapido/manifest.json");
6072 string manifestJSON = Newtonsoft.Json.JsonConvert.SerializeObject(manifest);
6073 string currentManifest = File.ReadAllText(manifestFilePath);
6074
6075 if (manifestJSON != currentManifest)
6076 {
6077 File.WriteAllText(manifestFilePath, manifestJSON);
6078 }
6079 }
6080 }
6081
6082 @{
6083 var swatches = new Dynamicweb.Content.Items.ColorSwatchService();
6084 var brandColors = swatches.GetColorSwatch(1);
6085 string brandColorOne = brandColors.Palette["BrandColor1"];
6086
6087 //clear cart on configurator page. This template only used here.
6088 int configuratorPageId = GetPageIdByNavigationTag("ConfiguratorPage");
6089 if(configuratorPageId == Model.ID)
6090 {
6091 var cartService = new Dynamicweb.Ecommerce.Frontend.Cart.CartService();
6092 if (cartService.CartIsPresent())
6093 {
6094 cartService.ClearCart();
6095 }
6096 }
6097 }
6098
6099 <!DOCTYPE html>
6100
6101 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName">
6102 <head>
6103 <!-- Rapido version 3.1 -->
6104 <meta charset="utf-8" />
6105 <title>@Model.Title</title>
6106 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6107 <meta name="robots" content="index, follow">
6108 <meta name="theme-color" content="@brandColorOne" />
6109 <meta name="facebook-domain-verification" content="x7ajpopne9b3nip3tu0o4nzl18sr1e" />
6110
6111 @Model.MetaTags
6112
6113 <!-- Favicon -->
6114 <link href="@favicon" rel="icon" type="image/png">
6115
6116 <!-- Base (Default, wireframe) styles -->
6117 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/base/base.min.css" type="text/css">
6118
6119 <!-- Rapido Css from Website Settings -->
6120 <link rel="stylesheet" id="rapidoCss" href="@autoCssLink" type="text/css">
6121
6122 <!-- Ignite Css (Custom site specific styles) -->
6123 <link rel="stylesheet" id="igniteCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/ignite/ignite.min.css">
6124 <!-- Custom Css (Custom site specific styles) -->
6125 <link rel="stylesheet" id="CustomCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/custom.css?q=27012025">
6126
6127 <!-- Font awesome -->
6128 <link rel="stylesheet" href="@fontAwesomeCssLink" type="text/css">
6129
6130 <!-- Flag icon -->
6131 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/fonts/flag-icon.min.css" type="text/css">
6132
6133 <!-- Google fonts -->
6134 @{
6135 var family = string.Join("%7C", fonts.Where(x => !string.IsNullOrEmpty(x)).Distinct().Select(x => string.Format("{0}:100,200,300,400,500,600,700,800,900", x)));
6136 }
6137 <link href="https://fonts.googleapis.com/css?family=@family" rel="stylesheet">
6138 @{
6139 PushPromise(favicon);
6140 PushPromise(fontAwesomeCssLink);
6141 PushPromise("/Files/Templates/Designs/Rapido/css/base/base.min.css");
6142 PushPromise(autoCssLink);
6143 PushPromise("/Files/Templates/Designs/Rapido/css/ignite/ignite.min.css");
6144 PushPromise("/Files/Images/placeholder.gif");
6145 PushPromise("/Files/Templates/Designs/Rapido/css/fonts/flag-icon.min.css");
6146 }
6147
6148 @if (!String.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("AppName")))
6149 {
6150 <link rel="manifest" href="/Files/Templates/Designs/Rapido/manifest.json">
6151 PushPromise("/Files/Templates/Designs/Rapido/manifest.json");
6152 }
6153 </head>
6154
6155 <body>
6156
6157 @* The @RenderBlockList base helper is included in Components/GridBuilder.cshtml *@
6158 @RenderBlockList(masterPage.BlocksRoot.BlocksList)
6159
6160
6161 @helper RenderMasterHeader()
6162 {
6163 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterHeader").OrderBy(item => item.SortId).ToList();
6164 bool isNavigationStickyMenu = Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("StickyTop");
6165 string stickyTop = isNavigationStickyMenu ? "top-container--sticky" : "";
6166
6167 <header class="top-container @stickyTop dw-mod" id="Top">
6168 @RenderBlockList(subBlocks)
6169 </header>
6170 }
6171
6172 @helper RenderMain()
6173 {
6174 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterMain").OrderBy(item => item.SortId).ToList();
6175 <main class="site dw-mod">
6176 @RenderBlockList(subBlocks)
6177 </main>
6178 }
6179
6180 @helper RenderPageContent()
6181 {
6182 bool isNavigationStickyMenu = Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("StickyTop");
6183 string pagePos = isNavigationStickyMenu ? "js-page-pos" : "";
6184
6185 <div id="Page" class="page @pagePos">
6186 <section class="center-container content-container dw-mod" id="content">
6187 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
6188
6189
6190 @using Dynamicweb.Rapido.Blocks.Components
6191 @using Dynamicweb.Rapido.Blocks.Components.Articles
6192 @using Dynamicweb.Rapido.Blocks.Components.General
6193 @using Dynamicweb.Rapido.Blocks
6194
6195 @functions {
6196 BlocksPage articlePage = BlocksPage.GetBlockPage("NewsArticle");
6197 }
6198
6199 @{
6200 ArticleHeader topBanner = new ArticleHeader
6201 {
6202 Layout = ArticleHeaderLayout.Clean,
6203 Image = new Image { Path = Model.Item.GetFile("Image").PathUrlEncoded },
6204 Heading = Model.Item.GetString("Title"),
6205 Subheading = Model.Item.GetString("Summary"),
6206 TextColor = "#fff",
6207 Category = Model.Item.GetString("Author"),
6208 Date = Model.Item.GetString("Date"),
6209 ButtonLayout = ButtonLayout.Primary,
6210 TextLayout = ArticleHeaderTextLayout.Full
6211 };
6212
6213 Block articleContainer = new Block
6214 {
6215 Id = "ArticleContainer",
6216 SortId = 10,
6217 Design = new Design
6218 {
6219 RenderType = RenderType.Row
6220 },
6221 BlocksList = new List<Block> {
6222 new Block {
6223 Id = "ArticleBody",
6224 SortId = 20,
6225 Design = new Design {
6226 RenderType = RenderType.Column,
6227 Size = "8"
6228 },
6229 BlocksList = new List<Block> {
6230 new Block {
6231 Id = "ArticleBodyRow",
6232 SortId = 10,
6233 Design = new Design {
6234 RenderType = RenderType.Row
6235 },
6236 BlocksList = new List<Block> {
6237 new Block {
6238 Id = "ArticleHeader",
6239 SortId = 10,
6240 Component = topBanner,
6241 Design = new Design {
6242 RenderType = RenderType.Column,
6243 Size = "12",
6244 HidePadding = true,
6245 CssClass = "article-head"
6246 }
6247 },
6248 new Block {
6249 Id = "ArticleText",
6250 SortId = 20,
6251 Component = new ArticleText { Text = Model.Item.GetString("Text") },
6252 Design = new Design {
6253 RenderType = RenderType.Column,
6254 Size = "12",
6255 CssClass = "u-padding--lg"
6256 }
6257 },
6258 new Block {
6259 Id = "ArticleLink",
6260 SortId = 30,
6261 Component = new ArticleLink { Link = Model.Item.GetString("Link"), Title = Model.Item.GetString("LinkText"), ButtonLayout = ButtonLayout.Primary },
6262 Design = new Design {
6263 RenderType = RenderType.Column,
6264 Size = "12",
6265 CssClass = "u-padding--lg u-ta-right"
6266 }
6267 }
6268 }
6269 }
6270 }
6271 }
6272 }
6273 };
6274 articlePage.Add(articleContainer);
6275
6276 if (Model.PropertyItem.GetList("ShowBreadcrumb").SelectedValue == "True")
6277 {
6278 Block breadcrumb = new Block
6279 {
6280 Id = "ArticleBreadcrumb",
6281 SortId = 10,
6282 Component = new BreadcrumbNavigation { },
6283 Design = new Design
6284 {
6285 RenderType = RenderType.Column,
6286 Size = "12"
6287 }
6288 };
6289 articlePage.Add("ArticleContainer", breadcrumb);
6290 }
6291 }
6292
6293 @* The @RenderBlockList base helper is included in Components/GridBuilder.cshtml *@
6294 @RenderBlockList(articlePage.BlocksRoot.BlocksList)
6295
6296 </section>
6297 </div>
6298 }
6299
6300 </body>
6301 </html>
6302
6303