Vedligeholdelse og pleje af produkter

Error executing template "Designs/Rapido/ContentPage/Paragraph/StandardParagraphThree.cshtml"
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference
   at CallSite.Target(Closure , CallSite , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
   at CompiledRazorTemplates.Dynamic.RazorEngine_8301d84882b547c1bc2df93198830e06.<>c__DisplayClass19_0.<RenderTheImage>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 924
   at CompiledRazorTemplates.Dynamic.RazorEngine_8301d84882b547c1bc2df93198830e06.<>c__DisplayClass18_0.<RenderWithAltAndTitle>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 860
   at CompiledRazorTemplates.Dynamic.RazorEngine_8301d84882b547c1bc2df93198830e06.<RenderTheContent>b__48_0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 2402
   at CompiledRazorTemplates.Dynamic.RazorEngine_8301d84882b547c1bc2df93198830e06.Execute() in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 2347
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Frontend 3 @using Dynamicweb.Rapido.Blocks.Components 4 @using Dynamicweb.Rapido.Blocks.Components.General 5 6 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 7 @using Dynamicweb.Frontend 8 9 @* Include the components *@ 10 @using System.Text.RegularExpressions 11 @using System.Collections.Generic 12 @using System.Reflection 13 @using System.Web 14 @using System.Web.UI.HtmlControls 15 @using Dynamicweb.Rapido.Blocks.Components 16 @using Dynamicweb.Rapido.Blocks.Components.Articles 17 @using Dynamicweb.Rapido.Blocks.Components.Documentation 18 @using Dynamicweb.Rapido.Blocks 19 20 21 @*--- START: Base block renderers ---*@ 22 23 @helper RenderBlockList(List<Block> blocks) 24 { 25 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false; 26 blocks = blocks.OrderBy(item => item.SortId).ToList(); 27 28 foreach (Block item in blocks) 29 { 30 if (debug) { 31 <!-- Block START: @item.Id --> 32 } 33 34 if (item.Design == null) 35 { 36 @RenderBlock(item) 37 } 38 else if (item.Design.RenderType == RenderType.None) { 39 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : ""; 40 41 <div class="@cssClass dw-mod"> 42 @RenderBlock(item) 43 </div> 44 } 45 else if (item.Design.RenderType != RenderType.Hide) 46 { 47 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : ""; 48 49 if (!item.SkipRenderBlocksList) { 50 if (item.Design.RenderType == RenderType.Row) 51 { 52 <div class="grid grid--align-content-start @cssClass dw-mod" id="Block__@item.Id"> 53 @RenderBlock(item) 54 </div> 55 } 56 57 if (item.Design.RenderType == RenderType.Column) 58 { 59 string hidePadding = item.Design.HidePadding ? "u-no-padding" : ""; 60 string size = item.Design.Size ?? "12"; 61 size = Regex.IsMatch(size, @"\d") ? "md-" + item.Design.Size : item.Design.Size; 62 63 <div class="grid__col-lg-@item.Design.Size grid__col-md-@item.Design.Size grid__col-sm-12 grid__col-xs-12 @hidePadding @cssClass dw-mod" id="Block__@item.Id"> 64 @RenderBlock(item) 65 </div> 66 } 67 68 if (item.Design.RenderType == RenderType.Table) 69 { 70 <table class="table @cssClass dw-mod" id="Block__@item.Id"> 71 @RenderBlock(item) 72 </table> 73 } 74 75 if (item.Design.RenderType == RenderType.TableRow) 76 { 77 <tr class="@cssClass dw-mod" id="Block__@item.Id"> 78 @RenderBlock(item) 79 </tr> 80 } 81 82 if (item.Design.RenderType == RenderType.TableColumn) 83 { 84 <td class="@cssClass dw-mod" id="Block__@item.Id"> 85 @RenderBlock(item) 86 </td> 87 } 88 89 if (item.Design.RenderType == RenderType.CardHeader) 90 { 91 <div class="card-header @cssClass dw-mod"> 92 @RenderBlock(item) 93 </div> 94 } 95 96 if (item.Design.RenderType == RenderType.CardBody) 97 { 98 <div class="card @cssClass dw-mod"> 99 @RenderBlock(item) 100 </div> 101 } 102 103 if (item.Design.RenderType == RenderType.CardFooter) 104 { 105 <div class="card-footer @cssClass dw-mod"> 106 @RenderBlock(item) 107 </div> 108 } 109 } 110 else 111 { 112 @RenderBlock(item) 113 } 114 } 115 116 if (debug) { 117 <!-- Block END: @item.Id --> 118 } 119 } 120 } 121 122 @helper RenderBlock(Block item) 123 { 124 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false; 125 126 if (item.Template != null) 127 { 128 @BlocksPage.RenderTemplate(item.Template) 129 } 130 131 if (item.Component != null) 132 { 133 string customSufix = "Custom"; 134 string methodName = item.Component.HelperName; 135 136 ComponentBase[] methodParameters = new ComponentBase[1]; 137 methodParameters[0] = item.Component; 138 Type methodType = this.GetType(); 139 140 MethodInfo customMethod = methodType.GetMethod(methodName + customSufix); 141 MethodInfo generalMethod = methodType.GetMethod(methodName); 142 143 try { 144 if (debug) { 145 <!-- Component: @methodName.Replace("Render", "") --> 146 } 147 @customMethod.Invoke(this, methodParameters).ToString(); 148 } catch { 149 try { 150 @generalMethod.Invoke(this, methodParameters).ToString(); 151 } catch(Exception ex) { 152 throw new Exception(item.Component.GetType().Name + " method '" + methodName +"' could not be invoked", ex); 153 } 154 } 155 } 156 157 if (item.BlocksList.Count > 0 && !item.SkipRenderBlocksList) 158 { 159 @RenderBlockList(item.BlocksList) 160 } 161 } 162 163 @*--- END: Base block renderers ---*@ 164 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 Dynamicweb.Rapido.Blocks.Components 804 @using Dynamicweb.Rapido.Blocks.Components.General 805 @using Dynamicweb.Rapido.Blocks 806 807 808 @* Component *@ 809 810 @helper RenderWithAltAndTitle(Image settings, string alText = "", string titleText = "") 811 { 812 if (settings.FilterPrimary != ImageFilter.None || settings.FilterSecondary != ImageFilter.None) 813 { 814 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>(); 815 if (!string.IsNullOrEmpty(settings.FilterColor)) { optionalAttributes.Add("style", "background-color: " + settings.FilterColor); } 816 817 if (settings.Caption != null) 818 { 819 @:<div> 820 } 821 822 var primaryFilterClass = settings.FilterPrimary.ToString().ToLower(); 823 var secondaryFilterClass = settings.FilterSecondary.ToString().ToLower(); 824 825 <div class="image-filter image-filter--@primaryFilterClass u-position-relative dw-mod" @ComponentMethods.AddAttributes(optionalAttributes)> 826 <div class="image-filter image-filter--@secondaryFilterClass dw-mod"> 827 @if (settings.Link != null) 828 { 829 <a href="@settings.Link"> 830 @RenderTheImage(settings, alText, titleText) 831 </a> 832 } 833 else 834 { 835 @RenderTheImage(settings, alText, titleText) 836 } 837 </div> 838 </div> 839 840 if (settings.Caption != null) 841 { 842 <span class="image-caption dw-mod">@settings.Caption</span> 843 @:</div> 844 } 845 } 846 else 847 { 848 if (settings.Caption != null) 849 { 850 @:<div> 851 } 852 if (!string.IsNullOrEmpty(settings.Link)) 853 { 854 <a href="@settings.Link"> 855 @RenderTheImage(settings, alText, titleText) 856 </a> 857 } 858 else 859 { 860 @RenderTheImage(settings, alText, titleText) 861 } 862 863 if (settings.Caption != null) 864 { 865 <span class="image-caption dw-mod">@settings.Caption</span> 866 @:</div> 867 } 868 } 869 } 870 871 @helper RenderTheImage(Image settings, string alText = "", string titleText = "") 872 { 873 if (settings != null) 874 { 875 string alternativeImage = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("AlternativeImage")) ? Pageview.AreaSettings.GetItem("Settings").GetFile("AlternativeImage").PathUrlEncoded : "/Images/missing_image.jpg"; 876 string placeholderImage = "/Files/Images/placeholder.gif"; 877 string imageEngine = "/Admin/Public/GetImage.ashx?"; 878 879 string imageStyle = ""; 880 881 switch (settings.Style) 882 { 883 case ImageStyle.Ball: 884 imageStyle = "grid__cell-img--ball"; 885 break; 886 887 case ImageStyle.Triangle: 888 imageStyle = "grid__cell-img--triangle"; 889 break; 890 } 891 892 if (settings.Style == ImageStyle.Ball || settings.Style == ImageStyle.Circle || settings.Style == ImageStyle.Triangle) 893 { 894 settings.ImageDefault.Crop = settings.ImageDefault.Crop == 5 ? settings.ImageDefault.Crop = 0 : settings.ImageDefault.Crop; 895 896 if (settings.ImageDefault != null) 897 { 898 settings.ImageDefault.Height = settings.ImageDefault.Width; 899 } 900 if (settings.ImageMedium != null) 901 { 902 settings.ImageMedium.Height = settings.ImageMedium.Width; 903 } 904 if (settings.ImageSmall != null) 905 { 906 settings.ImageSmall.Height = settings.ImageSmall.Width; 907 } 908 } 909 910 string defaultImage = imageEngine; 911 string imageSmall = ""; 912 string imageMedium = ""; 913 914 if (settings.DisableImageEngine) 915 { 916 defaultImage = settings.Path; 917 } 918 else 919 { 920 if (settings.ImageDefault != null) 921 { 922 defaultImage += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageDefault); 923 924 if (settings.Path.GetType() != typeof(string)) 925 { 926 defaultImage += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 927 defaultImage += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 928 } 929 else 930 { 931 defaultImage += settings.Path != null ? "Image=" + settings.Path : ""; 932 } 933 934 defaultImage += "&AlternativeImage=" + alternativeImage; 935 } 936 937 if (settings.ImageSmall != null) 938 { 939 imageSmall = "data-src-small=\"" + imageEngine; 940 imageSmall += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageSmall); 941 942 if (settings.Path.GetType() != typeof(string)) 943 { 944 imageSmall += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 945 imageSmall += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 946 } 947 else 948 { 949 imageSmall += settings.Path != null ? "Image=" + settings.Path : ""; 950 } 951 952 imageSmall += "&alternativeImage=" + alternativeImage; 953 954 imageSmall += "\""; 955 } 956 957 if (settings.ImageMedium != null) 958 { 959 imageMedium = "data-src-medium=\"" + imageEngine; 960 imageMedium += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageMedium); 961 962 if (settings.Path.GetType() != typeof(string)) 963 { 964 imageMedium += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 965 imageMedium += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 966 } 967 else 968 { 969 imageMedium += settings.Path != null ? "Image=" + settings.Path : ""; 970 971 972 } 973 974 imageMedium += "&alternativeImage=" + alternativeImage; 975 976 imageMedium += "\""; 977 } 978 } 979 980 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>(); 981 if (!string.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick); } 982 if (!string.IsNullOrEmpty(settings.Title)) 983 { 984 optionalAttributes.Add("alt", settings.Title); 985 optionalAttributes.Add("title", settings.Title); 986 } 987 988 989 990 string imgAlt = ""; 991 string imgTitle = ""; 992 993 if (!string.IsNullOrWhiteSpace(alText)) 994 { 995 imgAlt = "alt=" + '"' + alText + '"'; 996 } 997 998 if (!string.IsNullOrWhiteSpace(titleText)) 999 { 1000 imgTitle = "title=" + '"' + titleText + '"'; 1001 1002 } 1003 1004 1005 if (settings.DisableLazyLoad) 1006 { 1007 <img id="@settings.Id" class="@imageStyle @settings.CssClass dw-mod" src="@defaultImage" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) @imgAlt @imgTitle /> 1008 } 1009 else 1010 { 1011 <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) @imgAlt @imgTitle /> 1012 } 1013 } 1014 } 1015 @using System.Reflection 1016 @using Dynamicweb.Rapido.Blocks.Components.General 1017 @using Dynamicweb.Rapido.Blocks.Components 1018 1019 @* Component *@ 1020 1021 @helper RenderFileField(FileField settings) 1022 { 1023 var attributes = new Dictionary<string, string>(); 1024 if (string.IsNullOrEmpty(settings.Id)) 1025 { 1026 settings.Id = Guid.NewGuid().ToString("N"); 1027 } 1028 1029 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1030 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1031 if (settings.Required) { attributes.Add("required", "true"); } 1032 if (settings.Multiple) { attributes.Add("multiple", "true"); } 1033 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1034 if (string.IsNullOrEmpty(settings.ChooseFileText)) 1035 { 1036 settings.ChooseFileText = Translate("Choose file"); 1037 } 1038 if (string.IsNullOrEmpty(settings.NoFilesChosenText)) 1039 { 1040 settings.NoFilesChosenText = Translate("No files chosen..."); 1041 } 1042 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1043 1044 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1045 1046 string setValueToFakeInput = "FileUpload.setValueToFakeInput(this)"; 1047 attributes.Add("onchange", setValueToFakeInput + (!string.IsNullOrEmpty(settings.OnChange) ? settings.OnChange : "")); 1048 1049 attributes.Add("type", "file"); 1050 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1051 settings.CssClass = "u-full-width " + settings.CssClass; 1052 1053 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1054 1055 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 1056 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1057 { 1058 <div class="u-full-width"> 1059 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1060 @if (settings.Link != null) { 1061 <div class="u-pull--right"> 1062 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1063 @Render(settings.Link) 1064 </div> 1065 } 1066 </div> 1067 1068 } 1069 1070 @if (!string.IsNullOrEmpty(settings.HelpText)) 1071 { 1072 <small class="form__help-text">@settings.HelpText</small> 1073 } 1074 1075 <div class="form__field-combi file-input u-no-margin dw-mod"> 1076 <input @ComponentMethods.AddAttributes(resultAttributes) class="file-input__real-input" data-no-files-text="@settings.NoFilesChosenText" data-many-files-text="@Translate("files")" /> 1077 <label for="@settings.Id" class="file-input__btn btn--secondary btn dw-mod">@settings.ChooseFileText</label> 1078 <label for="@settings.Id" class="@settings.CssClass file-input__fake-input js-fake-input dw-mod">@settings.NoFilesChosenText</label> 1079 @if (settings.UploadButton != null) 1080 { 1081 settings.UploadButton.CssClass += " btn--condensed u-no-margin"; 1082 @Render(settings.UploadButton) 1083 } 1084 </div> 1085 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1086 </div> 1087 } 1088 @using System.Reflection 1089 @using Dynamicweb.Rapido.Blocks.Components.General 1090 @using Dynamicweb.Rapido.Blocks.Components 1091 @using Dynamicweb.Core 1092 @using System.Linq 1093 1094 @* Component *@ 1095 1096 @helper RenderDateTimeField(DateTimeField settings) 1097 { 1098 if (string.IsNullOrEmpty(settings.Id)) 1099 { 1100 settings.Id = Guid.NewGuid().ToString("N"); 1101 } 1102 1103 var textField = new TextField { 1104 Name = settings.Name, 1105 Id = settings.Id, 1106 Label = settings.Label, 1107 HelpText = settings.HelpText, 1108 Value = settings.Value, 1109 Disabled = settings.Disabled, 1110 Required = settings.Required, 1111 ErrorMessage = settings.ErrorMessage, 1112 CssClass = settings.CssClass, 1113 WrapperCssClass = settings.WrapperCssClass, 1114 OnChange = settings.OnChange, 1115 OnClick = settings.OnClick, 1116 Link = settings.Link, 1117 ExtraAttributes = settings.ExtraAttributes, 1118 // 1119 Placeholder = settings.Placeholder 1120 }; 1121 1122 @Render(textField) 1123 1124 List<string> jsAttributes = new List<string>(); 1125 1126 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'"); 1127 1128 if (!string.IsNullOrEmpty(settings.DateFormat)) 1129 { 1130 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'"); 1131 } 1132 if (!string.IsNullOrEmpty(settings.MinDate)) 1133 { 1134 jsAttributes.Add("minDate: '" + settings.MinDate + "'"); 1135 } 1136 if (!string.IsNullOrEmpty(settings.MaxDate)) 1137 { 1138 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'"); 1139 } 1140 if (settings.IsInline) 1141 { 1142 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower()); 1143 } 1144 if (settings.EnableTime) 1145 { 1146 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower()); 1147 } 1148 if (settings.EnableWeekNumbers) 1149 { 1150 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower()); 1151 } 1152 1153 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value)); 1154 1155 <script> 1156 document.addEventListener("DOMContentLoaded", function () { 1157 flatpickr("#@textField.Id", { 1158 @string.Join(",", jsAttributes) 1159 }); 1160 }); 1161 </script> 1162 } 1163 @using System.Reflection 1164 @using Dynamicweb.Rapido.Blocks.Components.General 1165 @using Dynamicweb.Rapido.Blocks.Components 1166 1167 @* Component *@ 1168 1169 @helper RenderTextField(TextField settings) 1170 { 1171 var attributes = new Dictionary<string, string>(); 1172 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1173 { 1174 settings.Id = Guid.NewGuid().ToString("N"); 1175 } 1176 1177 /*base settings*/ 1178 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1179 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1180 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1181 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1182 if (settings.Required) { attributes.Add("required", "true"); } 1183 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1184 /*end*/ 1185 1186 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 1187 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 1188 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 1189 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 1190 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); } 1191 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); } 1192 attributes.Add("type", Enum.GetName(typeof(TextFieldType), settings.Type).ToLower()); 1193 if (settings.Type == TextFieldType.Password) { attributes.Add("autocomplete", "off"); }; 1194 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1195 1196 settings.CssClass = "u-full-width " + settings.CssClass; 1197 1198 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1199 1200 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1201 1202 string noMargin = "u-no-margin"; 1203 if (!settings.ReadOnly) { 1204 noMargin = ""; 1205 } 1206 1207 <div class="form__field-group u-full-width @noMargin @settings.WrapperCssClass dw-mod"> 1208 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1209 { 1210 <div class="u-full-width"> 1211 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1212 @if (settings.Link != null) { 1213 settings.Link.ButtonLayout = ButtonLayout.LinkClean; 1214 1215 <div class="u-pull--right"> 1216 @Render(settings.Link) 1217 </div> 1218 } 1219 </div> 1220 1221 } 1222 1223 @if (!string.IsNullOrEmpty(settings.HelpText)) 1224 { 1225 <small class="form__help-text">@settings.HelpText</small> 1226 } 1227 1228 @if (settings.ActionButton != null) 1229 { 1230 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1231 <div class="form__field-combi u-no-margin dw-mod"> 1232 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1233 @Render(settings.ActionButton) 1234 </div> 1235 } 1236 else 1237 { 1238 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1239 } 1240 1241 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1242 </div> 1243 } 1244 @using System.Reflection 1245 @using Dynamicweb.Rapido.Blocks.Components.General 1246 @using Dynamicweb.Rapido.Blocks.Components 1247 1248 @* Component *@ 1249 1250 @helper RenderNumberField(NumberField settings) 1251 { 1252 var attributes = new Dictionary<string, string>(); 1253 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1254 { 1255 settings.Id = Guid.NewGuid().ToString("N"); 1256 } 1257 1258 /*base settings*/ 1259 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1260 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1261 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1262 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1263 if (settings.Required) { attributes.Add("required", "true"); } 1264 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1265 /*end*/ 1266 1267 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 1268 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 1269 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 1270 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 1271 if (settings.Max != null) { attributes.Add("max", settings.Max.ToString()); } 1272 if (settings.Min != null) { attributes.Add("min", settings.Min.ToString()); } 1273 if (settings.Step != 0) { attributes.Add("step", settings.Step.ToString()); } 1274 if (settings.Value != null && !string.IsNullOrEmpty(settings.Value.ToString())) { attributes.Add("value", settings.Value.ToString()); } 1275 attributes.Add("type", "number"); 1276 1277 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1278 1279 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 1280 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1281 { 1282 <div class="u-full-width"> 1283 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1284 @if (settings.Link != null) { 1285 <div class="u-pull--right"> 1286 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1287 @Render(settings.Link) 1288 </div> 1289 } 1290 </div> 1291 1292 } 1293 1294 @if (!string.IsNullOrEmpty(settings.HelpText)) 1295 { 1296 <small class="form__help-text">@settings.HelpText</small> 1297 } 1298 1299 @if (settings.ActionButton != null) 1300 { 1301 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1302 <div class="form__field-combi u-no-margin dw-mod"> 1303 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1304 @Render(settings.ActionButton) 1305 </div> 1306 } 1307 else 1308 { 1309 <div class="form__field-combi u-no-margin dw-mod"> 1310 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1311 </div> 1312 } 1313 1314 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1315 </div> 1316 } 1317 @using System.Reflection 1318 @using Dynamicweb.Rapido.Blocks.Components.General 1319 @using Dynamicweb.Rapido.Blocks.Components 1320 1321 1322 @* Component *@ 1323 1324 @helper RenderTextareaField(TextareaField settings) 1325 { 1326 Dictionary<string, string> attributes = new Dictionary<string, string>(); 1327 string id = settings.Id; 1328 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(id)) 1329 { 1330 id = Guid.NewGuid().ToString("N"); 1331 } 1332 1333 if (!string.IsNullOrEmpty(id)) { attributes.Add("id", id); } 1334 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1335 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 1336 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 1337 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 1338 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1339 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); } 1340 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1341 if (settings.Required) { attributes.Add("required", "true"); } 1342 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 1343 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); } 1344 if (settings.Rows != 0) { attributes.Add("rows", settings.Rows.ToString()); } 1345 attributes.Add("name", settings.Name); 1346 1347 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1348 1349 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1350 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1351 { 1352 <div class="u-full-width"> 1353 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1354 @if (settings.Link != null) { 1355 <div class="u-pull--right"> 1356 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1357 @Render(settings.Link) 1358 </div> 1359 } 1360 </div> 1361 } 1362 1363 @if (!string.IsNullOrEmpty(settings.HelpText)) 1364 { 1365 <small class="form__help-text">@settings.HelpText</small> 1366 } 1367 1368 <textarea class="u-full-width @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Value</textarea> 1369 1370 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1371 </div> 1372 } 1373 @using System.Reflection 1374 @using Dynamicweb.Rapido.Blocks.Components.General 1375 @using Dynamicweb.Rapido.Blocks.Components 1376 1377 1378 @* Component *@ 1379 1380 @helper RenderHiddenField(HiddenField settings) { 1381 var attributes = new Dictionary<string, string>(); 1382 attributes.Add("type", "hidden"); 1383 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1384 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1385 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1386 1387 <input @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)/> 1388 } 1389 @using System.Reflection 1390 @using Dynamicweb.Rapido.Blocks.Components.General 1391 @using Dynamicweb.Rapido.Blocks.Components 1392 1393 @* Component *@ 1394 1395 @helper RenderCheckboxField(CheckboxField settings) 1396 { 1397 var attributes = new Dictionary<string, string>(); 1398 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1399 { 1400 settings.Id = Guid.NewGuid().ToString("N"); 1401 } 1402 1403 /*base settings*/ 1404 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1405 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1406 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1407 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1408 if (settings.Required) { attributes.Add("required", "true"); } 1409 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1410 /*end*/ 1411 1412 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1413 1414 attributes.Add("type", "checkbox"); 1415 if (settings.Checked) { attributes.Add("checked", "true"); } 1416 settings.CssClass = "form__control " + settings.CssClass; 1417 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1418 1419 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1420 1421 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1422 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1423 @if (!string.IsNullOrEmpty(settings.Label)) 1424 { 1425 <label for="@settings.Id" class="dw-mod">@settings.Label</label> 1426 } 1427 1428 @if (settings.Link != null) { 1429 <span> 1430 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1431 @Render(settings.Link) 1432 </span> 1433 } 1434 1435 @if (!string.IsNullOrEmpty(settings.HelpText)) 1436 { 1437 <small class="form__help-text checkbox-help dw-mod">@settings.HelpText</small> 1438 } 1439 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1440 </div> 1441 } 1442 @using System.Reflection 1443 @using Dynamicweb.Rapido.Blocks.Components.General 1444 @using Dynamicweb.Rapido.Blocks.Components 1445 1446 1447 @* Component *@ 1448 1449 @helper RenderCheckboxListField(CheckboxListField settings) 1450 { 1451 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1452 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1453 { 1454 <div class="u-full-width"> 1455 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1456 @if (settings.Link != null) { 1457 <div class="u-pull--right"> 1458 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1459 @Render(settings.Link) 1460 </div> 1461 } 1462 </div> 1463 1464 } 1465 1466 <div class="u-pull--left"> 1467 @if (!string.IsNullOrEmpty(settings.HelpText)) 1468 { 1469 <small class="form__help-text">@settings.HelpText</small> 1470 } 1471 1472 @foreach (var item in settings.Options) 1473 { 1474 if (settings.Required) 1475 { 1476 item.Required = true; 1477 } 1478 if (settings.Disabled) 1479 { 1480 item.Disabled = true; 1481 } 1482 if (!string.IsNullOrEmpty(settings.Name)) 1483 { 1484 item.Name = settings.Name; 1485 } 1486 if (!string.IsNullOrEmpty(settings.CssClass)) 1487 { 1488 item.CssClass += settings.CssClass; 1489 } 1490 1491 /* value is not supported */ 1492 1493 if (!string.IsNullOrEmpty(settings.OnClick)) 1494 { 1495 item.OnClick += settings.OnClick; 1496 } 1497 if (!string.IsNullOrEmpty(settings.OnChange)) 1498 { 1499 item.OnChange += settings.OnChange; 1500 } 1501 @Render(item) 1502 } 1503 1504 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1505 </div> 1506 1507 </div> 1508 } 1509 @using Dynamicweb.Rapido.Blocks.Components.General 1510 1511 @* Component *@ 1512 1513 @helper RenderSearch(Search settings) 1514 { 1515 var searchValue = HttpContext.Current.Request.QueryString.Get(settings.SearchParameter) ?? ""; 1516 var groupValue = HttpContext.Current.Request.QueryString.Get(settings.GroupsParameter) ?? ""; 1517 1518 if (string.IsNullOrEmpty(settings.Id)) 1519 { 1520 settings.Id = Guid.NewGuid().ToString("N"); 1521 } 1522 1523 var resultAttributes = new Dictionary<string, string>(); 1524 1525 if (settings.PageSize != 0) 1526 { 1527 resultAttributes.Add("data-page-size", settings.PageSize.ToString()); 1528 } 1529 if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl)) 1530 { 1531 resultAttributes.Add("data-groups-feed-url", settings.GroupItemsFeedUrl); 1532 if (!string.IsNullOrEmpty(groupValue)) 1533 { 1534 resultAttributes.Add("data-selected-group", groupValue); 1535 } 1536 if (!string.IsNullOrEmpty(settings.GroupsParameter)) 1537 { 1538 resultAttributes.Add("data-groups-parameter", settings.GroupsParameter); 1539 } 1540 } 1541 resultAttributes.Add("data-force-init", "true"); 1542 if (settings.GoToFirstSearchResultOnEnter) 1543 { 1544 resultAttributes.Add("data-go-to-first-search-result-on-enter", settings.GoToFirstSearchResultOnEnter.ToString().ToLower()); 1545 } 1546 if (!string.IsNullOrEmpty(settings.SearchParameter)) 1547 { 1548 resultAttributes.Add("data-search-parameter", settings.SearchParameter); 1549 } 1550 resultAttributes.Add("data-search-feed-url", settings.SearchData.SearchFeedUrl); 1551 resultAttributes.Add("data-results-template-id", settings.SearchData.ResultsTemplateId); 1552 1553 if (settings.SecondSearchData != null) 1554 { 1555 resultAttributes.Add("data-second-search-feed-url", settings.SecondSearchData.SearchFeedUrl); 1556 resultAttributes.Add("data-second-results-template-id", settings.SecondSearchData.ResultsTemplateId); 1557 } 1558 if (!string.IsNullOrEmpty(settings.ResultsPageUrl)) 1559 { 1560 resultAttributes.Add("data-results-page-url", settings.ResultsPageUrl); 1561 } 1562 1563 resultAttributes = resultAttributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1564 1565 string searchFieldCss = (settings.SearchButton == null) ? "search--with-icon" : ""; 1566 1567 <div class="search @settings.CssClass @searchFieldCss js-search-data-source dw-mod" id="@settings.Id" @ComponentMethods.AddAttributes(resultAttributes)> 1568 @if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl)) 1569 { 1570 <button type="button" class="search__groups-btn dw-mod js-search-groups-btn">@Translate("All")</button> 1571 <ul class="dropdown dropdown--absolute-position dw-mod search__groups-results js-search-groups-list"></ul> 1572 } 1573 1574 <input type="text" class="search__field dw-mod js-search-field" placeholder="@settings.Placeholder" value="@searchValue"> 1575 1576 <div class="dropdown dropdown--absolute-position search__results dw-mod js-search-results @(settings.SecondSearchData != null ? "search__results--combined" : "")"> 1577 @if (settings.SecondSearchData != null) 1578 { 1579 <div class="search__column search__column--products dw-mod"> 1580 <div class="search__column-header dw-mod">@Translate("Products")</div> 1581 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul> 1582 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl)) 1583 { 1584 @Render(new Link { 1585 Title = Translate("View all"), 1586 CssClass = "js-view-all-button u-margin", 1587 Href = settings.SearchData.ResultsPageUrl 1588 }); 1589 } 1590 </div> 1591 <div class="search__column search__column--pages dw-mod"> 1592 <div class="search__column-header">@Translate("Pages")</div> 1593 <ul class="search__results-list dw-mod js-search-results-second-list" id="@(settings.Id)_SecondResultsList"></ul> 1594 @if (!string.IsNullOrEmpty(settings.SecondSearchData.ResultsPageUrl)) 1595 { 1596 @Render(new Link 1597 { 1598 Title = Translate("View all"), 1599 CssClass = "js-view-all-button u-margin", 1600 Href = settings.SecondSearchData.ResultsPageUrl 1601 }); 1602 } 1603 </div> 1604 } 1605 else 1606 { 1607 <div class="search__column search__column--only dw-mod"> 1608 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul> 1609 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl)) 1610 { 1611 @Render(new Link { 1612 Title = Translate("View all"), 1613 CssClass = "js-view-all-button u-margin", 1614 Href = settings.SearchData.ResultsPageUrl 1615 }); 1616 } 1617 </div> 1618 } 1619 </div> 1620 1621 @if (settings.SearchButton != null) 1622 { 1623 settings.SearchButton.CssClass += " search__btn js-search-btn"; 1624 if (settings.RenderDefaultSearchIcon) 1625 { 1626 settings.SearchButton.Icon = new Icon { Name = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue }; 1627 } 1628 @Render(settings.SearchButton); 1629 } 1630 </div> 1631 } 1632 @using System.Reflection 1633 @using Dynamicweb.Rapido.Blocks.Components.General 1634 @using Dynamicweb.Rapido.Blocks.Components 1635 1636 1637 @* Component *@ 1638 1639 @helper RenderSelectField(SelectField settings) 1640 { 1641 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1642 { 1643 settings.Id = Guid.NewGuid().ToString("N"); 1644 } 1645 1646 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 1647 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1648 { 1649 <div class="u-full-width"> 1650 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1651 @if (settings.Link != null) { 1652 <div class="u-pull--right"> 1653 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1654 @Render(settings.Link) 1655 </div> 1656 } 1657 </div> 1658 } 1659 1660 @if (!string.IsNullOrEmpty(settings.HelpText)) 1661 { 1662 <small class="form__help-text">@settings.HelpText</small> 1663 } 1664 1665 @if (settings.ActionButton != null) 1666 { 1667 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1668 <div class="form__field-combi u-no-margin dw-mod"> 1669 @RenderSelectBase(settings) 1670 @Render(settings.ActionButton) 1671 </div> 1672 } 1673 else 1674 { 1675 @RenderSelectBase(settings) 1676 } 1677 1678 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1679 </div> 1680 } 1681 1682 @helper RenderSelectBase(SelectField settings) 1683 { 1684 var attributes = new Dictionary<string, string>(); 1685 1686 /*base settings*/ 1687 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1688 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1689 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1690 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1691 if (settings.Required) { attributes.Add("required", "true"); } 1692 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1693 /*end*/ 1694 1695 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1696 1697 <select @ComponentMethods.AddAttributes(resultAttributes) class="u-full-width @settings.CssClass dw-mod"> 1698 @if (settings.Default != null) 1699 { 1700 @Render(settings.Default) 1701 } 1702 1703 @foreach (var item in settings.Options) 1704 { 1705 if (settings.Value != null) { 1706 item.Checked = item.Value == settings.Value; 1707 } 1708 @Render(item) 1709 } 1710 </select> 1711 } 1712 @using System.Reflection 1713 @using Dynamicweb.Rapido.Blocks.Components.General 1714 @using Dynamicweb.Rapido.Blocks.Components 1715 1716 @* Component *@ 1717 1718 @helper RenderRadioButtonField(RadioButtonField settings) 1719 { 1720 var attributes = new Dictionary<string, string>(); 1721 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1722 { 1723 settings.Id = Guid.NewGuid().ToString("N"); 1724 } 1725 1726 /*base settings*/ 1727 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1728 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1729 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1730 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1731 if (settings.Required) { attributes.Add("required", "true"); } 1732 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1733 /*end*/ 1734 1735 attributes.Add("type", "radio"); 1736 if (settings.Checked) { attributes.Add("checked", "true"); } 1737 settings.CssClass = "form__control " + settings.CssClass; 1738 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1739 1740 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1741 1742 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1743 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1744 @if (!string.IsNullOrEmpty(settings.Label)) 1745 { 1746 <label for="@settings.Id" class="dw-mod">@settings.Label</label> 1747 } 1748 @if (!string.IsNullOrEmpty(settings.HelpText)) 1749 { 1750 <small class="form__help-text">@settings.HelpText</small> 1751 } 1752 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1753 </div> 1754 } 1755 @using System.Reflection 1756 @using Dynamicweb.Rapido.Blocks.Components.General 1757 @using Dynamicweb.Rapido.Blocks.Components 1758 1759 1760 @* Component *@ 1761 1762 @helper RenderRadioButtonListField(RadioButtonListField settings) 1763 { 1764 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1765 1766 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1767 @if (!string.IsNullOrEmpty(settings.Label)) 1768 { 1769 <label>@settings.Label</label> 1770 } 1771 @if (!string.IsNullOrEmpty(settings.HelpText)) 1772 { 1773 <small class="form__help-text">@settings.HelpText</small> 1774 } 1775 1776 @foreach (var item in settings.Options) 1777 { 1778 if (settings.Required) 1779 { 1780 item.Required = true; 1781 } 1782 if (settings.Disabled) 1783 { 1784 item.Disabled = true; 1785 } 1786 if (!string.IsNullOrEmpty(settings.Name)) 1787 { 1788 item.Name = settings.Name; 1789 } 1790 if (settings.Value != null && settings.Value == item.Value) 1791 { 1792 item.Checked = true; 1793 } 1794 if (!string.IsNullOrEmpty(settings.OnClick)) 1795 { 1796 item.OnClick += settings.OnClick; 1797 } 1798 if (!string.IsNullOrEmpty(settings.OnChange)) 1799 { 1800 item.OnChange += settings.OnChange; 1801 } 1802 if (!string.IsNullOrEmpty(settings.CssClass)) 1803 { 1804 item.CssClass += settings.CssClass; 1805 } 1806 @Render(item) 1807 } 1808 1809 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1810 </div> 1811 } 1812 @using System.Reflection 1813 @using Dynamicweb.Rapido.Blocks.Components.General 1814 @using Dynamicweb.Rapido.Blocks.Components 1815 1816 1817 @* Component *@ 1818 1819 @helper RenderNotificationMessage(NotificationMessage settings) 1820 { 1821 if (!string.IsNullOrEmpty(settings.Message)) 1822 { 1823 var attributes = new Dictionary<string, string>(); 1824 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1825 1826 string messageTypeClass = Enum.GetName(typeof(NotificationMessageType), settings.MessageType).ToLower(); 1827 string messageLayoutClass = Enum.GetName(typeof(NotificationMessageLayout), settings.MessageLayout).ToLower(); 1828 string minHeightClass = settings.Icon != null ? "u-min-h70px" : ""; 1829 1830 <div class="notification-message-@messageTypeClass notification-message-@messageLayoutClass @messageLayoutClass @minHeightClass @settings.CssClass u-full-width dw-mod" @ComponentMethods.AddAttributes(attributes)> 1831 @if (settings.Icon != null) { 1832 settings.Icon.Label = !string.IsNullOrEmpty(settings.Icon.Label) ? settings.Message + settings.Icon.Label : settings.Message; 1833 @Render(settings.Icon) 1834 } else { 1835 @settings.Message 1836 } 1837 </div> 1838 } 1839 } 1840 @using Dynamicweb.Rapido.Blocks.Components.General 1841 1842 1843 @* Component *@ 1844 1845 @helper RenderHandlebarsRoot(HandlebarsRoot settings) { 1846 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : ""; 1847 1848 <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> 1849 @if (settings.SubBlocks != null) { 1850 @RenderBlockList(settings.SubBlocks) 1851 } 1852 </div> 1853 } 1854 @using System.Reflection 1855 @using Dynamicweb.Rapido.Blocks.Components.General 1856 @using Dynamicweb.Rapido.Blocks.Components 1857 @using System.Text.RegularExpressions 1858 1859 1860 @* Component *@ 1861 1862 @helper RenderSticker(Sticker settings) { 1863 if (!String.IsNullOrEmpty(settings.Title)) { 1864 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : ""; 1865 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : ""; 1866 1867 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>(); 1868 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) { 1869 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : ""; 1870 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : ""; 1871 optionalAttributes.Add("style", styleTag); 1872 } 1873 1874 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div> 1875 } 1876 } 1877 1878 @using System.Reflection 1879 @using Dynamicweb.Rapido.Blocks.Components.General 1880 @using Dynamicweb.Rapido.Blocks.Components 1881 1882 1883 @* Component *@ 1884 1885 @helper RenderStickersCollection(StickersCollection settings) 1886 { 1887 if (settings.Stickers.Count > 0) 1888 { 1889 string position = "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower(); 1890 1891 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1892 @foreach (Sticker sticker in settings.Stickers) 1893 { 1894 @Render(sticker) 1895 } 1896 </div> 1897 } 1898 } 1899 1900 @using Dynamicweb.Rapido.Blocks.Components.General 1901 1902 1903 @* Component *@ 1904 1905 @helper RenderForm(Form settings) { 1906 if (settings != null) 1907 { 1908 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>(); 1909 if (!string.IsNullOrEmpty(settings.Action)) { optionalAttributes.Add("action", settings.Action); }; 1910 if (!string.IsNullOrEmpty(settings.Name)) { optionalAttributes.Add("name", settings.Name); }; 1911 if (!string.IsNullOrEmpty(settings.OnSubmit)) { optionalAttributes.Add("onsubmit", settings.OnSubmit); }; 1912 var enctypes = new Dictionary<string, string> 1913 { 1914 { "multipart", "multipart/form-data" }, 1915 { "text", "text/plain" }, 1916 { "application", "application/x-www-form-urlencoded" } 1917 }; 1918 if (settings.Enctype != FormEnctype.none) { optionalAttributes.Add("enctype", enctypes[Enum.GetName(typeof(FormEnctype), settings.Enctype).ToLower()]); }; 1919 optionalAttributes.Add("method", settings.Method.ToString()); 1920 1921 if (!string.IsNullOrEmpty(settings.FormStartMarkup)) 1922 { 1923 @settings.FormStartMarkup 1924 } 1925 else 1926 { 1927 @:<form class="@settings.CssClass u-no-margin dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1928 } 1929 1930 foreach (var field in settings.GetFields()) 1931 { 1932 @Render(field) 1933 } 1934 1935 @:</form> 1936 } 1937 } 1938 @using System.Reflection 1939 @using Dynamicweb.Rapido.Blocks.Components.General 1940 @using Dynamicweb.Rapido.Blocks.Components 1941 1942 1943 @* Component *@ 1944 1945 @helper RenderText(Text settings) 1946 { 1947 @settings.Content 1948 } 1949 @using System.Reflection 1950 @using Dynamicweb.Rapido.Blocks.Components.General 1951 @using Dynamicweb.Rapido.Blocks.Components 1952 1953 1954 @* Component *@ 1955 1956 @helper RenderContentModule(ContentModule settings) { 1957 if (!string.IsNullOrEmpty(settings.Content)) 1958 { 1959 @settings.Content 1960 } 1961 } 1962 @using System.Reflection 1963 @using Dynamicweb.Rapido.Blocks.Components.General 1964 @using Dynamicweb.Rapido.Blocks.Components 1965 1966 1967 @* Component *@ 1968 1969 @helper RenderModal(Modal settings) { 1970 if (settings != null) 1971 { 1972 string modalId = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N"); 1973 1974 string onchange = !string.IsNullOrEmpty(settings.OnClose) ? "onchange=\"if(!this.checked){" + settings.OnClose + "}\"" : ""; 1975 1976 <input type="checkbox" id="@(modalId)ModalTrigger" class="modal-trigger" @onchange /> 1977 1978 <div class="modal-container"> 1979 @if (!settings.DisableDarkOverlay) 1980 { 1981 <label for="@(modalId)ModalTrigger" id="@(modalId)ModalOverlay" class="modal-overlay"></label> 1982 } 1983 <div class="modal modal--@settings.Width.ToString().ToLower() modal-height--@settings.Height.ToString().ToLower()" id="@(modalId)Modal"> 1984 @if (settings.Heading != null) 1985 { 1986 if (!string.IsNullOrEmpty(settings.Heading.Title)) 1987 { 1988 <div class="modal__header"> 1989 @Render(settings.Heading) 1990 </div> 1991 } 1992 } 1993 <div class="modal__body @(settings.Width.ToString().ToLower() == "full" ? "modal__body--full" : "")"> 1994 @if (!string.IsNullOrEmpty(settings.BodyText)) 1995 { 1996 @settings.BodyText 1997 } 1998 @if (settings.BodyTemplate != null) 1999 { 2000 @settings.BodyTemplate 2001 } 2002 @{ 2003 var actions = settings.GetActions(); 2004 } 2005 </div> 2006 @if (actions.Length > 0) 2007 { 2008 <div class="modal__footer"> 2009 @foreach (var action in actions) 2010 { 2011 if (Pageview.Device.ToString() != "Mobile") { 2012 action.CssClass += " u-no-margin"; 2013 } else { 2014 action.CssClass += " u-full-width u-margin-bottom"; 2015 } 2016 2017 @Render(action) 2018 } 2019 </div> 2020 } 2021 <label class="modal__close-btn" for="@(modalId)ModalTrigger"></label> 2022 </div> 2023 </div> 2024 } 2025 } 2026 @using Dynamicweb.Rapido.Blocks.Components.General 2027 2028 @* Component *@ 2029 2030 @helper RenderMediaListItem(MediaListItem settings) 2031 { 2032 <div class="media-list-item @settings.CssClass dw-mod" @(!string.IsNullOrEmpty(settings.Id) ? "id=\"" + settings.Id + "\"" : "")> 2033 @if (!string.IsNullOrEmpty(settings.Label)) 2034 { 2035 if (!string.IsNullOrEmpty(settings.Link)) 2036 { 2037 @Render(new Link 2038 { 2039 Href = settings.Link, 2040 CssClass = "media-list-item__sticker dw-mod", 2041 ButtonLayout = ButtonLayout.None, 2042 Title = settings.Label, 2043 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : "" 2044 }) 2045 } 2046 else if (!string.IsNullOrEmpty(settings.OnClick)) 2047 { 2048 <span class="media-list-item__sticker dw-mod" onclick="@(settings.OnClick)"> 2049 <span class="u-uppercase">@settings.Label</span> 2050 </span> 2051 } 2052 else 2053 { 2054 <span class="media-list-item__sticker media-list-item__sticker--no-link dw-mod"> 2055 <span class="u-uppercase">@settings.Label</span> 2056 </span> 2057 } 2058 } 2059 <div class="media-list-item__wrap"> 2060 <div class="media-list-item__info dw-mod"> 2061 <div class="media-list-item__header dw-mod"> 2062 @if (!string.IsNullOrEmpty(settings.Title)) 2063 { 2064 if (!string.IsNullOrEmpty(settings.Link)) 2065 { 2066 @Render(new Link 2067 { 2068 Href = settings.Link, 2069 CssClass = "media-list-item__name dw-mod", 2070 ButtonLayout = ButtonLayout.None, 2071 Title = settings.Title, 2072 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : "" 2073 }) 2074 } 2075 else if (!string.IsNullOrEmpty(settings.OnClick)) 2076 { 2077 <span class="media-list-item__name dw-mod" onclick="@(settings.OnClick)">@settings.Title</span> 2078 } 2079 else 2080 { 2081 <span class="media-list-item__name media-list-item__name--no-link dw-mod">@settings.Title</span> 2082 } 2083 } 2084 2085 @if (!string.IsNullOrEmpty(settings.Status)) 2086 { 2087 <div class="media-list-item__state dw-mod">@settings.Status</div> 2088 } 2089 </div> 2090 @{ 2091 settings.InfoTable.CssClass += " media-list-item__parameters-table"; 2092 } 2093 2094 @Render(settings.InfoTable) 2095 </div> 2096 <div class="media-list-item__actions dw-mod"> 2097 <div class="media-list-item__actions-list dw-mod"> 2098 @{ 2099 var actions = settings.GetActions(); 2100 2101 foreach (ButtonBase action in actions) 2102 { 2103 action.ButtonLayout = ButtonLayout.None; 2104 action.CssClass += " media-list-item__action link"; 2105 2106 @Render(action) 2107 } 2108 } 2109 </div> 2110 2111 @if (settings.SelectButton != null && !string.IsNullOrEmpty(settings.SelectButton.Title)) 2112 { 2113 settings.SelectButton.CssClass += " u-no-margin"; 2114 2115 <div class="media-list-item__action-button"> 2116 @Render(settings.SelectButton) 2117 </div> 2118 } 2119 </div> 2120 </div> 2121 </div> 2122 } 2123 @using Dynamicweb.Rapido.Blocks.Components.General 2124 @using Dynamicweb.Rapido.Blocks.Components 2125 2126 @helper RenderTable(Table settings) 2127 { 2128 Dictionary<string, string> attributes = new Dictionary<string, string>(); 2129 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 2130 2131 var enumToClasses = new Dictionary<TableDesign, string> 2132 { 2133 { TableDesign.Clean, "table--clean" }, 2134 { TableDesign.Bordered, "table--bordered" }, 2135 { TableDesign.Striped, "table--striped" }, 2136 { TableDesign.Hover, "table--hover" }, 2137 { TableDesign.Compact, "table--compact" }, 2138 { TableDesign.Condensed, "table--condensed" }, 2139 { TableDesign.NoTopBorder, "table--no-top-border" } 2140 }; 2141 string tableDesignClass = ""; 2142 if (settings.Design != TableDesign.None) 2143 { 2144 tableDesignClass = enumToClasses[settings.Design]; 2145 } 2146 2147 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableDesign.None) { attributes.Add("class", "table " + tableDesignClass + " " + settings.CssClass + " dw-mod"); } 2148 2149 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 2150 2151 <table @ComponentMethods.AddAttributes(resultAttributes)> 2152 @if (settings.Header != null) 2153 { 2154 <thead> 2155 @Render(settings.Header) 2156 </thead> 2157 } 2158 <tbody> 2159 @foreach (var row in settings.Rows) 2160 { 2161 @Render(row) 2162 } 2163 </tbody> 2164 @if (settings.Footer != null) 2165 { 2166 <tfoot> 2167 @Render(settings.Footer) 2168 </tfoot> 2169 } 2170 </table> 2171 } 2172 @using Dynamicweb.Rapido.Blocks.Components.General 2173 @using Dynamicweb.Rapido.Blocks.Components 2174 2175 @helper RenderTableRow(TableRow settings) 2176 { 2177 Dictionary<string, string> attributes = new Dictionary<string, string>(); 2178 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 2179 2180 var enumToClasses = new Dictionary<TableRowDesign, string> 2181 { 2182 { TableRowDesign.NoBorder, "table__row--no-border" }, 2183 { TableRowDesign.Border, "table__row--border" }, 2184 { TableRowDesign.TopBorder, "table__row--top-line" }, 2185 { TableRowDesign.BottomBorder, "table__row--bottom-line" }, 2186 { TableRowDesign.Solid, "table__row--solid" } 2187 }; 2188 2189 string tableRowDesignClass = ""; 2190 if (settings.Design != TableRowDesign.None) 2191 { 2192 tableRowDesignClass = enumToClasses[settings.Design]; 2193 } 2194 2195 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableRowDesign.None) { attributes.Add("class", "table__row " + tableRowDesignClass + " " + settings.CssClass + " dw-mod"); } 2196 2197 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 2198 2199 <tr @ComponentMethods.AddAttributes(resultAttributes)> 2200 @foreach (var cell in settings.Cells) 2201 { 2202 if (settings.IsHeaderRow) 2203 { 2204 cell.IsHeader = true; 2205 } 2206 @Render(cell) 2207 } 2208 </tr> 2209 } 2210 @using Dynamicweb.Rapido.Blocks.Components.General 2211 @using Dynamicweb.Rapido.Blocks.Components 2212 @using Dynamicweb.Core 2213 2214 @helper RenderTableCell(TableCell settings) 2215 { 2216 Dictionary<string, string> attributes = new Dictionary<string, string>(); 2217 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 2218 if (settings.Colspan != 0) { attributes.Add("colspan", Converter.ToString(settings.Colspan)); } 2219 if (settings.Rowspan != 0) { attributes.Add("rowspan", Converter.ToString(settings.Rowspan)); } 2220 if (!string.IsNullOrEmpty(settings.CssClass)) { attributes.Add("class", settings.CssClass + " dw-mod"); } 2221 2222 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 2223 2224 string tagName = settings.IsHeader ? "th" : "td"; 2225 2226 @("<" + tagName + " " + ComponentMethods.AddAttributes(resultAttributes) + ">") 2227 @settings.Content 2228 @("</" + tagName + ">"); 2229 } 2230 @using System.Linq 2231 @using Dynamicweb.Rapido.Blocks.Components.General 2232 2233 @* Component *@ 2234 2235 @helper RenderPagination(Dynamicweb.Rapido.Blocks.Components.General.Pagination settings) 2236 { 2237 var pageNumberQueryStringName = Dynamicweb.Rapido.Services.Pagination.GetPageNumberQueryStringName(settings); // Get the proper 'page number' query string parameter 2238 var queryParameters = Dynamicweb.Rapido.Services.Url.GetQueryParameters(pageNumberQueryStringName); // Get the NameValueCollection from the querystring 2239 2240 if (settings.NumberOfPages > 1) 2241 { 2242 string url = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + "/Default.aspx"; 2243 string ariaLabel = !string.IsNullOrWhiteSpace(settings.AriaLabel) ? settings.AriaLabel : Translate("Page navigation"); 2244 Dictionary<string, int> startAndEndPageNumber = Dynamicweb.Rapido.Services.Pagination.GetStartAndEndPageNumber(settings); 2245 2246 <div class="pager u-margin-top dw-mod @settings.CssClass" aria-label="@ariaLabel"> 2247 @if (settings.ShowPagingInfo) 2248 { 2249 <div class="pager__info dw-mod"> 2250 @Translate("Page") @settings.CurrentPageNumber @Translate("of") @settings.NumberOfPages 2251 </div> 2252 } 2253 <ul class="pager__list dw-mod"> 2254 @if (!string.IsNullOrWhiteSpace(settings.FirstPageUrl) && settings.ShowFirstAndLastControls) 2255 { 2256 @Render(new PaginationItem { Link = settings.FirstPageUrl, Icon = settings.FirstIcon }) 2257 } 2258 @if (!string.IsNullOrWhiteSpace(settings.PreviousPageUrl) && settings.ShowNextAndPrevControls) 2259 { 2260 @Render(new PaginationItem { Link = settings.PreviousPageUrl, Icon = settings.PrevIcon }) 2261 } 2262 @if (settings.GetPages().Any()) 2263 { 2264 foreach (var page in settings.GetPages()) 2265 { 2266 @Render(page) 2267 } 2268 } 2269 else 2270 { 2271 for (var page = startAndEndPageNumber["StartPage"]; page <= startAndEndPageNumber["EndPage"]; page++) 2272 { 2273 queryParameters = Dynamicweb.Rapido.Services.Url.UpdateQueryStringParameter(queryParameters, pageNumberQueryStringName, page.ToString()); 2274 @Render(new PaginationItem { Label = page.ToString(), Link = Dynamicweb.Rapido.Services.Url.BuildUri(url, queryParameters).PathAndQuery, IsActive = (settings.CurrentPageNumber == page) }); 2275 } 2276 } 2277 @if (!string.IsNullOrWhiteSpace(settings.NextPageUrl) && settings.ShowNextAndPrevControls) 2278 { 2279 @Render(new PaginationItem { Link = settings.NextPageUrl, Icon = settings.NextIcon }) 2280 } 2281 @if (!string.IsNullOrWhiteSpace(settings.LastPageUrl) && settings.ShowFirstAndLastControls) 2282 { 2283 @Render(new PaginationItem { Link = settings.LastPageUrl, Icon = settings.LastIcon }) 2284 } 2285 </ul> 2286 </div> 2287 } 2288 } 2289 2290 @helper RenderPaginationItem(PaginationItem settings) 2291 { 2292 if (settings.Icon == null) 2293 { 2294 settings.Icon = new Icon(); 2295 } 2296 2297 settings.Icon.Label = settings.Label; 2298 <li class="pager__btn dw-mod"> 2299 @if (settings.IsActive) 2300 { 2301 <span class="pager__num pager__num--current dw-mod"> 2302 @Render(settings.Icon) 2303 </span> 2304 } 2305 else 2306 { 2307 <a href="@settings.Link" class="pager__num dw-mod"> 2308 @Render(settings.Icon) 2309 </a> 2310 } 2311 </li> 2312 } 2313 2314 2315 @using Dynamicweb.Rapido.Blocks.Components.General 2316 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce 2317 2318 2319 2320 2321 2322 @functions { 2323 public string GenerateRgba(string color, string opacity) 2324 { 2325 color = color.Replace("#", ""); 2326 if (color.Length == 6) 2327 { 2328 return "rgba(" + Convert.ToInt32(color.Substring(0, 2), 16) + ", " + Convert.ToInt32(color.Substring(2, 2), 16) + ", " + Convert.ToInt32(color.Substring(4, 2), 16) + ", " + opacity + ");"; 2329 } 2330 else 2331 { 2332 return Convert.ToInt16(color).ToString(); 2333 } 2334 } 2335 } 2336 2337 @{ 2338 string link = !string.IsNullOrEmpty(Model.Item.GetString("Link")) ? Model.Item.GetString("Link") : ""; 2339 string linkTarget = link.Contains("http") || link.Contains(".pdf") ? "_blank" : "_self"; 2340 } 2341 2342 @if (!string.IsNullOrEmpty(link)) 2343 { 2344 @*<a href="@link" target="@linkTarget" class="u-overlay">*@ 2345 <div class="paragraph-image-link-wrapper"> 2346 <a href="@link" target="@linkTarget"> 2347 @RenderTheContent() 2348 </a> 2349 </div> 2350 } 2351 else 2352 { 2353 @RenderTheContent() 2354 } 2355 2356 2357 @helper RenderTheContent() 2358 { 2359 string innerPadding = Model.Item.GetList("Padding") != null ? " padding-size-" + Model.Item.GetList("Padding").SelectedValue.ToLower() : ""; 2360 innerPadding += Model.Item.GetList("PaddingPosition") != null ? " padding-position-" + Model.Item.GetList("PaddingPosition").SelectedValue.ToLower() : ""; 2361 2362 if (!string.IsNullOrEmpty(Model.Item.GetString("Image"))) 2363 { 2364 int width = Model.Item.GetString("ImageWidth") != null ? Model.Item.GetInt32("ImageWidth") : 100; 2365 string styleSetting = Model.Item.GetString("ImageStyle") != null ? Model.Item.GetList("ImageStyle").SelectedValue : ""; 2366 ImageStyle style = ImageStyle.None; 2367 style = styleSetting == "ball" ? style = ImageStyle.Ball : style; 2368 style = styleSetting == "triangle" ? style = ImageStyle.Triangle : style; 2369 var file = Model.Item.GetFile("Image"); 2370 2371 Image image = new Image 2372 { 2373 Path = file, 2374 Style = style, 2375 CssClass = "background-image__cover", 2376 ImageDefault = new ImageSettings 2377 { 2378 Crop = 5, 2379 Width = width 2380 } 2381 }; 2382 2383 if (styleSetting == "square") 2384 { 2385 image.ImageDefault.Crop = 0; 2386 image.ImageDefault.Height = image.ImageDefault.Width; 2387 } 2388 2389 string imageAltText = ""; 2390 if (!string.IsNullOrWhiteSpace(Model.Item.GetString("ImageAltText"))) 2391 { 2392 imageAltText = Model.Item.GetString("ImageAltText"); 2393 } 2394 2395 string imageTitleText = ""; 2396 if (!string.IsNullOrWhiteSpace(Model.Item.GetString("ImageTitleText"))) 2397 { 2398 imageTitleText = Model.Item.GetString("ImageTitleText"); 2399 } 2400 2401 <div class="paragraph-image"> 2402 @RenderWithAltAndTitle(image, imageAltText, imageTitleText) 2403 </div> 2404 } 2405 2406 <div class="u-full-width u-padding-top dw-mod"> 2407 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Text"))) 2408 { 2409 <div class="u-margin-bottom--lg"> 2410 @if (!Model.Item.GetBoolean("HideTitle")) 2411 { 2412 @Render(new Heading { Title = Model.Item.GetString("Title"), Level = 2, CssClass = "u-no-margin" }) 2413 } 2414 @Render(new Text { Content = Model.Item.GetString("Text") }) 2415 </div> 2416 } 2417 </div> 2418 2419 if (!string.IsNullOrEmpty(Model.Item.GetItem("ButtonOne").GetString("Title"))) 2420 { 2421 <div class="buttons-collection u-block dw-mod"> 2422 @ParagraphButton(Model.Item.GetItem("ButtonOne")) 2423 </div> 2424 } 2425 } 2426 2427 2428 @helper ParagraphButton(ItemViewModel item) 2429 { 2430 if (item != null) 2431 { 2432 if (!string.IsNullOrEmpty(item.GetString("Title"))) 2433 { 2434 Button button = new Button 2435 { 2436 Title = item.GetString("Title"), 2437 Href = item.GetString("Link"), 2438 ButtonLayout = (ButtonLayout)System.Enum.Parse(typeof(ButtonLayout), char.ToUpper(item.GetList("Layout").SelectedValue[0]) + item.GetList("Layout").SelectedValue.Substring(1)) 2439 }; 2440 2441 if (!string.IsNullOrEmpty(item.GetString("Icon"))) 2442 { 2443 button.Icon = new Icon 2444 { 2445 CssClass = item.GetString("Icon") 2446 }; 2447 } 2448 2449 @Render(button) 2450 } 2451 } 2452 } 2453 2454 2455 2456 2457 2458
Error executing template "Designs/Rapido/ContentPage/Paragraph/StandardParagraphThree.cshtml"
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference
   at CallSite.Target(Closure , CallSite , Object )
   at CompiledRazorTemplates.Dynamic.RazorEngine_8301d84882b547c1bc2df93198830e06.<>c__DisplayClass19_0.<RenderTheImage>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 924
   at CompiledRazorTemplates.Dynamic.RazorEngine_8301d84882b547c1bc2df93198830e06.<>c__DisplayClass18_0.<RenderWithAltAndTitle>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 860
   at CompiledRazorTemplates.Dynamic.RazorEngine_8301d84882b547c1bc2df93198830e06.<RenderTheContent>b__48_0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 2402
   at CompiledRazorTemplates.Dynamic.RazorEngine_8301d84882b547c1bc2df93198830e06.Execute() in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 2347
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Frontend 3 @using Dynamicweb.Rapido.Blocks.Components 4 @using Dynamicweb.Rapido.Blocks.Components.General 5 6 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 7 @using Dynamicweb.Frontend 8 9 @* Include the components *@ 10 @using System.Text.RegularExpressions 11 @using System.Collections.Generic 12 @using System.Reflection 13 @using System.Web 14 @using System.Web.UI.HtmlControls 15 @using Dynamicweb.Rapido.Blocks.Components 16 @using Dynamicweb.Rapido.Blocks.Components.Articles 17 @using Dynamicweb.Rapido.Blocks.Components.Documentation 18 @using Dynamicweb.Rapido.Blocks 19 20 21 @*--- START: Base block renderers ---*@ 22 23 @helper RenderBlockList(List<Block> blocks) 24 { 25 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false; 26 blocks = blocks.OrderBy(item => item.SortId).ToList(); 27 28 foreach (Block item in blocks) 29 { 30 if (debug) { 31 <!-- Block START: @item.Id --> 32 } 33 34 if (item.Design == null) 35 { 36 @RenderBlock(item) 37 } 38 else if (item.Design.RenderType == RenderType.None) { 39 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : ""; 40 41 <div class="@cssClass dw-mod"> 42 @RenderBlock(item) 43 </div> 44 } 45 else if (item.Design.RenderType != RenderType.Hide) 46 { 47 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : ""; 48 49 if (!item.SkipRenderBlocksList) { 50 if (item.Design.RenderType == RenderType.Row) 51 { 52 <div class="grid grid--align-content-start @cssClass dw-mod" id="Block__@item.Id"> 53 @RenderBlock(item) 54 </div> 55 } 56 57 if (item.Design.RenderType == RenderType.Column) 58 { 59 string hidePadding = item.Design.HidePadding ? "u-no-padding" : ""; 60 string size = item.Design.Size ?? "12"; 61 size = Regex.IsMatch(size, @"\d") ? "md-" + item.Design.Size : item.Design.Size; 62 63 <div class="grid__col-lg-@item.Design.Size grid__col-md-@item.Design.Size grid__col-sm-12 grid__col-xs-12 @hidePadding @cssClass dw-mod" id="Block__@item.Id"> 64 @RenderBlock(item) 65 </div> 66 } 67 68 if (item.Design.RenderType == RenderType.Table) 69 { 70 <table class="table @cssClass dw-mod" id="Block__@item.Id"> 71 @RenderBlock(item) 72 </table> 73 } 74 75 if (item.Design.RenderType == RenderType.TableRow) 76 { 77 <tr class="@cssClass dw-mod" id="Block__@item.Id"> 78 @RenderBlock(item) 79 </tr> 80 } 81 82 if (item.Design.RenderType == RenderType.TableColumn) 83 { 84 <td class="@cssClass dw-mod" id="Block__@item.Id"> 85 @RenderBlock(item) 86 </td> 87 } 88 89 if (item.Design.RenderType == RenderType.CardHeader) 90 { 91 <div class="card-header @cssClass dw-mod"> 92 @RenderBlock(item) 93 </div> 94 } 95 96 if (item.Design.RenderType == RenderType.CardBody) 97 { 98 <div class="card @cssClass dw-mod"> 99 @RenderBlock(item) 100 </div> 101 } 102 103 if (item.Design.RenderType == RenderType.CardFooter) 104 { 105 <div class="card-footer @cssClass dw-mod"> 106 @RenderBlock(item) 107 </div> 108 } 109 } 110 else 111 { 112 @RenderBlock(item) 113 } 114 } 115 116 if (debug) { 117 <!-- Block END: @item.Id --> 118 } 119 } 120 } 121 122 @helper RenderBlock(Block item) 123 { 124 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false; 125 126 if (item.Template != null) 127 { 128 @BlocksPage.RenderTemplate(item.Template) 129 } 130 131 if (item.Component != null) 132 { 133 string customSufix = "Custom"; 134 string methodName = item.Component.HelperName; 135 136 ComponentBase[] methodParameters = new ComponentBase[1]; 137 methodParameters[0] = item.Component; 138 Type methodType = this.GetType(); 139 140 MethodInfo customMethod = methodType.GetMethod(methodName + customSufix); 141 MethodInfo generalMethod = methodType.GetMethod(methodName); 142 143 try { 144 if (debug) { 145 <!-- Component: @methodName.Replace("Render", "") --> 146 } 147 @customMethod.Invoke(this, methodParameters).ToString(); 148 } catch { 149 try { 150 @generalMethod.Invoke(this, methodParameters).ToString(); 151 } catch(Exception ex) { 152 throw new Exception(item.Component.GetType().Name + " method '" + methodName +"' could not be invoked", ex); 153 } 154 } 155 } 156 157 if (item.BlocksList.Count > 0 && !item.SkipRenderBlocksList) 158 { 159 @RenderBlockList(item.BlocksList) 160 } 161 } 162 163 @*--- END: Base block renderers ---*@ 164 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 Dynamicweb.Rapido.Blocks.Components 804 @using Dynamicweb.Rapido.Blocks.Components.General 805 @using Dynamicweb.Rapido.Blocks 806 807 808 @* Component *@ 809 810 @helper RenderWithAltAndTitle(Image settings, string alText = "", string titleText = "") 811 { 812 if (settings.FilterPrimary != ImageFilter.None || settings.FilterSecondary != ImageFilter.None) 813 { 814 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>(); 815 if (!string.IsNullOrEmpty(settings.FilterColor)) { optionalAttributes.Add("style", "background-color: " + settings.FilterColor); } 816 817 if (settings.Caption != null) 818 { 819 @:<div> 820 } 821 822 var primaryFilterClass = settings.FilterPrimary.ToString().ToLower(); 823 var secondaryFilterClass = settings.FilterSecondary.ToString().ToLower(); 824 825 <div class="image-filter image-filter--@primaryFilterClass u-position-relative dw-mod" @ComponentMethods.AddAttributes(optionalAttributes)> 826 <div class="image-filter image-filter--@secondaryFilterClass dw-mod"> 827 @if (settings.Link != null) 828 { 829 <a href="@settings.Link"> 830 @RenderTheImage(settings, alText, titleText) 831 </a> 832 } 833 else 834 { 835 @RenderTheImage(settings, alText, titleText) 836 } 837 </div> 838 </div> 839 840 if (settings.Caption != null) 841 { 842 <span class="image-caption dw-mod">@settings.Caption</span> 843 @:</div> 844 } 845 } 846 else 847 { 848 if (settings.Caption != null) 849 { 850 @:<div> 851 } 852 if (!string.IsNullOrEmpty(settings.Link)) 853 { 854 <a href="@settings.Link"> 855 @RenderTheImage(settings, alText, titleText) 856 </a> 857 } 858 else 859 { 860 @RenderTheImage(settings, alText, titleText) 861 } 862 863 if (settings.Caption != null) 864 { 865 <span class="image-caption dw-mod">@settings.Caption</span> 866 @:</div> 867 } 868 } 869 } 870 871 @helper RenderTheImage(Image settings, string alText = "", string titleText = "") 872 { 873 if (settings != null) 874 { 875 string alternativeImage = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("AlternativeImage")) ? Pageview.AreaSettings.GetItem("Settings").GetFile("AlternativeImage").PathUrlEncoded : "/Images/missing_image.jpg"; 876 string placeholderImage = "/Files/Images/placeholder.gif"; 877 string imageEngine = "/Admin/Public/GetImage.ashx?"; 878 879 string imageStyle = ""; 880 881 switch (settings.Style) 882 { 883 case ImageStyle.Ball: 884 imageStyle = "grid__cell-img--ball"; 885 break; 886 887 case ImageStyle.Triangle: 888 imageStyle = "grid__cell-img--triangle"; 889 break; 890 } 891 892 if (settings.Style == ImageStyle.Ball || settings.Style == ImageStyle.Circle || settings.Style == ImageStyle.Triangle) 893 { 894 settings.ImageDefault.Crop = settings.ImageDefault.Crop == 5 ? settings.ImageDefault.Crop = 0 : settings.ImageDefault.Crop; 895 896 if (settings.ImageDefault != null) 897 { 898 settings.ImageDefault.Height = settings.ImageDefault.Width; 899 } 900 if (settings.ImageMedium != null) 901 { 902 settings.ImageMedium.Height = settings.ImageMedium.Width; 903 } 904 if (settings.ImageSmall != null) 905 { 906 settings.ImageSmall.Height = settings.ImageSmall.Width; 907 } 908 } 909 910 string defaultImage = imageEngine; 911 string imageSmall = ""; 912 string imageMedium = ""; 913 914 if (settings.DisableImageEngine) 915 { 916 defaultImage = settings.Path; 917 } 918 else 919 { 920 if (settings.ImageDefault != null) 921 { 922 defaultImage += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageDefault); 923 924 if (settings.Path.GetType() != typeof(string)) 925 { 926 defaultImage += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 927 defaultImage += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 928 } 929 else 930 { 931 defaultImage += settings.Path != null ? "Image=" + settings.Path : ""; 932 } 933 934 defaultImage += "&AlternativeImage=" + alternativeImage; 935 } 936 937 if (settings.ImageSmall != null) 938 { 939 imageSmall = "data-src-small=\"" + imageEngine; 940 imageSmall += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageSmall); 941 942 if (settings.Path.GetType() != typeof(string)) 943 { 944 imageSmall += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 945 imageSmall += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 946 } 947 else 948 { 949 imageSmall += settings.Path != null ? "Image=" + settings.Path : ""; 950 } 951 952 imageSmall += "&alternativeImage=" + alternativeImage; 953 954 imageSmall += "\""; 955 } 956 957 if (settings.ImageMedium != null) 958 { 959 imageMedium = "data-src-medium=\"" + imageEngine; 960 imageMedium += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageMedium); 961 962 if (settings.Path.GetType() != typeof(string)) 963 { 964 imageMedium += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 965 imageMedium += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 966 } 967 else 968 { 969 imageMedium += settings.Path != null ? "Image=" + settings.Path : ""; 970 971 972 } 973 974 imageMedium += "&alternativeImage=" + alternativeImage; 975 976 imageMedium += "\""; 977 } 978 } 979 980 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>(); 981 if (!string.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick); } 982 if (!string.IsNullOrEmpty(settings.Title)) 983 { 984 optionalAttributes.Add("alt", settings.Title); 985 optionalAttributes.Add("title", settings.Title); 986 } 987 988 989 990 string imgAlt = ""; 991 string imgTitle = ""; 992 993 if (!string.IsNullOrWhiteSpace(alText)) 994 { 995 imgAlt = "alt=" + '"' + alText + '"'; 996 } 997 998 if (!string.IsNullOrWhiteSpace(titleText)) 999 { 1000 imgTitle = "title=" + '"' + titleText + '"'; 1001 1002 } 1003 1004 1005 if (settings.DisableLazyLoad) 1006 { 1007 <img id="@settings.Id" class="@imageStyle @settings.CssClass dw-mod" src="@defaultImage" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) @imgAlt @imgTitle /> 1008 } 1009 else 1010 { 1011 <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) @imgAlt @imgTitle /> 1012 } 1013 } 1014 } 1015 @using System.Reflection 1016 @using Dynamicweb.Rapido.Blocks.Components.General 1017 @using Dynamicweb.Rapido.Blocks.Components 1018 1019 @* Component *@ 1020 1021 @helper RenderFileField(FileField settings) 1022 { 1023 var attributes = new Dictionary<string, string>(); 1024 if (string.IsNullOrEmpty(settings.Id)) 1025 { 1026 settings.Id = Guid.NewGuid().ToString("N"); 1027 } 1028 1029 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1030 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1031 if (settings.Required) { attributes.Add("required", "true"); } 1032 if (settings.Multiple) { attributes.Add("multiple", "true"); } 1033 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1034 if (string.IsNullOrEmpty(settings.ChooseFileText)) 1035 { 1036 settings.ChooseFileText = Translate("Choose file"); 1037 } 1038 if (string.IsNullOrEmpty(settings.NoFilesChosenText)) 1039 { 1040 settings.NoFilesChosenText = Translate("No files chosen..."); 1041 } 1042 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1043 1044 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1045 1046 string setValueToFakeInput = "FileUpload.setValueToFakeInput(this)"; 1047 attributes.Add("onchange", setValueToFakeInput + (!string.IsNullOrEmpty(settings.OnChange) ? settings.OnChange : "")); 1048 1049 attributes.Add("type", "file"); 1050 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1051 settings.CssClass = "u-full-width " + settings.CssClass; 1052 1053 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1054 1055 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 1056 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1057 { 1058 <div class="u-full-width"> 1059 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1060 @if (settings.Link != null) { 1061 <div class="u-pull--right"> 1062 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1063 @Render(settings.Link) 1064 </div> 1065 } 1066 </div> 1067 1068 } 1069 1070 @if (!string.IsNullOrEmpty(settings.HelpText)) 1071 { 1072 <small class="form__help-text">@settings.HelpText</small> 1073 } 1074 1075 <div class="form__field-combi file-input u-no-margin dw-mod"> 1076 <input @ComponentMethods.AddAttributes(resultAttributes) class="file-input__real-input" data-no-files-text="@settings.NoFilesChosenText" data-many-files-text="@Translate("files")" /> 1077 <label for="@settings.Id" class="file-input__btn btn--secondary btn dw-mod">@settings.ChooseFileText</label> 1078 <label for="@settings.Id" class="@settings.CssClass file-input__fake-input js-fake-input dw-mod">@settings.NoFilesChosenText</label> 1079 @if (settings.UploadButton != null) 1080 { 1081 settings.UploadButton.CssClass += " btn--condensed u-no-margin"; 1082 @Render(settings.UploadButton) 1083 } 1084 </div> 1085 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1086 </div> 1087 } 1088 @using System.Reflection 1089 @using Dynamicweb.Rapido.Blocks.Components.General 1090 @using Dynamicweb.Rapido.Blocks.Components 1091 @using Dynamicweb.Core 1092 @using System.Linq 1093 1094 @* Component *@ 1095 1096 @helper RenderDateTimeField(DateTimeField settings) 1097 { 1098 if (string.IsNullOrEmpty(settings.Id)) 1099 { 1100 settings.Id = Guid.NewGuid().ToString("N"); 1101 } 1102 1103 var textField = new TextField { 1104 Name = settings.Name, 1105 Id = settings.Id, 1106 Label = settings.Label, 1107 HelpText = settings.HelpText, 1108 Value = settings.Value, 1109 Disabled = settings.Disabled, 1110 Required = settings.Required, 1111 ErrorMessage = settings.ErrorMessage, 1112 CssClass = settings.CssClass, 1113 WrapperCssClass = settings.WrapperCssClass, 1114 OnChange = settings.OnChange, 1115 OnClick = settings.OnClick, 1116 Link = settings.Link, 1117 ExtraAttributes = settings.ExtraAttributes, 1118 // 1119 Placeholder = settings.Placeholder 1120 }; 1121 1122 @Render(textField) 1123 1124 List<string> jsAttributes = new List<string>(); 1125 1126 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'"); 1127 1128 if (!string.IsNullOrEmpty(settings.DateFormat)) 1129 { 1130 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'"); 1131 } 1132 if (!string.IsNullOrEmpty(settings.MinDate)) 1133 { 1134 jsAttributes.Add("minDate: '" + settings.MinDate + "'"); 1135 } 1136 if (!string.IsNullOrEmpty(settings.MaxDate)) 1137 { 1138 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'"); 1139 } 1140 if (settings.IsInline) 1141 { 1142 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower()); 1143 } 1144 if (settings.EnableTime) 1145 { 1146 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower()); 1147 } 1148 if (settings.EnableWeekNumbers) 1149 { 1150 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower()); 1151 } 1152 1153 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value)); 1154 1155 <script> 1156 document.addEventListener("DOMContentLoaded", function () { 1157 flatpickr("#@textField.Id", { 1158 @string.Join(",", jsAttributes) 1159 }); 1160 }); 1161 </script> 1162 } 1163 @using System.Reflection 1164 @using Dynamicweb.Rapido.Blocks.Components.General 1165 @using Dynamicweb.Rapido.Blocks.Components 1166 1167 @* Component *@ 1168 1169 @helper RenderTextField(TextField settings) 1170 { 1171 var attributes = new Dictionary<string, string>(); 1172 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1173 { 1174 settings.Id = Guid.NewGuid().ToString("N"); 1175 } 1176 1177 /*base settings*/ 1178 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1179 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1180 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1181 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1182 if (settings.Required) { attributes.Add("required", "true"); } 1183 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1184 /*end*/ 1185 1186 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 1187 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 1188 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 1189 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 1190 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); } 1191 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); } 1192 attributes.Add("type", Enum.GetName(typeof(TextFieldType), settings.Type).ToLower()); 1193 if (settings.Type == TextFieldType.Password) { attributes.Add("autocomplete", "off"); }; 1194 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1195 1196 settings.CssClass = "u-full-width " + settings.CssClass; 1197 1198 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1199 1200 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1201 1202 string noMargin = "u-no-margin"; 1203 if (!settings.ReadOnly) { 1204 noMargin = ""; 1205 } 1206 1207 <div class="form__field-group u-full-width @noMargin @settings.WrapperCssClass dw-mod"> 1208 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1209 { 1210 <div class="u-full-width"> 1211 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1212 @if (settings.Link != null) { 1213 settings.Link.ButtonLayout = ButtonLayout.LinkClean; 1214 1215 <div class="u-pull--right"> 1216 @Render(settings.Link) 1217 </div> 1218 } 1219 </div> 1220 1221 } 1222 1223 @if (!string.IsNullOrEmpty(settings.HelpText)) 1224 { 1225 <small class="form__help-text">@settings.HelpText</small> 1226 } 1227 1228 @if (settings.ActionButton != null) 1229 { 1230 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1231 <div class="form__field-combi u-no-margin dw-mod"> 1232 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1233 @Render(settings.ActionButton) 1234 </div> 1235 } 1236 else 1237 { 1238 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1239 } 1240 1241 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1242 </div> 1243 } 1244 @using System.Reflection 1245 @using Dynamicweb.Rapido.Blocks.Components.General 1246 @using Dynamicweb.Rapido.Blocks.Components 1247 1248 @* Component *@ 1249 1250 @helper RenderNumberField(NumberField settings) 1251 { 1252 var attributes = new Dictionary<string, string>(); 1253 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1254 { 1255 settings.Id = Guid.NewGuid().ToString("N"); 1256 } 1257 1258 /*base settings*/ 1259 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1260 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1261 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1262 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1263 if (settings.Required) { attributes.Add("required", "true"); } 1264 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1265 /*end*/ 1266 1267 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 1268 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 1269 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 1270 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 1271 if (settings.Max != null) { attributes.Add("max", settings.Max.ToString()); } 1272 if (settings.Min != null) { attributes.Add("min", settings.Min.ToString()); } 1273 if (settings.Step != 0) { attributes.Add("step", settings.Step.ToString()); } 1274 if (settings.Value != null && !string.IsNullOrEmpty(settings.Value.ToString())) { attributes.Add("value", settings.Value.ToString()); } 1275 attributes.Add("type", "number"); 1276 1277 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1278 1279 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 1280 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1281 { 1282 <div class="u-full-width"> 1283 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1284 @if (settings.Link != null) { 1285 <div class="u-pull--right"> 1286 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1287 @Render(settings.Link) 1288 </div> 1289 } 1290 </div> 1291 1292 } 1293 1294 @if (!string.IsNullOrEmpty(settings.HelpText)) 1295 { 1296 <small class="form__help-text">@settings.HelpText</small> 1297 } 1298 1299 @if (settings.ActionButton != null) 1300 { 1301 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1302 <div class="form__field-combi u-no-margin dw-mod"> 1303 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1304 @Render(settings.ActionButton) 1305 </div> 1306 } 1307 else 1308 { 1309 <div class="form__field-combi u-no-margin dw-mod"> 1310 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1311 </div> 1312 } 1313 1314 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1315 </div> 1316 } 1317 @using System.Reflection 1318 @using Dynamicweb.Rapido.Blocks.Components.General 1319 @using Dynamicweb.Rapido.Blocks.Components 1320 1321 1322 @* Component *@ 1323 1324 @helper RenderTextareaField(TextareaField settings) 1325 { 1326 Dictionary<string, string> attributes = new Dictionary<string, string>(); 1327 string id = settings.Id; 1328 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(id)) 1329 { 1330 id = Guid.NewGuid().ToString("N"); 1331 } 1332 1333 if (!string.IsNullOrEmpty(id)) { attributes.Add("id", id); } 1334 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1335 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 1336 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 1337 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 1338 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1339 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); } 1340 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1341 if (settings.Required) { attributes.Add("required", "true"); } 1342 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 1343 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); } 1344 if (settings.Rows != 0) { attributes.Add("rows", settings.Rows.ToString()); } 1345 attributes.Add("name", settings.Name); 1346 1347 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1348 1349 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1350 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1351 { 1352 <div class="u-full-width"> 1353 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1354 @if (settings.Link != null) { 1355 <div class="u-pull--right"> 1356 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1357 @Render(settings.Link) 1358 </div> 1359 } 1360 </div> 1361 } 1362 1363 @if (!string.IsNullOrEmpty(settings.HelpText)) 1364 { 1365 <small class="form__help-text">@settings.HelpText</small> 1366 } 1367 1368 <textarea class="u-full-width @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Value</textarea> 1369 1370 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1371 </div> 1372 } 1373 @using System.Reflection 1374 @using Dynamicweb.Rapido.Blocks.Components.General 1375 @using Dynamicweb.Rapido.Blocks.Components 1376 1377 1378 @* Component *@ 1379 1380 @helper RenderHiddenField(HiddenField settings) { 1381 var attributes = new Dictionary<string, string>(); 1382 attributes.Add("type", "hidden"); 1383 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1384 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1385 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1386 1387 <input @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)/> 1388 } 1389 @using System.Reflection 1390 @using Dynamicweb.Rapido.Blocks.Components.General 1391 @using Dynamicweb.Rapido.Blocks.Components 1392 1393 @* Component *@ 1394 1395 @helper RenderCheckboxField(CheckboxField settings) 1396 { 1397 var attributes = new Dictionary<string, string>(); 1398 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1399 { 1400 settings.Id = Guid.NewGuid().ToString("N"); 1401 } 1402 1403 /*base settings*/ 1404 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1405 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1406 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1407 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1408 if (settings.Required) { attributes.Add("required", "true"); } 1409 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1410 /*end*/ 1411 1412 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1413 1414 attributes.Add("type", "checkbox"); 1415 if (settings.Checked) { attributes.Add("checked", "true"); } 1416 settings.CssClass = "form__control " + settings.CssClass; 1417 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1418 1419 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1420 1421 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1422 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1423 @if (!string.IsNullOrEmpty(settings.Label)) 1424 { 1425 <label for="@settings.Id" class="dw-mod">@settings.Label</label> 1426 } 1427 1428 @if (settings.Link != null) { 1429 <span> 1430 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1431 @Render(settings.Link) 1432 </span> 1433 } 1434 1435 @if (!string.IsNullOrEmpty(settings.HelpText)) 1436 { 1437 <small class="form__help-text checkbox-help dw-mod">@settings.HelpText</small> 1438 } 1439 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1440 </div> 1441 } 1442 @using System.Reflection 1443 @using Dynamicweb.Rapido.Blocks.Components.General 1444 @using Dynamicweb.Rapido.Blocks.Components 1445 1446 1447 @* Component *@ 1448 1449 @helper RenderCheckboxListField(CheckboxListField settings) 1450 { 1451 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1452 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1453 { 1454 <div class="u-full-width"> 1455 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1456 @if (settings.Link != null) { 1457 <div class="u-pull--right"> 1458 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1459 @Render(settings.Link) 1460 </div> 1461 } 1462 </div> 1463 1464 } 1465 1466 <div class="u-pull--left"> 1467 @if (!string.IsNullOrEmpty(settings.HelpText)) 1468 { 1469 <small class="form__help-text">@settings.HelpText</small> 1470 } 1471 1472 @foreach (var item in settings.Options) 1473 { 1474 if (settings.Required) 1475 { 1476 item.Required = true; 1477 } 1478 if (settings.Disabled) 1479 { 1480 item.Disabled = true; 1481 } 1482 if (!string.IsNullOrEmpty(settings.Name)) 1483 { 1484 item.Name = settings.Name; 1485 } 1486 if (!string.IsNullOrEmpty(settings.CssClass)) 1487 { 1488 item.CssClass += settings.CssClass; 1489 } 1490 1491 /* value is not supported */ 1492 1493 if (!string.IsNullOrEmpty(settings.OnClick)) 1494 { 1495 item.OnClick += settings.OnClick; 1496 } 1497 if (!string.IsNullOrEmpty(settings.OnChange)) 1498 { 1499 item.OnChange += settings.OnChange; 1500 } 1501 @Render(item) 1502 } 1503 1504 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1505 </div> 1506 1507 </div> 1508 } 1509 @using Dynamicweb.Rapido.Blocks.Components.General 1510 1511 @* Component *@ 1512 1513 @helper RenderSearch(Search settings) 1514 { 1515 var searchValue = HttpContext.Current.Request.QueryString.Get(settings.SearchParameter) ?? ""; 1516 var groupValue = HttpContext.Current.Request.QueryString.Get(settings.GroupsParameter) ?? ""; 1517 1518 if (string.IsNullOrEmpty(settings.Id)) 1519 { 1520 settings.Id = Guid.NewGuid().ToString("N"); 1521 } 1522 1523 var resultAttributes = new Dictionary<string, string>(); 1524 1525 if (settings.PageSize != 0) 1526 { 1527 resultAttributes.Add("data-page-size", settings.PageSize.ToString()); 1528 } 1529 if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl)) 1530 { 1531 resultAttributes.Add("data-groups-feed-url", settings.GroupItemsFeedUrl); 1532 if (!string.IsNullOrEmpty(groupValue)) 1533 { 1534 resultAttributes.Add("data-selected-group", groupValue); 1535 } 1536 if (!string.IsNullOrEmpty(settings.GroupsParameter)) 1537 { 1538 resultAttributes.Add("data-groups-parameter", settings.GroupsParameter); 1539 } 1540 } 1541 resultAttributes.Add("data-force-init", "true"); 1542 if (settings.GoToFirstSearchResultOnEnter) 1543 { 1544 resultAttributes.Add("data-go-to-first-search-result-on-enter", settings.GoToFirstSearchResultOnEnter.ToString().ToLower()); 1545 } 1546 if (!string.IsNullOrEmpty(settings.SearchParameter)) 1547 { 1548 resultAttributes.Add("data-search-parameter", settings.SearchParameter); 1549 } 1550 resultAttributes.Add("data-search-feed-url", settings.SearchData.SearchFeedUrl); 1551 resultAttributes.Add("data-results-template-id", settings.SearchData.ResultsTemplateId); 1552 1553 if (settings.SecondSearchData != null) 1554 { 1555 resultAttributes.Add("data-second-search-feed-url", settings.SecondSearchData.SearchFeedUrl); 1556 resultAttributes.Add("data-second-results-template-id", settings.SecondSearchData.ResultsTemplateId); 1557 } 1558 if (!string.IsNullOrEmpty(settings.ResultsPageUrl)) 1559 { 1560 resultAttributes.Add("data-results-page-url", settings.ResultsPageUrl); 1561 } 1562 1563 resultAttributes = resultAttributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1564 1565 string searchFieldCss = (settings.SearchButton == null) ? "search--with-icon" : ""; 1566 1567 <div class="search @settings.CssClass @searchFieldCss js-search-data-source dw-mod" id="@settings.Id" @ComponentMethods.AddAttributes(resultAttributes)> 1568 @if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl)) 1569 { 1570 <button type="button" class="search__groups-btn dw-mod js-search-groups-btn">@Translate("All")</button> 1571 <ul class="dropdown dropdown--absolute-position dw-mod search__groups-results js-search-groups-list"></ul> 1572 } 1573 1574 <input type="text" class="search__field dw-mod js-search-field" placeholder="@settings.Placeholder" value="@searchValue"> 1575 1576 <div class="dropdown dropdown--absolute-position search__results dw-mod js-search-results @(settings.SecondSearchData != null ? "search__results--combined" : "")"> 1577 @if (settings.SecondSearchData != null) 1578 { 1579 <div class="search__column search__column--products dw-mod"> 1580 <div class="search__column-header dw-mod">@Translate("Products")</div> 1581 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul> 1582 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl)) 1583 { 1584 @Render(new Link { 1585 Title = Translate("View all"), 1586 CssClass = "js-view-all-button u-margin", 1587 Href = settings.SearchData.ResultsPageUrl 1588 }); 1589 } 1590 </div> 1591 <div class="search__column search__column--pages dw-mod"> 1592 <div class="search__column-header">@Translate("Pages")</div> 1593 <ul class="search__results-list dw-mod js-search-results-second-list" id="@(settings.Id)_SecondResultsList"></ul> 1594 @if (!string.IsNullOrEmpty(settings.SecondSearchData.ResultsPageUrl)) 1595 { 1596 @Render(new Link 1597 { 1598 Title = Translate("View all"), 1599 CssClass = "js-view-all-button u-margin", 1600 Href = settings.SecondSearchData.ResultsPageUrl 1601 }); 1602 } 1603 </div> 1604 } 1605 else 1606 { 1607 <div class="search__column search__column--only dw-mod"> 1608 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul> 1609 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl)) 1610 { 1611 @Render(new Link { 1612 Title = Translate("View all"), 1613 CssClass = "js-view-all-button u-margin", 1614 Href = settings.SearchData.ResultsPageUrl 1615 }); 1616 } 1617 </div> 1618 } 1619 </div> 1620 1621 @if (settings.SearchButton != null) 1622 { 1623 settings.SearchButton.CssClass += " search__btn js-search-btn"; 1624 if (settings.RenderDefaultSearchIcon) 1625 { 1626 settings.SearchButton.Icon = new Icon { Name = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue }; 1627 } 1628 @Render(settings.SearchButton); 1629 } 1630 </div> 1631 } 1632 @using System.Reflection 1633 @using Dynamicweb.Rapido.Blocks.Components.General 1634 @using Dynamicweb.Rapido.Blocks.Components 1635 1636 1637 @* Component *@ 1638 1639 @helper RenderSelectField(SelectField settings) 1640 { 1641 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1642 { 1643 settings.Id = Guid.NewGuid().ToString("N"); 1644 } 1645 1646 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 1647 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1648 { 1649 <div class="u-full-width"> 1650 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1651 @if (settings.Link != null) { 1652 <div class="u-pull--right"> 1653 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1654 @Render(settings.Link) 1655 </div> 1656 } 1657 </div> 1658 } 1659 1660 @if (!string.IsNullOrEmpty(settings.HelpText)) 1661 { 1662 <small class="form__help-text">@settings.HelpText</small> 1663 } 1664 1665 @if (settings.ActionButton != null) 1666 { 1667 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1668 <div class="form__field-combi u-no-margin dw-mod"> 1669 @RenderSelectBase(settings) 1670 @Render(settings.ActionButton) 1671 </div> 1672 } 1673 else 1674 { 1675 @RenderSelectBase(settings) 1676 } 1677 1678 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1679 </div> 1680 } 1681 1682 @helper RenderSelectBase(SelectField settings) 1683 { 1684 var attributes = new Dictionary<string, string>(); 1685 1686 /*base settings*/ 1687 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1688 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1689 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1690 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1691 if (settings.Required) { attributes.Add("required", "true"); } 1692 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1693 /*end*/ 1694 1695 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1696 1697 <select @ComponentMethods.AddAttributes(resultAttributes) class="u-full-width @settings.CssClass dw-mod"> 1698 @if (settings.Default != null) 1699 { 1700 @Render(settings.Default) 1701 } 1702 1703 @foreach (var item in settings.Options) 1704 { 1705 if (settings.Value != null) { 1706 item.Checked = item.Value == settings.Value; 1707 } 1708 @Render(item) 1709 } 1710 </select> 1711 } 1712 @using System.Reflection 1713 @using Dynamicweb.Rapido.Blocks.Components.General 1714 @using Dynamicweb.Rapido.Blocks.Components 1715 1716 @* Component *@ 1717 1718 @helper RenderRadioButtonField(RadioButtonField settings) 1719 { 1720 var attributes = new Dictionary<string, string>(); 1721 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1722 { 1723 settings.Id = Guid.NewGuid().ToString("N"); 1724 } 1725 1726 /*base settings*/ 1727 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1728 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1729 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1730 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1731 if (settings.Required) { attributes.Add("required", "true"); } 1732 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1733 /*end*/ 1734 1735 attributes.Add("type", "radio"); 1736 if (settings.Checked) { attributes.Add("checked", "true"); } 1737 settings.CssClass = "form__control " + settings.CssClass; 1738 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1739 1740 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 1741 1742 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1743 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1744 @if (!string.IsNullOrEmpty(settings.Label)) 1745 { 1746 <label for="@settings.Id" class="dw-mod">@settings.Label</label> 1747 } 1748 @if (!string.IsNullOrEmpty(settings.HelpText)) 1749 { 1750 <small class="form__help-text">@settings.HelpText</small> 1751 } 1752 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1753 </div> 1754 } 1755 @using System.Reflection 1756 @using Dynamicweb.Rapido.Blocks.Components.General 1757 @using Dynamicweb.Rapido.Blocks.Components 1758 1759 1760 @* Component *@ 1761 1762 @helper RenderRadioButtonListField(RadioButtonListField settings) 1763 { 1764 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 1765 1766 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1767 @if (!string.IsNullOrEmpty(settings.Label)) 1768 { 1769 <label>@settings.Label</label> 1770 } 1771 @if (!string.IsNullOrEmpty(settings.HelpText)) 1772 { 1773 <small class="form__help-text">@settings.HelpText</small> 1774 } 1775 1776 @foreach (var item in settings.Options) 1777 { 1778 if (settings.Required) 1779 { 1780 item.Required = true; 1781 } 1782 if (settings.Disabled) 1783 { 1784 item.Disabled = true; 1785 } 1786 if (!string.IsNullOrEmpty(settings.Name)) 1787 { 1788 item.Name = settings.Name; 1789 } 1790 if (settings.Value != null && settings.Value == item.Value) 1791 { 1792 item.Checked = true; 1793 } 1794 if (!string.IsNullOrEmpty(settings.OnClick)) 1795 { 1796 item.OnClick += settings.OnClick; 1797 } 1798 if (!string.IsNullOrEmpty(settings.OnChange)) 1799 { 1800 item.OnChange += settings.OnChange; 1801 } 1802 if (!string.IsNullOrEmpty(settings.CssClass)) 1803 { 1804 item.CssClass += settings.CssClass; 1805 } 1806 @Render(item) 1807 } 1808 1809 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1810 </div> 1811 } 1812 @using System.Reflection 1813 @using Dynamicweb.Rapido.Blocks.Components.General 1814 @using Dynamicweb.Rapido.Blocks.Components 1815 1816 1817 @* Component *@ 1818 1819 @helper RenderNotificationMessage(NotificationMessage settings) 1820 { 1821 if (!string.IsNullOrEmpty(settings.Message)) 1822 { 1823 var attributes = new Dictionary<string, string>(); 1824 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1825 1826 string messageTypeClass = Enum.GetName(typeof(NotificationMessageType), settings.MessageType).ToLower(); 1827 string messageLayoutClass = Enum.GetName(typeof(NotificationMessageLayout), settings.MessageLayout).ToLower(); 1828 string minHeightClass = settings.Icon != null ? "u-min-h70px" : ""; 1829 1830 <div class="notification-message-@messageTypeClass notification-message-@messageLayoutClass @messageLayoutClass @minHeightClass @settings.CssClass u-full-width dw-mod" @ComponentMethods.AddAttributes(attributes)> 1831 @if (settings.Icon != null) { 1832 settings.Icon.Label = !string.IsNullOrEmpty(settings.Icon.Label) ? settings.Message + settings.Icon.Label : settings.Message; 1833 @Render(settings.Icon) 1834 } else { 1835 @settings.Message 1836 } 1837 </div> 1838 } 1839 } 1840 @using Dynamicweb.Rapido.Blocks.Components.General 1841 1842 1843 @* Component *@ 1844 1845 @helper RenderHandlebarsRoot(HandlebarsRoot settings) { 1846 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : ""; 1847 1848 <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> 1849 @if (settings.SubBlocks != null) { 1850 @RenderBlockList(settings.SubBlocks) 1851 } 1852 </div> 1853 } 1854 @using System.Reflection 1855 @using Dynamicweb.Rapido.Blocks.Components.General 1856 @using Dynamicweb.Rapido.Blocks.Components 1857 @using System.Text.RegularExpressions 1858 1859 1860 @* Component *@ 1861 1862 @helper RenderSticker(Sticker settings) { 1863 if (!String.IsNullOrEmpty(settings.Title)) { 1864 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : ""; 1865 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : ""; 1866 1867 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>(); 1868 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) { 1869 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : ""; 1870 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : ""; 1871 optionalAttributes.Add("style", styleTag); 1872 } 1873 1874 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div> 1875 } 1876 } 1877 1878 @using System.Reflection 1879 @using Dynamicweb.Rapido.Blocks.Components.General 1880 @using Dynamicweb.Rapido.Blocks.Components 1881 1882 1883 @* Component *@ 1884 1885 @helper RenderStickersCollection(StickersCollection settings) 1886 { 1887 if (settings.Stickers.Count > 0) 1888 { 1889 string position = "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower(); 1890 1891 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1892 @foreach (Sticker sticker in settings.Stickers) 1893 { 1894 @Render(sticker) 1895 } 1896 </div> 1897 } 1898 } 1899 1900 @using Dynamicweb.Rapido.Blocks.Components.General 1901 1902 1903 @* Component *@ 1904 1905 @helper RenderForm(Form settings) { 1906 if (settings != null) 1907 { 1908 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>(); 1909 if (!string.IsNullOrEmpty(settings.Action)) { optionalAttributes.Add("action", settings.Action); }; 1910 if (!string.IsNullOrEmpty(settings.Name)) { optionalAttributes.Add("name", settings.Name); }; 1911 if (!string.IsNullOrEmpty(settings.OnSubmit)) { optionalAttributes.Add("onsubmit", settings.OnSubmit); }; 1912 var enctypes = new Dictionary<string, string> 1913 { 1914 { "multipart", "multipart/form-data" }, 1915 { "text", "text/plain" }, 1916 { "application", "application/x-www-form-urlencoded" } 1917 }; 1918 if (settings.Enctype != FormEnctype.none) { optionalAttributes.Add("enctype", enctypes[Enum.GetName(typeof(FormEnctype), settings.Enctype).ToLower()]); }; 1919 optionalAttributes.Add("method", settings.Method.ToString()); 1920 1921 if (!string.IsNullOrEmpty(settings.FormStartMarkup)) 1922 { 1923 @settings.FormStartMarkup 1924 } 1925 else 1926 { 1927 @:<form class="@settings.CssClass u-no-margin dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1928 } 1929 1930 foreach (var field in settings.GetFields()) 1931 { 1932 @Render(field) 1933 } 1934 1935 @:</form> 1936 } 1937 } 1938 @using System.Reflection 1939 @using Dynamicweb.Rapido.Blocks.Components.General 1940 @using Dynamicweb.Rapido.Blocks.Components 1941 1942 1943 @* Component *@ 1944 1945 @helper RenderText(Text settings) 1946 { 1947 @settings.Content 1948 } 1949 @using System.Reflection 1950 @using Dynamicweb.Rapido.Blocks.Components.General 1951 @using Dynamicweb.Rapido.Blocks.Components 1952 1953 1954 @* Component *@ 1955 1956 @helper RenderContentModule(ContentModule settings) { 1957 if (!string.IsNullOrEmpty(settings.Content)) 1958 { 1959 @settings.Content 1960 } 1961 } 1962 @using System.Reflection 1963 @using Dynamicweb.Rapido.Blocks.Components.General 1964 @using Dynamicweb.Rapido.Blocks.Components 1965 1966 1967 @* Component *@ 1968 1969 @helper RenderModal(Modal settings) { 1970 if (settings != null) 1971 { 1972 string modalId = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N"); 1973 1974 string onchange = !string.IsNullOrEmpty(settings.OnClose) ? "onchange=\"if(!this.checked){" + settings.OnClose + "}\"" : ""; 1975 1976 <input type="checkbox" id="@(modalId)ModalTrigger" class="modal-trigger" @onchange /> 1977 1978 <div class="modal-container"> 1979 @if (!settings.DisableDarkOverlay) 1980 { 1981 <label for="@(modalId)ModalTrigger" id="@(modalId)ModalOverlay" class="modal-overlay"></label> 1982 } 1983 <div class="modal modal--@settings.Width.ToString().ToLower() modal-height--@settings.Height.ToString().ToLower()" id="@(modalId)Modal"> 1984 @if (settings.Heading != null) 1985 { 1986 if (!string.IsNullOrEmpty(settings.Heading.Title)) 1987 { 1988 <div class="modal__header"> 1989 @Render(settings.Heading) 1990 </div> 1991 } 1992 } 1993 <div class="modal__body @(settings.Width.ToString().ToLower() == "full" ? "modal__body--full" : "")"> 1994 @if (!string.IsNullOrEmpty(settings.BodyText)) 1995 { 1996 @settings.BodyText 1997 } 1998 @if (settings.BodyTemplate != null) 1999 { 2000 @settings.BodyTemplate 2001 } 2002 @{ 2003 var actions = settings.GetActions(); 2004 } 2005 </div> 2006 @if (actions.Length > 0) 2007 { 2008 <div class="modal__footer"> 2009 @foreach (var action in actions) 2010 { 2011 if (Pageview.Device.ToString() != "Mobile") { 2012 action.CssClass += " u-no-margin"; 2013 } else { 2014 action.CssClass += " u-full-width u-margin-bottom"; 2015 } 2016 2017 @Render(action) 2018 } 2019 </div> 2020 } 2021 <label class="modal__close-btn" for="@(modalId)ModalTrigger"></label> 2022 </div> 2023 </div> 2024 } 2025 } 2026 @using Dynamicweb.Rapido.Blocks.Components.General 2027 2028 @* Component *@ 2029 2030 @helper RenderMediaListItem(MediaListItem settings) 2031 { 2032 <div class="media-list-item @settings.CssClass dw-mod" @(!string.IsNullOrEmpty(settings.Id) ? "id=\"" + settings.Id + "\"" : "")> 2033 @if (!string.IsNullOrEmpty(settings.Label)) 2034 { 2035 if (!string.IsNullOrEmpty(settings.Link)) 2036 { 2037 @Render(new Link 2038 { 2039 Href = settings.Link, 2040 CssClass = "media-list-item__sticker dw-mod", 2041 ButtonLayout = ButtonLayout.None, 2042 Title = settings.Label, 2043 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : "" 2044 }) 2045 } 2046 else if (!string.IsNullOrEmpty(settings.OnClick)) 2047 { 2048 <span class="media-list-item__sticker dw-mod" onclick="@(settings.OnClick)"> 2049 <span class="u-uppercase">@settings.Label</span> 2050 </span> 2051 } 2052 else 2053 { 2054 <span class="media-list-item__sticker media-list-item__sticker--no-link dw-mod"> 2055 <span class="u-uppercase">@settings.Label</span> 2056 </span> 2057 } 2058 } 2059 <div class="media-list-item__wrap"> 2060 <div class="media-list-item__info dw-mod"> 2061 <div class="media-list-item__header dw-mod"> 2062 @if (!string.IsNullOrEmpty(settings.Title)) 2063 { 2064 if (!string.IsNullOrEmpty(settings.Link)) 2065 { 2066 @Render(new Link 2067 { 2068 Href = settings.Link, 2069 CssClass = "media-list-item__name dw-mod", 2070 ButtonLayout = ButtonLayout.None, 2071 Title = settings.Title, 2072 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : "" 2073 }) 2074 } 2075 else if (!string.IsNullOrEmpty(settings.OnClick)) 2076 { 2077 <span class="media-list-item__name dw-mod" onclick="@(settings.OnClick)">@settings.Title</span> 2078 } 2079 else 2080 { 2081 <span class="media-list-item__name media-list-item__name--no-link dw-mod">@settings.Title</span> 2082 } 2083 } 2084 2085 @if (!string.IsNullOrEmpty(settings.Status)) 2086 { 2087 <div class="media-list-item__state dw-mod">@settings.Status</div> 2088 } 2089 </div> 2090 @{ 2091 settings.InfoTable.CssClass += " media-list-item__parameters-table"; 2092 } 2093 2094 @Render(settings.InfoTable) 2095 </div> 2096 <div class="media-list-item__actions dw-mod"> 2097 <div class="media-list-item__actions-list dw-mod"> 2098 @{ 2099 var actions = settings.GetActions(); 2100 2101 foreach (ButtonBase action in actions) 2102 { 2103 action.ButtonLayout = ButtonLayout.None; 2104 action.CssClass += " media-list-item__action link"; 2105 2106 @Render(action) 2107 } 2108 } 2109 </div> 2110 2111 @if (settings.SelectButton != null && !string.IsNullOrEmpty(settings.SelectButton.Title)) 2112 { 2113 settings.SelectButton.CssClass += " u-no-margin"; 2114 2115 <div class="media-list-item__action-button"> 2116 @Render(settings.SelectButton) 2117 </div> 2118 } 2119 </div> 2120 </div> 2121 </div> 2122 } 2123 @using Dynamicweb.Rapido.Blocks.Components.General 2124 @using Dynamicweb.Rapido.Blocks.Components 2125 2126 @helper RenderTable(Table settings) 2127 { 2128 Dictionary<string, string> attributes = new Dictionary<string, string>(); 2129 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 2130 2131 var enumToClasses = new Dictionary<TableDesign, string> 2132 { 2133 { TableDesign.Clean, "table--clean" }, 2134 { TableDesign.Bordered, "table--bordered" }, 2135 { TableDesign.Striped, "table--striped" }, 2136 { TableDesign.Hover, "table--hover" }, 2137 { TableDesign.Compact, "table--compact" }, 2138 { TableDesign.Condensed, "table--condensed" }, 2139 { TableDesign.NoTopBorder, "table--no-top-border" } 2140 }; 2141 string tableDesignClass = ""; 2142 if (settings.Design != TableDesign.None) 2143 { 2144 tableDesignClass = enumToClasses[settings.Design]; 2145 } 2146 2147 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableDesign.None) { attributes.Add("class", "table " + tableDesignClass + " " + settings.CssClass + " dw-mod"); } 2148 2149 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 2150 2151 <table @ComponentMethods.AddAttributes(resultAttributes)> 2152 @if (settings.Header != null) 2153 { 2154 <thead> 2155 @Render(settings.Header) 2156 </thead> 2157 } 2158 <tbody> 2159 @foreach (var row in settings.Rows) 2160 { 2161 @Render(row) 2162 } 2163 </tbody> 2164 @if (settings.Footer != null) 2165 { 2166 <tfoot> 2167 @Render(settings.Footer) 2168 </tfoot> 2169 } 2170 </table> 2171 } 2172 @using Dynamicweb.Rapido.Blocks.Components.General 2173 @using Dynamicweb.Rapido.Blocks.Components 2174 2175 @helper RenderTableRow(TableRow settings) 2176 { 2177 Dictionary<string, string> attributes = new Dictionary<string, string>(); 2178 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 2179 2180 var enumToClasses = new Dictionary<TableRowDesign, string> 2181 { 2182 { TableRowDesign.NoBorder, "table__row--no-border" }, 2183 { TableRowDesign.Border, "table__row--border" }, 2184 { TableRowDesign.TopBorder, "table__row--top-line" }, 2185 { TableRowDesign.BottomBorder, "table__row--bottom-line" }, 2186 { TableRowDesign.Solid, "table__row--solid" } 2187 }; 2188 2189 string tableRowDesignClass = ""; 2190 if (settings.Design != TableRowDesign.None) 2191 { 2192 tableRowDesignClass = enumToClasses[settings.Design]; 2193 } 2194 2195 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableRowDesign.None) { attributes.Add("class", "table__row " + tableRowDesignClass + " " + settings.CssClass + " dw-mod"); } 2196 2197 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 2198 2199 <tr @ComponentMethods.AddAttributes(resultAttributes)> 2200 @foreach (var cell in settings.Cells) 2201 { 2202 if (settings.IsHeaderRow) 2203 { 2204 cell.IsHeader = true; 2205 } 2206 @Render(cell) 2207 } 2208 </tr> 2209 } 2210 @using Dynamicweb.Rapido.Blocks.Components.General 2211 @using Dynamicweb.Rapido.Blocks.Components 2212 @using Dynamicweb.Core 2213 2214 @helper RenderTableCell(TableCell settings) 2215 { 2216 Dictionary<string, string> attributes = new Dictionary<string, string>(); 2217 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 2218 if (settings.Colspan != 0) { attributes.Add("colspan", Converter.ToString(settings.Colspan)); } 2219 if (settings.Rowspan != 0) { attributes.Add("rowspan", Converter.ToString(settings.Rowspan)); } 2220 if (!string.IsNullOrEmpty(settings.CssClass)) { attributes.Add("class", settings.CssClass + " dw-mod"); } 2221 2222 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 2223 2224 string tagName = settings.IsHeader ? "th" : "td"; 2225 2226 @("<" + tagName + " " + ComponentMethods.AddAttributes(resultAttributes) + ">") 2227 @settings.Content 2228 @("</" + tagName + ">"); 2229 } 2230 @using System.Linq 2231 @using Dynamicweb.Rapido.Blocks.Components.General 2232 2233 @* Component *@ 2234 2235 @helper RenderPagination(Dynamicweb.Rapido.Blocks.Components.General.Pagination settings) 2236 { 2237 var pageNumberQueryStringName = Dynamicweb.Rapido.Services.Pagination.GetPageNumberQueryStringName(settings); // Get the proper 'page number' query string parameter 2238 var queryParameters = Dynamicweb.Rapido.Services.Url.GetQueryParameters(pageNumberQueryStringName); // Get the NameValueCollection from the querystring 2239 2240 if (settings.NumberOfPages > 1) 2241 { 2242 string url = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + "/Default.aspx"; 2243 string ariaLabel = !string.IsNullOrWhiteSpace(settings.AriaLabel) ? settings.AriaLabel : Translate("Page navigation"); 2244 Dictionary<string, int> startAndEndPageNumber = Dynamicweb.Rapido.Services.Pagination.GetStartAndEndPageNumber(settings); 2245 2246 <div class="pager u-margin-top dw-mod @settings.CssClass" aria-label="@ariaLabel"> 2247 @if (settings.ShowPagingInfo) 2248 { 2249 <div class="pager__info dw-mod"> 2250 @Translate("Page") @settings.CurrentPageNumber @Translate("of") @settings.NumberOfPages 2251 </div> 2252 } 2253 <ul class="pager__list dw-mod"> 2254 @if (!string.IsNullOrWhiteSpace(settings.FirstPageUrl) && settings.ShowFirstAndLastControls) 2255 { 2256 @Render(new PaginationItem { Link = settings.FirstPageUrl, Icon = settings.FirstIcon }) 2257 } 2258 @if (!string.IsNullOrWhiteSpace(settings.PreviousPageUrl) && settings.ShowNextAndPrevControls) 2259 { 2260 @Render(new PaginationItem { Link = settings.PreviousPageUrl, Icon = settings.PrevIcon }) 2261 } 2262 @if (settings.GetPages().Any()) 2263 { 2264 foreach (var page in settings.GetPages()) 2265 { 2266 @Render(page) 2267 } 2268 } 2269 else 2270 { 2271 for (var page = startAndEndPageNumber["StartPage"]; page <= startAndEndPageNumber["EndPage"]; page++) 2272 { 2273 queryParameters = Dynamicweb.Rapido.Services.Url.UpdateQueryStringParameter(queryParameters, pageNumberQueryStringName, page.ToString()); 2274 @Render(new PaginationItem { Label = page.ToString(), Link = Dynamicweb.Rapido.Services.Url.BuildUri(url, queryParameters).PathAndQuery, IsActive = (settings.CurrentPageNumber == page) }); 2275 } 2276 } 2277 @if (!string.IsNullOrWhiteSpace(settings.NextPageUrl) && settings.ShowNextAndPrevControls) 2278 { 2279 @Render(new PaginationItem { Link = settings.NextPageUrl, Icon = settings.NextIcon }) 2280 } 2281 @if (!string.IsNullOrWhiteSpace(settings.LastPageUrl) && settings.ShowFirstAndLastControls) 2282 { 2283 @Render(new PaginationItem { Link = settings.LastPageUrl, Icon = settings.LastIcon }) 2284 } 2285 </ul> 2286 </div> 2287 } 2288 } 2289 2290 @helper RenderPaginationItem(PaginationItem settings) 2291 { 2292 if (settings.Icon == null) 2293 { 2294 settings.Icon = new Icon(); 2295 } 2296 2297 settings.Icon.Label = settings.Label; 2298 <li class="pager__btn dw-mod"> 2299 @if (settings.IsActive) 2300 { 2301 <span class="pager__num pager__num--current dw-mod"> 2302 @Render(settings.Icon) 2303 </span> 2304 } 2305 else 2306 { 2307 <a href="@settings.Link" class="pager__num dw-mod"> 2308 @Render(settings.Icon) 2309 </a> 2310 } 2311 </li> 2312 } 2313 2314 2315 @using Dynamicweb.Rapido.Blocks.Components.General 2316 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce 2317 2318 2319 2320 2321 2322 @functions { 2323 public string GenerateRgba(string color, string opacity) 2324 { 2325 color = color.Replace("#", ""); 2326 if (color.Length == 6) 2327 { 2328 return "rgba(" + Convert.ToInt32(color.Substring(0, 2), 16) + ", " + Convert.ToInt32(color.Substring(2, 2), 16) + ", " + Convert.ToInt32(color.Substring(4, 2), 16) + ", " + opacity + ");"; 2329 } 2330 else 2331 { 2332 return Convert.ToInt16(color).ToString(); 2333 } 2334 } 2335 } 2336 2337 @{ 2338 string link = !string.IsNullOrEmpty(Model.Item.GetString("Link")) ? Model.Item.GetString("Link") : ""; 2339 string linkTarget = link.Contains("http") || link.Contains(".pdf") ? "_blank" : "_self"; 2340 } 2341 2342 @if (!string.IsNullOrEmpty(link)) 2343 { 2344 @*<a href="@link" target="@linkTarget" class="u-overlay">*@ 2345 <div class="paragraph-image-link-wrapper"> 2346 <a href="@link" target="@linkTarget"> 2347 @RenderTheContent() 2348 </a> 2349 </div> 2350 } 2351 else 2352 { 2353 @RenderTheContent() 2354 } 2355 2356 2357 @helper RenderTheContent() 2358 { 2359 string innerPadding = Model.Item.GetList("Padding") != null ? " padding-size-" + Model.Item.GetList("Padding").SelectedValue.ToLower() : ""; 2360 innerPadding += Model.Item.GetList("PaddingPosition") != null ? " padding-position-" + Model.Item.GetList("PaddingPosition").SelectedValue.ToLower() : ""; 2361 2362 if (!string.IsNullOrEmpty(Model.Item.GetString("Image"))) 2363 { 2364 int width = Model.Item.GetString("ImageWidth") != null ? Model.Item.GetInt32("ImageWidth") : 100; 2365 string styleSetting = Model.Item.GetString("ImageStyle") != null ? Model.Item.GetList("ImageStyle").SelectedValue : ""; 2366 ImageStyle style = ImageStyle.None; 2367 style = styleSetting == "ball" ? style = ImageStyle.Ball : style; 2368 style = styleSetting == "triangle" ? style = ImageStyle.Triangle : style; 2369 var file = Model.Item.GetFile("Image"); 2370 2371 Image image = new Image 2372 { 2373 Path = file, 2374 Style = style, 2375 CssClass = "background-image__cover", 2376 ImageDefault = new ImageSettings 2377 { 2378 Crop = 5, 2379 Width = width 2380 } 2381 }; 2382 2383 if (styleSetting == "square") 2384 { 2385 image.ImageDefault.Crop = 0; 2386 image.ImageDefault.Height = image.ImageDefault.Width; 2387 } 2388 2389 string imageAltText = ""; 2390 if (!string.IsNullOrWhiteSpace(Model.Item.GetString("ImageAltText"))) 2391 { 2392 imageAltText = Model.Item.GetString("ImageAltText"); 2393 } 2394 2395 string imageTitleText = ""; 2396 if (!string.IsNullOrWhiteSpace(Model.Item.GetString("ImageTitleText"))) 2397 { 2398 imageTitleText = Model.Item.GetString("ImageTitleText"); 2399 } 2400 2401 <div class="paragraph-image"> 2402 @RenderWithAltAndTitle(image, imageAltText, imageTitleText) 2403 </div> 2404 } 2405 2406 <div class="u-full-width u-padding-top dw-mod"> 2407 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Text"))) 2408 { 2409 <div class="u-margin-bottom--lg"> 2410 @if (!Model.Item.GetBoolean("HideTitle")) 2411 { 2412 @Render(new Heading { Title = Model.Item.GetString("Title"), Level = 2, CssClass = "u-no-margin" }) 2413 } 2414 @Render(new Text { Content = Model.Item.GetString("Text") }) 2415 </div> 2416 } 2417 </div> 2418 2419 if (!string.IsNullOrEmpty(Model.Item.GetItem("ButtonOne").GetString("Title"))) 2420 { 2421 <div class="buttons-collection u-block dw-mod"> 2422 @ParagraphButton(Model.Item.GetItem("ButtonOne")) 2423 </div> 2424 } 2425 } 2426 2427 2428 @helper ParagraphButton(ItemViewModel item) 2429 { 2430 if (item != null) 2431 { 2432 if (!string.IsNullOrEmpty(item.GetString("Title"))) 2433 { 2434 Button button = new Button 2435 { 2436 Title = item.GetString("Title"), 2437 Href = item.GetString("Link"), 2438 ButtonLayout = (ButtonLayout)System.Enum.Parse(typeof(ButtonLayout), char.ToUpper(item.GetList("Layout").SelectedValue[0]) + item.GetList("Layout").SelectedValue.Substring(1)) 2439 }; 2440 2441 if (!string.IsNullOrEmpty(item.GetString("Icon"))) 2442 { 2443 button.Icon = new Icon 2444 { 2445 CssClass = item.GetString("Icon") 2446 }; 2447 } 2448 2449 @Render(button) 2450 } 2451 } 2452 } 2453 2454 2455 2456 2457 2458

Bliv inspireret
til din egen
indretning


I vores kataloger kan du se vores produkter i alle detaljer. Her kan du også finde af inspiration til at skabe din egen personlige stil i dit hjem.