Vi fejrer Mistrals 30 års jubilæum og 
Findahl by Hammels 75 års jubilæeum med eksklusive 
og bæredygtige designs i limited edition

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_878211fff5564c4eb582c65eeb9daf98.<>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_878211fff5564c4eb582c65eeb9daf98.<>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_878211fff5564c4eb582c65eeb9daf98.<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_878211fff5564c4eb582c65eeb9daf98.Execute() in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\StandardParagraphThree.cshtml:line 2353
   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

75-års jubilæum.

Du har netop nu muligheden for at bliver ejer af den unikke limited edition Tradition stol i sort eg med eksklusivt cognacfarvet kernelæder. En smukt jubilæumsmodel dekoreret med messing emblem. 


Kontakt en af vores forhandlere for at bestille denne smukke kvalitetsstol. 

 

Error executing template "Designs/Rapido/ContentPage/Paragraph/Carousel.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_7e3c70c0144c4605b04a55c269ef764e.<>c__DisplayClass48_0.<RenderTheSlide>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\Carousel.cshtml:line 2417
   at CompiledRazorTemplates.Dynamic.RazorEngine_7e3c70c0144c4605b04a55c269ef764e.Execute() in D:\dynamicweb.net\Solutions\Buchs\HammelFurniture.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\ContentPage\Paragraph\Carousel.cshtml:line 2394
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

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

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.