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