Error executing template "Designs/Rapido/eCom7/CartV2/Step/CartAjaxPartials.cshtml"
System.IO.IOException: There is not enough space on the disk.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.FileStream.FlushWrite(Boolean calledFromFinalizer)
at System.IO.FileStream.Dispose(Boolean disposing)
at System.IO.Stream.Close()
at System.IO.StreamWriter.Dispose(Boolean disposing)
at System.IO.TextWriter.Dispose()
at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost)
at RazorEngine.Roslyn.CSharp.RoslynCompilerServiceBase.CompileType(TypeContext context)
at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType)
at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType)
at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType)
at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss)
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 System.Text.RegularExpressions
3 @using System.Linq
4 @using Dynamicweb.Core
5 @using Dynamicweb.Ecommerce.Orders
6 @using System
7 @using System.Web
8
9 @{
10 string[] targets = HttpContext.Current.Request.QueryString["target"] != null ? HttpContext.Current.Request.QueryString["target"].Split(',') : null;
11
12 if (targets != null) {
13
14 foreach (string target in targets) {
15
16 if ( target == "ParcelShop" ) {
17 string markup = "";
18
19 foreach ( LoopItem shipping in GetLoop("Shippingmethods") ) {
20
21 if ( shipping.GetString("Ecom:Cart.Shippingmethod.IsSelected") == "true" ) {
22 markup = shipping.GetString("Ecom:ShippingProvider.Content");
23 }
24
25 }
26
27 @markup
28 }
29
30 if ( target == "Parcel" ) {
31 <div data-template="Parcel">
32 @RenderParcelShop()
33 </div>
34 }
35
36 if ( target == "Summary" ) {
37 <div data-template="Summary">
38 @RenderOrderSummary()
39 </div>
40 }
41
42 if ( target == "Shipping" ) {
43 <div data-template="Shipping">
44 @RenderShippingMethods()
45 </div>
46 }
47
48 if ( target == "Payment" ) {
49 <div data-template="Payment">
50 @RenderPaymentMethods()
51 </div>
52 }
53
54 if ( target == "Addresses" ) {
55 <div data-template="Addresses">
56 @RenderAddresses()
57 </div>
58 }
59
60 if ( target == "BillingRegions" ) {
61 <div data-template="BillingRegions">
62 @RenderBillingRegions()
63 </div>
64 }
65
66 if ( target == "DeliveryRegions" ) {
67 <div data-template="DeliveryRegions">
68 @RenderDeliveryRegions()
69 </div>
70 }
71
72
73 // Set selected address, from predefined options useraddresses
74 // Passes 'UserManagementUserUserAddressSelectedAddressID', so the correct data can be accessed
75 if ( target == "DeliveryAddressModal" ) {
76 @RenderReadOnlyShippingAddress()
77 }
78
79 }
80 }
81 }
82
83 @using System.Text.RegularExpressions
84 @using System.Collections.Generic
85 @using System.Reflection
86 @using System.Web
87 @using System.Web.UI.HtmlControls
88 @using Dynamicweb.Rapido.Blocks.Components
89 @using Dynamicweb.Rapido.Blocks.Components.Articles
90 @using Dynamicweb.Rapido.Blocks.Components.Documentation
91 @using Dynamicweb.Rapido.Blocks
92
93
94 @*--- START: Base block renderers ---*@
95
96 @helper RenderBlockList(List<Block> blocks)
97 {
98 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false;
99 blocks = blocks.OrderBy(item => item.SortId).ToList();
100
101 foreach (Block item in blocks)
102 {
103 if (debug) {
104 <!-- Block START: @item.Id -->
105 }
106
107 if (item.Design == null)
108 {
109 @RenderBlock(item)
110 }
111 else if (item.Design.RenderType == RenderType.None) {
112 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
113
114 <div class="@cssClass dw-mod">
115 @RenderBlock(item)
116 </div>
117 }
118 else if (item.Design.RenderType != RenderType.Hide)
119 {
120 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
121
122 if (!item.SkipRenderBlocksList) {
123 if (item.Design.RenderType == RenderType.Row)
124 {
125 <div class="grid grid--align-content-start @cssClass dw-mod" id="Block__@item.Id">
126 @RenderBlock(item)
127 </div>
128 }
129
130 if (item.Design.RenderType == RenderType.Column)
131 {
132 string hidePadding = item.Design.HidePadding ? "u-no-padding" : "";
133 string size = item.Design.Size ?? "12";
134 size = Regex.IsMatch(size, @"\d") ? "md-" + item.Design.Size : item.Design.Size;
135
136 <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">
137 @RenderBlock(item)
138 </div>
139 }
140
141 if (item.Design.RenderType == RenderType.Table)
142 {
143 <table class="table @cssClass dw-mod" id="Block__@item.Id">
144 @RenderBlock(item)
145 </table>
146 }
147
148 if (item.Design.RenderType == RenderType.TableRow)
149 {
150 <tr class="@cssClass dw-mod" id="Block__@item.Id">
151 @RenderBlock(item)
152 </tr>
153 }
154
155 if (item.Design.RenderType == RenderType.TableColumn)
156 {
157 <td class="@cssClass dw-mod" id="Block__@item.Id">
158 @RenderBlock(item)
159 </td>
160 }
161
162 if (item.Design.RenderType == RenderType.CardHeader)
163 {
164 <div class="card-header @cssClass dw-mod">
165 @RenderBlock(item)
166 </div>
167 }
168
169 if (item.Design.RenderType == RenderType.CardBody)
170 {
171 <div class="card @cssClass dw-mod">
172 @RenderBlock(item)
173 </div>
174 }
175
176 if (item.Design.RenderType == RenderType.CardFooter)
177 {
178 <div class="card-footer @cssClass dw-mod">
179 @RenderBlock(item)
180 </div>
181 }
182 }
183 else
184 {
185 @RenderBlock(item)
186 }
187 }
188
189 if (debug) {
190 <!-- Block END: @item.Id -->
191 }
192 }
193 }
194
195 @helper RenderBlock(Block item)
196 {
197 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false;
198
199 if (item.Template != null)
200 {
201 @BlocksPage.RenderTemplate(item.Template)
202 }
203
204 if (item.Component != null)
205 {
206 string customSufix = "Custom";
207 string methodName = item.Component.HelperName;
208
209 ComponentBase[] methodParameters = new ComponentBase[1];
210 methodParameters[0] = item.Component;
211 Type methodType = this.GetType();
212
213 MethodInfo customMethod = methodType.GetMethod(methodName + customSufix);
214
215 try {
216 if (debug) {
217 <!-- Component: @methodName.Replace("Render", "") -->
218 }
219 if(customMethod != null) {
220 @customMethod.Invoke(this, methodParameters).ToString();
221 } else {
222 MethodInfo generalMethod = methodType.GetMethod(methodName);
223 @generalMethod.Invoke(this, methodParameters).ToString();
224 }
225 } catch {
226 try {
227 MethodInfo generalMethod = methodType.GetMethod(methodName);
228 @generalMethod.Invoke(this, methodParameters).ToString();
229 } catch(Exception ex) {
230 throw new Exception(item.Component.GetType().Name + " method '" + methodName +"' could not be invoked", ex);
231 }
232 }
233 }
234
235 if (item.BlocksList.Count > 0 && !item.SkipRenderBlocksList)
236 {
237 @RenderBlockList(item.BlocksList)
238 }
239 }
240
241 @*--- END: Base block renderers ---*@
242
243 @using Dynamicweb.Rapido.Blocks.Components
244 @using Dynamicweb.Rapido.Blocks.Components.General
245 @using Dynamicweb.Rapido.Blocks
246 @using System.IO
247
248 @* Required *@
249 @using Dynamicweb.Rapido.Blocks.Components
250 @using Dynamicweb.Rapido.Blocks.Components.General
251 @using Dynamicweb.Rapido.Blocks
252
253
254 @helper Render(ComponentBase component)
255 {
256 if (component != null)
257 {
258 @component.Render(this)
259 }
260 }
261
262 @* Components *@
263 @using System.Reflection
264 @using Dynamicweb.Rapido.Blocks.Components.General
265
266
267 @* Component *@
268
269 @helper RenderIcon(Icon settings)
270 {
271 if (settings != null)
272 {
273 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
274
275 if (settings.Name != null)
276 {
277 if (string.IsNullOrEmpty(settings.Label))
278 {
279 <i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i>
280 }
281 else
282 {
283 if (settings.LabelPosition == IconLabelPosition.Before)
284 {
285 <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>
286 }
287 else
288 {
289 <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>
290 }
291 }
292 }
293 else if (!string.IsNullOrEmpty(settings.Label))
294 {
295 @settings.Label
296 }
297 }
298 }
299 @using System.Reflection
300 @using Dynamicweb.Rapido.Blocks.Components.General
301 @using Dynamicweb.Rapido.Blocks.Components
302 @using Dynamicweb.Core
303
304 @* Component *@
305
306 @helper RenderButton(Button settings)
307 {
308 if (settings != null && (!string.IsNullOrEmpty(settings.Title) || settings.Icon != null))
309 {
310 Dictionary<string, string> attributes = new Dictionary<string, string>();
311 List<string> classList = settings.CssClass != null ? settings.CssClass.Split(' ').ToList() : new List<string>();
312 if (settings.Disabled) {
313 attributes.Add("disabled", "true");
314 classList.Add("disabled");
315 }
316
317 if (!string.IsNullOrEmpty(settings.ConfirmText) || !string.IsNullOrEmpty(settings.ConfirmTitle))
318 {
319 settings.Id = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N");
320 @RenderConfirmDialog(settings);
321 settings.OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = true";
322 }
323
324 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
325 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
326 if (!string.IsNullOrEmpty(settings.AltText))
327 {
328 attributes.Add("title", settings.AltText);
329 }
330 else if (!string.IsNullOrEmpty(settings.Title))
331 {
332 string cleanTitle = Regex.Replace(settings.Title, "<.*?>", String.Empty);
333 cleanTitle = cleanTitle.Replace(" ", " ");
334 attributes.Add("title", cleanTitle);
335 }
336
337 var onClickEvents = new List<string>();
338 if (!string.IsNullOrEmpty(settings.OnClick))
339 {
340 onClickEvents.Add(settings.OnClick);
341 }
342 if (!string.IsNullOrEmpty(settings.Href))
343 {
344 onClickEvents.Add("location.href='" + settings.Href + "'");
345 }
346 if (onClickEvents.Count > 0)
347 {
348 attributes.Add("onClick", string.Join(";", onClickEvents));
349 }
350
351 if (settings.ButtonLayout != ButtonLayout.None)
352 {
353 classList.Add("btn");
354 string btnLayout = Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower();
355 if (btnLayout == "linkclean")
356 {
357 btnLayout = "link-clean"; //fix
358 }
359 classList.Add("btn--" + btnLayout);
360 }
361
362 if (settings.Icon == null)
363 {
364 settings.Icon = new Icon();
365 }
366
367 settings.Icon.CssClass += Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower() != "linkclean" ? " u-flex--align-center" : "";
368 settings.Icon.Label = settings.Title;
369
370 attributes.Add("type", Enum.GetName(typeof(ButtonType), settings.ButtonType).ToLower());
371
372 <button class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</button>
373 }
374 }
375
376 @helper RenderConfirmDialog(Button settings)
377 {
378 Modal confirmDialog = new Modal {
379 Id = settings.Id,
380 Width = ModalWidth.Sm,
381 Heading = new Heading
382 {
383 Level = 2,
384 Title = settings.ConfirmTitle
385 },
386 BodyText = settings.ConfirmText
387 };
388
389 confirmDialog.AddAction(new Button { Title = Translate("Cancel"), ButtonLayout = ButtonLayout.Secondary, OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = false"});
390 confirmDialog.AddAction(new Button { Title = Translate("OK"), ButtonLayout = ButtonLayout.Primary, OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = false;" + settings.OnClick });
391
392 @Render(confirmDialog)
393 }
394 @using Dynamicweb.Rapido.Blocks.Components.General
395 @using Dynamicweb.Rapido.Blocks.Components
396 @using Dynamicweb.Core
397
398 @helper RenderDashboard(Dashboard settings)
399 {
400 var widgets = settings.GetWidgets();
401
402 if (!string.IsNullOrEmpty(settings.WidgetsBaseBackgroundColor))
403 {
404 //set bg color for them
405
406 System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml(settings.WidgetsBaseBackgroundColor);
407 int r = Convert.ToInt16(color.R);
408 int g = Convert.ToInt16(color.G);
409 int b = Convert.ToInt16(color.B);
410
411 var count = widgets.Length;
412 var max = Math.Max(r, Math.Max(g, b));
413 double step = 255.0 / (max * count);
414 var i = 0;
415 foreach (var widget in widgets)
416 {
417 i++;
418
419 var shade = "rgb(" + Converter.ToString(r * step * i).Replace(",", ".") + ", " + Converter.ToString(g * step * i).Replace(",", ".") + ", " + Converter.ToString(b * step * i).Replace(",", ".") + ")";
420 widget.BackgroundColor = shade;
421 }
422 }
423
424 <div class="dashboard @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
425 @foreach (var widget in widgets)
426 {
427 <div class="dashboard__widget">
428 @Render(widget)
429 </div>
430 }
431 </div>
432 }
433 @using Dynamicweb.Rapido.Blocks.Components.General
434 @using Dynamicweb.Rapido.Blocks.Components
435
436 @helper RenderDashboardWidgetLink(DashboardWidgetLink settings)
437 {
438 if (!string.IsNullOrEmpty(settings.Link))
439 {
440 var backgroundStyles = "";
441 if (!string.IsNullOrEmpty(settings.BackgroundColor))
442 {
443 backgroundStyles = "style=\"background-color:" + settings.BackgroundColor + "\"";
444 }
445
446 <a href="@settings.Link" class="widget widget--link @settings.CssClass dw-mod" @backgroundStyles title="@settings.Title" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
447 <div class="u-center-middle u-color-light">
448 @if (settings.Icon != null)
449 {
450 settings.Icon.CssClass += "widget__icon";
451 @Render(settings.Icon)
452 }
453 <div class="widget__title">@settings.Title</div>
454 </div>
455 </a>
456 }
457 }
458 @using Dynamicweb.Rapido.Blocks.Components.General
459 @using Dynamicweb.Rapido.Blocks.Components
460
461 @helper RenderDashboardWidgetCounter(DashboardWidgetCounter settings)
462 {
463 var backgroundStyles = "";
464 if (!string.IsNullOrEmpty(settings.BackgroundColor))
465 {
466 backgroundStyles = "style='background-color:" + settings.BackgroundColor + "'";
467 }
468
469 <div class="widget @settings.CssClass dw-mod" @backgroundStyles @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
470 <div class="u-center-middle u-color-light">
471 @if (settings.Icon != null)
472 {
473 settings.Icon.CssClass += "widget__icon";
474 @Render(settings.Icon)
475 }
476 <div class="widget__counter">@settings.Count</div>
477 <div class="widget__title">@settings.Title</div>
478 </div>
479 </div>
480 }
481 @using System.Reflection
482 @using Dynamicweb.Rapido.Blocks.Components.General
483 @using Dynamicweb.Rapido.Blocks.Components
484 @using Dynamicweb.Core
485
486 @* Component *@
487
488 @helper RenderLink(Link settings)
489 {
490 if (settings != null && !string.IsNullOrEmpty(settings.Href) && (!string.IsNullOrEmpty(settings.Title) || settings.Icon != null))
491 {
492 Dictionary<string, string> attributes = new Dictionary<string, string>();
493 List<string> classList = settings.CssClass != null ? settings.CssClass.Split(' ').ToList() : new List<string>();
494 if (settings.Disabled)
495 {
496 attributes.Add("disabled", "true");
497 classList.Add("disabled");
498 }
499
500 if (!string.IsNullOrEmpty(settings.AltText))
501 {
502 attributes.Add("title", settings.AltText);
503 }
504 else if (!string.IsNullOrEmpty(settings.Title))
505 {
506 attributes.Add("title", settings.Title);
507 }
508
509 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
510 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
511 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onClick", settings.OnClick); }
512 attributes.Add("href", settings.Href);
513
514 if (settings.ButtonLayout != ButtonLayout.None)
515 {
516 classList.Add("btn");
517 string btnLayout = Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower();
518 if (btnLayout == "linkclean")
519 {
520 btnLayout = "link-clean"; //fix
521 }
522 classList.Add("btn--" + btnLayout);
523 }
524
525 if (settings.Icon == null)
526 {
527 settings.Icon = new Icon();
528 }
529 settings.Icon.Label = settings.Title;
530
531 if (settings.Target == LinkTargetType.Blank && settings.Rel == LinkRelType.None)
532 {
533 settings.Rel = LinkRelType.Noopener;
534 }
535 if (settings.Target != LinkTargetType.None)
536 {
537 attributes.Add("target", "_" + Enum.GetName(typeof(LinkTargetType), settings.Target).ToLower());
538 }
539 if (settings.Download)
540 {
541 attributes.Add("download", "true");
542 }
543 if (settings.Rel != LinkRelType.None)
544 {
545 attributes.Add("rel", Enum.GetName(typeof(LinkRelType), settings.Rel).ToLower());
546 }
547
548 <a class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</a>
549 }
550 }
551 @using System.Reflection
552 @using Dynamicweb.Rapido.Blocks.Components
553 @using Dynamicweb.Rapido.Blocks.Components.General
554 @using Dynamicweb.Rapido.Blocks
555
556
557 @* Component *@
558
559 @helper RenderRating(Rating settings)
560 {
561 if (settings.Score > 0)
562 {
563 int rating = settings.Score;
564 string iconType = "fa-star";
565
566 switch (settings.Type.ToString()) {
567 case "Stars":
568 iconType = "fa-star";
569 break;
570 case "Hearts":
571 iconType = "fa-heart";
572 break;
573 case "Lemons":
574 iconType = "fa-lemon";
575 break;
576 case "Bombs":
577 iconType = "fa-bomb";
578 break;
579 }
580
581 <div class="u-ta-right">
582 @for (int i = 0; i < settings.OutOf; i++)
583 {
584 <i class="@(rating > i ? "fas" : "far") @iconType"></i>
585 }
586 </div>
587 }
588 }
589 @using System.Reflection
590 @using Dynamicweb.Rapido.Blocks.Components.General
591 @using Dynamicweb.Rapido.Blocks.Components
592
593
594 @* Component *@
595
596 @helper RenderSelectFieldOption(SelectFieldOption settings)
597 {
598 Dictionary<string, string> attributes = new Dictionary<string, string>();
599 if (settings.Checked) { attributes.Add("selected", "true"); }
600 if (settings.Disabled) { attributes.Add("disabled", "true"); }
601 if (settings.Value != null) { attributes.Add("value", settings.Value); }
602 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
603
604 <option @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Label</option>
605 }
606 @using System.Reflection
607 @using Dynamicweb.Rapido.Blocks.Components.General
608 @using Dynamicweb.Rapido.Blocks.Components
609
610
611 @* Component *@
612
613 @helper RenderNavigation(Navigation settings) {
614 @RenderNavigation(new
615 {
616 id = settings.Id,
617 cssclass = settings.CssClass,
618 startLevel = settings.StartLevel,
619 endlevel = settings.EndLevel,
620 expandmode = settings.Expandmode,
621 sitemapmode = settings.SitemapMode,
622 template = settings.Template
623 })
624 }
625 @using Dynamicweb.Rapido.Blocks.Components.General
626 @using Dynamicweb.Rapido.Blocks.Components
627
628
629 @* Component *@
630
631 @helper RenderBreadcrumbNavigation(BreadcrumbNavigation settings) {
632 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
633 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
634 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
635 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
636 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
637 settings.SitemapMode = false;
638
639 @RenderNavigation(settings)
640 }
641 @using Dynamicweb.Rapido.Blocks.Components.General
642 @using Dynamicweb.Rapido.Blocks.Components
643
644
645 @* Component *@
646
647 @helper RenderLeftNavigation(LeftNavigation settings) {
648 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
649 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
650 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
651 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
652 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
653
654 <div class="grid__cell">
655 @RenderNavigation(settings)
656 </div>
657 }
658 @using System.Reflection
659 @using Dynamicweb.Rapido.Blocks.Components.General
660 @using Dynamicweb.Core
661
662 @* Component *@
663
664 @helper RenderHeading(Heading settings)
665 {
666 if (settings != null && !string.IsNullOrEmpty(settings.Title))
667 {
668 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
669 string tagName = settings.Level != 0 ? "h" + settings.Level.ToString() : "div";
670
671 @("<" + tagName + " class=\"" + settings.CssClass + " dw-mod\" " + color + ">")
672 if (!string.IsNullOrEmpty(settings.Link))
673 {
674 @Render(new Link { Href = settings.Link, Icon = settings.Icon, Title = settings.Title, ButtonLayout = ButtonLayout.None })
675 }
676 else
677 {
678 if (settings.Icon == null)
679 {
680 settings.Icon = new Icon();
681 }
682 settings.Icon.Label = settings.Title;
683 @Render(settings.Icon)
684 }
685 @("</" + tagName + ">");
686 }
687 }
688 @using Dynamicweb.Rapido.Blocks.Components
689 @using Dynamicweb.Rapido.Blocks.Components.General
690 @using Dynamicweb.Rapido.Blocks
691
692
693 @* Component *@
694
695 @helper RenderImage(Image settings)
696 {
697 if (settings.FilterPrimary != ImageFilter.None || settings.FilterSecondary != ImageFilter.None)
698 {
699 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
700 if (!string.IsNullOrEmpty(settings.FilterColor)) { optionalAttributes.Add("style", "background-color: " + settings.FilterColor); }
701
702 if (settings.Caption != null)
703 {
704 @:<div>
705 }
706
707 var primaryFilterClass = settings.FilterPrimary.ToString().ToLower();
708 var secondaryFilterClass = settings.FilterSecondary.ToString().ToLower();
709
710 <div class="image-filter image-filter--@primaryFilterClass u-position-relative dw-mod" @ComponentMethods.AddAttributes(optionalAttributes)>
711 <div class="image-filter image-filter--@secondaryFilterClass dw-mod">
712 @if (settings.Link != null)
713 {
714 <a href="@settings.Link">
715 @RenderTheImage(settings)
716 </a>
717 }
718 else
719 {
720 @RenderTheImage(settings)
721 }
722 </div>
723 </div>
724
725 if (settings.Caption != null)
726 {
727 <span class="image-caption dw-mod">@settings.Caption</span>
728 @:</div>
729 }
730 }
731 else
732 {
733 if (settings.Caption != null)
734 {
735 @:<div>
736 }
737 if (!string.IsNullOrEmpty(settings.Link))
738 {
739 <a href="@settings.Link">
740 @RenderTheImage(settings)
741 </a>
742 }
743 else
744 {
745 @RenderTheImage(settings)
746 }
747
748 if (settings.Caption != null)
749 {
750 <span class="image-caption dw-mod">@settings.Caption</span>
751 @:</div>
752 }
753 }
754 }
755
756 @helper RenderTheImage(Image settings)
757 {
758 if (settings != null)
759 {
760 string alternativeImage = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("AlternativeImage")) ? Pageview.AreaSettings.GetItem("Settings").GetFile("AlternativeImage").PathUrlEncoded : "/Images/missing_image.jpg";
761 string placeholderImage = "/Files/Images/placeholder.gif";
762 string imageEngine = "/Admin/Public/GetImage.ashx?";
763
764 string imageStyle = "";
765
766 switch (settings.Style)
767 {
768 case ImageStyle.Ball:
769 imageStyle = "grid__cell-img--ball";
770 break;
771
772 case ImageStyle.Triangle:
773 imageStyle = "grid__cell-img--triangle";
774 break;
775 }
776
777 if (settings.Style == ImageStyle.Ball || settings.Style == ImageStyle.Circle || settings.Style == ImageStyle.Triangle)
778 {
779 settings.ImageDefault.Crop = settings.ImageDefault.Crop == 5 ? settings.ImageDefault.Crop = 0 : settings.ImageDefault.Crop;
780
781 if (settings.ImageDefault != null)
782 {
783 settings.ImageDefault.Height = settings.ImageDefault.Width;
784 }
785 if (settings.ImageMedium != null)
786 {
787 settings.ImageMedium.Height = settings.ImageMedium.Width;
788 }
789 if (settings.ImageSmall != null)
790 {
791 settings.ImageSmall.Height = settings.ImageSmall.Width;
792 }
793 }
794
795 string defaultImage = imageEngine;
796 string imageSmall = "";
797 string imageMedium = "";
798
799 if (settings.DisableImageEngine)
800 {
801 defaultImage = settings.Path;
802 }
803 else
804 {
805 if (settings.ImageDefault != null)
806 {
807 defaultImage += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageDefault);
808
809 if (settings.Path.GetType() != typeof(string))
810 {
811 defaultImage += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
812 defaultImage += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
813 }
814 else
815 {
816 defaultImage += settings.Path != null ? "Image=" + settings.Path : "";
817 }
818
819 defaultImage += "&AlternativeImage=" + alternativeImage;
820 }
821
822 if (settings.ImageSmall != null)
823 {
824 imageSmall = "data-src-small=\"" + imageEngine;
825 imageSmall += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageSmall);
826
827 if (settings.Path.GetType() != typeof(string))
828 {
829 imageSmall += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
830 imageSmall += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
831 }
832 else
833 {
834 imageSmall += settings.Path != null ? "Image=" + settings.Path : "";
835 }
836
837 imageSmall += "&alternativeImage=" + alternativeImage;
838
839 imageSmall += "\"";
840 }
841
842 if (settings.ImageMedium != null)
843 {
844 imageMedium = "data-src-medium=\"" + imageEngine;
845 imageMedium += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageMedium);
846
847 if (settings.Path.GetType() != typeof(string))
848 {
849 imageMedium += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
850 imageMedium += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
851 }
852 else
853 {
854 imageMedium += settings.Path != null ? "Image=" + settings.Path : "";
855 }
856
857 imageMedium += "&alternativeImage=" + alternativeImage;
858
859 imageMedium += "\"";
860 }
861 }
862
863 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
864 if (!string.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick); }
865 if (!string.IsNullOrEmpty(settings.Title))
866 {
867 optionalAttributes.Add("alt", settings.Title);
868 optionalAttributes.Add("title", settings.Title);
869 }
870
871 if (settings.DisableLazyLoad)
872 {
873 <img id="@settings.Id" class="@imageStyle @settings.CssClass dw-mod" src="@defaultImage" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
874 }
875 else
876 {
877 <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) />
878 }
879 }
880 }
881 @using System.Reflection
882 @using Dynamicweb.Rapido.Blocks.Components.General
883 @using Dynamicweb.Rapido.Blocks.Components
884
885 @* Component *@
886
887 @helper RenderFileField(FileField settings)
888 {
889 var attributes = new Dictionary<string, string>();
890 if (string.IsNullOrEmpty(settings.Id))
891 {
892 settings.Id = Guid.NewGuid().ToString("N");
893 }
894
895 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
896 if (settings.Disabled) { attributes.Add("disabled", "true"); }
897 if (settings.Required) { attributes.Add("required", "true"); }
898 if (settings.Multiple) { attributes.Add("multiple", "true"); }
899 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
900 if (string.IsNullOrEmpty(settings.ChooseFileText))
901 {
902 settings.ChooseFileText = Translate("Choose file");
903 }
904 if (string.IsNullOrEmpty(settings.NoFilesChosenText))
905 {
906 settings.NoFilesChosenText = Translate("No files chosen...");
907 }
908 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
909
910 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
911
912 string setValueToFakeInput = "FileUpload.setValueToFakeInput(this)";
913 attributes.Add("onchange", setValueToFakeInput + (!string.IsNullOrEmpty(settings.OnChange) ? settings.OnChange : ""));
914
915 attributes.Add("type", "file");
916 if (settings.Value != null) { attributes.Add("value", settings.Value); }
917 settings.CssClass = "u-full-width " + settings.CssClass;
918
919 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
920
921 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
922 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
923 {
924 <div class="u-full-width">
925 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
926 @if (settings.Link != null) {
927 <div class="u-pull--right">
928 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
929 @Render(settings.Link)
930 </div>
931 }
932 </div>
933
934 }
935
936 @if (!string.IsNullOrEmpty(settings.HelpText))
937 {
938 <small class="form__help-text">@settings.HelpText</small>
939 }
940
941 <div class="form__field-combi file-input u-no-margin dw-mod">
942 <input @ComponentMethods.AddAttributes(resultAttributes) class="file-input__real-input" data-no-files-text="@settings.NoFilesChosenText" data-many-files-text="@Translate("files")" />
943 <label for="@settings.Id" class="file-input__btn btn--secondary btn dw-mod">@settings.ChooseFileText</label>
944 <label for="@settings.Id" class="@settings.CssClass file-input__fake-input js-fake-input dw-mod">@settings.NoFilesChosenText</label>
945 @if (settings.UploadButton != null)
946 {
947 settings.UploadButton.CssClass += " btn--condensed u-no-margin";
948 @Render(settings.UploadButton)
949 }
950 </div>
951 @Render(new NotificationMessage { Message = settings.ErrorMessage })
952 </div>
953 }
954 @using System.Reflection
955 @using Dynamicweb.Rapido.Blocks.Components.General
956 @using Dynamicweb.Rapido.Blocks.Components
957 @using Dynamicweb.Core
958 @using System.Linq
959
960 @* Component *@
961
962 @helper RenderDateTimeField(DateTimeField settings)
963 {
964 if (string.IsNullOrEmpty(settings.Id))
965 {
966 settings.Id = Guid.NewGuid().ToString("N");
967 }
968 if (settings.ExtraAttributes == null)
969 {
970 settings.ExtraAttributes = new Dictionary<string, string>();
971 }
972 settings.ExtraAttributes.Add("autocomplete","off");
973 var textField = new TextField {
974 Name = settings.Name,
975 Id = settings.Id,
976 Label = settings.Label,
977 HelpText = settings.HelpText,
978 Value = settings.Value,
979 Disabled = settings.Disabled,
980 Required = settings.Required,
981 ErrorMessage = settings.ErrorMessage,
982 CssClass = settings.CssClass,
983 WrapperCssClass = settings.WrapperCssClass,
984 OnChange = settings.OnChange,
985 OnClick = settings.OnClick,
986 Link = settings.Link,
987 ExtraAttributes = settings.ExtraAttributes,
988 //
989 Placeholder = settings.Placeholder
990 };
991
992 @Render(textField)
993
994 List<string> jsAttributes = new List<string>();
995
996 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'");
997
998 if (!string.IsNullOrEmpty(settings.DateFormat))
999 {
1000 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'");
1001 }
1002 if (!string.IsNullOrEmpty(settings.MinDate))
1003 {
1004 jsAttributes.Add("minDate: '" + settings.MinDate + "'");
1005 }
1006 if (!string.IsNullOrEmpty(settings.MaxDate))
1007 {
1008 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'");
1009 }
1010 if (settings.IsInline)
1011 {
1012 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower());
1013 }
1014 if (settings.EnableTime)
1015 {
1016 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower());
1017 }
1018 if (settings.EnableWeekNumbers)
1019 {
1020 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower());
1021 }
1022
1023 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value));
1024
1025 <script>
1026 document.addEventListener( "DOMContentLoaded", function () {
1027 flatpickr("#@textField.Id", {
1028 onReady: function(selectedDates, dateStr, instance) {
1029 instance.input.readOnly = false;
1030 },
1031 onOpen: function(selectedDates, dateStr, instance) {
1032 instance.input.readOnly = true;
1033 },
1034 onClose: function(selectedDates, dateStr, instance) {
1035 instance.input.readOnly = false;
1036 //instance.input.blur();
1037 },
1038 @string.Join(",", jsAttributes)
1039 } )
1040 } );
1041 </script>
1042 }
1043 @using System.Reflection
1044 @using Dynamicweb.Rapido.Blocks.Components.General
1045 @using Dynamicweb.Rapido.Blocks.Components
1046
1047 @* Component *@
1048
1049 @helper RenderTextField(TextField settings)
1050 {
1051 var attributes = new Dictionary<string, string>();
1052 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1053 {
1054 settings.Id = Guid.NewGuid().ToString("N");
1055 }
1056
1057 /*base settings*/
1058 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1059 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1060 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1061 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1062 if (settings.Required) { attributes.Add("required", "true"); }
1063 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1064 /*end*/
1065
1066 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1067 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1068 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1069 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1070 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); }
1071 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); }
1072 attributes.Add("type", Enum.GetName(typeof(TextFieldType), settings.Type).ToLower());
1073 if (settings.Type == TextFieldType.Password) { attributes.Add("autocomplete", "off"); };
1074 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1075
1076 settings.CssClass = "u-full-width " + settings.CssClass;
1077
1078 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1079
1080 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1081
1082 string noMargin = "u-no-margin";
1083 if (!settings.ReadOnly) {
1084 noMargin = "";
1085 }
1086
1087 <div class="form__field-group u-full-width @noMargin @settings.WrapperCssClass dw-mod">
1088 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1089 {
1090 <div class="u-full-width">
1091 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1092 @if (settings.Link != null) {
1093 settings.Link.ButtonLayout = ButtonLayout.LinkClean;
1094
1095 <div class="u-pull--right">
1096 @Render(settings.Link)
1097 </div>
1098 }
1099 </div>
1100
1101 }
1102
1103 @if (!string.IsNullOrEmpty(settings.HelpText))
1104 {
1105 <small class="form__help-text">@settings.HelpText</small>
1106 }
1107
1108 @if (settings.ActionButton != null)
1109 {
1110 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1111 <div class="form__field-combi u-no-margin dw-mod">
1112 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1113 @Render(settings.ActionButton)
1114 </div>
1115 }
1116 else
1117 {
1118 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1119 }
1120
1121 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1122 </div>
1123 }
1124 @using System.Reflection
1125 @using Dynamicweb.Rapido.Blocks.Components.General
1126 @using Dynamicweb.Rapido.Blocks.Components
1127
1128 @* Component *@
1129
1130 @helper RenderNumberField(NumberField settings)
1131 {
1132 var attributes = new Dictionary<string, string>();
1133 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1134 {
1135 settings.Id = Guid.NewGuid().ToString("N");
1136 }
1137
1138 /*base settings*/
1139 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1140 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1141 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1142 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1143 if (settings.Required) { attributes.Add("required", "true"); }
1144 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1145 /*end*/
1146
1147 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1148 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1149 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1150 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1151 if (settings.Max != null) { attributes.Add("max", settings.Max.ToString()); }
1152 if (settings.Min != null) { attributes.Add("min", settings.Min.ToString()); }
1153 if (settings.Step != 0) { attributes.Add("step", settings.Step.ToString()); }
1154 if (settings.Value != null && !string.IsNullOrEmpty(settings.Value.ToString())) { attributes.Add("value", settings.Value.ToString()); }
1155 attributes.Add("type", "number");
1156
1157 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1158
1159 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
1160 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1161 {
1162 <div class="u-full-width">
1163 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1164 @if (settings.Link != null) {
1165 <div class="u-pull--right">
1166 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1167 @Render(settings.Link)
1168 </div>
1169 }
1170 </div>
1171
1172 }
1173
1174 @if (!string.IsNullOrEmpty(settings.HelpText))
1175 {
1176 <small class="form__help-text">@settings.HelpText</small>
1177 }
1178
1179 @if (settings.ActionButton != null)
1180 {
1181 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1182 <div class="form__field-combi u-no-margin dw-mod">
1183 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1184 @Render(settings.ActionButton)
1185 </div>
1186 }
1187 else
1188 {
1189 <div class="form__field-combi u-no-margin dw-mod">
1190 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1191 </div>
1192 }
1193
1194 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1195 </div>
1196 }
1197 @using System.Reflection
1198 @using Dynamicweb.Rapido.Blocks.Components.General
1199 @using Dynamicweb.Rapido.Blocks.Components
1200
1201
1202 @* Component *@
1203
1204 @helper RenderTextareaField(TextareaField settings)
1205 {
1206 Dictionary<string, string> attributes = new Dictionary<string, string>();
1207 string id = settings.Id;
1208 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(id))
1209 {
1210 id = Guid.NewGuid().ToString("N");
1211 }
1212
1213 if (!string.IsNullOrEmpty(id)) { attributes.Add("id", id); }
1214 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1215 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1216 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1217 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1218 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1219 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); }
1220 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1221 if (settings.Required) { attributes.Add("required", "true"); }
1222 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1223 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); }
1224 if (settings.Rows != 0) { attributes.Add("rows", settings.Rows.ToString()); }
1225 attributes.Add("name", settings.Name);
1226
1227 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1228
1229 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1230 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1231 {
1232 <div class="u-full-width">
1233 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1234 @if (settings.Link != null) {
1235 <div class="u-pull--right">
1236 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1237 @Render(settings.Link)
1238 </div>
1239 }
1240 </div>
1241 }
1242
1243 @if (!string.IsNullOrEmpty(settings.HelpText))
1244 {
1245 <small class="form__help-text">@settings.HelpText</small>
1246 }
1247
1248 <textarea class="u-full-width @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Value</textarea>
1249
1250 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1251 </div>
1252 }
1253 @using System.Reflection
1254 @using Dynamicweb.Rapido.Blocks.Components.General
1255 @using Dynamicweb.Rapido.Blocks.Components
1256
1257
1258 @* Component *@
1259
1260 @helper RenderHiddenField(HiddenField settings) {
1261 var attributes = new Dictionary<string, string>();
1262 attributes.Add("type", "hidden");
1263 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1264 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1265 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1266
1267 <input @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)/>
1268 }
1269 @using System.Reflection
1270 @using Dynamicweb.Rapido.Blocks.Components.General
1271 @using Dynamicweb.Rapido.Blocks.Components
1272
1273 @* Component *@
1274
1275 @helper RenderCheckboxField(CheckboxField settings)
1276 {
1277 var attributes = new Dictionary<string, string>();
1278 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1279 {
1280 settings.Id = Guid.NewGuid().ToString("N");
1281 }
1282
1283 /*base settings*/
1284 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1285 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1286 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1287 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1288 if (settings.Required) { attributes.Add("required", "true"); }
1289 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1290 /*end*/
1291
1292 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1293
1294 attributes.Add("type", "checkbox");
1295 if (settings.Checked) { attributes.Add("checked", "true"); }
1296 settings.CssClass = "form__control " + settings.CssClass;
1297 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1298
1299 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1300
1301 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1302 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1303 @if (!string.IsNullOrEmpty(settings.Label))
1304 {
1305 <label for="@settings.Id" class="dw-mod">@settings.Label</label>
1306 }
1307
1308 @if (settings.Link != null) {
1309 <span>
1310 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1311 @Render(settings.Link)
1312 </span>
1313 }
1314
1315 @if (!string.IsNullOrEmpty(settings.HelpText))
1316 {
1317 <small class="form__help-text checkbox-help dw-mod">@settings.HelpText</small>
1318 }
1319 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1320 </div>
1321 }
1322 @using System.Reflection
1323 @using Dynamicweb.Rapido.Blocks.Components.General
1324 @using Dynamicweb.Rapido.Blocks.Components
1325
1326
1327 @* Component *@
1328
1329 @helper RenderCheckboxListField(CheckboxListField settings)
1330 {
1331 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1332 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1333 {
1334 <div class="u-full-width">
1335 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1336 @if (settings.Link != null) {
1337 <div class="u-pull--right">
1338 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1339 @Render(settings.Link)
1340 </div>
1341 }
1342 </div>
1343
1344 }
1345
1346 <div class="u-pull--left">
1347 @if (!string.IsNullOrEmpty(settings.HelpText))
1348 {
1349 <small class="form__help-text">@settings.HelpText</small>
1350 }
1351
1352 @foreach (var item in settings.Options)
1353 {
1354 if (settings.Required)
1355 {
1356 item.Required = true;
1357 }
1358 if (settings.Disabled)
1359 {
1360 item.Disabled = true;
1361 }
1362 if (!string.IsNullOrEmpty(settings.Name))
1363 {
1364 item.Name = settings.Name;
1365 }
1366 if (!string.IsNullOrEmpty(settings.CssClass))
1367 {
1368 item.CssClass += settings.CssClass;
1369 }
1370
1371 /* value is not supported */
1372
1373 if (!string.IsNullOrEmpty(settings.OnClick))
1374 {
1375 item.OnClick += settings.OnClick;
1376 }
1377 if (!string.IsNullOrEmpty(settings.OnChange))
1378 {
1379 item.OnChange += settings.OnChange;
1380 }
1381 @Render(item)
1382 }
1383
1384 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1385 </div>
1386
1387 </div>
1388 }
1389 @using Dynamicweb.Rapido.Blocks.Components.General
1390
1391 @* Component *@
1392
1393 @helper RenderSearch(Search settings)
1394 {
1395 var searchValue = HttpContext.Current.Request.QueryString.Get(settings.SearchParameter) ?? "";
1396 var groupValue = HttpContext.Current.Request.QueryString.Get(settings.GroupsParameter) ?? "";
1397
1398 if (string.IsNullOrEmpty(settings.Id))
1399 {
1400 settings.Id = Guid.NewGuid().ToString("N");
1401 }
1402
1403 var resultAttributes = new Dictionary<string, string>();
1404
1405 if (settings.PageSize != 0)
1406 {
1407 resultAttributes.Add("data-page-size", settings.PageSize.ToString());
1408 }
1409 if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl))
1410 {
1411 resultAttributes.Add("data-groups-feed-url", settings.GroupItemsFeedUrl);
1412 if (!string.IsNullOrEmpty(groupValue))
1413 {
1414 resultAttributes.Add("data-selected-group", groupValue);
1415 }
1416 if (!string.IsNullOrEmpty(settings.GroupsParameter))
1417 {
1418 resultAttributes.Add("data-groups-parameter", settings.GroupsParameter);
1419 }
1420 }
1421 resultAttributes.Add("data-force-init", "true");
1422 if (settings.GoToFirstSearchResultOnEnter)
1423 {
1424 resultAttributes.Add("data-go-to-first-search-result-on-enter", settings.GoToFirstSearchResultOnEnter.ToString().ToLower());
1425 }
1426 if (!string.IsNullOrEmpty(settings.SearchParameter))
1427 {
1428 resultAttributes.Add("data-search-parameter", settings.SearchParameter);
1429 }
1430 resultAttributes.Add("data-search-feed-url", settings.SearchData.SearchFeedUrl);
1431 resultAttributes.Add("data-results-template-id", settings.SearchData.ResultsTemplateId);
1432
1433 if (settings.SecondSearchData != null)
1434 {
1435 resultAttributes.Add("data-second-search-feed-url", settings.SecondSearchData.SearchFeedUrl);
1436 resultAttributes.Add("data-second-results-template-id", settings.SecondSearchData.ResultsTemplateId);
1437 }
1438 if (!string.IsNullOrEmpty(settings.ResultsPageUrl))
1439 {
1440 resultAttributes.Add("data-results-page-url", settings.ResultsPageUrl);
1441 }
1442
1443 resultAttributes = resultAttributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1444
1445 string searchFieldCss = (settings.SearchButton == null) ? "search--with-icon" : "";
1446
1447 <div class="search @settings.CssClass @searchFieldCss js-search-data-source dw-mod" id="@settings.Id" @ComponentMethods.AddAttributes(resultAttributes)>
1448 @if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl))
1449 {
1450 <button type="button" class="search__groups-btn dw-mod js-search-groups-btn">@Translate("All")</button>
1451 <ul class="dropdown dropdown--absolute-position dw-mod search__groups-results js-search-groups-list"></ul>
1452 }
1453
1454 <input type="text" class="search__field dw-mod js-search-field" placeholder="@settings.Placeholder" value="@searchValue">
1455
1456 <div class="dropdown dropdown--absolute-position search__results dw-mod js-search-results @(settings.SecondSearchData != null ? "search__results--combined" : "")">
1457 @if (settings.SecondSearchData != null)
1458 {
1459 <div class="search__column search__column--products dw-mod">
1460 <div class="search__column-header dw-mod">@Translate("Products")</div>
1461 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul>
1462 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl))
1463 {
1464 @Render(new Link {
1465 Title = Translate("View all"),
1466 CssClass = "js-view-all-button u-margin",
1467 Href = settings.SearchData.ResultsPageUrl
1468 });
1469 }
1470 </div>
1471 <div class="search__column search__column--pages dw-mod">
1472 <div class="search__column-header">@Translate("Pages")</div>
1473 <ul class="search__results-list dw-mod js-search-results-second-list" id="@(settings.Id)_SecondResultsList"></ul>
1474 @if (!string.IsNullOrEmpty(settings.SecondSearchData.ResultsPageUrl))
1475 {
1476 @Render(new Link
1477 {
1478 Title = Translate("View all"),
1479 CssClass = "js-view-all-button u-margin",
1480 Href = settings.SecondSearchData.ResultsPageUrl
1481 });
1482 }
1483 </div>
1484 }
1485 else
1486 {
1487 <div class="search__column search__column--only dw-mod">
1488 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul>
1489 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl))
1490 {
1491 @Render(new Link {
1492 Title = Translate("View all"),
1493 CssClass = "js-view-all-button u-margin",
1494 Href = settings.SearchData.ResultsPageUrl
1495 });
1496 }
1497 </div>
1498 }
1499 </div>
1500
1501 @if (settings.SearchButton != null)
1502 {
1503 settings.SearchButton.CssClass += " search__btn js-search-btn";
1504 if (settings.RenderDefaultSearchIcon)
1505 {
1506 settings.SearchButton.Icon = new Icon { Name = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue };
1507 }
1508 @Render(settings.SearchButton);
1509 }
1510 </div>
1511 }
1512 @using System.Reflection
1513 @using Dynamicweb.Rapido.Blocks.Components.General
1514 @using Dynamicweb.Rapido.Blocks.Components
1515
1516
1517 @* Component *@
1518
1519 @helper RenderSelectField(SelectField settings)
1520 {
1521 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1522 {
1523 settings.Id = Guid.NewGuid().ToString("N");
1524 }
1525
1526 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
1527 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1528 {
1529 <div class="u-full-width">
1530 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1531 @if (settings.Link != null) {
1532 <div class="u-pull--right">
1533 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1534 @Render(settings.Link)
1535 </div>
1536 }
1537 </div>
1538 }
1539
1540 @if (!string.IsNullOrEmpty(settings.HelpText))
1541 {
1542 <small class="form__help-text">@settings.HelpText</small>
1543 }
1544
1545 @if (settings.ActionButton != null)
1546 {
1547 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1548 <div class="form__field-combi u-no-margin dw-mod">
1549 @RenderSelectBase(settings)
1550 @Render(settings.ActionButton)
1551 </div>
1552 }
1553 else
1554 {
1555 @RenderSelectBase(settings)
1556 }
1557
1558 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1559 </div>
1560 }
1561
1562 @helper RenderSelectBase(SelectField settings)
1563 {
1564 var attributes = new Dictionary<string, string>();
1565
1566 /*base settings*/
1567 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1568 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1569 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1570 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1571 if (settings.Required) { attributes.Add("required", "true"); }
1572 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1573 /*end*/
1574
1575 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1576
1577 <select @ComponentMethods.AddAttributes(resultAttributes) class="u-full-width @settings.CssClass dw-mod">
1578 @if (settings.Default != null)
1579 {
1580 @Render(settings.Default)
1581 }
1582
1583 @foreach (var item in settings.Options)
1584 {
1585 if (settings.Value != null) {
1586 item.Checked = item.Value == settings.Value;
1587 }
1588 @Render(item)
1589 }
1590 </select>
1591 }
1592 @using System.Reflection
1593 @using Dynamicweb.Rapido.Blocks.Components.General
1594 @using Dynamicweb.Rapido.Blocks.Components
1595
1596 @* Component *@
1597
1598 @helper RenderRadioButtonField(RadioButtonField settings)
1599 {
1600 var attributes = new Dictionary<string, string>();
1601 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1602 {
1603 settings.Id = Guid.NewGuid().ToString("N");
1604 }
1605
1606 /*base settings*/
1607 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1608 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1609 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1610 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1611 if (settings.Required) { attributes.Add("required", "true"); }
1612 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1613 /*end*/
1614
1615 attributes.Add("type", "radio");
1616 if (settings.Checked) { attributes.Add("checked", "true"); }
1617 settings.CssClass = "form__control " + settings.CssClass;
1618 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1619
1620 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1621
1622 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1623 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1624 @if (!string.IsNullOrEmpty(settings.Label))
1625 {
1626 <label for="@settings.Id" class="dw-mod">@settings.Label</label>
1627 }
1628 @if (!string.IsNullOrEmpty(settings.HelpText))
1629 {
1630 <small class="form__help-text">@settings.HelpText</small>
1631 }
1632 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1633 </div>
1634 }
1635 @using System.Reflection
1636 @using Dynamicweb.Rapido.Blocks.Components.General
1637 @using Dynamicweb.Rapido.Blocks.Components
1638
1639
1640 @* Component *@
1641
1642 @helper RenderRadioButtonListField(RadioButtonListField settings)
1643 {
1644 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1645
1646 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1647 @if (!string.IsNullOrEmpty(settings.Label))
1648 {
1649 <label>@settings.Label</label>
1650 }
1651 @if (!string.IsNullOrEmpty(settings.HelpText))
1652 {
1653 <small class="form__help-text">@settings.HelpText</small>
1654 }
1655
1656 @foreach (var item in settings.Options)
1657 {
1658 if (settings.Required)
1659 {
1660 item.Required = true;
1661 }
1662 if (settings.Disabled)
1663 {
1664 item.Disabled = true;
1665 }
1666 if (!string.IsNullOrEmpty(settings.Name))
1667 {
1668 item.Name = settings.Name;
1669 }
1670 if (settings.Value != null && settings.Value == item.Value)
1671 {
1672 item.Checked = true;
1673 }
1674 if (!string.IsNullOrEmpty(settings.OnClick))
1675 {
1676 item.OnClick += settings.OnClick;
1677 }
1678 if (!string.IsNullOrEmpty(settings.OnChange))
1679 {
1680 item.OnChange += settings.OnChange;
1681 }
1682 if (!string.IsNullOrEmpty(settings.CssClass))
1683 {
1684 item.CssClass += settings.CssClass;
1685 }
1686 @Render(item)
1687 }
1688
1689 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1690 </div>
1691 }
1692 @using System.Reflection
1693 @using Dynamicweb.Rapido.Blocks.Components.General
1694 @using Dynamicweb.Rapido.Blocks.Components
1695
1696
1697 @* Component *@
1698
1699 @helper RenderNotificationMessage(NotificationMessage settings)
1700 {
1701 if (!string.IsNullOrEmpty(settings.Message))
1702 {
1703 var attributes = new Dictionary<string, string>();
1704 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1705
1706 string messageTypeClass = Enum.GetName(typeof(NotificationMessageType), settings.MessageType).ToLower();
1707 string messageLayoutClass = Enum.GetName(typeof(NotificationMessageLayout), settings.MessageLayout).ToLower();
1708 string minHeightClass = settings.Icon != null ? "u-min-h70px" : "";
1709
1710 <div class="notification-message-@messageTypeClass notification-message-@messageLayoutClass @messageLayoutClass @minHeightClass @settings.CssClass u-full-width dw-mod" @ComponentMethods.AddAttributes(attributes)>
1711 @if (settings.Icon != null) {
1712 settings.Icon.Label = !string.IsNullOrEmpty(settings.Icon.Label) ? settings.Message + settings.Icon.Label : settings.Message;
1713 @Render(settings.Icon)
1714 } else {
1715 @settings.Message
1716 }
1717 </div>
1718 }
1719 }
1720 @using Dynamicweb.Rapido.Blocks.Components.General
1721
1722
1723 @* Component *@
1724
1725 @helper RenderHandlebarsRoot(HandlebarsRoot settings) {
1726 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : "";
1727
1728 <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>
1729 @if (settings.SubBlocks != null) {
1730 @RenderBlockList(settings.SubBlocks)
1731 }
1732 </div>
1733 }
1734 @using System.Reflection
1735 @using Dynamicweb.Rapido.Blocks.Components.General
1736 @using Dynamicweb.Rapido.Blocks.Components
1737 @using System.Text.RegularExpressions
1738
1739
1740 @* Component *@
1741
1742 @helper RenderSticker(Sticker settings) {
1743 if (!String.IsNullOrEmpty(settings.Title)) {
1744 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : "";
1745 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : "";
1746
1747 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
1748 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) {
1749 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : "";
1750 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : "";
1751 optionalAttributes.Add("style", styleTag);
1752 }
1753
1754 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div>
1755 }
1756 }
1757
1758 @using System.Reflection
1759 @using Dynamicweb.Rapido.Blocks.Components.General
1760 @using Dynamicweb.Rapido.Blocks.Components
1761
1762
1763 @* Component *@
1764
1765 @helper RenderStickersCollection(StickersCollection settings)
1766 {
1767 if (settings.Stickers.Count > 0)
1768 {
1769 string position = "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
1770
1771 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1772 @foreach (Sticker sticker in settings.Stickers)
1773 {
1774 @Render(sticker)
1775 }
1776 </div>
1777 }
1778 }
1779
1780 @using Dynamicweb.Rapido.Blocks.Components.General
1781
1782
1783 @* Component *@
1784
1785 @helper RenderForm(Form settings) {
1786 if (settings != null)
1787 {
1788 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
1789 if (!string.IsNullOrEmpty(settings.Action)) { optionalAttributes.Add("action", settings.Action); };
1790 if (!string.IsNullOrEmpty(settings.Name)) { optionalAttributes.Add("name", settings.Name); };
1791 if (!string.IsNullOrEmpty(settings.OnSubmit)) { optionalAttributes.Add("onsubmit", settings.OnSubmit); };
1792 var enctypes = new Dictionary<string, string>
1793 {
1794 { "multipart", "multipart/form-data" },
1795 { "text", "text/plain" },
1796 { "application", "application/x-www-form-urlencoded" }
1797 };
1798 if (settings.Enctype != FormEnctype.none) { optionalAttributes.Add("enctype", enctypes[Enum.GetName(typeof(FormEnctype), settings.Enctype).ToLower()]); };
1799 optionalAttributes.Add("method", settings.Method.ToString());
1800
1801 if (!string.IsNullOrEmpty(settings.FormStartMarkup))
1802 {
1803 @settings.FormStartMarkup
1804 }
1805 else
1806 {
1807 @:<form class="@settings.CssClass u-no-margin dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1808 }
1809
1810 foreach (var field in settings.GetFields())
1811 {
1812 @Render(field)
1813 }
1814
1815 @:</form>
1816 }
1817 }
1818 @using System.Reflection
1819 @using Dynamicweb.Rapido.Blocks.Components.General
1820 @using Dynamicweb.Rapido.Blocks.Components
1821
1822
1823 @* Component *@
1824
1825 @helper RenderText(Text settings)
1826 {
1827 @settings.Content
1828 }
1829 @using System.Reflection
1830 @using Dynamicweb.Rapido.Blocks.Components.General
1831 @using Dynamicweb.Rapido.Blocks.Components
1832
1833
1834 @* Component *@
1835
1836 @helper RenderContentModule(ContentModule settings) {
1837 if (!string.IsNullOrEmpty(settings.Content))
1838 {
1839 @settings.Content
1840 }
1841 }
1842 @using System.Reflection
1843 @using Dynamicweb.Rapido.Blocks.Components.General
1844 @using Dynamicweb.Rapido.Blocks.Components
1845
1846
1847 @* Component *@
1848
1849 @helper RenderModal(Modal settings) {
1850 if (settings != null)
1851 {
1852 string modalId = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N");
1853
1854 string onchange = !string.IsNullOrEmpty(settings.OnClose) ? "onchange=\"if(!this.checked){" + settings.OnClose + "}\"" : "";
1855
1856 <input type="checkbox" id="@(modalId)ModalTrigger" class="modal-trigger" @onchange />
1857
1858 <div class="modal-container">
1859 @if (!settings.DisableDarkOverlay)
1860 {
1861 <label for="@(modalId)ModalTrigger" id="@(modalId)ModalOverlay" class="modal-overlay"></label>
1862 }
1863 <div class="modal modal--@settings.Width.ToString().ToLower() modal-height--@settings.Height.ToString().ToLower()" id="@(modalId)Modal">
1864 @if (settings.Heading != null)
1865 {
1866 if (!string.IsNullOrEmpty(settings.Heading.Title))
1867 {
1868 <div class="modal__header">
1869 @Render(settings.Heading)
1870 </div>
1871 }
1872 }
1873 <div class="modal__body @(settings.Width.ToString().ToLower() == "full" ? "modal__body--full" : "")">
1874 @if (!string.IsNullOrEmpty(settings.BodyText))
1875 {
1876 @settings.BodyText
1877 }
1878 @if (settings.BodyTemplate != null)
1879 {
1880 @settings.BodyTemplate
1881 }
1882 @{
1883 var actions = settings.GetActions();
1884 }
1885 </div>
1886 @if (actions.Length > 0)
1887 {
1888 <div class="modal__footer">
1889 @foreach (var action in actions)
1890 {
1891 if (Pageview.Device.ToString() != "Mobile") {
1892 action.CssClass += " u-no-margin";
1893 } else {
1894 action.CssClass += " u-full-width u-margin-bottom";
1895 }
1896
1897 @Render(action)
1898 }
1899 </div>
1900 }
1901 <label class="modal__close-btn" for="@(modalId)ModalTrigger"></label>
1902 </div>
1903 </div>
1904 }
1905 }
1906 @using Dynamicweb.Rapido.Blocks.Components.General
1907
1908 @* Component *@
1909
1910 @helper RenderMediaListItem(MediaListItem settings)
1911 {
1912 <div class="media-list-item @settings.CssClass dw-mod" @(!string.IsNullOrEmpty(settings.Id) ? "id=\"" + settings.Id + "\"" : "")>
1913 @if (!string.IsNullOrEmpty(settings.Label))
1914 {
1915 if (!string.IsNullOrEmpty(settings.Link))
1916 {
1917 @Render(new Link
1918 {
1919 Href = settings.Link,
1920 CssClass = "media-list-item__sticker dw-mod",
1921 ButtonLayout = ButtonLayout.None,
1922 Title = settings.Label,
1923 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : ""
1924 })
1925 }
1926 else if (!string.IsNullOrEmpty(settings.OnClick))
1927 {
1928 <span class="media-list-item__sticker dw-mod" onclick="@(settings.OnClick)">
1929 <span class="u-uppercase">@settings.Label</span>
1930 </span>
1931 }
1932 else
1933 {
1934 <span class="media-list-item__sticker media-list-item__sticker--no-link dw-mod">
1935 <span class="u-uppercase">@settings.Label</span>
1936 </span>
1937 }
1938 }
1939 <div class="media-list-item__wrap">
1940 <div class="media-list-item__info dw-mod">
1941 <div class="media-list-item__header dw-mod">
1942 @if (!string.IsNullOrEmpty(settings.Title))
1943 {
1944 if (!string.IsNullOrEmpty(settings.Link))
1945 {
1946 @Render(new Link
1947 {
1948 Href = settings.Link,
1949 CssClass = "media-list-item__name dw-mod",
1950 ButtonLayout = ButtonLayout.None,
1951 Title = settings.Title,
1952 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : ""
1953 })
1954 }
1955 else if (!string.IsNullOrEmpty(settings.OnClick))
1956 {
1957 <span class="media-list-item__name dw-mod" onclick="@(settings.OnClick)">@settings.Title</span>
1958 }
1959 else
1960 {
1961 <span class="media-list-item__name media-list-item__name--no-link dw-mod">@settings.Title</span>
1962 }
1963 }
1964
1965 @if (!string.IsNullOrEmpty(settings.Status))
1966 {
1967 <div class="media-list-item__state dw-mod">@settings.Status</div>
1968 }
1969 </div>
1970 @{
1971 settings.InfoTable.CssClass += " media-list-item__parameters-table";
1972 }
1973
1974 @Render(settings.InfoTable)
1975 </div>
1976 <div class="media-list-item__actions dw-mod">
1977 <div class="media-list-item__actions-list dw-mod">
1978 @{
1979 var actions = settings.GetActions();
1980
1981 foreach (ButtonBase action in actions)
1982 {
1983 action.ButtonLayout = ButtonLayout.None;
1984 action.CssClass += " media-list-item__action link";
1985
1986 @Render(action)
1987 }
1988 }
1989 </div>
1990
1991 @if (settings.SelectButton != null && !string.IsNullOrEmpty(settings.SelectButton.Title))
1992 {
1993 settings.SelectButton.CssClass += " u-no-margin";
1994
1995 <div class="media-list-item__action-button">
1996 @Render(settings.SelectButton)
1997 </div>
1998 }
1999 </div>
2000 </div>
2001 </div>
2002 }
2003 @using Dynamicweb.Rapido.Blocks.Components.General
2004 @using Dynamicweb.Rapido.Blocks.Components
2005
2006 @helper RenderTable(Table settings)
2007 {
2008 Dictionary<string, string> attributes = new Dictionary<string, string>();
2009 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2010
2011 var enumToClasses = new Dictionary<TableDesign, string>
2012 {
2013 { TableDesign.Clean, "table--clean" },
2014 { TableDesign.Bordered, "table--bordered" },
2015 { TableDesign.Striped, "table--striped" },
2016 { TableDesign.Hover, "table--hover" },
2017 { TableDesign.Compact, "table--compact" },
2018 { TableDesign.Condensed, "table--condensed" },
2019 { TableDesign.NoTopBorder, "table--no-top-border" }
2020 };
2021 string tableDesignClass = "";
2022 if (settings.Design != TableDesign.None)
2023 {
2024 tableDesignClass = enumToClasses[settings.Design];
2025 }
2026
2027 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableDesign.None) { attributes.Add("class", "table " + tableDesignClass + " " + settings.CssClass + " dw-mod"); }
2028
2029 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2030
2031 <table @ComponentMethods.AddAttributes(resultAttributes)>
2032 @if (settings.Header != null)
2033 {
2034 <thead>
2035 @Render(settings.Header)
2036 </thead>
2037 }
2038 <tbody>
2039 @foreach (var row in settings.Rows)
2040 {
2041 @Render(row)
2042 }
2043 </tbody>
2044 @if (settings.Footer != null)
2045 {
2046 <tfoot>
2047 @Render(settings.Footer)
2048 </tfoot>
2049 }
2050 </table>
2051 }
2052 @using Dynamicweb.Rapido.Blocks.Components.General
2053 @using Dynamicweb.Rapido.Blocks.Components
2054
2055 @helper RenderTableRow(TableRow settings)
2056 {
2057 Dictionary<string, string> attributes = new Dictionary<string, string>();
2058 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2059
2060 var enumToClasses = new Dictionary<TableRowDesign, string>
2061 {
2062 { TableRowDesign.NoBorder, "table__row--no-border" },
2063 { TableRowDesign.Border, "table__row--border" },
2064 { TableRowDesign.TopBorder, "table__row--top-line" },
2065 { TableRowDesign.BottomBorder, "table__row--bottom-line" },
2066 { TableRowDesign.Solid, "table__row--solid" }
2067 };
2068
2069 string tableRowDesignClass = "";
2070 if (settings.Design != TableRowDesign.None)
2071 {
2072 tableRowDesignClass = enumToClasses[settings.Design];
2073 }
2074
2075 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableRowDesign.None) { attributes.Add("class", "table__row " + tableRowDesignClass + " " + settings.CssClass + " dw-mod"); }
2076
2077 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2078
2079 <tr @ComponentMethods.AddAttributes(resultAttributes)>
2080 @foreach (var cell in settings.Cells)
2081 {
2082 if (settings.IsHeaderRow)
2083 {
2084 cell.IsHeader = true;
2085 }
2086 @Render(cell)
2087 }
2088 </tr>
2089 }
2090 @using Dynamicweb.Rapido.Blocks.Components.General
2091 @using Dynamicweb.Rapido.Blocks.Components
2092 @using Dynamicweb.Core
2093
2094 @helper RenderTableCell(TableCell settings)
2095 {
2096 Dictionary<string, string> attributes = new Dictionary<string, string>();
2097 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2098 if (settings.Colspan != 0) { attributes.Add("colspan", Converter.ToString(settings.Colspan)); }
2099 if (settings.Rowspan != 0) { attributes.Add("rowspan", Converter.ToString(settings.Rowspan)); }
2100 if (!string.IsNullOrEmpty(settings.CssClass)) { attributes.Add("class", settings.CssClass + " dw-mod"); }
2101
2102 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2103
2104 string tagName = settings.IsHeader ? "th" : "td";
2105
2106 @("<" + tagName + " " + ComponentMethods.AddAttributes(resultAttributes) + ">")
2107 @settings.Content
2108 @("</" + tagName + ">");
2109 }
2110 @using System.Linq
2111 @using Dynamicweb.Rapido.Blocks.Components.General
2112
2113 @* Component *@
2114
2115 @helper RenderPagination(Dynamicweb.Rapido.Blocks.Components.General.Pagination settings)
2116 {
2117 var pageNumberQueryStringName = Dynamicweb.Rapido.Services.Pagination.GetPageNumberQueryStringName(settings); // Get the proper 'page number' query string parameter
2118 var queryParameters = Dynamicweb.Rapido.Services.Url.GetQueryParameters(pageNumberQueryStringName); // Get the NameValueCollection from the querystring
2119
2120 if (settings.NumberOfPages > 1)
2121 {
2122 string url = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + "/Default.aspx";
2123 string ariaLabel = !string.IsNullOrWhiteSpace(settings.AriaLabel) ? settings.AriaLabel : Translate("Page navigation");
2124 Dictionary<string, int> startAndEndPageNumber = Dynamicweb.Rapido.Services.Pagination.GetStartAndEndPageNumber(settings);
2125
2126 <div class="pager u-margin-top dw-mod @settings.CssClass" aria-label="@ariaLabel">
2127 @if (settings.ShowPagingInfo)
2128 {
2129 <div class="pager__info dw-mod">
2130 @Translate("Page") @settings.CurrentPageNumber @Translate("of") @settings.NumberOfPages
2131 </div>
2132 }
2133 <ul class="pager__list dw-mod">
2134 @if (!string.IsNullOrWhiteSpace(settings.FirstPageUrl) && settings.ShowFirstAndLastControls)
2135 {
2136 @Render(new PaginationItem { Link = settings.FirstPageUrl, Icon = settings.FirstIcon })
2137 }
2138 @if (!string.IsNullOrWhiteSpace(settings.PreviousPageUrl) && settings.ShowNextAndPrevControls)
2139 {
2140 @Render(new PaginationItem { Link = settings.PreviousPageUrl, Icon = settings.PrevIcon })
2141 }
2142 @if (settings.GetPages().Any())
2143 {
2144 foreach (var page in settings.GetPages())
2145 {
2146 @Render(page)
2147 }
2148 }
2149 else
2150 {
2151 for (var page = startAndEndPageNumber["StartPage"]; page <= startAndEndPageNumber["EndPage"]; page++)
2152 {
2153 queryParameters = Dynamicweb.Rapido.Services.Url.UpdateQueryStringParameter(queryParameters, pageNumberQueryStringName, page.ToString());
2154 @Render(new PaginationItem { Label = page.ToString(), Link = Dynamicweb.Rapido.Services.Url.BuildUri(url, queryParameters).PathAndQuery, IsActive = (settings.CurrentPageNumber == page) });
2155 }
2156 }
2157 @if (!string.IsNullOrWhiteSpace(settings.NextPageUrl) && settings.ShowNextAndPrevControls)
2158 {
2159 @Render(new PaginationItem { Link = settings.NextPageUrl, Icon = settings.NextIcon })
2160 }
2161 @if (!string.IsNullOrWhiteSpace(settings.LastPageUrl) && settings.ShowFirstAndLastControls)
2162 {
2163 @Render(new PaginationItem { Link = settings.LastPageUrl, Icon = settings.LastIcon })
2164 }
2165 </ul>
2166 </div>
2167 }
2168 }
2169
2170 @helper RenderPaginationItem(PaginationItem settings)
2171 {
2172 if (settings.Icon == null)
2173 {
2174 settings.Icon = new Icon();
2175 }
2176
2177 settings.Icon.Label = settings.Label;
2178 <li class="pager__btn dw-mod">
2179 @if (settings.IsActive)
2180 {
2181 <span class="pager__num pager__num--current dw-mod">
2182 @Render(settings.Icon)
2183 </span>
2184 }
2185 else
2186 {
2187 <a href="@settings.Link" class="pager__num dw-mod">
2188 @Render(settings.Icon)
2189 </a>
2190 }
2191 </li>
2192 }
2193
2194
2195 @using Dynamicweb.Rapido.Blocks.Components.General
2196 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
2197
2198
2199
2200
2201 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2202 @using Dynamicweb.Rapido.Blocks.Components.General
2203 @using Dynamicweb.Core
2204 @using System.Linq
2205 @using Dynamicweb.Ecommerce.Common
2206 @using Dynamicweb.Frontend
2207
2208 @functions {
2209 bool useBillingAddress = HttpContext.Current.Request.Cookies["UseAnotherAddress"] == null || !Converter.ToBoolean(HttpContext.Current.Request.Cookies["UseAnotherAddress"].Value);
2210 }
2211
2212 @helper RenderAddresses()
2213 {
2214 var settings = Pageview.AreaSettings.GetItem("Ecommerce").GetItem("Checkout");
2215 var billingAddressesEditing = settings.GetList("AddressesEditing");
2216 var userLoggedIn = Pageview.User != null;
2217
2218 if (userLoggedIn)
2219 {
2220 if (billingAddressesEditing.SelectedValue == "readonly")
2221 {
2222 @RenderReadOnlyBillingAddress()
2223 @RenderReadOnlyShippingAddress()
2224 }
2225 else if (billingAddressesEditing.SelectedValue == "static")
2226 {
2227 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Address")))
2228 {
2229 @RenderReadOnlyBillingAddress()
2230 }
2231 else
2232 {
2233 @RenderEditableBillingAddress()
2234 }
2235 @RenderStaticShippingAddress()
2236 }
2237 else
2238 {
2239 @RenderEditableBillingAddress()
2240 @RenderEditableShippingAddress()
2241 }
2242 }
2243 else
2244 {
2245 @RenderAddressesJavascript()
2246 @RenderEditableBillingAddress()
2247 @RenderShippingAddressSelector()
2248 <div class="js-shipping-address-container @(useBillingAddress ? "u-hidden" : "")">
2249 @RenderEditableShippingAddress()
2250 </div>
2251 }
2252 }
2253
2254 @helper RenderEditableBillingAddress()
2255 {
2256 var countrySelected = GetLoop("Countries").FirstOrDefault(x => x.GetBoolean("Ecom:Country.IsCustomerCountryOrDefault")).GetString("Ecom:Country.Code2");
2257 var getRegions = (countrySelected != null ? Dynamicweb.Ecommerce.Services.Countries.GetRegions(countrySelected) : null);
2258 bool showInputZipHelpText = countrySelected.ToLowerInvariant() == "se" || PageView.Current().Area.CultureInfo.TwoLetterISOLanguageName.ToLowerInvariant() == "sv" || Context.LanguageID.ToLowerInvariant() == "lang17";
2259 string inputZipPlaceholder = showInputZipHelpText == true ? Translate("Checkout - EcomOrderCustomerZip - Placeholder", "XXX XX") : null;
2260 string inputZipHelpText = showInputZipHelpText == true ? Translate("Checkout - EcomOrderCustomerZip - Help text", "Ange ditt postnummer med tre siffror, mellanrum och två siffror: XXX XX") : null;
2261 bool cvrRequired = PageView.Current().Area.EcomCountryCode.ToLower() == "es";
2262
2263 <div class="u-margin-bottom--xl">
2264 <h2 class="u-margin-bottom--lg">@Translate("Billing address")</h2>
2265
2266 @Render(new TextField { Label = Translate("Company"), Name = "EcomOrderCustomerCompany", Id = "EcomOrderCustomerCompany", Value = GetString("Ecom:Order.Customer.Company"), ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerCompany.ErrorMessage") })
2267 @Render(new TextField { Label = Translate("CVR"), Name = "EcomOrderCustomerVatRegNumber", Id = "EcomOrderCustomerVatRegNumber", Value = GetString("Ecom:Order.Customer.VatRegNumber"), Required = cvrRequired, ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerVatRegNumber.ErrorMessage") })
2268 @Render(new TextField { Label = Translate("Name"), Name = "EcomOrderCustomerName", Id = "EcomOrderCustomerName", Value = GetString("Ecom:Order.Customer.Name"), ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerName.ErrorMessage") })
2269
2270 @Render(new TextField { Label = Translate("Address"), Name = "EcomOrderCustomerAddress", Id = "EcomOrderCustomerAddress", Value = GetString("Ecom:Order.Customer.Address"), ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerAddress.ErrorMessage") })
2271
2272 <div class="form__fields-collection form__fields-collection--2-3">
2273 @Render(new TextField { Label = Translate("Zip"), Name = "EcomOrderCustomerZip", Id = "EcomOrderCustomerZip", Value = GetString("Ecom:Order.Customer.Zip"), ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerZip.ErrorMessage"), Placeholder = inputZipPlaceholder, HelpText = inputZipHelpText })
2274 @Render(new TextField { Label = Translate("City"), Name = "EcomOrderCustomerCity", Id = "EcomOrderCustomerCity", Value = GetString("Ecom:Order.Customer.City"), ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerCity.ErrorMessage") })
2275 </div>
2276
2277 <div class="u-position-relative">
2278 <div id="AjaxBillingRegions" class="checkout-input__wrapper"></div>
2279 </div>
2280
2281 @{
2282 SelectField selectCountry = new SelectField
2283 {
2284 Id = "AjaxCustomerCountry",
2285 Name = "EcomOrderCustomerCountry",
2286 Label = Translate("Country"),
2287 OnClick = "document.getElementById('useAnotherAddress').checked == true ? void(0) : document.getElementById('AjaxCountry').value = ''",
2288 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerCountry.ErrorMessage"),
2289 ExtraAttributes = new Dictionary<string, string>{
2290 { "data-bind-reactive", "Summary, Parcel, Payment, BillingRegions, Shipping" }
2291 }
2292 };
2293
2294 string availableCountriesInTheCheckout = Pageview.AreaSettings.GetItem("Ecommerce").GetString("AvailableCountriesInTheCheckout");
2295 List<string> listOfAvailableCountriesInTheCheckout = String.IsNullOrEmpty(availableCountriesInTheCheckout) ? new List<string>() : availableCountriesInTheCheckout.Split(',').ToList();
2296
2297 foreach (LoopItem country in GetLoop("Countries"))
2298 {
2299 if (listOfAvailableCountriesInTheCheckout.Any() && !listOfAvailableCountriesInTheCheckout.Contains(country.GetString("Ecom:Country.Code2")))
2300 {
2301 continue;
2302 }
2303 selectCountry.Options.Add(new SelectFieldOption { Label = country.GetString("Ecom:Country.Name"), Value = country.GetString("Ecom:Country.Code2"), Checked = country.GetBoolean("Ecom:Country.IsCustomerCountryOrDefault") });
2304 }
2305 }
2306
2307 @Render(selectCountry)
2308
2309 <div class="form__fields-collection form__fields-collection--2-3">
2310 @Render(new TextField { Label = Translate("Phone"), Name = "EcomOrderCustomerPhone", Id = "EcomOrderCustomerPhone", Value = GetString("Ecom:Order.Customer.Phone"), ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerPhone.ErrorMessage") })
2311 @Render(new TextField { Label = Translate("Email"), Name = "EcomOrderCustomerEmail", Id = "EcomOrderCustomerEmail", Value = GetString("Ecom:Order.Customer.Email"), ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerEmail.ErrorMessage"), HelpText = Translate("We'll send your receipt to this address"), })
2312 </div>
2313 </div>
2314 }
2315
2316 @helper RenderReadOnlyBillingAddress()
2317 {
2318 <div class="u-margin-bottom--xl">
2319 <h2 class="u-margin-bottom--lg">@Translate("Billing address")</h2>
2320
2321 <div class="form__field-group--bordered">
2322 @Render(new RadioButtonField
2323 {
2324 Name = "BillingAddress",
2325 Id = "BillingAddress",
2326 Checked = true,
2327 Label = getLabel(GetString("Ecom:Order.Customer.Name"), GetString("Ecom:Order.Customer.Address"), GetString("Ecom:Order.Customer.Zip"), GetString("Ecom:Order.Customer.City"), GetString("Ecom:Order.Customer.Country"), GetString("Ecom:Order.Customer.Email"), GetString("Ecom:Order.Customer.Phone"), "0"),
2328 WrapperCssClass = "u-no-margin form__field-group--hide-radio",
2329 Disabled = Pageview.AreaSettings.GetItem("Ecommerce").GetItem("Checkout").GetList("AddressesEditing").SelectedValue == "readonly" ? true : false
2330 })
2331 </div>
2332 </div>
2333 }
2334
2335 @helper RenderReadOnlyShippingAddress()
2336 {
2337 var userAddresses = GetLoop("UserManagement:User.UserAddresses");
2338
2339 <h2 class="u-margin-bottom--lg">@Translate("Shipping address")</h2>
2340
2341 if (userAddresses.Count == 0)
2342 {
2343 @RenderDefaultAddress("", true)
2344 }
2345
2346 if (userAddresses != null && userAddresses.Any())
2347 {
2348
2349 // Set selected item (optionally parsed in, used in other areas as OrderDraftDetails)
2350 @* Eventhough the address is not included in this loop, it is saved on the first item in the loop *@
2351 string selectedId = userAddresses.FirstOrDefault().GetString("UserManagement:User.UserAddress.SelectedAddressID");
2352
2353 @Render(new HiddenField
2354 {
2355 Name = "UserManagementUserUserAddressSelectedAddressID",
2356 Id = "UserManagementUserUserAddressSelectedAddressID",
2357 Value = selectedId
2358 })
2359
2360 // Add searchfield
2361 if (userAddresses.Count > 5)
2362 {
2363 @Render(new TextField
2364 {
2365 Name = "UserAddressesSearch",
2366 Id = "UserAddressesSearch",
2367 Placeholder = Translate("Search addresses"),
2368 Type = TextFieldType.Text,
2369 OnKeyUp = "Filter.FilterItems(event)"
2370 })
2371 }
2372
2373 var countryCode2 = "";
2374
2375 foreach (LoopItem country in GetLoop("Countries"))
2376 {
2377 if (country.GetBoolean("Ecom:Country.IsCustomerCountryOrDefault"))
2378 {
2379 countryCode2 = country.GetString("Ecom:Country.Code2");
2380 }
2381 }
2382
2383 @Render(new HiddenField { Name = "EcomOrderDeliveryName", Id = "EcomOrderDeliveryName", Value = GetString("Ecom:Order.Customer.Name") })
2384 @Render(new HiddenField { Name = "EcomOrderDeliveryZip", Id = "EcomOrderDeliveryZip", Value = GetString("Ecom:Order.Customer.Zip") })
2385 @Render(new HiddenField { Name = "EcomOrderDeliveryCity", Id = "EcomOrderDeliveryCity", Value = GetString("Ecom:Order.Customer.City") })
2386 @Render(new HiddenField { Name = "EcomOrderDeliveryCountry", Id = "EcomOrderDeliveryCountry", Value = countryCode2 })
2387 @Render(new HiddenField { Name = "EcomOrderDeliveryAddress", Id = "EcomOrderDeliveryAddress", Value = GetString("Ecom:Order.Customer.Address") })
2388 @Render(new HiddenField { Name = "EcomOrderDeliveryEmail", Id = "EcomOrderDeliveryEmail", Value = GetString("Ecom:Order.Customer.Email") })
2389 @Render(new HiddenField { Name = "EcomOrderDeliveryPhone", Id = "EcomOrderDeliveryPhone", Value = GetString("Ecom:Order.Customer.Phone") })
2390
2391 <div class="form__group">
2392 @if (userAddresses.Count > 0)
2393 {
2394 <div class="form__field-group--bordered" data-filter-value="@GetString("Ecom:Order.Customer.Address")">
2395 @Render(new RadioButtonField
2396 {
2397 Name = "UserManagementUserSelectedAddress",
2398 Id = "UserManagementUserAddress_" + Pageview.User.ID,
2399 Value = Pageview.User.ID.ToString(),
2400 Checked = selectedId == Pageview.User.ID.ToString() ? true : false,
2401 Label = "<b>" + Translate("Same as billing address") + "</b>",
2402 WrapperCssClass = "u-no-margin",
2403 OnClick = "FillCustomerAddressFields('" + GetString("Ecom:Order.Customer.Name") + "', '" + GetString("Ecom:Order.Customer.Address") + "', '" + GetString("Ecom:Order.Customer.Zip") + "', '" + GetString("Ecom:Order.Customer.City") + "', '" + countryCode2 + "', '" + GetString("Ecom:Order.Customer.Email") + "', '" + GetString("Ecom:Order.Customer.Phone") + "')",
2404 ExtraAttributes = new Dictionary<string, string>{
2405 { "data-bind-reactive", "Shipping, Payment, Summary" },
2406 { "data-reactive-delay", "300" }
2407 }
2408 })
2409 </div>
2410
2411 foreach (LoopItem item in userAddresses)
2412 {
2413 string value = Converter.ToString(item.GetInteger("UserManagement:User.UserAddress.ID"));
2414
2415 string name = item.GetString("UserManagement:User.UserAddress.AccessUserAddress_UserName");
2416 string address = item.GetString("UserManagement:User.UserAddress.Address");
2417 string zipCode = item.GetString("UserManagement:User.UserAddress.Zip");
2418 string city = item.GetString("UserManagement:User.UserAddress.City");
2419 string country = item.GetString("UserManagement:User.UserAddress.Culture.CountryName");
2420 string countryCode = item.GetString("UserManagement:User.UserAddress.CountryCode");
2421 string email = item.GetString("UserManagement:User.UserAddress.Email");
2422 string phone = item.GetString("UserManagement:User.UserAddress.Phone");
2423
2424 @RenderAddressSelect(name, address, zipCode, city, country, countryCode, email, phone, value, selectedId)
2425 }
2426 }
2427 else
2428 {
2429 @RenderDefaultAddress(selectedId, true)
2430 }
2431 </div>
2432 }
2433 }
2434
2435 @helper RenderDefaultAddress(string selectedId = "", bool hideRadio = false)
2436 {
2437 string value = GetString("UserManagement:User.ID");
2438 string name = GetString("UserManagement:User.Name");
2439 string address = GetString("UserManagement:User.Address");
2440 string zipCode = GetString("UserManagement:User.Zip");
2441 string city = GetString("UserManagement:User.City");
2442 string country = GetString("UserManagement:User.Culture.CountryName");
2443 string countryCode = GetString("UserManagement:User.CountryCode");
2444 string email = GetString("UserManagement:User.Email");
2445 string phone = GetString("UserManagement:User.Phone");
2446
2447 @RenderAddressSelect(name, address, zipCode, city, country, countryCode, email, phone, value, selectedId, hideRadio)
2448 }
2449
2450
2451 @helper RenderAddressSelect(string name, string address, string zipCode, string city, string country, string countryCode, string email, string phone, string value, string selectedId, bool hideRadio = false)
2452 {
2453 string label = getLabel(name, address, zipCode, city, country, email, phone, value);
2454 bool selected = value == selectedId ? true : false;
2455
2456 <div class="form__field-group--bordered" data-filter-value="@address">
2457 @Render(new RadioButtonField
2458 {
2459 Name = "UserManagementUserSelectedAddress",
2460 Id = "UserManagementUserAddress_" + value,
2461 Value = value,
2462 Checked = selected,
2463 Label = label,
2464 WrapperCssClass = hideRadio ? "u-no-margin form__field-group--hide-radio" : "u-no-margin",
2465 OnClick = "FillCustomerAddressFields('" + name + "', '" + address + "', '" + zipCode + "', '" + city + "', '" + countryCode + "', '" + email + "', '" + phone + "')",
2466 ExtraAttributes = new Dictionary<string, string>{
2467 { "data-bind-reactive", "Shipping, Payment, Summary" }
2468 }
2469 })
2470 </div>
2471 }
2472
2473
2474 @helper RenderStaticShippingAddress()
2475 {
2476 if (Pageview.User != null)
2477 {
2478 @RenderReadOnlyShippingAddress()
2479 }
2480 else
2481 {
2482 @RenderEditableShippingAddress()
2483 }
2484 }
2485
2486
2487 @helper RenderShippingAddressSelector()
2488 {
2489 @Render(new RadioButtonListField
2490 {
2491 Name = "ShippingAddressSelector",
2492 Options = new List<RadioButtonField>
2493 {
2494 new RadioButtonField
2495 {
2496 Label = Translate("Ship to the billing address"),
2497 Value = "useBillingAddress",
2498 Id = "useBillingAddress",
2499 Checked = useBillingAddress,
2500 OnChange = "changeShippingAddressToBilling()",
2501 WrapperCssClass = "u-margin-bottom--auto"
2502 },
2503 new RadioButtonField
2504 {
2505 Label = Translate("Ship to another address"),
2506 Value = "useAnotherAddress",
2507 Id = "useAnotherAddress",
2508 Checked = !useBillingAddress,
2509 OnChange = "setUseBillingAddress(false);"
2510 }
2511 }
2512 });
2513 }
2514
2515 @helper RenderAddressesJavascript()
2516 {
2517 <script>
2518 function setUseBillingAddress(useBillingAddress) {
2519 RememberState.SetCookie("useAnotherAddress", !useBillingAddress);
2520 document.getElementById("useBillingAddress").checked = useBillingAddress;
2521 document.getElementById("useBillingAddress").setAttribute("checked", useBillingAddress);
2522 document.querySelector(".js-shipping-address-container").classList.remove("u-hidden");
2523 }
2524
2525 function changeShippingAddressToBilling() {
2526 setUseBillingAddress(true);
2527 document.querySelector(".js-shipping-address-container").classList.add("u-hidden");
2528 Cart.FillShippingAddress({
2529 Company: "",
2530 Name: "",
2531 Phone: "",
2532 Email: "",
2533 Address: "",
2534 Zip: "",
2535 City: "",
2536 Region: "",
2537 Country: ""
2538 });
2539 }
2540
2541 @if (!useBillingAddress)
2542 {
2543 <text>document.addEventListener("DOMContentLoaded", function () {
2544 document.getElementById("useAnotherAddress").checked = true;
2545 });</text>
2546 }
2547
2548 </script>
2549 }
2550
2551 @helper RenderEditableShippingAddress()
2552 {
2553 var countries = GetLoop("Countries");
2554
2555 <h2 class="u-margin-bottom--lg">@Translate("Shipping address")</h2>
2556
2557 @Render(new TextField
2558 {
2559 Name = "EcomOrderDeliveryName",
2560 Id = "EcomOrderDeliveryName",
2561 Value = GetString("Ecom:Order.Delivery.Name"),
2562 Label = Translate("Name"),
2563 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryName.ErrorMessage"),
2564 })
2565
2566 @Render(new TextField
2567 {
2568 Name = "EcomOrderDeliveryCompany",
2569 Id = "EcomOrderDeliveryCompany",
2570 Value = GetString("Ecom:Order.Delivery.Company"),
2571 Label = $"{Translate("Company")} <small>({Translate("Optional")})</small>",
2572 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryCompany.ErrorMessage"),
2573 })
2574
2575
2576 <fieldset>
2577 @Render(new TextField
2578 {
2579 Name = "EcomOrderDeliveryAddress",
2580 Id = "EcomOrderDeliveryAddress",
2581 Value = GetString("Ecom:Order.Delivery.Address"),
2582 Label = Translate("Address"),
2583 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryAddress.ErrorMessage"),
2584 })
2585
2586 @Render(new HiddenField
2587 {
2588 Name = "EcomOrderDeliveryAddress2",
2589 Id = "EcomOrderDeliveryAddress2",
2590 Value = GetString("Ecom:Order.Delivery.Address2"),
2591 Label = Translate("Address2"),
2592 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryAddress.ErrorMessage2"),
2593 })
2594
2595 <div class="form__fields-collection">
2596 @Render(new TextField
2597 {
2598 Name = "EcomOrderDeliveryZip",
2599 Id = "EcomOrderDeliveryZip",
2600 Value = GetString("Ecom:Order.Delivery.Zip"),
2601 Label = Translate("Zip code"),
2602 WrapperCssClass = "u-flex-basis--40",
2603 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryZip.ErrorMessage"),
2604 })
2605
2606 @Render(new TextField
2607 {
2608 Name = "EcomOrderDeliveryCity",
2609 Id = "EcomOrderDeliveryCity",
2610 Value = GetString("Ecom:Order.Delivery.City"),
2611 Label = Translate("City"),
2612 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryCity.ErrorMessage"),
2613 })
2614 </div>
2615 </fieldset>
2616
2617 <div class="u-position-relative">
2618 <div id="AjaxDeliveryRegions" class="checkout-input__wrapper"></div>
2619 </div>
2620
2621 if (countries != null)
2622 {
2623 SelectField select = new SelectField
2624 {
2625 Name = "EcomOrderDeliveryCountry",
2626 Id = "AjaxCountry",
2627 Label = Translate("Country"),
2628 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryCountry.ErrorMessage"),
2629 ExtraAttributes = new Dictionary<string, string>{
2630 { "data-bind-reactive", "Shipping, Summary, Parcel, Payment, DeliveryRegions" },
2631 }
2632 };
2633
2634 foreach (LoopItem country in countries)
2635 {
2636 string availableCountriesInTheCheckout = Pageview.AreaSettings.GetItem("Ecommerce").GetString("AvailableCountriesInTheCheckout");
2637 List<string> listOfAvailableCountriesInTheCheckout = String.IsNullOrEmpty(availableCountriesInTheCheckout) ? new List<string>() : availableCountriesInTheCheckout.Split(',').ToList();
2638 if (listOfAvailableCountriesInTheCheckout.Any() && !listOfAvailableCountriesInTheCheckout.Contains(country.GetString("Ecom:Country.Code2")))
2639 {
2640 continue;
2641 }
2642 select.Options.Add(new SelectFieldOption
2643 {
2644 Value = country.GetString("Ecom:Country.Code2"),
2645 Checked = country.GetBoolean("Ecom:Country.IsCustomerCountryOrDefault"),
2646 Label = country.GetString("Ecom:Country.Name"),
2647 });
2648 }
2649
2650 @Render(select)
2651 }
2652
2653 <div class="form__fields-collection form__fields-collection--2-3">
2654 @Render(new TextField
2655 {
2656 Name = "EcomOrderDeliveryPhone",
2657 Id = "EcomOrderDeliveryPhone",
2658 Value = GetString("Ecom:Order.Delivery.Phone"),
2659 Label = Translate("Phone"),
2660 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryPhone.ErrorMessage"),
2661 })
2662
2663 @Render(new TextField
2664 {
2665 Name = "EcomOrderDeliveryEmail",
2666 Id = "EcomOrderDeliveryEmail",
2667 Value = GetString("Ecom:Order.Delivery.Email"),
2668 Label = Translate("Email"),
2669 Type = TextFieldType.Email,
2670 HelpText = Translate("We'll send your receipt to this address"),
2671 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryEmail.ErrorMessage"),
2672 })
2673 </div>
2674 /*
2675 @Render(new CheckboxField
2676 {
2677 Name = "UserManagementUserEmailAllowed",
2678 Id = "UserManagementUserEmailAllowed",
2679 Value = GetString("UserManagement:User.EmailAllowed"),
2680 Label = Translate("Email me about savings, great deals and more"),
2681 HelpText = Translate("Cancel anytime. We respect your privacy, your email is safe with us")
2682 })
2683 */
2684 }
2685
2686
2687 @helper RenderBillingRegions()
2688 {
2689 var customerRegions = GetLoop("CustomerRegions");
2690 var countries = GetLoop("Countries");
2691 var countrySelected = countries.FirstOrDefault(x => x.GetBoolean("Ecom:Country.IsCustomerCountryOrDefault")).GetString("Ecom:Country.Code2");
2692 var getRegions = (countrySelected != null ? Dynamicweb.Ecommerce.Services.Countries.GetRegions(countrySelected) : null);
2693
2694 if (customerRegions.Count > 0)
2695 {
2696 SelectField selectState = new SelectField
2697 {
2698 Id = "EcomOrderCustomerRegion",
2699 Name = "EcomOrderCustomerRegion",
2700 Label = Translate("State/Region"),
2701 Value = GetString("Ecom:Order.Customer.Region"),
2702 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerRegion.ErrorMessage"),
2703 ExtraAttributes = new Dictionary<string, string>{
2704 { "data-bind-reactive", "Shipping, Summary, Parcel, Payment" },
2705 }
2706 };
2707
2708 selectState.Options.Add(new SelectFieldOption
2709 {
2710 Label = Translate("Nothing selected"),
2711 Value = "",
2712 Disabled = true,
2713 Checked = true
2714 });
2715
2716 foreach (LoopItem state in customerRegions)
2717 {
2718 selectState.Options.Add(new SelectFieldOption
2719 {
2720 Label = state.GetString("Ecom:CustomerRegion.Name"),
2721 Checked = state.GetBoolean("Ecom:CustomerRegion.IsCustomerRegion"),
2722 Value = state.GetString("Ecom:CustomerRegion.RegionCode")
2723 });
2724 }
2725
2726 @Render(selectState)
2727 }
2728 else if (getRegions != null && getRegions.FirstOrDefault() != null)
2729 {
2730
2731 SelectField selectState = new SelectField
2732 {
2733 Id = "EcomOrderCustomerRegion",
2734 Name = "EcomOrderCustomerRegion",
2735 Label = Translate("State/Region"),
2736 Value = getRegions.FirstOrDefault().RegionCode,
2737 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderCustomerRegion.ErrorMessage"),
2738 ExtraAttributes = new Dictionary<string, string>{
2739 { "data-bind-reactive", "Billing, Summary, Parcel, Payment" },
2740 }
2741 };
2742
2743 selectState.Options.Add(new SelectFieldOption
2744 {
2745 Label = Translate("Nothing selected"),
2746 Value = "",
2747 Disabled = true,
2748 Checked = true
2749 });
2750
2751 foreach (var state in getRegions)
2752 {
2753 selectState.Options.Add(new SelectFieldOption
2754 {
2755 Label = state.Name,
2756 Value = state.RegionCode
2757 });
2758 }
2759
2760 @Render(selectState)
2761 }
2762
2763 }
2764
2765 @helper RenderDeliveryRegions()
2766 {
2767 var deliveryRegions = GetLoop("DeliveryRegions");
2768 var countries = GetLoop("Countries");
2769 var countrySelected = countries.FirstOrDefault(x => x.GetBoolean("Ecom:Country.IsDeliveryCountryOrDefault")).GetString("Ecom:Country.Code2");
2770 var getRegions = (countrySelected != null ? Dynamicweb.Ecommerce.Services.Countries.GetRegions(countrySelected) : null);
2771
2772 if (deliveryRegions.Count > 0)
2773 {
2774 SelectField selectState = new SelectField
2775 {
2776 Id = "EcomOrderDeliveryRegion",
2777 Name = "EcomOrderDeliveryRegion",
2778 Label = Translate("State/Region"),
2779 Value = GetString("Ecom:Order.Delivery.Region"),
2780 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryRegion.ErrorMessage"),
2781 ExtraAttributes = new Dictionary<string, string>{
2782 { "data-bind-reactive", "Shipping, Summary, Parcel, Payment" },
2783 }
2784 };
2785
2786 selectState.Options.Add(new SelectFieldOption
2787 {
2788 Label = Translate("Nothing selected"),
2789 Value = "",
2790 Disabled = true,
2791 Checked = true
2792 });
2793
2794 foreach (LoopItem state in deliveryRegions)
2795 {
2796 selectState.Options.Add(new SelectFieldOption
2797 {
2798 Label = state.GetString("Ecom:DeliveryRegion.Name"),
2799 Checked = state.GetBoolean("Ecom:DeliveryRegion.IsCustomerRegion"),
2800 Value = state.GetString("Ecom:DeliveryRegion.RegionCode")
2801 });
2802 }
2803
2804 @Render(selectState)
2805 }
2806 else if (getRegions != null && getRegions.FirstOrDefault() != null)
2807 {
2808
2809 SelectField selectState = new SelectField
2810 {
2811 Id = "EcomOrderDeliveryRegion",
2812 Name = "EcomOrderDeliveryRegion",
2813 Label = Translate("State/Region"),
2814 Value = getRegions.FirstOrDefault().RegionCode,
2815 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomOrderDeliveryRegion.ErrorMessage"),
2816 ExtraAttributes = new Dictionary<string, string>{
2817 { "data-bind-reactive", "Shipping, Summary, Parcel, Payment" },
2818 }
2819 };
2820
2821 selectState.Options.Add(new SelectFieldOption
2822 {
2823 Label = Translate("Nothing selected"),
2824 Value = "",
2825 Disabled = true,
2826 Checked = true
2827 });
2828
2829 foreach (var state in getRegions)
2830 {
2831 selectState.Options.Add(new SelectFieldOption
2832 {
2833 Label = state.Name,
2834 Value = state.RegionCode
2835 });
2836 }
2837
2838 @Render(selectState)
2839 }
2840
2841 }
2842
2843 @functions {
2844
2845 // Render label for radio buttons
2846 public string getLabel(string name, string address, string zipCode, string city, string country, string email, string phone, string value)
2847 {
2848 var settings = Pageview.AreaSettings.GetItem("Ecommerce").GetItem("Checkout");
2849 var billingAddressesEditing = settings.GetList("AddressesEditing");
2850
2851 string label = $@"<span style=""width: calc(100% - 40px)"">
2852 <strong>{name}</strong>, {address}, {zipCode} {city}, {country}
2853 <small class=""checkout-input__item-description"">{email}, {phone}</small>
2854 </span>";
2855
2856 if (billingAddressesEditing.SelectedValue == "static")
2857 {
2858 var page = (value == "0" ? "ManageAddressesPage" : "CustomerAddresses");
2859 label += $"<a href=\"/Default.aspx?ID={GetPageIdByNavigationTag(page)}\" class=\"checkout-input__item-edit u-color-gray u-font-size--md\"><i class=\"fal fa-pencil\"></i></a>";
2860 }
2861
2862 return label;
2863 }
2864
2865 }
2866
2867
2868 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2869 @using Dynamicweb.Rapido.Blocks.Components
2870 @using Dynamicweb.Rapido.Blocks.Components.General
2871 @using Dynamicweb.Core
2872 @using System.Linq
2873
2874 @helper RenderOrderSummary() {
2875 bool hasTaxSettings = Dynamicweb.Rapido.Services.Countries.HasTaxSettings(GetString("Ecom:Order.ID"));
2876 bool pointShop = Pageview.AreaSettings.GetItem("Ecommerce").GetBoolean("PointShopOnly");
2877 bool isPricesWithVATEnabled = Dynamicweb.Ecommerce.Common.Context.DisplayPricesWithVat;
2878 bool hidePaymentFee = Pageview.AreaSettings.GetItem("Ecommerce").GetItem("Checkout").GetBoolean("HideFreeServices") && GetInteger("Ecom:Order.PaymentFee.Price") == 0;
2879 string paymentMethod = !string.IsNullOrEmpty(GetString("Ecom:Order.PaymentMethod")) ? GetString("Ecom:Order.PaymentMethod") : Translate("Payment");
2880 bool hideShippingFee = Pageview.AreaSettings.GetItem("Ecommerce").GetItem("Checkout").GetBoolean("HideFreeServices") && GetInteger("Ecom:Order.ShippingFee.Price") == 0;
2881 string shippingMethod = !string.IsNullOrEmpty(GetString("Ecom:Order.ShippingMethod")) ? GetString("Ecom:Order.ShippingMethod") : Translate("Delivery");
2882
2883 <h2 class="u-margin-bottom--lg">@Translate("Order summary")</h2>
2884
2885 <table class="table--condensed table--no-top-border">
2886 <tbody>
2887 <tr>
2888 <td>@Translate("Total qty"):</td>
2889 <td>@GetString("Ecom:Order.OrderLines.TotalProductQuantity")</td>
2890 </tr>
2891 @if (!Pageview.AreaSettings.GetItem("Ecommerce").GetItem("Checkout").GetBoolean("HideSubtotal"))
2892 {
2893 <tr>
2894 <td>@Translate("Subtotal"):</td>
2895 <td>@GetString("Ecom:Order.PriceWithoutFees.PriceFormatted")</td>
2896 </tr>
2897 }
2898 @if (!hidePaymentFee)
2899 {
2900 <tr>
2901 <td>@paymentMethod:</td>
2902 <td>@GetString("Ecom:Order.PaymentFee")</td>
2903 </tr>
2904 }
2905 @if (!hideShippingFee)
2906 {
2907 <tr>
2908 <td>@shippingMethod:</td>
2909 <td>@GetString("Ecom:Order.ShippingFee")</td>
2910 </tr>
2911 }
2912 @if (hasTaxSettings)
2913 {
2914 string totalTaxes = GetDouble("Ecom:Order.Taxes.Total.Price") != 0 ? GetString("Ecom:Order.Taxes.Total") : "-";
2915
2916 <tr>
2917 <td >@Translate("Sales Tax"):</td>
2918 <td class="u-ta-right">@totalTaxes</td>
2919 </tr>
2920 }
2921 <tr class="u-bold u-border-top--bold">
2922 <td>@Translate("Total"):</td>
2923 <td width="150">@GetString("Ecom:Order.OrderLines.Total.Price")</td>
2924 </tr>
2925 @if (!pointShop && !hasTaxSettings)
2926 {
2927 <tr class="u-ta-right">
2928 <td class="u-no-border" colspan="2">
2929 <div>
2930 <small>@Translate("VAT") (@GetString("Ecom:Order.PriceWithoutFees.VATPercentFormatted")):</small>
2931 <small>@GetString("Ecom:Order.OrderLines.Total.PriceVAT")</small>
2932 </div>
2933
2934 @if (isPricesWithVATEnabled)
2935 {
2936 <div>
2937 <small>@Translate("Total price without VAT"):</small>
2938 <small>@GetString("Ecom:Order.OrderLines.Total.PriceWithoutVAT")</small>
2939 </div>
2940 }
2941 else
2942 {
2943 <div>
2944 <small>@Translate("Total price with VAT"):</small>
2945 <small>@GetString("Ecom:Order.OrderLines.Total.PriceWithVAT")</small>
2946 </div>
2947 }
2948 </td>
2949 </tr>
2950 }
2951 </tbody>
2952 </table>
2953 }
2954 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2955 @using Dynamicweb.Rapido.Blocks.Components
2956 @using Dynamicweb.Rapido.Blocks.Components.General
2957 @using Dynamicweb.Core
2958 @using System.Linq
2959
2960 @helper RenderShippingMethods() {
2961 <h2 class="u-margin-bottom--lg">@Translate("Select your delivery method")</h2>
2962
2963 @RenderShippingMethodsSelect()
2964 }
2965
2966 @helper RenderShippingMethodsSelect() {
2967 double orderWeight = GetDouble("Ecom:Order.Weight");
2968 double orderVolume = GetDouble("Ecom:Order.Volume");
2969 var shippingMethodsRules = Pageview.AreaSettings.GetItem("Ecommerce").GetItems("ShippingMethodsRules");
2970 bool isToPickupAtWarehouse = GetLoop("OrderLines").Any(ol => ol.GetBoolean("Ecom:Product:Field.PickupAtWarehouse.Value.Clean"));
2971 bool hasOnlyWarrantyProducts = GetLoop("OrderLines").Count() == GetLoop("OrderLines").Where(ol => ol.GetBoolean("Ecom:Product:Field.WarrantyProduct.Value.Clean")).Count();
2972 var shippingMethods = hasOnlyWarrantyProducts
2973 ? GetLoop("Shippingmethods").Where(s => s.GetString("Ecom:Cart.Shippingmethod.ID") == "SHIP39").ToList()
2974 : GetLoop("Shippingmethods").Where(s => s.GetString("Ecom:Cart.Shippingmethod.ID") != "SHIP39").ToList();
2975
2976 foreach ( LoopItem shipping in shippingMethods ) {
2977 /* Order contains a product that can't be shipping */
2978 if (
2979 isToPickupAtWarehouse
2980 && (shipping.GetString("Ecom:Cart.Shippingmethod.Name").Contains("GLS") || shipping.GetString("Ecom:Cart.Shippingmethod.Name").Contains("UPS")))
2981 {
2982 continue;
2983 }
2984
2985 /* Custom rules */
2986 if (
2987 shippingMethodsRules != null
2988 && shippingMethodsRules.Any(
2989 s => s.GetString("ShippingMethodID") == shipping.GetString("Ecom:Cart.Shippingmethod.ID")
2990 && (orderWeight > s.GetDouble("MaxWeight") || orderVolume > s.GetDouble("MaxVolume"))
2991 )
2992 )
2993 {
2994 continue;
2995 }
2996
2997 bool selected = hasOnlyWarrantyProducts || Converter.ToBoolean(shipping.GetString("Ecom:Cart.Shippingmethod.IsSelected"));
2998 string name = shipping.GetString("Ecom:Cart.Shippingmethod.Name");
2999 string description = shipping.GetString("Ecom:Cart.Shippingmethod.Description");
3000
3001 string priceValue = shipping.GetString("Ecom:Cart.ShippingMethod.Price.Price.Value");
3002 string price = ( priceValue != "0" ? shipping.GetString("Ecom:Cart.ShippingMethod.Price") : Translate("Free"));
3003
3004 string icon = shipping.GetString("Ecom:Cart.Shippingmethod.Icon");
3005 string iconClean = shipping.GetString("Ecom:Cart.Shippingmethod.Icon.Clean");
3006 string label = $"<span style=\"width: calc(100% - 40px)\">{name} <strong>- {price}</strong>" + ( !string.IsNullOrWhiteSpace(description) ? $"<small class=\"checkout-input__item-description\">{description}</small>" : "" ) + "</span>" + ( !string.IsNullOrEmpty(icon) ? $"<span class=\"checkout-input__item-icon\"><img src=\"{iconClean}\"></span>" : "" );
3007
3008 @Render(new RadioButtonField {
3009 Name = "EcomCartShippingmethodId",
3010 Id = "EcomCartShippingmethodId_" + shipping.GetString("Ecom:Cart.Shippingmethod.ID"),
3011 Value = shipping.GetString("Ecom:Cart.Shippingmethod.ID"),
3012 Checked = selected,
3013 Label = label,
3014 WrapperCssClass = "form__field-group--bordered",
3015 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomCartShippingmethodId.ErrorMessage"),
3016 ExtraAttributes = new Dictionary<string, string>{
3017 { "data-bind-reactive", "Parcel, Summary" },
3018 },
3019 OnClick = "setDeliveryFields();"
3020 })
3021 }
3022 }
3023 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
3024 @using Dynamicweb.Rapido.Blocks.Components
3025 @using Dynamicweb.Rapido.Blocks.Components.General
3026 @using Dynamicweb.Core
3027 @using System.Linq
3028
3029 @helper RenderParcelShop() {
3030 var shippingMethods = GetLoop("Shippingmethods");
3031 string pickups = "";
3032
3033 foreach ( LoopItem shipping in shippingMethods ) {
3034 if ( shipping.GetString("Ecom:Cart.Shippingmethod.IsSelected") == "true" ) {
3035 pickups = shipping.GetString("Ecom:ShippingProvider.Content");
3036 }
3037 }
3038
3039 if ( !string.IsNullOrWhiteSpace(pickups) ) {
3040 string zip = GetString("Ecom:Order.Delivery.Zip");
3041 string address = GetString("Ecom:Order.Delivery.Address");
3042
3043 <h2 class="u-margin-bottom--lg">@Translate("Select your pick-up parcel shop")</h2>
3044
3045 <div class="form__fields-collection">
3046
3047 @Render(new TextField {
3048 Name = "__EcomOrderDeliveryZip",
3049 Id = "__EcomOrderDeliveryZip",
3050 Value = zip,
3051 Label = Translate("Zip code"),
3052 Required = true,
3053 CssClass = "js-parcel-zip",
3054 WrapperCssClass = "u-flex-basis--40",
3055 ExtraAttributes = new Dictionary<string, string>{
3056 { "pattern", "\\d*" }
3057 },
3058 })
3059
3060 @Render(new TextField {
3061 Name = "__EcomOrderDeliveryAddress",
3062 Id = "__EcomOrderDeliveryAddress",
3063 Value = address,
3064 Label = $"{Translate("Street name")}",
3065 Placeholder = Translate("Search"),
3066 Required = true,
3067 CssClass = "js-parcel-street",
3068 })
3069
3070 </div>
3071
3072 <div class="checkout__parcels js-parcels">
3073 @if ( !string.IsNullOrWhiteSpace(zip) && !string.IsNullOrWhiteSpace(address) ) {
3074 @pickups.Replace("form__control", "form__control parcelShopInput")
3075 }
3076 </div>
3077 }
3078
3079 }
3080 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
3081 @using Dynamicweb.Rapido.Blocks.Components
3082 @using Dynamicweb.Rapido.Blocks.Components.General
3083 @using Dynamicweb.Core
3084 @using System.Linq
3085
3086 @helper RenderPaymentMethods() {
3087 <h2 class="u-margin-bottom--lg">@Translate("Choose payment method")</h2>
3088
3089 @RenderPaymentMethodsSelect()
3090 }
3091
3092
3093 @helper RenderPaymentMethodsSelect() {
3094 foreach ( LoopItem payment in GetLoop("Paymethods") ) {
3095 bool selected = Converter.ToBoolean(payment.GetString("Ecom:Cart.Paymethod.IsSelected"));
3096 string name = payment.GetString("Ecom:Cart.Paymethod.Name");
3097 string description = payment.GetString("Ecom:Cart.Paymethod.Description");
3098
3099 string priceValue = payment.GetString("Ecom:Cart.Paymethod.Price.Price.Value");
3100 string price = ( priceValue != "0" ? payment.GetString("Ecom:Cart.Paymethod.Price") : Translate("Free"));
3101
3102 string icon = payment.GetString("Ecom:Cart.Paymethod.Icon");
3103 string iconClean = payment.GetString("Ecom:Cart.Paymethod.Icon.Clean");
3104 string label = $"<span>{name} <strong>- {price}</strong>" + ( !string.IsNullOrWhiteSpace(description) ? $"<small class=\"checkout-input__item-description\">{description}</small>" : "" ) + "</span>" + ( !string.IsNullOrEmpty(icon) ? $"<span class=\"checkout-input__item-icon\"><img src=\"{iconClean}\"></span>" : "" );
3105
3106 @Render(new RadioButtonField {
3107 Name = "EcomCartPaymethodId",
3108 Id = "EcomCartPaymethodId_" + payment.GetString("Ecom:Cart.Paymethod.ID"),
3109 Value = payment.GetString("Ecom:Cart.Paymethod.ID"),
3110 Checked = selected,
3111 Label = label,
3112 WrapperCssClass = "form__field-group--bordered",
3113 ErrorMessage = GetString("Ecom:Cart.ValidationError.EcomCartPaymethodId.ErrorMessage"),
3114 ExtraAttributes = new Dictionary<string, string>{
3115 { "data-bind-reactive", "Shipping, Summary" },
3116 }
3117 })
3118 }
3119 }