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