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