Error executing template "Designs/Rapido/ContentPage/Paragraph/Carousel.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_a1bfb94fe4a643acac3723a7a62090a6.<>c__DisplayClass57_0.<RenderTheSlide>b__0(TextWriter __razor_helper_writer) in F:\Domains\Sites\wolverinesupplies.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\Carousel.cshtml:line 2469
at CompiledRazorTemplates.Dynamic.RazorEngine_a1bfb94fe4a643acac3723a7a62090a6.Execute() in F:\Domains\Sites\wolverinesupplies.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\Carousel.cshtml:line 2448
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.ParagraphViewModel>
2 @using Dynamicweb.Frontend
3 @using Dynamicweb.Rapido.Blocks.Components
4 @using Dynamicweb.Rapido.Blocks.Components.General
5 @using Dynamicweb.Content
6 @using Dynamicweb.Content.Items
7 @using Dynamicweb
8
9 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel>
10 @using Dynamicweb.Frontend
11
12 @* Include the components *@
13 @using System.Text.RegularExpressions
14 @using System.Collections.Generic
15 @using System.Reflection
16 @using System.Web
17 @using System.Web.UI.HtmlControls
18 @using Dynamicweb.Rapido.Blocks.Components
19 @using Dynamicweb.Rapido.Blocks.Components.Articles
20 @using Dynamicweb.Rapido.Blocks.Components.Documentation
21 @using Dynamicweb.Rapido.Blocks
22
23
24 @*--- START: Base block renderers ---*@
25
26 @helper RenderBlockList(List<Block> blocks)
27 {
28 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false;
29 blocks = blocks.OrderBy(item => item.SortId).ToList();
30
31 foreach (Block item in blocks)
32 {
33 if (debug) {
34 <!-- Block START: @item.Id -->
35 }
36
37 if (item.Design == null)
38 {
39 @RenderBlock(item)
40 }
41 else if (item.Design.RenderType == RenderType.None) {
42 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
43
44 <div class="@cssClass dw-mod">
45 @RenderBlock(item)
46 </div>
47 }
48 else if (item.Design.RenderType != RenderType.Hide)
49 {
50 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
51
52 if (!item.SkipRenderBlocksList) {
53 if (item.Design.RenderType == RenderType.Row)
54 {
55 <div class="grid grid--align-content-start @cssClass dw-mod" id="Block__@item.Id">
56 @RenderBlock(item)
57 </div>
58 }
59
60 if (item.Design.RenderType == RenderType.Column)
61 {
62 string hidePadding = item.Design.HidePadding ? "u-no-padding" : "";
63 string size = item.Design.Size ?? "12";
64 size = Regex.IsMatch(size, @"\d") ? "md-" + item.Design.Size : item.Design.Size;
65
66 <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">
67 @RenderBlock(item)
68 </div>
69 }
70
71 if (item.Design.RenderType == RenderType.Table)
72 {
73 <table class="table @cssClass dw-mod" id="Block__@item.Id">
74 @RenderBlock(item)
75 </table>
76 }
77
78 if (item.Design.RenderType == RenderType.TableRow)
79 {
80 <tr class="@cssClass dw-mod" id="Block__@item.Id">
81 @RenderBlock(item)
82 </tr>
83 }
84
85 if (item.Design.RenderType == RenderType.TableColumn)
86 {
87 <td class="@cssClass dw-mod" id="Block__@item.Id">
88 @RenderBlock(item)
89 </td>
90 }
91
92 if (item.Design.RenderType == RenderType.CardHeader)
93 {
94 <div class="card-header @cssClass dw-mod">
95 @RenderBlock(item)
96 </div>
97 }
98
99 if (item.Design.RenderType == RenderType.CardBody)
100 {
101 <div class="card @cssClass dw-mod">
102 @RenderBlock(item)
103 </div>
104 }
105
106 if (item.Design.RenderType == RenderType.CardFooter)
107 {
108 <div class="card-footer @cssClass dw-mod">
109 @RenderBlock(item)
110 </div>
111 }
112 }
113 else
114 {
115 @RenderBlock(item)
116 }
117 }
118
119 if (debug) {
120 <!-- Block END: @item.Id -->
121 }
122 }
123 }
124
125 @helper RenderBlock(Block item)
126 {
127 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false;
128
129 if (item.Template != null)
130 {
131 @BlocksPage.RenderTemplate(item.Template)
132 }
133
134 if (item.Component != null)
135 {
136 string customSufix = "Custom";
137 string methodName = item.Component.HelperName;
138
139 ComponentBase[] methodParameters = new ComponentBase[1];
140 methodParameters[0] = item.Component;
141 Type methodType = this.GetType();
142
143 MethodInfo customMethod = methodType.GetMethod(methodName + customSufix);
144 MethodInfo generalMethod = methodType.GetMethod(methodName);
145
146 try {
147 if (debug) {
148 <!-- Component: @methodName.Replace("Render", "") -->
149 }
150 @customMethod.Invoke(this, methodParameters).ToString();
151 } catch {
152 try {
153 @generalMethod.Invoke(this, methodParameters).ToString();
154 } catch(Exception ex) {
155 throw new Exception(item.Component.GetType().Name + " method '" + methodName +"' could not be invoked", ex);
156 }
157 }
158 }
159
160 if (item.BlocksList.Count > 0 && !item.SkipRenderBlocksList)
161 {
162 @RenderBlockList(item.BlocksList)
163 }
164 }
165
166 @*--- END: Base block renderers ---*@
167
168 @using Dynamicweb.Rapido.Blocks.Components
169 @using Dynamicweb.Rapido.Blocks.Components.General
170 @using Dynamicweb.Rapido.Blocks
171 @using System.IO
172
173 @* Required *@
174 @using Dynamicweb.Rapido.Blocks.Components
175 @using Dynamicweb.Rapido.Blocks.Components.General
176 @using Dynamicweb.Rapido.Blocks
177
178
179 @helper Render(ComponentBase component)
180 {
181 if (component != null)
182 {
183 @component.Render(this)
184 }
185 }
186
187 @* Components *@
188 @using System.Reflection
189 @using Dynamicweb.Rapido.Blocks.Components.General
190
191
192 @* Component *@
193
194 @helper RenderIcon(Icon settings)
195 {
196 if (settings != null)
197 {
198 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
199
200 if (settings.Name != null)
201 {
202 if (string.IsNullOrEmpty(settings.Label))
203 {
204 <i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i>
205 }
206 else
207 {
208 if (settings.LabelPosition == IconLabelPosition.Before)
209 {
210 <div class="u-flex u-flex--align-items-center @settings.CssClass">@settings.Label <i class="@settings.Prefix @settings.Name u-margin-left" @color></i></div>
211 }
212 else
213 {
214 <div class="u-flex u-flex--align-items-center @settings.CssClass"><i class="@settings.Prefix @settings.Name u-margin-right--lg u-w20px" @color></i>@settings.Label</div>
215 }
216 }
217 }
218 else if (!string.IsNullOrEmpty(settings.Label))
219 {
220 @settings.Label
221 }
222 }
223 }
224 @using System.Reflection
225 @using Dynamicweb.Rapido.Blocks.Components.General
226 @using Dynamicweb.Rapido.Blocks.Components
227 @using Dynamicweb.Core
228
229 @* Component *@
230
231 @helper RenderButton(Button settings)
232 {
233 if (settings != null && (!string.IsNullOrEmpty(settings.Title) || settings.Icon != null))
234 {
235 Dictionary<string, string> attributes = new Dictionary<string, string>();
236 List<string> classList = settings.CssClass != null ? settings.CssClass.Split(' ').ToList() : new List<string>();
237 if (settings.Disabled) {
238 attributes.Add("disabled", "true");
239 classList.Add("disabled");
240 }
241
242 if (!string.IsNullOrEmpty(settings.ConfirmText) || !string.IsNullOrEmpty(settings.ConfirmTitle))
243 {
244 settings.Id = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N");
245 @RenderConfirmDialog(settings);
246 settings.OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = true";
247 }
248
249 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
250 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
251 if (!string.IsNullOrEmpty(settings.AltText))
252 {
253 attributes.Add("title", settings.AltText);
254 }
255
256 var onClickEvents = new List<string>();
257 if (!string.IsNullOrEmpty(settings.OnClick))
258 {
259 onClickEvents.Add(settings.OnClick);
260 }
261 if (!string.IsNullOrEmpty(settings.Href))
262 {
263 if (settings.Href.StartsWith("http") || settings.Href.StartsWith("/Files"))
264 {
265 onClickEvents.Add($"javascript:window.open('{settings.Href}', '_blank');");
266 }
267 else
268 {
269 onClickEvents.Add("location.href='" + settings.Href + "'");
270 }
271 }
272 if (onClickEvents.Count > 0)
273 {
274 attributes.Add("onClick", string.Join(";", onClickEvents));
275 }
276
277 if (settings.ButtonLayout != ButtonLayout.None)
278 {
279 classList.Add("btn");
280 string btnLayout = Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower();
281 if (btnLayout == "linkclean")
282 {
283 btnLayout = "link-clean"; //fix
284 }
285 classList.Add("btn--" + btnLayout);
286 }
287
288 if (settings.Icon == null)
289 {
290 settings.Icon = new Icon();
291 }
292
293 settings.Icon.CssClass += Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower() != "linkclean" ? " u-flex--align-center" : "";
294 settings.Icon.Label = settings.Title;
295
296 attributes.Add("type", Enum.GetName(typeof(ButtonType), settings.ButtonType).ToLower());
297
298 <button class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</button>
299 }
300 }
301
302 @helper RenderConfirmDialog(Button settings)
303 {
304 Modal confirmDialog = new Modal {
305 Id = settings.Id,
306 Width = ModalWidth.Sm,
307 Heading = new Heading
308 {
309 Level = 2,
310 Title = settings.ConfirmTitle
311 },
312 BodyText = settings.ConfirmText
313 };
314
315 confirmDialog.AddAction(new Button { Title = Translate("Cancel"), ButtonLayout = ButtonLayout.Secondary, OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = false"});
316 confirmDialog.AddAction(new Button { Title = Translate("OK"), ButtonLayout = ButtonLayout.Primary, OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = false;" + settings.OnClick });
317
318 @Render(confirmDialog)
319 }
320 @using Dynamicweb.Rapido.Blocks.Components.General
321 @using Dynamicweb.Rapido.Blocks.Components
322 @using Dynamicweb.Core
323
324 @helper RenderDashboard(Dashboard settings)
325 {
326 var widgets = settings.GetWidgets();
327
328 if (!string.IsNullOrEmpty(settings.WidgetsBaseBackgroundColor))
329 {
330 //set bg color for them
331
332 System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml(settings.WidgetsBaseBackgroundColor);
333 int r = Convert.ToInt16(color.R);
334 int g = Convert.ToInt16(color.G);
335 int b = Convert.ToInt16(color.B);
336
337 var count = widgets.Length;
338 var max = Math.Max(r, Math.Max(g, b));
339 double step = 255.0 / (max * count);
340 var i = 0;
341 foreach (var widget in widgets)
342 {
343 i++;
344
345 var shade = "rgb(" + Converter.ToString(r * step * i).Replace(",", ".") + ", " + Converter.ToString(g * step * i).Replace(",", ".") + ", " + Converter.ToString(b * step * i).Replace(",", ".") + ")";
346 widget.BackgroundColor = shade;
347 }
348 }
349
350 <div class="dashboard @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
351 @foreach (var widget in widgets)
352 {
353 <div class="dashboard__widget">
354 @Render(widget)
355 </div>
356 }
357 </div>
358 }
359 @using Dynamicweb.Rapido.Blocks.Components.General
360 @using Dynamicweb.Rapido.Blocks.Components
361
362 @helper RenderDashboardWidgetLink(DashboardWidgetLink settings)
363 {
364 if (!string.IsNullOrEmpty(settings.Link))
365 {
366 var backgroundStyles = "";
367 if (!string.IsNullOrEmpty(settings.BackgroundColor))
368 {
369 backgroundStyles = "style=\"background-color:" + settings.BackgroundColor + "\"";
370 }
371
372 <a href="@settings.Link" class="widget widget--link @settings.CssClass dw-mod" @backgroundStyles title="@settings.Title" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
373 <div class="u-center-middle u-color-light">
374 @if (settings.Icon != null)
375 {
376 settings.Icon.CssClass += "widget__icon";
377 @Render(settings.Icon)
378 }
379 <div class="widget__title">@settings.Title</div>
380 </div>
381 </a>
382 }
383 }
384 @using Dynamicweb.Rapido.Blocks.Components.General
385 @using Dynamicweb.Rapido.Blocks.Components
386
387 @helper RenderDashboardWidgetCounter(DashboardWidgetCounter settings)
388 {
389 var backgroundStyles = "";
390 if (!string.IsNullOrEmpty(settings.BackgroundColor))
391 {
392 backgroundStyles = "style='background-color:" + settings.BackgroundColor + "'";
393 }
394
395 <div class="widget @settings.CssClass dw-mod" @backgroundStyles @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
396 <div class="u-center-middle u-color-light">
397 @if (settings.Icon != null)
398 {
399 settings.Icon.CssClass += "widget__icon";
400 @Render(settings.Icon)
401 }
402 <div class="widget__counter">@settings.Count</div>
403 <div class="widget__title">@settings.Title</div>
404 </div>
405 </div>
406 }
407 @using System.Reflection
408 @using Dynamicweb.Rapido.Blocks.Components.General
409 @using Dynamicweb.Rapido.Blocks.Components
410 @using Dynamicweb.Core
411
412 @* Component *@
413
414 @helper RenderLink(Link settings)
415 {
416 if (settings != null && !string.IsNullOrEmpty(settings.Href) && (!string.IsNullOrEmpty(settings.Title) || settings.Icon != null))
417 {
418 Dictionary<string, string> attributes = new Dictionary<string, string>();
419 List<string> classList = settings.CssClass != null ? settings.CssClass.Split(' ').ToList() : new List<string>();
420 if (settings.Disabled)
421 {
422 attributes.Add("disabled", "true");
423 classList.Add("disabled");
424 }
425
426 if (!string.IsNullOrEmpty(settings.AltText))
427 {
428 attributes.Add("title", settings.AltText);
429 }
430
431 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
432 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
433 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onClick", settings.OnClick); }
434 attributes.Add("href", settings.Href);
435
436 if (settings.ButtonLayout != ButtonLayout.None)
437 {
438 classList.Add("btn");
439 string btnLayout = Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower();
440 if (btnLayout == "linkclean")
441 {
442 btnLayout = "link-clean"; //fix
443 }
444 classList.Add("btn--" + btnLayout);
445 }
446
447 if (settings.Icon == null)
448 {
449 settings.Icon = new Icon();
450 }
451 settings.Icon.Label = settings.Title;
452
453 if (settings.Target == LinkTargetType.Blank && settings.Rel == LinkRelType.None)
454 {
455 settings.Rel = LinkRelType.Noopener;
456 }
457 if (settings.Target != LinkTargetType.None)
458 {
459 attributes.Add("target", "_" + Enum.GetName(typeof(LinkTargetType), settings.Target).ToLower());
460 }
461 else if (settings.Href.StartsWith("http") || settings.Href.StartsWith("/Files"))
462 {
463 attributes.Add("target", "_blank");
464 }
465
466 if (settings.Download)
467 {
468 attributes.Add("download", "true");
469 }
470 if (settings.Rel != LinkRelType.None)
471 {
472 attributes.Add("rel", Enum.GetName(typeof(LinkRelType), settings.Rel).ToLower());
473 }
474
475 <a class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</a>
476 }
477 }
478 @using System.Reflection
479 @using Dynamicweb.Rapido.Blocks.Components
480 @using Dynamicweb.Rapido.Blocks.Components.General
481 @using Dynamicweb.Rapido.Blocks
482
483
484 @* Component *@
485
486 @helper RenderRating(Rating settings)
487 {
488 if (settings.Score > 0)
489 {
490 int rating = settings.Score;
491 string iconType = "fa-star";
492
493 switch (settings.Type.ToString()) {
494 case "Stars":
495 iconType = "fa-star";
496 break;
497 case "Hearts":
498 iconType = "fa-heart";
499 break;
500 case "Lemons":
501 iconType = "fa-lemon";
502 break;
503 case "Bombs":
504 iconType = "fa-bomb";
505 break;
506 }
507
508 <div class="u-ta-right">
509 @for (int i = 0; i < settings.OutOf; i++)
510 {
511 <i class="@(rating > i ? "fas" : "far") @iconType"></i>
512 }
513 </div>
514 }
515 }
516 @using System.Reflection
517 @using Dynamicweb.Rapido.Blocks.Components.General
518 @using Dynamicweb.Rapido.Blocks.Components
519
520
521 @* Component *@
522
523 @helper RenderSelectFieldOption(SelectFieldOption settings)
524 {
525 Dictionary<string, string> attributes = new Dictionary<string, string>();
526 if (settings.Checked) { attributes.Add("selected", "true"); }
527 if (settings.Disabled) { attributes.Add("disabled", "true"); }
528 if (settings.Value != null) { attributes.Add("value", settings.Value); }
529 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
530
531 <option @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Label</option>
532 }
533 @using System.Reflection
534 @using Dynamicweb.Rapido.Blocks.Components.General
535 @using Dynamicweb.Rapido.Blocks.Components
536
537
538 @* Component *@
539
540 @helper RenderNavigation(Navigation settings) {
541 @RenderNavigation(new
542 {
543 id = settings.Id,
544 cssclass = settings.CssClass,
545 startLevel = settings.StartLevel,
546 endlevel = settings.EndLevel,
547 expandmode = settings.Expandmode,
548 sitemapmode = settings.SitemapMode,
549 template = settings.Template
550 })
551 }
552 @using Dynamicweb.Rapido.Blocks.Components.General
553 @using Dynamicweb.Rapido.Blocks.Components
554
555
556 @* Component *@
557
558 @helper RenderBreadcrumbNavigation(BreadcrumbNavigation settings) {
559 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
560 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
561 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
562 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
563 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
564 settings.SitemapMode = false;
565
566 @RenderNavigation(settings)
567 }
568 @using Dynamicweb.Rapido.Blocks.Components.General
569 @using Dynamicweb.Rapido.Blocks.Components
570
571
572 @* Component *@
573
574 @helper RenderLeftNavigation(LeftNavigation settings) {
575 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
576 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
577 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
578 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
579 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
580
581 <div class="grid__cell">
582 @RenderNavigation(settings)
583 </div>
584 }
585 @using System.Reflection
586 @using Dynamicweb.Rapido.Blocks.Components.General
587 @using Dynamicweb.Core
588
589 @* Component *@
590
591 @helper RenderHeading(Heading settings)
592 {
593 if (settings != null && !string.IsNullOrEmpty(settings.Title))
594 {
595 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
596 string tagName = settings.Level != 0 ? "h" + settings.Level.ToString() : "div";
597
598 @("<" + tagName + " class=\"" + settings.CssClass + " dw-mod\" " + color + ">")
599 if (!string.IsNullOrEmpty(settings.Link))
600 {
601 @Render(new Link { Href = settings.Link, Icon = settings.Icon, Title = settings.Title, ButtonLayout = ButtonLayout.None })
602 }
603 else
604 {
605 if (settings.Icon == null)
606 {
607 settings.Icon = new Icon();
608 }
609 settings.Icon.Label = settings.Title;
610 @Render(settings.Icon)
611 }
612 @("</" + tagName + ">");
613 }
614 }
615 @using Dynamicweb.Rapido.Blocks.Components
616 @using Dynamicweb.Rapido.Blocks.Components.General
617 @using Dynamicweb.Rapido.Blocks
618
619
620 @* Component *@
621
622 @helper RenderImage(Image settings)
623 {
624 string target = !string.IsNullOrEmpty(settings.Link) && (settings.Link.StartsWith("http") || settings.Link.StartsWith("/Files")) ? "target='_blank'" : "";
625 if (settings.FilterPrimary != ImageFilter.None || settings.FilterSecondary != ImageFilter.None)
626 {
627 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
628 if (!string.IsNullOrEmpty(settings.FilterColor)) { optionalAttributes.Add("style", "background-color: " + settings.FilterColor); }
629
630 if (settings.Caption != null)
631 {
632 @:<div>
633 }
634
635 var primaryFilterClass = settings.FilterPrimary.ToString().ToLower();
636 var secondaryFilterClass = settings.FilterSecondary.ToString().ToLower();
637
638 <div class="image-filter image-filter--@primaryFilterClass u-position-relative dw-mod" @ComponentMethods.AddAttributes(optionalAttributes)>
639 <div class="image-filter image-filter--@secondaryFilterClass dw-mod">
640 @if (settings.Link != null)
641 {
642 <a href="@settings.Link" @target>
643 @RenderTheImage(settings)
644 </a>
645 }
646 else
647 {
648 @RenderTheImage(settings)
649 }
650 </div>
651 </div>
652
653 if (settings.Caption != null)
654 {
655 <span class="image-caption dw-mod">@settings.Caption</span>
656 @:</div>
657 }
658 }
659 else
660 {
661 if (settings.Caption != null)
662 {
663 @:<div>
664 }
665 if (!string.IsNullOrEmpty(settings.Link))
666 {
667 <a href="@settings.Link" @target>
668 @RenderTheImage(settings)
669 </a>
670 }
671 else
672 {
673 @RenderTheImage(settings)
674 }
675
676 if (settings.Caption != null)
677 {
678 <span class="image-caption dw-mod">@settings.Caption</span>
679 @:</div>
680 }
681 }
682 }
683
684 @helper RenderTheImage(Image settings)
685 {
686 if (settings != null)
687 {
688 string alternativeImage = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("AlternativeImage")) ? Pageview.AreaSettings.GetItem("Settings").GetFile("AlternativeImage").PathUrlEncoded : "/Images/missing_image.jpg";
689 string placeholderImage = "/Files/Images/placeholder.gif";
690 string imageEngine = "/Admin/Public/GetImage.ashx?";
691
692 string imageStyle = "";
693
694 switch (settings.Style)
695 {
696 case ImageStyle.Ball:
697 imageStyle = "grid__cell-img--ball";
698 break;
699
700 case ImageStyle.Triangle:
701 imageStyle = "grid__cell-img--triangle";
702 break;
703 }
704
705 if (settings.Style == ImageStyle.Ball || settings.Style == ImageStyle.Circle || settings.Style == ImageStyle.Triangle)
706 {
707 settings.ImageDefault.Crop = settings.ImageDefault.Crop == 5 ? settings.ImageDefault.Crop = 0 : settings.ImageDefault.Crop;
708
709 if (settings.ImageDefault != null)
710 {
711 settings.ImageDefault.Height = settings.ImageDefault.Width;
712 }
713 if (settings.ImageMedium != null)
714 {
715 settings.ImageMedium.Height = settings.ImageMedium.Width;
716 }
717 if (settings.ImageSmall != null)
718 {
719 settings.ImageSmall.Height = settings.ImageSmall.Width;
720 }
721 }
722
723 string defaultImage = imageEngine;
724 string imageSmall = "";
725 string imageMedium = "";
726
727 if (settings.DisableImageEngine)
728 {
729 defaultImage = settings.Path;
730
731 if (settings.ImageDefault != null)
732 {
733 placeholderImage = imageEngine + Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageDefault) + "Image=" + placeholderImage;
734 }
735 }
736 else
737 {
738 if (settings.ImageDefault != null)
739 {
740 if (settings.ImageDefault.Format == ImageFormat.Default)
741 {
742 settings.ImageDefault.Format = ImageFormat.WebP;
743 }
744
745 defaultImage += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageDefault);
746 placeholderImage = imageEngine + Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageDefault) + "Image=" + placeholderImage;
747
748 if (settings.Path.GetType() != typeof(string))
749 {
750 defaultImage += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
751 defaultImage += settings.Path != null && settings.Path.GetFocalPointParameters() != "" ? "&" + settings.Path.GetFocalPointParameters() : "";
752 }
753 else
754 {
755 defaultImage += settings.Path != null ? "Image=" + settings.Path : "";
756 }
757
758 defaultImage += "&AlternativeImage=" + alternativeImage;
759 }
760
761 if (settings.ImageSmall != null)
762 {
763 if (settings.ImageSmall.Format == ImageFormat.Default)
764 {
765 settings.ImageSmall.Format = ImageFormat.WebP;
766 }
767
768 imageSmall = "data-src-small=\"" + imageEngine;
769 imageSmall += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageSmall);
770
771 if (settings.Path.GetType() != typeof(string))
772 {
773 imageSmall += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
774 imageSmall += settings.Path != null && settings.Path.GetFocalPointParameters() != "" ? "&" + settings.Path.GetFocalPointParameters() : "";
775 }
776 else
777 {
778 imageSmall += settings.Path != null ? "Image=" + settings.Path : "";
779 }
780
781 imageSmall += "&alternativeImage=" + alternativeImage;
782
783 imageSmall += "\"";
784 }
785
786 if (settings.ImageMedium != null)
787 {
788 if (settings.ImageMedium.Format == ImageFormat.Default)
789 {
790 settings.ImageMedium.Format = ImageFormat.WebP;
791 }
792
793 imageMedium = "data-src-medium=\"" + imageEngine;
794 imageMedium += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageMedium);
795
796 if (settings.Path.GetType() != typeof(string))
797 {
798 imageMedium += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
799 imageMedium += settings.Path != null && settings.Path.GetFocalPointParameters() != "" ? "&" + settings.Path.GetFocalPointParameters() : "";
800 }
801 else
802 {
803 imageMedium += settings.Path != null ? "Image=" + settings.Path : "";
804 }
805
806 imageMedium += "&alternativeImage=" + alternativeImage;
807
808 imageMedium += "\"";
809 }
810 }
811
812 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
813 if (!string.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick); }
814 if (!string.IsNullOrEmpty(settings.Title))
815 {
816 optionalAttributes.Add("alt", settings.Title);
817 }
818 else
819 {
820 optionalAttributes.Add("alt", "");
821 }
822
823 var height = "";
824 var width = "";
825
826 if (settings.ImageDefault?.Width > 0 && settings.ImageDefault?.Height > 0)
827 {
828 height = $"height='{settings.ImageDefault.Height}'";
829 width = $"width='{settings.ImageDefault.Width}'";
830 }
831
832 if (settings.DisableLazyLoad)
833 {
834 <img @height @width id="@settings.Id" class="@imageStyle @settings.CssClass dw-mod" src="@defaultImage" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
835 }
836 else
837 {
838 <img @height @width id="@settings.Id" class="b-lazy @imageStyle @settings.CssClass dw-mod" src="@placeholderImage" data-src="@defaultImage" @imageSmall @imageMedium @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
839 }
840 }
841 }
842 @using System.Reflection
843 @using Dynamicweb.Rapido.Blocks.Components.General
844 @using Dynamicweb.Rapido.Blocks.Components
845
846 @* Component *@
847
848 @helper RenderFileField(FileField settings)
849 {
850 var attributes = new Dictionary<string, string>();
851 if (string.IsNullOrEmpty(settings.Id))
852 {
853 settings.Id = Guid.NewGuid().ToString("N");
854 }
855
856 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
857 if (settings.Disabled) { attributes.Add("disabled", "true"); }
858 if (settings.Required) { attributes.Add("required", "true"); }
859 if (settings.Multiple) { attributes.Add("multiple", "true"); }
860 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
861 if (string.IsNullOrEmpty(settings.ChooseFileText))
862 {
863 settings.ChooseFileText = Translate("Choose file");
864 }
865 if (string.IsNullOrEmpty(settings.NoFilesChosenText))
866 {
867 settings.NoFilesChosenText = Translate("No files chosen...");
868 }
869 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
870
871 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
872
873 string setValueToFakeInput = "FileUpload.setValueToFakeInput(this)";
874 attributes.Add("onchange", setValueToFakeInput + (!string.IsNullOrEmpty(settings.OnChange) ? settings.OnChange : ""));
875
876 attributes.Add("type", "file");
877 if (settings.Value != null) { attributes.Add("value", settings.Value); }
878 settings.CssClass = "u-full-width " + settings.CssClass;
879
880 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
881
882 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
883 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
884 {
885 <div class="u-full-width">
886 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
887 @if (settings.Link != null) {
888 <div class="u-pull--right">
889 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
890 @Render(settings.Link)
891 </div>
892 }
893 </div>
894
895 }
896
897 @if (!string.IsNullOrEmpty(settings.HelpText))
898 {
899 <small class="form__help-text">@settings.HelpText</small>
900 }
901
902 <div class="form__field-combi file-input u-no-margin dw-mod">
903 <input @ComponentMethods.AddAttributes(resultAttributes) class="file-input__real-input u-visually-hidden hidden-required-input" data-no-files-text="@settings.NoFilesChosenText" data-many-files-text="@Translate("files")" />
904 <label for="@settings.Id" class="file-input__btn btn--secondary btn dw-mod">@settings.ChooseFileText</label>
905 <label for="@settings.Id" class="@settings.CssClass file-input__fake-input js-fake-input dw-mod">@settings.NoFilesChosenText</label>
906 @if (settings.UploadButton != null)
907 {
908 settings.UploadButton.CssClass += " btn--condensed u-no-margin";
909 @Render(settings.UploadButton)
910 }
911 </div>
912 @Render(new NotificationMessage { Message = settings.ErrorMessage })
913 </div>
914 }
915 @using System.Reflection
916 @using Dynamicweb.Rapido.Blocks.Components.General
917 @using Dynamicweb.Rapido.Blocks.Components
918 @using Dynamicweb.Core
919 @using System.Linq
920
921 @* Component *@
922
923 @helper RenderDateTimeField(DateTimeField settings)
924 {
925 if (string.IsNullOrEmpty(settings.Id))
926 {
927 settings.Id = Guid.NewGuid().ToString("N");
928 }
929
930 var textField = new TextField {
931 Name = settings.Name,
932 Id = settings.Id,
933 Label = settings.Label,
934 HelpText = settings.HelpText,
935 Value = settings.Value,
936 Disabled = settings.Disabled,
937 Required = settings.Required,
938 ErrorMessage = settings.ErrorMessage,
939 CssClass = settings.CssClass,
940 WrapperCssClass = settings.WrapperCssClass,
941 OnChange = settings.OnChange,
942 OnClick = settings.OnClick,
943 Link = settings.Link,
944 ExtraAttributes = settings.ExtraAttributes,
945 //
946 Placeholder = settings.Placeholder
947 };
948
949 @Render(textField)
950
951 List<string> jsAttributes = new List<string>();
952
953 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'");
954
955 if (!string.IsNullOrEmpty(settings.DateFormat))
956 {
957 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'");
958 }
959 if (!string.IsNullOrEmpty(settings.MinDate))
960 {
961 jsAttributes.Add("minDate: '" + settings.MinDate + "'");
962 }
963 if (!string.IsNullOrEmpty(settings.MaxDate))
964 {
965 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'");
966 }
967 if (settings.IsInline)
968 {
969 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower());
970 }
971 if (settings.EnableTime)
972 {
973 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower());
974 }
975 if (settings.EnableWeekNumbers)
976 {
977 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower());
978 }
979
980 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value));
981
982 <script>
983 document.addEventListener("DOMContentLoaded", function () {
984 flatpickr("#@textField.Id", {
985 @string.Join(",", jsAttributes)
986 });
987 });
988 </script>
989 }
990 @using System.Reflection
991 @using Dynamicweb.Rapido.Blocks.Components.General
992 @using Dynamicweb.Rapido.Blocks.Components
993
994 @* Component *@
995
996 @helper RenderTextField(TextField settings)
997 {
998 var attributes = new Dictionary<string, string>();
999 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1000 {
1001 settings.Id = Guid.NewGuid().ToString("N");
1002 }
1003
1004 /*base settings*/
1005 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1006 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1007 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1008 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1009 if (settings.Required) { attributes.Add("required", "true"); }
1010 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1011 /*end*/
1012
1013 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1014 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1015 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1016 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1017 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); }
1018 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); }
1019 attributes.Add("type", Enum.GetName(typeof(TextFieldType), settings.Type).ToLower());
1020 if (settings.Type == TextFieldType.Password) { attributes.Add("autocomplete", "off"); };
1021 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1022
1023 settings.CssClass = "u-full-width " + settings.CssClass;
1024
1025 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1026
1027 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1028
1029 string noMargin = "u-no-margin";
1030 if (!settings.ReadOnly) {
1031 noMargin = "";
1032 }
1033
1034 <div class="form__field-group u-full-width @noMargin @settings.WrapperCssClass dw-mod">
1035 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1036 {
1037 <div class="u-full-width">
1038 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1039 @if (settings.Link != null) {
1040 <div class="u-pull--right">
1041 @Render(settings.Link)
1042 </div>
1043 }
1044 </div>
1045
1046 }
1047
1048 @if (!string.IsNullOrEmpty(settings.HelpText))
1049 {
1050 <small class="form__help-text">@settings.HelpText</small>
1051 }
1052
1053 @if (settings.ActionButton != null)
1054 {
1055 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1056 <div class="form__field-combi u-no-margin dw-mod">
1057 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1058 @Render(settings.ActionButton)
1059 </div>
1060 }
1061 else
1062 {
1063 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1064 }
1065
1066 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1067 </div>
1068 }
1069 @using System.Reflection
1070 @using Dynamicweb.Rapido.Blocks.Components.General
1071 @using Dynamicweb.Rapido.Blocks.Components
1072
1073 @* Component *@
1074
1075 @helper RenderNumberField(NumberField settings)
1076 {
1077 var attributes = new Dictionary<string, string>();
1078 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1079 {
1080 settings.Id = Guid.NewGuid().ToString("N");
1081 }
1082
1083 /*base settings*/
1084 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1085 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1086 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1087 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1088 if (settings.Required) { attributes.Add("required", "true"); }
1089 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1090 /*end*/
1091
1092 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1093 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1094 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1095 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1096 if (settings.Max != null) { attributes.Add("max", settings.Max.ToString()); }
1097 if (settings.Min != null) { attributes.Add("min", settings.Min.ToString()); }
1098 if (settings.Step != 0) { attributes.Add("step", settings.Step.ToString()); }
1099 if (settings.Value != null && !string.IsNullOrEmpty(settings.Value.ToString())) { attributes.Add("value", settings.Value.ToString()); }
1100 attributes.Add("type", "number");
1101
1102 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1103
1104 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1105 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
1106 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1107 {
1108 <div class="u-full-width">
1109 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1110 @if (settings.Link != null) {
1111 <div class="u-pull--right">
1112 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1113 @Render(settings.Link)
1114 </div>
1115 }
1116 </div>
1117
1118 }
1119
1120 @if (!string.IsNullOrEmpty(settings.HelpText))
1121 {
1122 <small class="form__help-text">@settings.HelpText</small>
1123 }
1124
1125 @if (settings.ActionButton != null)
1126 {
1127 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1128 <div class="form__field-combi u-no-margin dw-mod">
1129 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1130 @Render(settings.ActionButton)
1131 </div>
1132 }
1133 else
1134 {
1135 <div class="form__field-combi u-no-margin dw-mod">
1136 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1137 </div>
1138 }
1139
1140 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1141 </div>
1142 }
1143 @using System.Reflection
1144 @using Dynamicweb.Rapido.Blocks.Components.General
1145 @using Dynamicweb.Rapido.Blocks.Components
1146
1147
1148 @* Component *@
1149
1150 @helper RenderTextareaField(TextareaField settings)
1151 {
1152 Dictionary<string, string> attributes = new Dictionary<string, string>();
1153 string id = settings.Id;
1154 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(id))
1155 {
1156 id = Guid.NewGuid().ToString("N");
1157 }
1158
1159 if (!string.IsNullOrEmpty(id)) { attributes.Add("id", id); }
1160 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1161 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1162 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1163 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1164 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1165 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); }
1166 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1167 if (settings.Required) { attributes.Add("required", "true"); }
1168 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1169 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); }
1170 if (settings.Rows != 0) { attributes.Add("rows", settings.Rows.ToString()); }
1171 attributes.Add("name", settings.Name);
1172
1173 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1174
1175 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1176 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1177 {
1178 <div class="u-full-width">
1179 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1180 @if (settings.Link != null) {
1181 <div class="u-pull--right">
1182 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1183 @Render(settings.Link)
1184 </div>
1185 }
1186 </div>
1187 }
1188
1189 @if (!string.IsNullOrEmpty(settings.HelpText))
1190 {
1191 <small class="form__help-text">@settings.HelpText</small>
1192 }
1193
1194 <textarea class="u-full-width @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Value</textarea>
1195
1196 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1197 </div>
1198 }
1199 @using System.Reflection
1200 @using Dynamicweb.Rapido.Blocks.Components.General
1201 @using Dynamicweb.Rapido.Blocks.Components
1202
1203
1204 @* Component *@
1205
1206 @helper RenderHiddenField(HiddenField settings) {
1207 var attributes = new Dictionary<string, string>();
1208 attributes.Add("type", "hidden");
1209 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1210 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1211 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1212
1213 <input @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)/>
1214 }
1215 @using System.Reflection
1216 @using Dynamicweb.Rapido.Blocks.Components.General
1217 @using Dynamicweb.Rapido.Blocks.Components
1218
1219 @* Component *@
1220
1221 @helper RenderCheckboxField(CheckboxField settings)
1222 {
1223 var attributes = new Dictionary<string, string>();
1224 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1225 {
1226 settings.Id = Guid.NewGuid().ToString("N");
1227 }
1228
1229 /*base settings*/
1230 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1231 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1232 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1233 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1234 if (settings.Required) { attributes.Add("required", "true"); }
1235 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1236 /*end*/
1237
1238 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1239
1240 attributes.Add("type", "checkbox");
1241 if (settings.Checked) { attributes.Add("checked", "true"); }
1242 settings.CssClass = "form__control " + settings.CssClass;
1243 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1244
1245 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1246
1247 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1248 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1249 @if (!string.IsNullOrEmpty(settings.Label))
1250 {
1251 <label for="@settings.Id" class="dw-mod">@settings.Label</label>
1252 }
1253
1254 @if (settings.Link != null) {
1255 <span>
1256 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1257 @Render(settings.Link)
1258 </span>
1259 }
1260
1261 @if (!string.IsNullOrEmpty(settings.HelpText))
1262 {
1263 <small class="form__help-text checkbox-help dw-mod">@settings.HelpText</small>
1264 }
1265 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1266 </div>
1267 }
1268 @using System.Reflection
1269 @using Dynamicweb.Rapido.Blocks.Components.General
1270 @using Dynamicweb.Rapido.Blocks.Components
1271
1272
1273 @* Component *@
1274
1275 @helper RenderCheckboxListField(CheckboxListField settings)
1276 {
1277 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1278 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1279 {
1280 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1281 if (!string.IsNullOrEmpty(settings.Label)) { <label class="u-pull--left">@settings.Label</label> }
1282 // Adding input type radio as a work around for HTML5 validation for checkbox list
1283 if (settings.Required) {<input type="radio" name="@settings.Name" class="u-visually-hidden hidden-required-input" required /> }
1284 if (!string.IsNullOrEmpty(settings.HelpText)) { <small class="form__help-text">@settings.HelpText</small> }
1285 if (settings.Link != null) {
1286 <div class="u-pull--right">
1287 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1288 @Render(settings.Link)
1289 </div>
1290 }
1291 }
1292
1293 <div class="forms__fields-options">
1294 @foreach (var item in settings.Options)
1295 {
1296 if (settings.Required)
1297 {
1298 item.OnChange = "Forms.ValidateRequiredList(this)";
1299 }
1300 if (settings.Disabled)
1301 {
1302 item.Disabled = true;
1303 }
1304 if (!string.IsNullOrEmpty(settings.Name))
1305 {
1306 item.Name = settings.Name;
1307 }
1308 if (!string.IsNullOrEmpty(settings.CssClass))
1309 {
1310 item.CssClass += settings.CssClass;
1311 }
1312
1313 /* value is not supported */
1314
1315 if (!string.IsNullOrEmpty(settings.OnClick))
1316 {
1317 item.OnClick += settings.OnClick;
1318 }
1319 if (!string.IsNullOrEmpty(settings.OnChange))
1320 {
1321 item.OnChange += settings.OnChange;
1322 }
1323 @Render(item)
1324 }
1325 </div>
1326
1327 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1328 </div>
1329 }
1330 @using Dynamicweb.Rapido.Blocks.Components.General
1331
1332 @* Component *@
1333
1334 @helper RenderSearch(Search settings)
1335 {
1336 var searchValue = HttpContext.Current.Request.QueryString.Get(settings.SearchParameter) ?? "";
1337 var groupValue = HttpContext.Current.Request.QueryString.Get(settings.GroupsParameter) ?? "";
1338
1339 if (string.IsNullOrEmpty(settings.Id))
1340 {
1341 settings.Id = Guid.NewGuid().ToString("N");
1342 }
1343
1344 var resultAttributes = new Dictionary<string, string>();
1345
1346 if (settings.PageSize != 0)
1347 {
1348 resultAttributes.Add("data-page-size", settings.PageSize.ToString());
1349 }
1350 if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl))
1351 {
1352 resultAttributes.Add("data-groups-feed-url", settings.GroupItemsFeedUrl);
1353 if (!string.IsNullOrEmpty(groupValue))
1354 {
1355 resultAttributes.Add("data-selected-group", groupValue);
1356 }
1357 if (!string.IsNullOrEmpty(settings.GroupsParameter))
1358 {
1359 resultAttributes.Add("data-groups-parameter", settings.GroupsParameter);
1360 }
1361 }
1362 resultAttributes.Add("data-force-init", "true");
1363 if (settings.GoToFirstSearchResultOnEnter)
1364 {
1365 resultAttributes.Add("data-go-to-first-search-result-on-enter", settings.GoToFirstSearchResultOnEnter.ToString().ToLower());
1366 }
1367 if (!string.IsNullOrEmpty(settings.SearchParameter))
1368 {
1369 resultAttributes.Add("data-search-parameter", settings.SearchParameter);
1370 }
1371 resultAttributes.Add("data-search-feed-url", settings.SearchData.SearchFeedUrl);
1372 resultAttributes.Add("data-results-template-id", settings.SearchData.ResultsTemplateId);
1373
1374 if (settings.SecondSearchData != null)
1375 {
1376 resultAttributes.Add("data-second-search-feed-url", settings.SecondSearchData.SearchFeedUrl);
1377 resultAttributes.Add("data-second-results-template-id", settings.SecondSearchData.ResultsTemplateId);
1378 }
1379 if (!string.IsNullOrEmpty(settings.ResultsPageUrl))
1380 {
1381 resultAttributes.Add("data-results-page-url", settings.ResultsPageUrl);
1382 }
1383
1384 resultAttributes = resultAttributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1385
1386 string searchFieldCss = (settings.SearchButton == null) ? "search--with-icon" : "";
1387
1388 <div class="search @settings.CssClass @searchFieldCss js-search-data-source dw-mod" id="@settings.Id" @ComponentMethods.AddAttributes(resultAttributes)>
1389 @if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl))
1390 {
1391 <button type="button" class="search__groups-btn dw-mod js-search-groups-btn">@Translate("All")</button>
1392 <ul class="dropdown dropdown--absolute-position dw-mod search__groups-results js-search-groups-list"></ul>
1393 }
1394
1395 <input type="text" class="search__field dw-mod js-search-field" placeholder="@settings.Placeholder" value="@searchValue">
1396
1397 <div class="dropdown dropdown--absolute-position search__results dw-mod js-search-results @(settings.SecondSearchData != null ? "search__results--combined" : "")">
1398 @if (settings.SecondSearchData != null)
1399 {
1400 <div class="search__column search__column--products dw-mod">
1401 <div class="search__column-header dw-mod">@Translate("Products")</div>
1402 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul>
1403 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl))
1404 {
1405 @Render(new Link {
1406 Title = Translate("View all"),
1407 CssClass = "js-view-all-button u-margin",
1408 Href = settings.SearchData.ResultsPageUrl
1409 });
1410 }
1411 </div>
1412 <div class="search__column search__column--pages dw-mod">
1413 <div class="search__column-header">@Translate("Pages")</div>
1414 <ul class="search__results-list dw-mod js-search-results-second-list" id="@(settings.Id)_SecondResultsList"></ul>
1415 @if (!string.IsNullOrEmpty(settings.SecondSearchData.ResultsPageUrl))
1416 {
1417 @Render(new Link
1418 {
1419 Title = Translate("View all"),
1420 CssClass = "js-view-all-button u-margin",
1421 Href = settings.SecondSearchData.ResultsPageUrl
1422 });
1423 }
1424 </div>
1425 }
1426 else
1427 {
1428 <div class="search__column search__column--only dw-mod">
1429 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul>
1430 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl))
1431 {
1432 @Render(new Link {
1433 Title = Translate("View all"),
1434 CssClass = "js-view-all-button u-margin",
1435 Href = settings.SearchData.ResultsPageUrl
1436 });
1437 }
1438 </div>
1439 }
1440 </div>
1441
1442 @if (settings.SearchButton != null)
1443 {
1444 settings.SearchButton.CssClass += " search__btn js-search-btn";
1445 if (settings.RenderDefaultSearchIcon)
1446 {
1447 settings.SearchButton.Icon = new Icon { Name = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue };
1448 }
1449 @Render(settings.SearchButton);
1450 }
1451 </div>
1452 }
1453 @using System.Reflection
1454 @using Dynamicweb.Rapido.Blocks.Components.General
1455 @using Dynamicweb.Rapido.Blocks.Components
1456
1457
1458 @* Component *@
1459
1460 @helper RenderSelectField(SelectField settings)
1461 {
1462 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1463 {
1464 settings.Id = Guid.NewGuid().ToString("N");
1465 }
1466
1467 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1468
1469 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
1470 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1471 {
1472 <div class="u-full-width">
1473 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1474 @if (settings.Link != null) {
1475 <div class="u-pull--right">
1476 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1477 @Render(settings.Link)
1478 </div>
1479 }
1480 </div>
1481 }
1482
1483 @if (!string.IsNullOrEmpty(settings.HelpText))
1484 {
1485 <small class="form__help-text">@settings.HelpText</small>
1486 }
1487
1488 @if (settings.ActionButton != null)
1489 {
1490 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1491 <div class="form__field-combi u-no-margin dw-mod">
1492 @RenderSelectBase(settings)
1493 @Render(settings.ActionButton)
1494 </div>
1495 }
1496 else
1497 {
1498 @RenderSelectBase(settings)
1499 }
1500
1501 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1502 </div>
1503 }
1504
1505 @helper RenderSelectBase(SelectField settings)
1506 {
1507 var attributes = new Dictionary<string, string>();
1508
1509 /*base settings*/
1510 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1511 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1512 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1513 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1514 if (settings.Required) { attributes.Add("required", "true"); }
1515 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1516 /*end*/
1517
1518 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1519
1520 <select @ComponentMethods.AddAttributes(resultAttributes) class="u-full-width @settings.CssClass dw-mod">
1521 @if (settings.Default != null)
1522 {
1523 @Render(settings.Default)
1524 }
1525
1526 @foreach (var item in settings.Options)
1527 {
1528 if (settings.Value != null) {
1529 item.Checked = item.Value == settings.Value;
1530 }
1531 @Render(item)
1532 }
1533 </select>
1534 }
1535 @using System.Reflection
1536 @using Dynamicweb.Rapido.Blocks.Components.General
1537 @using Dynamicweb.Rapido.Blocks.Components
1538
1539 @* Component *@
1540
1541 @helper RenderRadioButtonField(RadioButtonField settings)
1542 {
1543 var attributes = new Dictionary<string, string>();
1544 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1545 {
1546 settings.Id = Guid.NewGuid().ToString("N");
1547 }
1548
1549 /*base settings*/
1550 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1551 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1552 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1553 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1554 if (settings.Required) { attributes.Add("required", "true"); }
1555 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1556 /*end*/
1557
1558 attributes.Add("type", "radio");
1559 if (settings.Checked) { attributes.Add("checked", "true"); }
1560 settings.CssClass = "form__control " + settings.CssClass;
1561 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1562
1563 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1564
1565 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1566 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1567 @if (!string.IsNullOrEmpty(settings.Label))
1568 {
1569 <label for="@settings.Id" class="dw-mod">@settings.Label</label>
1570 }
1571 @if (!string.IsNullOrEmpty(settings.HelpText))
1572 {
1573 <small class="form__help-text">@settings.HelpText</small>
1574 }
1575 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1576 </div>
1577 }
1578 @using System.Reflection
1579 @using Dynamicweb.Rapido.Blocks.Components.General
1580 @using Dynamicweb.Rapido.Blocks.Components
1581
1582
1583 @* Component *@
1584
1585 @helper RenderRadioButtonListField(RadioButtonListField settings)
1586 {
1587 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1588
1589 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1590 @if (!string.IsNullOrEmpty(settings.Label))
1591 {
1592 <label>@settings.Label</label>
1593 }
1594 @if (settings.Required) {<input type="radio" name="@settings.Name" class="u-visually-hidden hidden-required-input" required /> }
1595
1596 @if (!string.IsNullOrEmpty(settings.HelpText))
1597 {
1598 <small class="form__help-text">@settings.HelpText</small>
1599 }
1600
1601 <div class="forms__fields-options">
1602 @foreach (var item in settings.Options)
1603 {
1604 if (settings.Disabled)
1605 {
1606 item.Disabled = true;
1607 }
1608 if (!string.IsNullOrEmpty(settings.Name))
1609 {
1610 item.Name = settings.Name;
1611 }
1612 if (settings.Value != null && settings.Value == item.Value)
1613 {
1614 item.Checked = true;
1615 }
1616 if (!string.IsNullOrEmpty(settings.OnClick))
1617 {
1618 item.OnClick += settings.OnClick;
1619 }
1620 if (!string.IsNullOrEmpty(settings.OnChange))
1621 {
1622 item.OnChange += settings.OnChange;
1623 }
1624 if (!string.IsNullOrEmpty(settings.CssClass))
1625 {
1626 item.CssClass += settings.CssClass;
1627 }
1628 @Render(item)
1629 }
1630 </div>
1631
1632 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1633 </div>
1634 }
1635 @using System.Reflection
1636 @using Dynamicweb.Rapido.Blocks.Components.General
1637 @using Dynamicweb.Rapido.Blocks.Components
1638
1639
1640 @* Component *@
1641
1642 @helper RenderNotificationMessage(NotificationMessage settings)
1643 {
1644 if (!string.IsNullOrEmpty(settings.Message))
1645 {
1646 var attributes = new Dictionary<string, string>();
1647 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1648
1649 string messageTypeClass = Enum.GetName(typeof(NotificationMessageType), settings.MessageType).ToLower();
1650 string messageLayoutClass = Enum.GetName(typeof(NotificationMessageLayout), settings.MessageLayout).ToLower();
1651 string minHeightClass = settings.Icon != null ? "u-min-h70px" : "";
1652
1653 <div class="notification-message-@messageTypeClass notification-message-@messageLayoutClass @messageLayoutClass @minHeightClass @settings.CssClass u-full-width dw-mod" @ComponentMethods.AddAttributes(attributes)>
1654 @if (settings.Icon != null) {
1655 settings.Icon.Label = !string.IsNullOrEmpty(settings.Icon.Label) ? settings.Message + settings.Icon.Label : settings.Message;
1656 @Render(settings.Icon)
1657 } else {
1658 @settings.Message
1659 }
1660 </div>
1661 }
1662 }
1663 @using Dynamicweb.Rapido.Blocks.Components.General
1664
1665
1666 @* Component *@
1667
1668 @helper RenderHandlebarsRoot(HandlebarsRoot settings) {
1669 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : "";
1670
1671 <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>
1672 @if (settings.SubBlocks != null) {
1673 @RenderBlockList(settings.SubBlocks)
1674 }
1675 </div>
1676 }
1677 @using System.Reflection
1678 @using Dynamicweb.Rapido.Blocks.Components.General
1679 @using Dynamicweb.Rapido.Blocks.Components
1680 @using System.Text.RegularExpressions
1681
1682
1683 @* Component *@
1684
1685 @helper RenderSticker(Sticker settings) {
1686 if (!String.IsNullOrEmpty(settings.Title)) {
1687 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : "";
1688 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : "";
1689
1690 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
1691 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) {
1692 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : "";
1693 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : "";
1694 optionalAttributes.Add("style", styleTag);
1695 }
1696
1697 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div>
1698 }
1699 }
1700
1701 @using System.Reflection
1702 @using Dynamicweb.Rapido.Blocks.Components.General
1703 @using Dynamicweb.Rapido.Blocks.Components
1704
1705
1706 @* Component *@
1707
1708 @helper RenderStickersCollection(StickersCollection settings)
1709 {
1710 if (settings.Stickers.Count > 0)
1711 {
1712 string position = "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
1713
1714 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1715 @foreach (Sticker sticker in settings.Stickers)
1716 {
1717 @Render(sticker)
1718 }
1719 </div>
1720 }
1721 }
1722
1723 @using Dynamicweb.Rapido.Blocks.Components.General
1724
1725
1726 @* Component *@
1727
1728 @helper RenderForm(Form settings) {
1729 if (settings != null)
1730 {
1731 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
1732 if (!string.IsNullOrEmpty(settings.Action)) { optionalAttributes.Add("action", settings.Action); };
1733 if (!string.IsNullOrEmpty(settings.Name)) { optionalAttributes.Add("name", settings.Name); };
1734 if (!string.IsNullOrEmpty(settings.OnSubmit)) { optionalAttributes.Add("onsubmit", settings.OnSubmit); };
1735 var enctypes = new Dictionary<string, string>
1736 {
1737 { "multipart", "multipart/form-data" },
1738 { "text", "text/plain" },
1739 { "application", "application/x-www-form-urlencoded" }
1740 };
1741 if (settings.Enctype != FormEnctype.none) { optionalAttributes.Add("enctype", enctypes[Enum.GetName(typeof(FormEnctype), settings.Enctype).ToLower()]); };
1742 optionalAttributes.Add("method", settings.Method.ToString());
1743
1744 if (!string.IsNullOrEmpty(settings.FormStartMarkup))
1745 {
1746 @settings.FormStartMarkup
1747 }
1748 else
1749 {
1750 @:<form class="@settings.CssClass u-no-margin dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1751 }
1752
1753 foreach (var field in settings.GetFields())
1754 {
1755 @Render(field)
1756 }
1757
1758 @:</form>
1759 }
1760 }
1761 @using System.Reflection
1762 @using Dynamicweb.Rapido.Blocks.Components.General
1763 @using Dynamicweb.Rapido.Blocks.Components
1764
1765
1766 @* Component *@
1767
1768 @helper RenderText(Text settings)
1769 {
1770 @settings.Content
1771 }
1772 @using System.Reflection
1773 @using Dynamicweb.Rapido.Blocks.Components.General
1774 @using Dynamicweb.Rapido.Blocks.Components
1775
1776
1777 @* Component *@
1778
1779 @helper RenderContentModule(ContentModule settings) {
1780 if (!string.IsNullOrEmpty(settings.Content))
1781 {
1782 @settings.Content
1783 }
1784 }
1785 @using System.Reflection
1786 @using Dynamicweb.Rapido.Blocks.Components.General
1787 @using Dynamicweb.Rapido.Blocks.Components
1788
1789
1790 @* Component *@
1791
1792 @helper RenderModal(Modal settings) {
1793 if (settings != null)
1794 {
1795 string modalId = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N");
1796
1797 string onchange = !string.IsNullOrEmpty(settings.OnClose) ? "onchange=\"if(!this.checked){" + settings.OnClose + "}\"" : "";
1798
1799 <input type="checkbox" id="@(modalId)ModalTrigger" class="modal-trigger" @onchange />
1800
1801 <div class="modal-container">
1802 @if (!settings.DisableDarkOverlay)
1803 {
1804 <label for="@(modalId)ModalTrigger" id="@(modalId)ModalOverlay" class="modal-overlay"></label>
1805 }
1806 <div class="modal modal--@settings.Width.ToString().ToLower() modal-height--@settings.Height.ToString().ToLower()" id="@(modalId)Modal">
1807 @if (settings.Heading != null)
1808 {
1809 if (!string.IsNullOrEmpty(settings.Heading.Title))
1810 {
1811 <div class="modal__header">
1812 @Render(settings.Heading)
1813 </div>
1814 }
1815 }
1816 <div class="modal__body @(settings.Width.ToString().ToLower() == "full" ? "modal__body--full" : "")">
1817 @if (!string.IsNullOrEmpty(settings.BodyText))
1818 {
1819 @settings.BodyText
1820 }
1821 @if (settings.BodyTemplate != null)
1822 {
1823 @settings.BodyTemplate
1824 }
1825 @{
1826 var actions = settings.GetActions();
1827 }
1828 </div>
1829 @if (actions.Length > 0)
1830 {
1831 <div class="modal__footer">
1832 @foreach (var action in actions)
1833 {
1834 if (Pageview.Device.ToString() != "Mobile") {
1835 action.CssClass += " u-no-margin";
1836 } else {
1837 action.CssClass += " u-full-width u-margin-bottom";
1838 }
1839
1840 @Render(action)
1841 }
1842 </div>
1843 }
1844 <label class="modal__close-btn" for="@(modalId)ModalTrigger"></label>
1845 </div>
1846 </div>
1847 }
1848 }
1849 @using Dynamicweb.Rapido.Blocks.Components.General
1850
1851 @* Component *@
1852
1853 @helper RenderMediaListItem(MediaListItem settings)
1854 {
1855 <div class="media-list-item @settings.CssClass dw-mod" @(!string.IsNullOrEmpty(settings.Id) ? "id=\"" + settings.Id + "\"" : "")>
1856 @if (!string.IsNullOrEmpty(settings.Label))
1857 {
1858 if (!string.IsNullOrEmpty(settings.Link))
1859 {
1860 @Render(new Link
1861 {
1862 Href = settings.Link,
1863 CssClass = "media-list-item__sticker dw-mod",
1864 ButtonLayout = ButtonLayout.None,
1865 Title = settings.Label,
1866 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : ""
1867 })
1868 }
1869 else if (!string.IsNullOrEmpty(settings.OnClick))
1870 {
1871 <span class="media-list-item__sticker dw-mod" onclick="@(settings.OnClick)">
1872 <span class="u-uppercase">@settings.Label</span>
1873 </span>
1874 }
1875 else
1876 {
1877 <span class="media-list-item__sticker media-list-item__sticker--no-link dw-mod">
1878 <span class="u-uppercase">@settings.Label</span>
1879 </span>
1880 }
1881 }
1882 <div class="media-list-item__wrap">
1883 <div class="media-list-item__info dw-mod">
1884 <div class="media-list-item__header dw-mod">
1885 @if (!string.IsNullOrEmpty(settings.Title))
1886 {
1887 if (!string.IsNullOrEmpty(settings.Link))
1888 {
1889 @Render(new Link
1890 {
1891 Href = settings.Link,
1892 CssClass = "media-list-item__name dw-mod",
1893 ButtonLayout = ButtonLayout.None,
1894 Title = settings.Title,
1895 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : ""
1896 })
1897 }
1898 else if (!string.IsNullOrEmpty(settings.OnClick))
1899 {
1900 <span class="media-list-item__name dw-mod" onclick="@(settings.OnClick)">@settings.Title</span>
1901 }
1902 else
1903 {
1904 <span class="media-list-item__name media-list-item__name--no-link dw-mod">@settings.Title</span>
1905 }
1906 }
1907
1908 @if (!string.IsNullOrEmpty(settings.Status))
1909 {
1910 <div class="media-list-item__state dw-mod">@settings.Status</div>
1911 }
1912 </div>
1913 @{
1914 settings.InfoTable.CssClass += " media-list-item__parameters-table";
1915 }
1916
1917 @Render(settings.InfoTable)
1918 </div>
1919 <div class="media-list-item__actions dw-mod">
1920 <div class="media-list-item__actions-list dw-mod">
1921 @{
1922 var actions = settings.GetActions();
1923
1924 foreach (ButtonBase action in actions)
1925 {
1926 action.ButtonLayout = ButtonLayout.None;
1927 action.CssClass += " media-list-item__action link";
1928
1929 @Render(action)
1930 }
1931 }
1932 </div>
1933
1934 @if (settings.SelectButton != null && !string.IsNullOrEmpty(settings.SelectButton.Title))
1935 {
1936 settings.SelectButton.CssClass += " u-no-margin";
1937
1938 <div class="media-list-item__action-button">
1939 @Render(settings.SelectButton)
1940 </div>
1941 }
1942 </div>
1943 </div>
1944 </div>
1945 }
1946 @using Dynamicweb.Rapido.Blocks.Components.General
1947 @using Dynamicweb.Rapido.Blocks.Components
1948
1949 @helper RenderTable(Table settings)
1950 {
1951 Dictionary<string, string> attributes = new Dictionary<string, string>();
1952 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1953
1954 var enumToClasses = new Dictionary<TableDesign, string>
1955 {
1956 { TableDesign.Clean, "table--clean" },
1957 { TableDesign.Bordered, "table--bordered" },
1958 { TableDesign.Striped, "table--striped" },
1959 { TableDesign.Hover, "table--hover" },
1960 { TableDesign.Compact, "table--compact" },
1961 { TableDesign.Condensed, "table--condensed" },
1962 { TableDesign.NoTopBorder, "table--no-top-border" }
1963 };
1964 string tableDesignClass = "";
1965 if (settings.Design != TableDesign.None)
1966 {
1967 tableDesignClass = enumToClasses[settings.Design];
1968 }
1969
1970 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableDesign.None) { attributes.Add("class", "table " + tableDesignClass + " " + settings.CssClass + " dw-mod"); }
1971
1972 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
1973
1974 <table @ComponentMethods.AddAttributes(resultAttributes)>
1975 @if (settings.Header != null)
1976 {
1977 <thead>
1978 @Render(settings.Header)
1979 </thead>
1980 }
1981 <tbody>
1982 @foreach (var row in settings.Rows)
1983 {
1984 @Render(row)
1985 }
1986 </tbody>
1987 @if (settings.Footer != null)
1988 {
1989 <tfoot>
1990 @Render(settings.Footer)
1991 </tfoot>
1992 }
1993 </table>
1994 }
1995 @using Dynamicweb.Rapido.Blocks.Components.General
1996 @using Dynamicweb.Rapido.Blocks.Components
1997
1998 @helper RenderTableRow(TableRow settings)
1999 {
2000 Dictionary<string, string> attributes = new Dictionary<string, string>();
2001 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2002
2003 var enumToClasses = new Dictionary<TableRowDesign, string>
2004 {
2005 { TableRowDesign.NoBorder, "table__row--no-border" },
2006 { TableRowDesign.Border, "table__row--border" },
2007 { TableRowDesign.TopBorder, "table__row--top-line" },
2008 { TableRowDesign.BottomBorder, "table__row--bottom-line" },
2009 { TableRowDesign.Solid, "table__row--solid" }
2010 };
2011
2012 string tableRowDesignClass = "";
2013 if (settings.Design != TableRowDesign.None)
2014 {
2015 tableRowDesignClass = enumToClasses[settings.Design];
2016 }
2017
2018 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableRowDesign.None) { attributes.Add("class", "table__row " + tableRowDesignClass + " " + settings.CssClass + " dw-mod"); }
2019
2020 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2021
2022 <tr @ComponentMethods.AddAttributes(resultAttributes)>
2023 @foreach (var cell in settings.Cells)
2024 {
2025 if (settings.IsHeaderRow)
2026 {
2027 cell.IsHeader = true;
2028 }
2029 @Render(cell)
2030 }
2031 </tr>
2032 }
2033 @using Dynamicweb.Rapido.Blocks.Components.General
2034 @using Dynamicweb.Rapido.Blocks.Components
2035 @using Dynamicweb.Core
2036
2037 @helper RenderTableCell(TableCell settings)
2038 {
2039 Dictionary<string, string> attributes = new Dictionary<string, string>();
2040 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2041 if (settings.Colspan != 0) { attributes.Add("colspan", Converter.ToString(settings.Colspan)); }
2042 if (settings.Rowspan != 0) { attributes.Add("rowspan", Converter.ToString(settings.Rowspan)); }
2043 if (!string.IsNullOrEmpty(settings.CssClass)) { attributes.Add("class", settings.CssClass + " dw-mod"); }
2044
2045 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2046
2047 string tagName = settings.IsHeader ? "th" : "td";
2048
2049 @("<" + tagName + " " + ComponentMethods.AddAttributes(resultAttributes) + ">")
2050 @settings.Content
2051 @("</" + tagName + ">");
2052 }
2053 @using System.Linq
2054 @using Dynamicweb.Rapido.Blocks.Components.General
2055
2056 @* Component *@
2057
2058 @helper RenderPagination(Dynamicweb.Rapido.Blocks.Components.General.Pagination settings)
2059 {
2060 var pageNumberQueryStringName = Dynamicweb.Rapido.Services.Pagination.GetPageNumberQueryStringName(settings); // Get the proper 'page number' query string parameter
2061 var queryParameters = Dynamicweb.Rapido.Services.Url.GetQueryParameters(pageNumberQueryStringName); // Get the NameValueCollection from the querystring
2062
2063 if (settings.NumberOfPages > 1)
2064 {
2065 string url = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + "/Default.aspx";
2066 string ariaLabel = !string.IsNullOrWhiteSpace(settings.AriaLabel) ? settings.AriaLabel : Translate("Page navigation");
2067 Dictionary<string, int> startAndEndPageNumber = Dynamicweb.Rapido.Services.Pagination.GetStartAndEndPageNumber(settings);
2068
2069 <div class="pager u-margin-top dw-mod @settings.CssClass" aria-label="@ariaLabel">
2070 @if (settings.ShowPagingInfo)
2071 {
2072 <div class="pager__info dw-mod">
2073 @Translate("Page") @settings.CurrentPageNumber @Translate("of") @settings.NumberOfPages
2074 </div>
2075 }
2076 <ul class="pager__list dw-mod">
2077 @if (!string.IsNullOrWhiteSpace(settings.FirstPageUrl) && settings.ShowFirstAndLastControls)
2078 {
2079 @Render(new PaginationItem { Link = settings.FirstPageUrl, Icon = settings.FirstIcon })
2080 }
2081 @if (!string.IsNullOrWhiteSpace(settings.PreviousPageUrl) && settings.ShowNextAndPrevControls)
2082 {
2083 @Render(new PaginationItem { Link = settings.PreviousPageUrl, Icon = settings.PrevIcon })
2084 }
2085 @if (settings.GetPages().Any())
2086 {
2087 foreach (var page in settings.GetPages())
2088 {
2089 @Render(page)
2090 }
2091 }
2092 else
2093 {
2094 for (var page = startAndEndPageNumber["StartPage"]; page <= startAndEndPageNumber["EndPage"]; page++)
2095 {
2096 queryParameters = Dynamicweb.Rapido.Services.Url.UpdateQueryStringParameter(queryParameters, pageNumberQueryStringName, page.ToString());
2097 @Render(new PaginationItem { Label = page.ToString(), Link = Dynamicweb.Rapido.Services.Url.BuildUri(url, queryParameters).PathAndQuery, IsActive = (settings.CurrentPageNumber == page) });
2098 }
2099 }
2100 @if (!string.IsNullOrWhiteSpace(settings.NextPageUrl) && settings.ShowNextAndPrevControls)
2101 {
2102 @Render(new PaginationItem { Link = settings.NextPageUrl, Icon = settings.NextIcon })
2103 }
2104 @if (!string.IsNullOrWhiteSpace(settings.LastPageUrl) && settings.ShowFirstAndLastControls)
2105 {
2106 @Render(new PaginationItem { Link = settings.LastPageUrl, Icon = settings.LastIcon })
2107 }
2108 </ul>
2109 </div>
2110 }
2111 }
2112
2113 @helper RenderPaginationItem(PaginationItem settings)
2114 {
2115 if (settings.Icon == null)
2116 {
2117 settings.Icon = new Icon();
2118 }
2119
2120 settings.Icon.Label = settings.Label;
2121 <li class="pager__btn dw-mod">
2122 @if (settings.IsActive)
2123 {
2124 <span class="pager__num pager__num--current dw-mod">
2125 @Render(settings.Icon)
2126 </span>
2127 }
2128 else
2129 {
2130 <a href="@settings.Link" class="pager__num dw-mod">
2131 @Render(settings.Icon)
2132 </a>
2133 }
2134 </li>
2135 }
2136
2137
2138 @using Dynamicweb.Rapido.Blocks.Components.General
2139 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
2140 @using System.Linq
2141 @using Dynamicweb.Core
2142 @using Dynamicweb.Rapido.Blocks.Components.General
2143
2144 @* Component *@
2145
2146 @helper RenderAlertNotification(AlertNotification settings)
2147 {
2148 if (settings != null && (!string.IsNullOrEmpty(settings.Title) || !string.IsNullOrEmpty(settings.Message)))
2149 {
2150 @(string.Format("AlertNotification.ShowNotification('{0}','{1}'{2})", Converter.ToString(settings.Title), Converter.ToString(settings.Message), GetAlertNotificationConfiguration(settings)))
2151 }
2152 }
2153
2154 @functions
2155 {
2156 private string GetAlertNotificationConfiguration(AlertNotification settings)
2157 {
2158 string[] configuration =
2159 {
2160 AppendProperty("closeOnClick", settings.CloseOnClick),
2161 AppendProperty("displayCloseButton", settings.DisplayCloseButton),
2162 AppendProperty("onClick", settings.OnClick),
2163 AppendProperty("showDuration", settings.ShowDuration),
2164 AppendProperty("positionClass", settings.Position),
2165 AppendProperty("theme", settings.Theme)
2166 };
2167
2168 configuration = configuration.Where(c => !string.IsNullOrEmpty(c)).ToArray();
2169
2170 if (!configuration.Any())
2171 {
2172 return string.Empty;
2173 }
2174
2175 return string.Concat(",{", string.Join(",", configuration), "}");
2176 }
2177
2178 private static string AppendProperty(string propertyName, bool? propertyValue)
2179 {
2180 return propertyValue != null ? string.Format("{0}: {1}",propertyName, propertyValue.ToString().ToLowerInvariant()) : null;
2181 }
2182
2183 private static string AppendProperty(string propertyName, int? propertyValue)
2184 {
2185 return propertyValue != null ? string.Format("{0}: {1}",propertyName, propertyValue.ToString().ToLowerInvariant()) : null;
2186 }
2187
2188 private static string AppendProperty(string propertyName, AlertNotificationPosition.Position? propertyValue)
2189 {
2190 return propertyValue != null ? string.Format("{0}: positionConfig.{1}",propertyName, propertyValue) : null;
2191 }
2192
2193 private static string AppendProperty(string propertyName, AlertNotificationTheme.Theme? propertyValue)
2194 {
2195 return propertyValue != null ? string.Format("{0}: themeConfig.{1}",propertyName, propertyValue) : null;
2196 }
2197 }
2198
2199 @using System.Linq
2200 @using Dynamicweb.Core
2201 @using Dynamicweb.Rapido.Blocks.Components.General
2202
2203 @helper RenderMonthYearField(DateTimeField settings)
2204 {
2205 if (string.IsNullOrEmpty(settings.Id))
2206 {
2207 settings.Id = Guid.NewGuid().ToString("N");
2208 }
2209
2210 var textField = new TextField {
2211 Name = settings.Name,
2212 Id = settings.Id,
2213 Label = settings.Label,
2214 HelpText = settings.HelpText,
2215 Value = settings.Value,
2216 Disabled = settings.Disabled,
2217 Required = settings.Required,
2218 ErrorMessage = settings.ErrorMessage,
2219 CssClass = settings.CssClass,
2220 WrapperCssClass = settings.WrapperCssClass,
2221 OnChange = settings.OnChange,
2222 OnClick = settings.OnClick,
2223 ExtraAttributes = settings.ExtraAttributes,
2224 //
2225 Placeholder = settings.Placeholder
2226 };
2227
2228 @Render(textField)
2229
2230 List<string> jsAttributes = new List<string>();
2231
2232 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'");
2233
2234 if (!string.IsNullOrEmpty(settings.DateFormat))
2235 {
2236 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'");
2237 }
2238 if (!string.IsNullOrEmpty(settings.MinDate))
2239 {
2240 jsAttributes.Add("minDate: '" + settings.MinDate + "'");
2241 }
2242 if (!string.IsNullOrEmpty(settings.MaxDate))
2243 {
2244 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'");
2245 }
2246 if (settings.IsInline)
2247 {
2248 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower());
2249 }
2250 if (settings.EnableTime)
2251 {
2252 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower());
2253 }
2254 if (settings.EnableWeekNumbers)
2255 {
2256 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower());
2257 }
2258 jsAttributes.Add("plugins: " + "[new monthSelectPlugin({shorthand: true, dateFormat: 'F Y', altFormat: 'F Y'})]");
2259
2260 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value));
2261
2262 <script>
2263 document.addEventListener("DOMContentLoaded", function () {
2264 flatpickr("#@textField.Id", {
2265 @string.Join(",", jsAttributes)
2266 });
2267 });
2268 </script>
2269 }
2270
2271
2272 @helper RenderDateTimeFieldCustom(DateTimeField settings)
2273 {
2274 if (string.IsNullOrEmpty(settings.Id))
2275 {
2276 settings.Id = Guid.NewGuid().ToString("N");
2277 }
2278
2279 var textField = new TextField {
2280 Name = settings.Name,
2281 Id = settings.Id,
2282 Label = settings.Label,
2283 HelpText = settings.HelpText,
2284 Value = settings.Value,
2285 Disabled = settings.Disabled,
2286 Required = settings.Required,
2287 ErrorMessage = settings.ErrorMessage,
2288 CssClass = settings.CssClass,
2289 WrapperCssClass = settings.WrapperCssClass,
2290 OnChange = settings.OnChange,
2291 OnClick = settings.OnClick,
2292 Link = settings.Link,
2293 ExtraAttributes = settings.ExtraAttributes,
2294 //
2295 Placeholder = settings.Placeholder
2296 };
2297
2298 @Render(textField)
2299
2300 List<string> jsAttributes = new List<string>();
2301
2302 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'");
2303
2304 if (!string.IsNullOrEmpty(settings.DateFormat))
2305 {
2306 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'");
2307 }
2308 if (!string.IsNullOrEmpty(settings.MinDate))
2309 {
2310 jsAttributes.Add("minDate: '" + settings.MinDate + "'");
2311 }
2312 if (!string.IsNullOrEmpty(settings.MaxDate))
2313 {
2314 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'");
2315 }
2316 if (settings.IsInline)
2317 {
2318 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower());
2319 }
2320 if (settings.EnableTime)
2321 {
2322 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower());
2323 }
2324 if (settings.EnableWeekNumbers)
2325 {
2326 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower());
2327 }
2328
2329 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value));
2330
2331 <script>
2332 document.addEventListener("DOMContentLoaded", function () {
2333 flatpickr("#@textField.Id", {
2334 @string.Join(",", jsAttributes),
2335 //START CUSTOM CODE
2336 disableMobile: true
2337 //END CUSTOM CODE
2338 });
2339 });
2340 </script>
2341 }
2342
2343
2344 @functions {
2345 public string GenerateRgba(string color, string opacity)
2346 {
2347 color = color.Replace("#", "");
2348 if (color.Length == 6) {
2349 return "rgba(" + Convert.ToInt32(color.Substring(0, 2), 16) + ", " + Convert.ToInt32(color.Substring(2, 2), 16) + ", " + Convert.ToInt32(color.Substring(4, 2), 16) + ", " + opacity + ");";
2350 } else {
2351 return Convert.ToInt16(color).ToString();
2352 }
2353 }
2354
2355 private static string GetResponsiveSettings(ItemViewModel slide)
2356 {
2357 var relations = slide.GetItems("ResponsiveBehaviorSettings");
2358 if (relations == null || !relations.Any()) return "";
2359
2360 var classes = "";
2361
2362 foreach (var item in relations)
2363 {
2364 var devices = item.GetList("Devices")?.SelectedValues?.ToList();
2365 if (devices == null || !devices.Any()) continue;
2366
2367 classes += GetParagraphModifierClass(devices, "u-align", GetValue(item, "HorizontalAlignment"));
2368 classes += GetParagraphModifierClass(devices, "u-align-self", GetValue(item, "VerticalAlignment"));
2369 }
2370
2371 if (!string.IsNullOrEmpty(classes))
2372 {
2373 classes += " responsive-modifiers";
2374 }
2375
2376 return classes;
2377 }
2378
2379 private static string GetValue(ItemViewModel item, string systemName)
2380 {
2381 var value = item.GetList(systemName).SelectedValue;
2382 value = !string.IsNullOrEmpty(value) && value != "default" ? value : "";
2383
2384 return value;
2385 }
2386
2387 private static string GetParagraphModifierClass(IEnumerable<string> devices, string className, string value)
2388 {
2389 var classes = "";
2390
2391 if (string.IsNullOrEmpty(value)) return classes;
2392
2393 foreach (var device in devices)
2394 {
2395 classes += $" {device}-{className}-{value}";
2396 }
2397
2398 return classes;
2399 }
2400 }
2401
2402 @{
2403 List<ItemViewModel> slides = new List<ItemViewModel>();
2404
2405 if (Model.Item.GetItem("SlideOne") != null) {
2406 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideOne").GetString("Image"))) {
2407 slides.Add(Model.Item.GetItem("SlideOne"));
2408 }
2409 }
2410
2411 if (Model.Item.GetItem("SlideTwo") != null) {
2412 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideTwo").GetString("Image"))) {
2413 slides.Add(Model.Item.GetItem("SlideTwo"));
2414 }
2415 }
2416
2417 if (Model.Item.GetItem("SlideThree") != null) {
2418 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideThree").GetString("Image"))) {
2419 slides.Add(Model.Item.GetItem("SlideThree"));
2420 }
2421 }
2422
2423 if (Model.Item.GetItem("SlideFour") != null) {
2424 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideFour").GetString("Image"))) {
2425 slides.Add(Model.Item.GetItem("SlideFour"));
2426 }
2427 }
2428
2429 if (Model.Item.GetItem("SlideFive") != null) {
2430 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideFive").GetString("Image"))) {
2431 slides.Add(Model.Item.GetItem("SlideFive"));
2432 }
2433 }
2434 }
2435
2436 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) {
2437 @Render(new Heading { Title = Model.Item.GetString("Title"), Level = 2 })
2438 }
2439
2440 <div class="carousel u-full-height dw-mod" id="Paragraph_@(Model.ID)"
2441 data-translate-prev="@Translate("Previous slide")"
2442 data-translate-next="@Translate("Next slide")"
2443 data-translate-slide="@Translate("Slide")">
2444 <div class="carousel__container u-full-height js-carousel-slides dw-mod">
2445 @foreach (var slide in slides)
2446 {
2447 <div class="carousel__slide u-padding--lg dw-mod">
2448 @RenderTheSlide(slide)
2449 </div>
2450 }
2451 </div>
2452 </div>
2453
2454 @helper RenderTheSlide(ItemViewModel slide) {
2455 var colorService = new ColorSwatchService();
2456 string backgroundColor = slide.GetString("BackgroundColor") != null ? slide.GetString("BackgroundColor") : "";
2457 backgroundColor = !backgroundColor.Contains("#") ? "background-color: " + colorService.GetHexColor(Pageview.AreaID, backgroundColor) : backgroundColor;
2458 string textColor = slide.GetString("TextColor") != null ? slide.GetString("TextColor") : "";
2459 textColor = !textColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, textColor) : textColor;
2460 string styles = backgroundColor + "; color: " + textColor;
2461
2462 string horizontalAlign = slide.GetString("HorizontalAlignment") != null ? "u-ta-" + slide.GetList("HorizontalAlignment").SelectedValue.ToString().ToLower() : "";
2463 string verticalAlign = slide.GetString("VerticalAlignment") != null ? "u-align-self-" + slide.GetList("VerticalAlignment").SelectedValue.ToString().ToLower() : "";
2464 string alignmentCssClasses = horizontalAlign + " " + verticalAlign;
2465
2466 if (!string.IsNullOrEmpty(slide.GetString("Image"))) {
2467 int cropMode = !string.IsNullOrEmpty(Convert.ToString(slide.GetList("ImageCrop"))) ? Convert.ToInt32(slide.GetList("ImageCrop").SelectedValue) : 0;
2468
2469 Image image = new Image
2470 {
2471 Path = slide.GetFile("Image").Path,
2472 CssClass = "background-image__cover",
2473 ImageDefault = new ImageSettings
2474 {
2475 Crop = cropMode,
2476 Height = 845,
2477 Width = 1920
2478 },
2479 ImageMedium = new ImageSettings
2480 {
2481 Crop = cropMode,
2482 Height = 450,
2483 Width = 1024
2484 },
2485 ImageSmall = new ImageSettings
2486 {
2487 Crop = cropMode,
2488 Height = 544,
2489 Width = 640
2490 }
2491 };
2492
2493 image.FilterPrimary = !string.IsNullOrEmpty(slide.GetList("ImageFilterPrimary").SelectedValue) ? (ImageFilter) Enum.Parse(typeof(ImageFilter), slide.GetList("ImageFilterPrimary").SelectedValue.Replace("-", ""), true) : ImageFilter.None;
2494 image.FilterSecondary = !string.IsNullOrEmpty(slide.GetList("ImageFilterSecondary").SelectedValue) ? (ImageFilter) Enum.Parse(typeof(ImageFilter), slide.GetList("ImageFilterSecondary").SelectedValue.Replace("-", ""), true) : ImageFilter.None;
2495
2496 if (!string.IsNullOrEmpty(slide.GetString("ColorForTheFilter"))) {
2497 image.FilterColor = slide.GetString("ColorForTheFilter").StartsWith("#") ? GenerateRgba(slide.GetString("ColorForTheFilter"), "0.3") : "";
2498 }
2499
2500 <div class="background-image dw-mod">
2501 <div class="background-image__wrapper dw-mod">
2502 @Render(image)
2503 </div>
2504 </div>
2505 }
2506
2507 if (!string.IsNullOrEmpty(textColor)) {
2508 <style>
2509 .slideContent-@slide.Id p, .slideContent-@slide.Id h1, .slideContent-@slide.Id h2, .slideContent-@slide.Id h3 {
2510 color: @textColor;
2511 }
2512 </style>
2513 }
2514
2515 string link = !string.IsNullOrEmpty(slide.GetString("Link")) ? slide.GetString("Link") : "";
2516 string linkTarget = link.Contains("http") ? "_blank" : "_self";
2517
2518 if (!string.IsNullOrEmpty(link)) {
2519 <a href="@link" target="@linkTarget" class="u-full-width u-full-height u-position-absolute"> </a>
2520 }
2521
2522 <div class="content-row__item__body @alignmentCssClasses @GetResponsiveSettings(slide) slideContent-@slide.Id dw-mod">
2523 @if (!string.IsNullOrEmpty(slide.GetString("Title")) || !string.IsNullOrEmpty(slide.GetString("Text"))) {
2524 <div class="grid__cell">
2525 @Render(new Heading { Title = slide.GetString("Title"), Level = 2 })
2526 <div class="text-container">
2527 @Render(new Text { Content = slide.GetString("Text") })
2528 </div>
2529 </div>
2530 }
2531
2532 @if (!string.IsNullOrEmpty(slide.GetItem("ButtonOne").GetString("Title")) || !string.IsNullOrEmpty(slide.GetItem("ButtonTwo").GetString("Title"))) {
2533 <div class="grid__cell">
2534 @ParagraphButton(slide.GetItem("ButtonOne"), "One")
2535 @ParagraphButton(slide.GetItem("ButtonTwo"), "Two")
2536 </div>
2537 }
2538 </div>
2539 }
2540
2541 @{
2542 /*START CUSTOM CODE*/
2543 if (slides.Count >= 1)
2544 {
2545 /*END CUSTOM CODE*/
2546 bool enableDots = !Model.Item.GetBoolean("HideDots");
2547
2548 <script>
2549 document.addEventListener("DOMContentLoaded", function () {
2550 var hideArrows = "@Model.Item.GetBoolean("HideArrows")";
2551
2552 new CarouselModule("#Paragraph_@(Model.ID)", {
2553 slideTime: @Model.Item.GetString("SlideTime"),
2554 dots: @(enableDots.ToString().ToLower()),
2555 prevBtn: hideArrows == "True" ? "u-hidden" : "carousel-prev-btn dw-mod",
2556 nextBtn: hideArrows == "True" ? "u-hidden" : "carousel-next-btn dw-mod"
2557 });
2558 })
2559 </script>
2560 }
2561 }
2562
2563 @helper ParagraphButton(ItemViewModel item, string buttonNumber) {
2564 if (item != null) {
2565 if (!string.IsNullOrEmpty(item.GetString("Title"))) {
2566 Button button = new Button {
2567 Title = item.GetString("Title"),
2568 Href = item.GetString("Link"),
2569 CssClass = "u-no-margin button" + buttonNumber,
2570 ButtonLayout = (ButtonLayout)System.Enum.Parse(typeof(ButtonLayout), char.ToUpper(item.GetList("Layout").SelectedValue[0]) + item.GetList("Layout").SelectedValue.Substring(1))
2571 };
2572
2573 if (!string.IsNullOrEmpty(item.GetString("Icon"))) {
2574 button.Icon = new Icon {
2575 CssClass = item.GetString("Icon")
2576 };
2577 }
2578
2579 @Render(button)
2580 }
2581 }
2582 }