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

Featured Products

Shotguns