Winemex 30 / Winemex Blue 30         

Wine storage cabinets

 • Built-in

 • Easy-fit

Error executing template "Designs/Rapido/ContentPage/Paragraph/StandardParagraphThree.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_d569b2db821e4aa9974e0842c20da78d.<RenderTheContent>b__46_0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\Thermex2025\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 2195
   at CompiledRazorTemplates.Dynamic.RazorEngine_d569b2db821e4aa9974e0842c20da78d.Execute() in D:\Dynamicweb.net\Solutions\Thermex2025\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 2150
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

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

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

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

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

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

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

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

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

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

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

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

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