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

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

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

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