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