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