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("&nbsp;", " "); 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 }