Error executing template "/Designs/Rapido/ContentPage/Paragraph/NEVOTEX-Carousel.cshtml"
System.InvalidOperationException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Dynamicweb.Data.DatabaseConnectionProvider.CreateConnection(Boolean open)
at Dynamicweb.Data.Database.CreateConnection()
at Dynamicweb.Data.Database.CreateDataReader(CommandBuilder commandBuilder, IDbConnection connection, IDbTransaction transaction, Int32 commandTimeout)
at Dynamicweb.Content.Items.Queries.Repository.SelectInternal(IEnumerable`1 ids, Query query)
at Dynamicweb.Content.Items.Queries.Repository.SelectByIds(IEnumerable`1 ids, Query query, Boolean checkPermissions, Boolean includeInheritedItems)
at Dynamicweb.Content.Items.Queries.Repository.SelectByIds(IEnumerable`1 ids, Query query, Boolean checkPermissions)
at Dynamicweb.Content.Items.Queries.Repository.SelectById(String id, Query query)
at Dynamicweb.Content.Items.Queries.StorageManager.GetById(String systemName, String id)
at Dynamicweb.Content.Items.Queries.StorageManager.GetById(String systemName, String id, Boolean draft, DateTime previewDate)
at Dynamicweb.Content.Items.Editors.ItemTypeEditor.GetItem(String itemId)
at Dynamicweb.Content.Items.Editors.ItemTypeEditor.GetViewModelValue(Object value)
at System.Lazy`1.CreateValue()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Lazy`1.get_Value()
at Dynamicweb.Frontend.ItemFieldViewModel.GetValue[T]()
at Dynamicweb.Frontend.ItemViewModel.GetItem(String systemName)
at CompiledRazorTemplates.Dynamic.RazorEngine_21a9300a60784a50ab39a0ba938a1bdc.Execute() in F:\sites\NevotexProd\WEB\Application\Files\Templates\Designs\Rapido\ContentPage\Paragraph\NEVOTEX-Carousel.cshtml:line 2138
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Frontend 3 @using Dynamicweb.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 } 105106 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 } 118119 if (debug) { 120 <!-- Block END: @item.Id --> 121 } 122 } 123 } 124125 @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; 128129 if (item.Template != null) 130 { 131 @BlocksPage.RenderTemplate(item.Template) 132 } 133134 if (item.Component != null) 135 { 136 string customSufix = "Custom"; 137 string methodName = item.Component.HelperName; 138139 ComponentBase[] methodParameters = new ComponentBase[1]; 140 methodParameters[0] = item.Component; 141 Type methodType = this.GetType(); 142143 MethodInfo customMethod = methodType.GetMethod(methodName + customSufix); 144 MethodInfo generalMethod = methodType.GetMethod(methodName); 145146 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 } 159160 if (item.BlocksList.Count > 0 && !item.SkipRenderBlocksList) 161 { 162 @RenderBlockList(item.BlocksList) 163 } 164 } 165166 @*--- END: Base block renderers ---*@ 167168 @using Dynamicweb.Rapido.Blocks.Components 169 @using Dynamicweb.Rapido.Blocks.Components.General 170 @using Dynamicweb.Rapido.Blocks 171 @using System.IO 172173 @* Required *@ 174 @using Dynamicweb.Rapido.Blocks.Components 175 @using Dynamicweb.Rapido.Blocks.Components.General 176 @using Dynamicweb.Rapido.Blocks 177178179 @helper Render(ComponentBase component) 180 { 181 if (component != null) 182 { 183 @component.Render(this) 184 } 185 } 186187 @* Components *@ 188 @using System.Reflection 189 @using Dynamicweb.Rapido.Blocks.Components.General 190191192 @* Component *@ 193194 @helper RenderIcon(Icon settings) 195 { 196 if (settings != null) 197 { 198 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : ""; 199200 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 228229 @* Component *@ 230231 @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 } 241242 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 } 248249 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 } 261262 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 } 275276 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 } 286287 if (settings.Icon == null) 288 { 289 settings.Icon = new Icon(); 290 } 291292 settings.Icon.CssClass += Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower() != "linkclean" ? " u-flex--align-center" : ""; 293 settings.Icon.Label = settings.Title; 294295 attributes.Add("type", Enum.GetName(typeof(ButtonType), settings.ButtonType).ToLower()); 296297 <button class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</button> 298 } 299 } 300301 @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 }; 313314 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 }); 316317 @Render(confirmDialog) 318 } 319 @using Dynamicweb.Rapido.Blocks.Components.General 320 @using Dynamicweb.Rapido.Blocks.Components 321 @using Dynamicweb.Core 322323 @helper RenderDashboard(Dashboard settings) 324 { 325 var widgets = settings.GetWidgets(); 326327 if (!string.IsNullOrEmpty(settings.WidgetsBaseBackgroundColor)) 328 { 329 //set bg color for them 330331 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); 335336 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++; 343344 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 } 348349 <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 360361 @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 } 370371 <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 385386 @helper RenderDashboardWidgetCounter(DashboardWidgetCounter settings) 387 { 388 var backgroundStyles = ""; 389 if (!string.IsNullOrEmpty(settings.BackgroundColor)) 390 { 391 backgroundStyles = "style='background-color:" + settings.BackgroundColor + "'"; 392 } 393394 <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 410411 @* Component *@ 412413 @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 } 424425 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 } 433434 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); 438439 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 } 449450 if (settings.Icon == null) 451 { 452 settings.Icon = new Icon(); 453 } 454 settings.Icon.Label = settings.Title; 455456 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 } 472473 <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 480481482 @* Component *@ 483484 @helper RenderRating(Rating settings) 485 { 486 if (settings.Score > 0) 487 { 488 int rating = settings.Score; 489 string iconType = "fa-star"; 490491 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 } 505506 <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 517518519 @* Component *@ 520521 @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); } 528529 <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 534535536 @* Component *@ 537538 @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 552553554 @* Component *@ 555556 @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; 563564 @RenderNavigation(settings) 565 } 566 @using Dynamicweb.Rapido.Blocks.Components.General 567 @using Dynamicweb.Rapido.Blocks.Components 568569570 @* Component *@ 571572 @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; 578579 <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 586587 @* Component *@ 588589 @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"; 595596 @("<" + 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 616617618 @* Component *@ 619620 @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); } 626627 if (settings.Caption != null) 628 { 629 @:<div> 630 } 631632 var primaryFilterClass = settings.FilterPrimary.ToString().ToLower(); 633 var secondaryFilterClass = settings.FilterSecondary.ToString().ToLower(); 634635 <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> 649650 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 } 672673 if (settings.Caption != null) 674 { 675 <span class="image-caption dw-mod">@settings.Caption</span> 676 @:</div> 677 } 678 } 679 } 680681 @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?"; 688689 string imageStyle = ""; 690691 switch (settings.Style) 692 { 693 case ImageStyle.Ball: 694 imageStyle = "grid__cell-img--ball"; 695 break; 696697 case ImageStyle.Triangle: 698 imageStyle = "grid__cell-img--triangle"; 699 break; 700 } 701702 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; 705706 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 } 719720 string defaultImage = imageEngine; 721 string imageSmall = ""; 722 string imageMedium = ""; 723724 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); 733734 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 } 743744 defaultImage += "&AlternativeImage=" + alternativeImage; 745 } 746747 if (settings.ImageSmall != null) 748 { 749 imageSmall = "data-src-small=\"" + imageEngine; 750 imageSmall += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageSmall); 751752 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 } 761762 imageSmall += "&alternativeImage=" + alternativeImage; 763764 imageSmall += "\""; 765 } 766767 if (settings.ImageMedium != null) 768 { 769 imageMedium = "data-src-medium=\"" + imageEngine; 770 imageMedium += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageMedium); 771772 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 } 781782 imageMedium += "&alternativeImage=" + alternativeImage; 783784 imageMedium += "\""; 785 } 786 } 787788 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 } 795796 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 System.Reflection 807 @using Dynamicweb.Rapido.Blocks.Components.General 808 @using Dynamicweb.Rapido.Blocks.Components 809810 @* Component *@ 811812 @helper RenderFileField(FileField settings) 813 { 814 var attributes = new Dictionary<string, string>(); 815 if (string.IsNullOrEmpty(settings.Id)) 816 { 817 settings.Id = Guid.NewGuid().ToString("N"); 818 } 819820 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 821 if (settings.Disabled) { attributes.Add("disabled", "true"); } 822 if (settings.Required) { attributes.Add("required", "true"); } 823 if (settings.Multiple) { attributes.Add("multiple", "true"); } 824 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 825 if (string.IsNullOrEmpty(settings.ChooseFileText)) 826 { 827 settings.ChooseFileText = Translate("Choose file"); 828 } 829 if (string.IsNullOrEmpty(settings.NoFilesChosenText)) 830 { 831 settings.NoFilesChosenText = Translate("No files chosen..."); 832 } 833 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 834835 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 836837 string setValueToFakeInput = "FileUpload.setValueToFakeInput(this)"; 838 attributes.Add("onchange", setValueToFakeInput + (!string.IsNullOrEmpty(settings.OnChange) ? settings.OnChange : "")); 839840 attributes.Add("type", "file"); 841 if (settings.Value != null) { attributes.Add("value", settings.Value); } 842 settings.CssClass = "u-full-width " + settings.CssClass; 843844 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 845846 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 847 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 848 { 849 <div class="u-full-width"> 850 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 851 @if (settings.Link != null) { 852 <div class="u-pull--right"> 853 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 854 @Render(settings.Link) 855 </div> 856 } 857 </div> 858859 } 860861 @if (!string.IsNullOrEmpty(settings.HelpText)) 862 { 863 <small class="form__help-text">@settings.HelpText</small> 864 } 865866 <div class="form__field-combi file-input u-no-margin dw-mod"> 867 <input @ComponentMethods.AddAttributes(resultAttributes) class="file-input__real-input" data-no-files-text="@settings.NoFilesChosenText" data-many-files-text="@Translate("files")" /> 868 <label for="@settings.Id" class="file-input__btn btn--secondary btn dw-mod">@settings.ChooseFileText</label> 869 <label for="@settings.Id" class="@settings.CssClass file-input__fake-input js-fake-input dw-mod">@settings.NoFilesChosenText</label> 870 @if (settings.UploadButton != null) 871 { 872 settings.UploadButton.CssClass += " btn--condensed u-no-margin"; 873 @Render(settings.UploadButton) 874 } 875 </div> 876 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 877 </div> 878 } 879 @using System.Reflection 880 @using Dynamicweb.Rapido.Blocks.Components.General 881 @using Dynamicweb.Rapido.Blocks.Components 882 @using Dynamicweb.Core 883 @using System.Linq 884885 @* Component *@ 886887 @helper RenderDateTimeField(DateTimeField settings) 888 { 889 if (string.IsNullOrEmpty(settings.Id)) 890 { 891 settings.Id = Guid.NewGuid().ToString("N"); 892 } 893894 var textField = new TextField { 895 Name = settings.Name, 896 Id = settings.Id, 897 Label = settings.Label, 898 HelpText = settings.HelpText, 899 Value = settings.Value, 900 Disabled = settings.Disabled, 901 Required = settings.Required, 902 ErrorMessage = settings.ErrorMessage, 903 CssClass = settings.CssClass, 904 WrapperCssClass = settings.WrapperCssClass, 905 OnChange = settings.OnChange, 906 OnClick = settings.OnClick, 907 Link = settings.Link, 908 ExtraAttributes = settings.ExtraAttributes, 909 // 910 Placeholder = settings.Placeholder 911 }; 912913 @Render(textField) 914915 List<string> jsAttributes = new List<string>(); 916917 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'"); 918919 if (!string.IsNullOrEmpty(settings.DateFormat)) 920 { 921 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'"); 922 } 923 if (!string.IsNullOrEmpty(settings.MinDate)) 924 { 925 jsAttributes.Add("minDate: '" + settings.MinDate + "'"); 926 } 927 if (!string.IsNullOrEmpty(settings.MaxDate)) 928 { 929 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'"); 930 } 931 if (settings.IsInline) 932 { 933 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower()); 934 } 935 if (settings.EnableTime) 936 { 937 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower()); 938 } 939 if (settings.EnableWeekNumbers) 940 { 941 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower()); 942 } 943944 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value)); 945946 <script> 947 document.addEventListener("DOMContentLoaded", function () { 948 flatpickr("#@textField.Id", { 949 @string.Join(",", jsAttributes) 950 }); 951 }); 952 </script> 953 } 954 @using System.Reflection 955 @using Dynamicweb.Rapido.Blocks.Components.General 956 @using Dynamicweb.Rapido.Blocks.Components 957958 @* Component *@ 959960 @helper RenderTextField(TextField settings) 961 { 962 var attributes = new Dictionary<string, string>(); 963 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 964 { 965 settings.Id = Guid.NewGuid().ToString("N"); 966 } 967968 /*base settings*/ 969 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 970 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 971 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 972 if (settings.Disabled) { attributes.Add("disabled", "true"); } 973 if (settings.Required) { attributes.Add("required", "true"); } 974 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 975 /*end*/ 976977 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 978 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 979 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 980 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 981 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); } 982 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); } 983 attributes.Add("type", Enum.GetName(typeof(TextFieldType), settings.Type).ToLower()); 984 if (settings.Type == TextFieldType.Password) { attributes.Add("autocomplete", "off"); }; 985 if (settings.Value != null) { attributes.Add("value", settings.Value); } 986987 settings.CssClass = "u-full-width " + settings.CssClass; 988989 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 990991 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 992993 string noMargin = "u-no-margin"; 994 if (!settings.ReadOnly) { 995 noMargin = ""; 996 } 997998 <div class="form__field-group u-full-width @noMargin @settings.WrapperCssClass dw-mod"> 999 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1000 { 1001 <div class="u-full-width"> 1002 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1003 @if (settings.Link != null) { 1004 settings.Link.ButtonLayout = ButtonLayout.LinkClean; 10051006 <div class="u-pull--right"> 1007 @Render(settings.Link) 1008 </div> 1009 } 1010 </div> 10111012 } 10131014 @if (!string.IsNullOrEmpty(settings.HelpText)) 1015 { 1016 <small class="form__help-text">@settings.HelpText</small> 1017 } 10181019 @if (settings.ActionButton != null) 1020 { 1021 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1022 <div class="form__field-combi u-no-margin dw-mod"> 1023 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1024 @Render(settings.ActionButton) 1025 </div> 1026 } 1027 else 1028 { 1029 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1030 } 10311032 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1033 </div> 1034 } 1035 @using System.Reflection 1036 @using Dynamicweb.Rapido.Blocks.Components.General 1037 @using Dynamicweb.Rapido.Blocks.Components 10381039 @* Component *@ 10401041 @helper RenderNumberField(NumberField settings) 1042 { 1043 var attributes = new Dictionary<string, string>(); 1044 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1045 { 1046 settings.Id = Guid.NewGuid().ToString("N"); 1047 } 10481049 /*base settings*/ 1050 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1051 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1052 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1053 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1054 if (settings.Required) { attributes.Add("required", "true"); } 1055 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1056 /*end*/ 10571058 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 1059 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 1060 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 1061 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 1062 if (settings.Max != null) { attributes.Add("max", settings.Max.ToString()); } 1063 if (settings.Min != null) { attributes.Add("min", settings.Min.ToString()); } 1064 //if (settings.Step != 0) { attributes.Add("step", settings.Step.ToString()); } 1065 if (settings.Step != 0) { attributes.Add("step", "0.1"); } 1066 if (settings.Value != null && !string.IsNullOrEmpty(settings.Value.ToString())) { attributes.Add("value", settings.Value.ToString()); } 1067 attributes.Add("type", "number"); 10681069 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 10701071 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 1072 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1073 { 1074 <div class="u-full-width"> 1075 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1076 @if (settings.Link != null) { 1077 <div class="u-pull--right"> 1078 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1079 @Render(settings.Link) 1080 </div> 1081 } 1082 </div> 10831084 } 10851086 @if (!string.IsNullOrEmpty(settings.HelpText)) 1087 { 1088 <small class="form__help-text">@settings.HelpText</small> 1089 } 10901091 @if (settings.ActionButton != null) 1092 { 1093 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1094 <div class="form__field-combi u-no-margin dw-mod"> 1095 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1096 @Render(settings.ActionButton) 1097 </div> 1098 } 1099 else 1100 { 1101 <div class="form__field-combi u-no-margin dw-mod"> 1102 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1103 </div> 1104 } 11051106 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1107 </div> 1108 } 1109 @using System.Reflection 1110 @using Dynamicweb.Rapido.Blocks.Components.General 1111 @using Dynamicweb.Rapido.Blocks.Components 111211131114 @* Component *@ 11151116 @helper RenderTextareaField(TextareaField settings) 1117 { 1118 Dictionary<string, string> attributes = new Dictionary<string, string>(); 1119 string id = settings.Id; 1120 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(id)) 1121 { 1122 id = Guid.NewGuid().ToString("N"); 1123 } 11241125 if (!string.IsNullOrEmpty(id)) { attributes.Add("id", id); } 1126 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1127 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); } 1128 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); } 1129 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); } 1130 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1131 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); } 1132 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1133 if (settings.Required) { attributes.Add("required", "true"); } 1134 if (settings.ReadOnly) { attributes.Add("readonly", "true"); } 1135 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); } 1136 if (settings.Rows != 0) { attributes.Add("rows", settings.Rows.ToString()); } 1137 attributes.Add("name", settings.Name); 11381139 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 11401141 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1142 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1143 { 1144 <div class="u-full-width"> 1145 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1146 @if (settings.Link != null) { 1147 <div class="u-pull--right"> 1148 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1149 @Render(settings.Link) 1150 </div> 1151 } 1152 </div> 1153 } 11541155 @if (!string.IsNullOrEmpty(settings.HelpText)) 1156 { 1157 <small class="form__help-text">@settings.HelpText</small> 1158 } 11591160 <textarea class="u-full-width @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Value</textarea> 11611162 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1163 </div> 1164 } 1165 @using System.Reflection 1166 @using Dynamicweb.Rapido.Blocks.Components.General 1167 @using Dynamicweb.Rapido.Blocks.Components 116811691170 @* Component *@ 11711172 @helper RenderHiddenField(HiddenField settings) { 1173 var attributes = new Dictionary<string, string>(); 1174 attributes.Add("type", "hidden"); 1175 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1176 if (settings.Value != null) { attributes.Add("value", settings.Value); } 1177 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 11781179 <input @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)/> 1180 } 1181 @using System.Reflection 1182 @using Dynamicweb.Rapido.Blocks.Components.General 1183 @using Dynamicweb.Rapido.Blocks.Components 11841185 @* Component *@ 11861187 @helper RenderCheckboxField(CheckboxField settings) 1188 { 1189 var attributes = new Dictionary<string, string>(); 1190 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1191 { 1192 settings.Id = Guid.NewGuid().ToString("N"); 1193 } 11941195 /*base settings*/ 1196 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1197 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1198 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1199 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1200 if (settings.Required) { attributes.Add("required", "true"); } 1201 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1202 /*end*/ 12031204 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 12051206 attributes.Add("type", "checkbox"); 1207 if (settings.Checked) { attributes.Add("checked", "true"); } 1208 settings.CssClass = "form__control " + settings.CssClass; 1209 if (settings.Value != null) { attributes.Add("value", settings.Value); } 12101211 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 12121213 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1214 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1215 @if (!string.IsNullOrEmpty(settings.Label)) 1216 { 1217 <label for="@settings.Id" class="dw-mod">@settings.Label</label> 1218 } 12191220 @if (settings.Link != null) { 1221 <span> 1222 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1223 @Render(settings.Link) 1224 </span> 1225 } 12261227 @if (!string.IsNullOrEmpty(settings.HelpText)) 1228 { 1229 <small class="form__help-text checkbox-help dw-mod">@settings.HelpText</small> 1230 } 1231 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1232 </div> 1233 } 1234 @using System.Reflection 1235 @using Dynamicweb.Rapido.Blocks.Components.General 1236 @using Dynamicweb.Rapido.Blocks.Components 123712381239 @* Component *@ 12401241 @helper RenderCheckboxListField(CheckboxListField settings) 1242 { 1243 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1244 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1245 { 1246 <div class="u-full-width"> 1247 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1248 @if (settings.Link != null) { 1249 <div class="u-pull--right"> 1250 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1251 @Render(settings.Link) 1252 </div> 1253 } 1254 </div> 12551256 } 12571258 <div class="u-pull--left"> 1259 @if (!string.IsNullOrEmpty(settings.HelpText)) 1260 { 1261 <small class="form__help-text">@settings.HelpText</small> 1262 } 12631264 @foreach (var item in settings.Options) 1265 { 1266 if (settings.Required) 1267 { 1268 item.Required = true; 1269 } 1270 if (settings.Disabled) 1271 { 1272 item.Disabled = true; 1273 } 1274 if (!string.IsNullOrEmpty(settings.Name)) 1275 { 1276 item.Name = settings.Name; 1277 } 1278 if (!string.IsNullOrEmpty(settings.CssClass)) 1279 { 1280 item.CssClass += settings.CssClass; 1281 } 12821283 /* value is not supported */ 12841285 if (!string.IsNullOrEmpty(settings.OnClick)) 1286 { 1287 item.OnClick += settings.OnClick; 1288 } 1289 if (!string.IsNullOrEmpty(settings.OnChange)) 1290 { 1291 item.OnChange += settings.OnChange; 1292 } 1293 @Render(item) 1294 } 12951296 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1297 </div> 12981299 </div> 1300 } 1301 @using Dynamicweb.Rapido.Blocks.Components.General 13021303 @* Component *@ 13041305 @helper RenderSearch(Search settings) 1306 { 1307 var searchValue = HttpContext.Current.Request.QueryString.Get(settings.SearchParameter) ?? ""; 1308 var groupValue = HttpContext.Current.Request.QueryString.Get(settings.GroupsParameter) ?? ""; 13091310 if (string.IsNullOrEmpty(settings.Id)) 1311 { 1312 settings.Id = Guid.NewGuid().ToString("N"); 1313 } 13141315 var resultAttributes = new Dictionary<string, string>(); 13161317 if (settings.PageSize != 0) 1318 { 1319 resultAttributes.Add("data-page-size", settings.PageSize.ToString()); 1320 } 1321 if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl)) 1322 { 1323 resultAttributes.Add("data-groups-feed-url", settings.GroupItemsFeedUrl); 1324 if (!string.IsNullOrEmpty(groupValue)) 1325 { 1326 resultAttributes.Add("data-selected-group", groupValue); 1327 } 1328 if (!string.IsNullOrEmpty(settings.GroupsParameter)) 1329 { 1330 resultAttributes.Add("data-groups-parameter", settings.GroupsParameter); 1331 } 1332 } 1333 resultAttributes.Add("data-force-init", "true"); 1334 if (settings.GoToFirstSearchResultOnEnter) 1335 { 1336 resultAttributes.Add("data-go-to-first-search-result-on-enter", settings.GoToFirstSearchResultOnEnter.ToString().ToLower()); 1337 } 1338 if (!string.IsNullOrEmpty(settings.SearchParameter)) 1339 { 1340 resultAttributes.Add("data-search-parameter", settings.SearchParameter); 1341 } 1342 resultAttributes.Add("data-search-feed-url", settings.SearchData.SearchFeedUrl); 1343 resultAttributes.Add("data-results-template-id", settings.SearchData.ResultsTemplateId); 13441345 if (settings.SecondSearchData != null) 1346 { 1347 resultAttributes.Add("data-second-search-feed-url", settings.SecondSearchData.SearchFeedUrl); 1348 resultAttributes.Add("data-second-results-template-id", settings.SecondSearchData.ResultsTemplateId); 1349 } 1350 if (!string.IsNullOrEmpty(settings.ResultsPageUrl)) 1351 { 1352 resultAttributes.Add("data-results-page-url", settings.ResultsPageUrl); 1353 } 13541355 resultAttributes = resultAttributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 13561357 string searchFieldCss = (settings.SearchButton == null) ? "search--with-icon" : ""; 13581359 <div class="search @settings.CssClass @searchFieldCss js-search-data-source dw-mod" id="@settings.Id" @ComponentMethods.AddAttributes(resultAttributes)> 1360 @if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl)) 1361 { 1362 <button type="button" class="search__groups-btn dw-mod js-search-groups-btn">@Translate("All")</button> 1363 <ul class="dropdown dropdown--absolute-position dw-mod search__groups-results js-search-groups-list"></ul> 1364 } 13651366 <input type="text" class="search__field dw-mod js-search-field" placeholder="@settings.Placeholder" value="@searchValue"> 13671368 <div class="dropdown dropdown--absolute-position search__results dw-mod js-search-results @(settings.SecondSearchData != null ? "search__results--combined" : "")"> 1369 @if (settings.SecondSearchData != null) 1370 { 1371 <div class="search__column search__column--products dw-mod"> 1372 <div class="search__column-header dw-mod">@Translate("Products")</div> 1373 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul> 1374 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl)) 1375 { 1376 @Render(new Link { 1377 Title = Translate("View all"), 1378 CssClass = "js-view-all-button u-margin", 1379 Href = settings.SearchData.ResultsPageUrl 1380 }); 1381 } 1382 </div> 1383 <div class="search__column search__column--pages dw-mod"> 1384 <div class="search__column-header">@Translate("Pages")</div> 1385 <ul class="search__results-list dw-mod js-search-results-second-list" id="@(settings.Id)_SecondResultsList"></ul> 1386 @if (!string.IsNullOrEmpty(settings.SecondSearchData.ResultsPageUrl)) 1387 { 1388 @Render(new Link 1389 { 1390 Title = Translate("View all"), 1391 CssClass = "js-view-all-button u-margin", 1392 Href = settings.SecondSearchData.ResultsPageUrl 1393 }); 1394 } 1395 </div> 1396 } 1397 else 1398 { 1399 <div class="search__column search__column--only dw-mod"> 1400 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul> 1401 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl)) 1402 { 1403 @Render(new Link { 1404 Title = Translate("View all"), 1405 CssClass = "js-view-all-button u-margin", 1406 Href = settings.SearchData.ResultsPageUrl 1407 }); 1408 } 1409 </div> 1410 } 1411 </div> 14121413 @if (settings.SearchButton != null) 1414 { 1415 settings.SearchButton.CssClass += " search__btn js-search-btn"; 1416 if (settings.RenderDefaultSearchIcon) 1417 { 1418 settings.SearchButton.Icon = new Icon { Name = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue }; 1419 } 1420 @Render(settings.SearchButton); 1421 } 1422 </div> 1423 } 1424 @using System.Reflection 1425 @using Dynamicweb.Rapido.Blocks.Components.General 1426 @using Dynamicweb.Rapido.Blocks.Components 142714281429 @* Component *@ 14301431 @helper RenderSelectField(SelectField settings) 1432 { 1433 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1434 { 1435 settings.Id = Guid.NewGuid().ToString("N"); 1436 } 14371438 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod"> 1439 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null ) 1440 { 1441 <div class="u-full-width"> 1442 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> } 1443 @if (settings.Link != null) { 1444 <div class="u-pull--right"> 1445 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; } 1446 @Render(settings.Link) 1447 </div> 1448 } 1449 </div> 1450 } 14511452 @if (!string.IsNullOrEmpty(settings.HelpText)) 1453 { 1454 <small class="form__help-text">@settings.HelpText</small> 1455 } 14561457 @if (settings.ActionButton != null) 1458 { 1459 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1460 <div class="form__field-combi u-no-margin dw-mod"> 1461 @RenderSelectBase(settings) 1462 @Render(settings.ActionButton) 1463 </div> 1464 } 1465 else 1466 { 1467 @RenderSelectBase(settings) 1468 } 14691470 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1471 </div> 1472 } 14731474 @helper RenderSelectBase(SelectField settings) 1475 { 1476 var attributes = new Dictionary<string, string>(); 14771478 /*base settings*/ 1479 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1480 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1481 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1482 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1483 if (settings.Required) { attributes.Add("required", "true"); } 1484 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1485 /*end*/ 14861487 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 14881489 <select @ComponentMethods.AddAttributes(resultAttributes) class="u-full-width @settings.CssClass dw-mod"> 1490 @if (settings.Default != null) 1491 { 1492 @Render(settings.Default) 1493 } 14941495 @foreach (var item in settings.Options) 1496 { 1497 if (settings.Value != null) { 1498 item.Checked = item.Value == settings.Value; 1499 } 1500 @Render(item) 1501 } 1502 </select> 1503 } 1504 @using System.Reflection 1505 @using Dynamicweb.Rapido.Blocks.Components.General 1506 @using Dynamicweb.Rapido.Blocks.Components 15071508 @* Component *@ 15091510 @helper RenderRadioButtonField(RadioButtonField settings) 1511 { 1512 var attributes = new Dictionary<string, string>(); 1513 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id)) 1514 { 1515 settings.Id = Guid.NewGuid().ToString("N"); 1516 } 15171518 /*base settings*/ 1519 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 1520 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); } 1521 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); } 1522 if (settings.Disabled) { attributes.Add("disabled", "true"); } 1523 if (settings.Required) { attributes.Add("required", "true"); } 1524 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); } 1525 /*end*/ 15261527 attributes.Add("type", "radio"); 1528 if (settings.Checked) { attributes.Add("checked", "true"); } 1529 settings.CssClass = "form__control " + settings.CssClass; 1530 if (settings.Value != null) { attributes.Add("value", settings.Value); } 15311532 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value); 15331534 <div class="form__field-group @settings.WrapperCssClass dw-mod"> 1535 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" /> 1536 @if (!string.IsNullOrEmpty(settings.Label)) 1537 { 1538 <label for="@settings.Id" class="dw-mod">@settings.Label</label> 1539 } 1540 @if (!string.IsNullOrEmpty(settings.HelpText)) 1541 { 1542 <small class="form__help-text">@settings.HelpText</small> 1543 } 1544 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1545 </div> 1546 } 1547 @using System.Reflection 1548 @using Dynamicweb.Rapido.Blocks.Components.General 1549 @using Dynamicweb.Rapido.Blocks.Components 155015511552 @* Component *@ 15531554 @helper RenderRadioButtonListField(RadioButtonListField settings) 1555 { 1556 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; } 15571558 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1559 @if (!string.IsNullOrEmpty(settings.Label)) 1560 { 1561 <label>@settings.Label</label> 1562 } 1563 @if (!string.IsNullOrEmpty(settings.HelpText)) 1564 { 1565 <small class="form__help-text">@settings.HelpText</small> 1566 } 15671568 @foreach (var item in settings.Options) 1569 { 1570 if (settings.Required) 1571 { 1572 item.Required = true; 1573 } 1574 if (settings.Disabled) 1575 { 1576 item.Disabled = true; 1577 } 1578 if (!string.IsNullOrEmpty(settings.Name)) 1579 { 1580 item.Name = settings.Name; 1581 } 1582 if (settings.Value != null && settings.Value == item.Value) 1583 { 1584 item.Checked = true; 1585 } 1586 if (!string.IsNullOrEmpty(settings.OnClick)) 1587 { 1588 item.OnClick += settings.OnClick; 1589 } 1590 if (!string.IsNullOrEmpty(settings.OnChange)) 1591 { 1592 item.OnChange += settings.OnChange; 1593 } 1594 if (!string.IsNullOrEmpty(settings.CssClass)) 1595 { 1596 item.CssClass += settings.CssClass; 1597 } 1598 @Render(item) 1599 } 16001601 @Render(new NotificationMessage { Message = settings.ErrorMessage }) 1602 </div> 1603 } 1604 @using System.Reflection 1605 @using Dynamicweb.Rapido.Blocks.Components.General 1606 @using Dynamicweb.Rapido.Blocks.Components 160716081609 @* Component *@ 16101611 @helper RenderNotificationMessage(NotificationMessage settings) 1612 { 1613 if (!string.IsNullOrEmpty(settings.Message)) 1614 { 1615 var attributes = new Dictionary<string, string>(); 1616 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 16171618 string messageTypeClass = Enum.GetName(typeof(NotificationMessageType), settings.MessageType).ToLower(); 1619 string messageLayoutClass = Enum.GetName(typeof(NotificationMessageLayout), settings.MessageLayout).ToLower(); 1620 string minHeightClass = settings.Icon != null ? "u-min-h70px" : ""; 16211622 <div class="notification-message-@messageTypeClass notification-message-@messageLayoutClass @messageLayoutClass @minHeightClass @settings.CssClass u-full-width dw-mod" @ComponentMethods.AddAttributes(attributes)> 1623 @if (settings.Icon != null) { 1624 settings.Icon.Label = !string.IsNullOrEmpty(settings.Icon.Label) ? settings.Message + settings.Icon.Label : settings.Message; 1625 @Render(settings.Icon) 1626 } else { 1627 @settings.Message 1628 } 1629 </div> 1630 } 1631 } 1632 @using Dynamicweb.Rapido.Blocks.Components.General 163316341635 @* Component *@ 16361637 @helper RenderHandlebarsRoot(HandlebarsRoot settings) { 1638 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : ""; 16391640 <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> 1641 @if (settings.SubBlocks != null) { 1642 @RenderBlockList(settings.SubBlocks) 1643 } 1644 </div> 1645 } 1646 @using System.Reflection 1647 @using Dynamicweb.Rapido.Blocks.Components.General 1648 @using Dynamicweb.Rapido.Blocks.Components 1649 @using System.Text.RegularExpressions 165016511652 @* Component *@ 16531654 @helper RenderSticker(Sticker settings) { 1655 if (!String.IsNullOrEmpty(settings.Title)) { 1656 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : ""; 1657 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : ""; 16581659 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>(); 1660 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) { 1661 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : ""; 1662 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : ""; 1663 optionalAttributes.Add("style", styleTag); 1664 } 16651666 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div> 1667 } 1668 } 16691670 @using System.Reflection 1671 @using Dynamicweb.Rapido.Blocks.Components.General 1672 @using Dynamicweb.Rapido.Blocks.Components 167316741675 @* Component *@ 16761677 @helper RenderStickersCollection(StickersCollection settings) 1678 { 1679 if (settings.Stickers.Count > 0) 1680 { 1681 string position = "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower(); 16821683 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1684 @foreach (Sticker sticker in settings.Stickers) 1685 { 1686 @Render(sticker) 1687 } 1688 </div> 1689 } 1690 } 16911692 @using Dynamicweb.Rapido.Blocks.Components.General 169316941695 @* Component *@ 16961697 @helper RenderForm(Form settings) { 1698 if (settings != null) 1699 { 1700 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>(); 1701 if (!string.IsNullOrEmpty(settings.Action)) { optionalAttributes.Add("action", settings.Action); }; 1702 if (!string.IsNullOrEmpty(settings.Name)) { optionalAttributes.Add("name", settings.Name); }; 1703 if (!string.IsNullOrEmpty(settings.OnSubmit)) { optionalAttributes.Add("onsubmit", settings.OnSubmit); }; 1704 var enctypes = new Dictionary<string, string> 1705 { 1706 { "multipart", "multipart/form-data" }, 1707 { "text", "text/plain" }, 1708 { "application", "application/x-www-form-urlencoded" } 1709 }; 1710 if (settings.Enctype != FormEnctype.none) { optionalAttributes.Add("enctype", enctypes[Enum.GetName(typeof(FormEnctype), settings.Enctype).ToLower()]); }; 1711 optionalAttributes.Add("method", settings.Method.ToString()); 17121713 if (!string.IsNullOrEmpty(settings.FormStartMarkup)) 1714 { 1715 @settings.FormStartMarkup 1716 } 1717 else 1718 { 1719 @:<form class="@settings.CssClass u-no-margin dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1720 } 17211722 foreach (var field in settings.GetFields()) 1723 { 1724 @Render(field) 1725 } 17261727 @:</form> 1728 } 1729 } 1730 @using System.Reflection 1731 @using Dynamicweb.Rapido.Blocks.Components.General 1732 @using Dynamicweb.Rapido.Blocks.Components 173317341735 @* Component *@ 17361737 @helper RenderText(Text settings) 1738 { 1739 @settings.Content 1740 } 1741 @using System.Reflection 1742 @using Dynamicweb.Rapido.Blocks.Components.General 1743 @using Dynamicweb.Rapido.Blocks.Components 174417451746 @* Component *@ 17471748 @helper RenderContentModule(ContentModule settings) { 1749 if (!string.IsNullOrEmpty(settings.Content)) 1750 { 1751 @settings.Content 1752 } 1753 } 1754 @using System 1755 @using System.Reflection 1756 @using Dynamicweb.Rapido.Blocks.Components.General 1757 @using Dynamicweb.Rapido.Blocks.Components 175817591760 @* Component *@ 17611762 @helper RenderModal(Modal settings) { 1763 if (settings != null) 1764 { 1765 string modalId = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N"); 17661767 string onchange = !string.IsNullOrEmpty(settings.OnClose) ? "onchange=\"if(!this.checked){" + settings.OnClose + "}\"" : ""; 17681769 <input type="checkbox" id="@(modalId)ModalTrigger" class="modal-trigger" @onchange /> 17701771 <div class="modal-container"> 1772 @if (!settings.DisableDarkOverlay) 1773 { 1774 <label for="@(modalId)ModalTrigger" id="@(modalId)ModalOverlay" class="modal-overlay"></label> 1775 } 1776 <div class="modal modal--@settings.Width.ToString().ToLower() modal-height--@settings.Height.ToString().ToLower()" id="@(modalId)Modal"> 1777 @if (settings.Heading != null) 1778 { 1779 if (!string.IsNullOrEmpty(settings.Heading.Title)) 1780 { 1781 <div class="modal__header"> 1782 @Render(settings.Heading) 1783 </div> 1784 } 1785 } 1786 <div class="modal__body @(settings.Width.ToString().ToLower() == "full" ? "modal__body--full" : "")"> 1787 @if (settings.BodyText != "LOGIN_MODAL_BODY") 1788 { 1789 <div class="modal__body_text">@settings.BodyText</div> 17901791 } 1792 @if (settings.BodyTemplate != null) 1793 { 1794 @settings.BodyTemplate 1795 } 1796 @{ 1797 var actions = settings.GetActions(); 1798 } 1799 </div> 1800 @if (actions.Length > 0) 1801 { 1802 <div class="modal__footer"> 1803 @foreach (var action in actions) 1804 { 1805 if (Pageview.Device.ToString() != "Mobile") { 1806 action.CssClass += " u-no-margin"; 1807 } else { 1808 action.CssClass += " u-full-width u-margin-bottom"; 1809 } 18101811 @Render(action) 1812 } 1813 </div> 1814 } 1815 <label class="modal__close-btn" for="@(modalId)ModalTrigger"></label> 1816 </div> 1817 </div> 1818 } 1819 } 1820 @using Dynamicweb.Rapido.Blocks.Components.General 18211822 @* Component *@ 18231824 @helper RenderMediaListItem(MediaListItem settings) 1825 { 1826 <div class="media-list-item @settings.CssClass dw-mod" @(!string.IsNullOrEmpty(settings.Id) ? "id=\"" + settings.Id + "\"" : "")> 1827 @if (!string.IsNullOrEmpty(settings.Label)) 1828 { 1829 if (!string.IsNullOrEmpty(settings.Link)) 1830 { 1831 @Render(new Link 1832 { 1833 Href = settings.Link, 1834 CssClass = "media-list-item__sticker dw-mod", 1835 ButtonLayout = ButtonLayout.None, 1836 Title = settings.Label, 1837 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : "" 1838 }) 1839 } 1840 else if (!string.IsNullOrEmpty(settings.OnClick)) 1841 { 1842 <span class="media-list-item__sticker dw-mod" onclick="@(settings.OnClick)"> 1843 <span class="u-uppercase">@settings.Label</span> 1844 </span> 1845 } 1846 else 1847 { 1848 <span class="media-list-item__sticker media-list-item__sticker--no-link dw-mod"> 1849 <span class="u-uppercase">@settings.Label</span> 1850 </span> 1851 } 1852 } 1853 <div class="media-list-item__wrap"> 1854 <div class="media-list-item__info dw-mod"> 1855 <div class="media-list-item__header dw-mod"> 1856 @if (!string.IsNullOrEmpty(settings.Title)) 1857 { 1858 if (!string.IsNullOrEmpty(settings.Link)) 1859 { 1860 @Render(new Link 1861 { 1862 Href = settings.Link, 1863 CssClass = "media-list-item__name dw-mod", 1864 ButtonLayout = ButtonLayout.None, 1865 Title = settings.Title, 1866 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : "" 1867 }) 1868 } 1869 else if (!string.IsNullOrEmpty(settings.OnClick)) 1870 { 1871 <span class="media-list-item__name dw-mod" onclick="@(settings.OnClick)">@settings.Title</span> 1872 } 1873 else 1874 { 1875 <span class="media-list-item__name media-list-item__name--no-link dw-mod">@settings.Title</span> 1876 } 1877 } 18781879 @if (!string.IsNullOrEmpty(settings.Status)) 1880 { 1881 <div class="media-list-item__state dw-mod">@settings.Status</div> 1882 } 1883 </div> 1884 @{ 1885 settings.InfoTable.CssClass += " media-list-item__parameters-table"; 1886 } 18871888 @Render(settings.InfoTable) 1889 </div> 1890 <div class="media-list-item__actions dw-mod"> 1891 <div class="media-list-item__actions-list dw-mod"> 1892 @{ 1893 var actions = settings.GetActions(); 18941895 foreach (ButtonBase action in actions) 1896 { 1897 action.ButtonLayout = ButtonLayout.None; 1898 action.CssClass += " media-list-item__action link"; 18991900 @Render(action) 1901 } 1902 } 1903 </div> 19041905 @if (settings.SelectButton != null && !string.IsNullOrEmpty(settings.SelectButton.Title)) 1906 { 1907 settings.SelectButton.CssClass += " u-no-margin"; 19081909 <div class="media-list-item__action-button"> 1910 @Render(settings.SelectButton) 1911 </div> 1912 } 1913 </div> 1914 </div> 1915 </div> 1916 } 1917 @using Dynamicweb.Rapido.Blocks.Components.General 1918 @using Dynamicweb.Rapido.Blocks.Components 19191920 @helper RenderTable(Table settings) 1921 { 1922 Dictionary<string, string> attributes = new Dictionary<string, string>(); 1923 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 19241925 var enumToClasses = new Dictionary<TableDesign, string> 1926 { 1927 { TableDesign.Clean, "table--clean" }, 1928 { TableDesign.Bordered, "table--bordered" }, 1929 { TableDesign.Striped, "table--striped" }, 1930 { TableDesign.Hover, "table--hover" }, 1931 { TableDesign.Compact, "table--compact" }, 1932 { TableDesign.Condensed, "table--condensed" }, 1933 { TableDesign.NoTopBorder, "table--no-top-border" } 1934 }; 1935 string tableDesignClass = ""; 1936 if (settings.Design != TableDesign.None) 1937 { 1938 tableDesignClass = enumToClasses[settings.Design]; 1939 } 19401941 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableDesign.None) { attributes.Add("class", "table " + tableDesignClass + " " + settings.CssClass + " dw-mod"); } 19421943 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 19441945 <table @ComponentMethods.AddAttributes(resultAttributes)> 1946 @if (settings.Header != null) 1947 { 1948 <thead> 1949 @Render(settings.Header) 1950 </thead> 1951 } 1952 <tbody> 1953 @foreach (var row in settings.Rows) 1954 { 1955 @Render(row) 1956 } 1957 </tbody> 1958 @if (settings.Footer != null) 1959 { 1960 <tfoot> 1961 @Render(settings.Footer) 1962 </tfoot> 1963 } 1964 </table> 1965 } 1966 @using Dynamicweb.Rapido.Blocks.Components.General 1967 @using Dynamicweb.Rapido.Blocks.Components 19681969 @helper RenderTableRow(TableRow settings) 1970 { 1971 Dictionary<string, string> attributes = new Dictionary<string, string>(); 1972 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 19731974 var enumToClasses = new Dictionary<TableRowDesign, string> 1975 { 1976 { TableRowDesign.NoBorder, "table__row--no-border" }, 1977 { TableRowDesign.Border, "table__row--border" }, 1978 { TableRowDesign.TopBorder, "table__row--top-line" }, 1979 { TableRowDesign.BottomBorder, "table__row--bottom-line" }, 1980 { TableRowDesign.Solid, "table__row--solid" } 1981 }; 19821983 string tableRowDesignClass = ""; 1984 if (settings.Design != TableRowDesign.None) 1985 { 1986 tableRowDesignClass = enumToClasses[settings.Design]; 1987 } 19881989 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableRowDesign.None) { attributes.Add("class", "table__row " + tableRowDesignClass + " " + settings.CssClass + " dw-mod"); } 19901991 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 19921993 <tr @ComponentMethods.AddAttributes(resultAttributes)> 1994 @foreach (var cell in settings.Cells) 1995 { 1996 if (settings.IsHeaderRow) 1997 { 1998 cell.IsHeader = true; 1999 } 2000 @Render(cell) 2001 } 2002 </tr> 2003 } 2004 @using Dynamicweb.Rapido.Blocks.Components.General 2005 @using Dynamicweb.Rapido.Blocks.Components 2006 @using Dynamicweb.Core 20072008 @helper RenderTableCell(TableCell settings) 2009 { 2010 Dictionary<string, string> attributes = new Dictionary<string, string>(); 2011 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); } 2012 if (settings.Colspan != 0) { attributes.Add("colspan", Converter.ToString(settings.Colspan)); } 2013 if (settings.Rowspan != 0) { attributes.Add("rowspan", Converter.ToString(settings.Rowspan)); } 2014 if (!string.IsNullOrEmpty(settings.CssClass)) { attributes.Add("class", settings.CssClass + " dw-mod"); } 20152016 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value); 20172018 string tagName = settings.IsHeader ? "th" : "td"; 20192020 @("<" + tagName + " " + ComponentMethods.AddAttributes(resultAttributes) + ">") 2021 @settings.Content 2022 @("</" + tagName + ">"); 2023 } 2024 @using System.Linq 2025 @using Dynamicweb.Rapido.Blocks.Components.General 20262027 @* Component *@ 20282029 @helper RenderPagination(Dynamicweb.Rapido.Blocks.Components.General.Pagination settings) 2030 { 2031 var pageNumberQueryStringName = Dynamicweb.Rapido.Services.Pagination.GetPageNumberQueryStringName(settings); // Get the proper 'page number' query string parameter 2032 var queryParameters = Dynamicweb.Rapido.Services.Url.GetQueryParameters(pageNumberQueryStringName); // Get the NameValueCollection from the querystring 20332034 if (settings.NumberOfPages > 1) 2035 { 2036 string url = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + "/Default.aspx"; 2037 string ariaLabel = !string.IsNullOrWhiteSpace(settings.AriaLabel) ? settings.AriaLabel : Translate("Page navigation"); 2038 Dictionary<string, int> startAndEndPageNumber = Dynamicweb.Rapido.Services.Pagination.GetStartAndEndPageNumber(settings); 20392040 <div class="pager u-margin-top dw-mod @settings.CssClass" aria-label="@ariaLabel"> 2041 @if (settings.ShowPagingInfo) 2042 { 2043 <div class="pager__info dw-mod"> 2044 @Translate("Page") @settings.CurrentPageNumber @Translate("of") @settings.NumberOfPages 2045 </div> 2046 } 2047 <ul class="pager__list dw-mod"> 2048 @if (!string.IsNullOrWhiteSpace(settings.FirstPageUrl) && settings.ShowFirstAndLastControls) 2049 { 2050 @Render(new PaginationItem { Link = settings.FirstPageUrl, Icon = settings.FirstIcon }) 2051 } 2052 @if (!string.IsNullOrWhiteSpace(settings.PreviousPageUrl) && settings.ShowNextAndPrevControls) 2053 { 2054 @Render(new PaginationItem { Link = settings.PreviousPageUrl, Icon = settings.PrevIcon }) 2055 } 2056 @if (settings.GetPages().Any()) 2057 { 2058 foreach (var page in settings.GetPages()) 2059 { 2060 @Render(page) 2061 } 2062 } 2063 else 2064 { 2065 for (var page = startAndEndPageNumber["StartPage"]; page <= startAndEndPageNumber["EndPage"]; page++) 2066 { 2067 queryParameters = Dynamicweb.Rapido.Services.Url.UpdateQueryStringParameter(queryParameters, pageNumberQueryStringName, page.ToString()); 2068 @Render(new PaginationItem { Label = page.ToString(), Link = Dynamicweb.Rapido.Services.Url.BuildUri(url, queryParameters).PathAndQuery, IsActive = (settings.CurrentPageNumber == page) }); 2069 } 2070 } 2071 @if (!string.IsNullOrWhiteSpace(settings.NextPageUrl) && settings.ShowNextAndPrevControls) 2072 { 2073 @Render(new PaginationItem { Link = settings.NextPageUrl, Icon = settings.NextIcon }) 2074 } 2075 @if (!string.IsNullOrWhiteSpace(settings.LastPageUrl) && settings.ShowFirstAndLastControls) 2076 { 2077 @Render(new PaginationItem { Link = settings.LastPageUrl, Icon = settings.LastIcon }) 2078 } 2079 </ul> 2080 </div> 2081 } 2082 } 20832084 @helper RenderPaginationItem(PaginationItem settings) 2085 { 2086 if (settings.Icon == null) 2087 { 2088 settings.Icon = new Icon(); 2089 } 20902091 settings.Icon.Label = settings.Label; 2092 <li class="pager__btn dw-mod"> 2093 @if (settings.IsActive) 2094 { 2095 <span class="pager__num pager__num--current dw-mod"> 2096 @Render(settings.Icon) 2097 </span> 2098 } 2099 else 2100 { 2101 <a href="@settings.Link" class="pager__num dw-mod"> 2102 @Render(settings.Icon) 2103 </a> 2104 } 2105 </li> 2106 } 210721082109 @using Dynamicweb.Rapido.Blocks.Components.General 2110 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce 211121122113211421152116 @functions { 2117 public string GenerateRgba(string color, string opacity) 2118 { 2119 color = color.Replace("#", ""); 2120 if (color.Length == 6) { 2121 return "rgba(" + Convert.ToInt32(color.Substring(0, 2), 16) + ", " + Convert.ToInt32(color.Substring(2, 2), 16) + ", " + Convert.ToInt32(color.Substring(4, 2), 16) + ", " + opacity + ");"; 2122 } else { 2123 return Convert.ToInt16(color).ToString(); 2124 } 2125 } 2126 } 21272128 @{ 2129 List<ItemViewModel> slides = new List<ItemViewModel>(); 2130 var slidesCounter = 1; 21312132 if (Model.Item.GetItem("SlideOne") != null) { 2133 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideOne").GetString("Image"))) { 2134 slides.Add(Model.Item.GetItem("SlideOne")); 2135 } 2136 } 21372138 if (Model.Item.GetItem("SlideTwo") != null) { 2139 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideTwo").GetString("Image"))) { 2140 slides.Add(Model.Item.GetItem("SlideTwo")); 2141 } 2142 } 21432144 if (Model.Item.GetItem("SlideThree") != null) { 2145 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideThree").GetString("Image"))) { 2146 slides.Add(Model.Item.GetItem("SlideThree")); 2147 } 2148 } 21492150 if (Model.Item.GetItem("SlideFour") != null) { 2151 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideFour").GetString("Image"))) { 2152 slides.Add(Model.Item.GetItem("SlideFour")); 2153 } 2154 } 21552156 if (Model.Item.GetItem("SlideFive") != null) { 2157 if (!string.IsNullOrEmpty(Model.Item.GetItem("SlideFive").GetString("Image"))) { 2158 slides.Add(Model.Item.GetItem("SlideFive")); 2159 } 2160 } 2161 } 21622163 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) { 2164 @Render(new Heading { Title = Model.Item.GetString("Title"), Level = 2 }) 2165 } 21662167 <div class="carousel u-full-height dw-mod" id="Paragraph_@(Model.ID)"> 2168 <div class="carousel__container u-full-height js-carousel-slides dw-mod"> 2169 @foreach (var slide in slides) 2170 { 2171 <div class="carousel__slide u-padding--lg dw-mod"> 2172 @RenderTheSlide(slide, slidesCounter) 2173 </div> 2174 slidesCounter++; 2175 } 2176 </div> 2177 </div> 21782179 @helper RenderTheSlide(ItemViewModel slide, int slideNumber) { 2180 var colorService = new ColorSwatchService(); 2181 string backgroundColor = slide.GetString("BackgroundColor") != null ? slide.GetString("BackgroundColor") : ""; 2182 backgroundColor = !backgroundColor.Contains("#") ? "background-color: " + colorService.GetHexColor(Pageview.AreaID, backgroundColor) : backgroundColor; 2183 string textColor = slide.GetString("TextColor") != null ? slide.GetString("TextColor") : ""; 2184 textColor = !textColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, textColor) : textColor; 2185 string styles = backgroundColor + "; color: " + textColor; 21862187 string horizontalAlign = slide.GetString("HorizontalAlignment") != null ? "u-ta-" + slide.GetList("HorizontalAlignment").SelectedValue.ToString().ToLower() : ""; 2188 string verticalAlign = slide.GetString("VerticalAlignment") != null ? "u-align-self-" + slide.GetList("VerticalAlignment").SelectedValue.ToString().ToLower() : ""; 2189 string alignmentCssClasses = horizontalAlign + " " + verticalAlign; 21902191 if (!string.IsNullOrEmpty(slide.GetString("Image"))) { 2192 int cropMode = !string.IsNullOrEmpty(Convert.ToString(slide.GetList("ImageCrop"))) ? Convert.ToInt32(slide.GetList("ImageCrop").SelectedValue) : 0; 21932194 Image image = new Image 2195 { 2196 Path = slide.GetFile("Image").Path, 2197 CssClass = "background-image__cover", 2198 ImageDefault = new ImageSettings 2199 { 2200 Crop = cropMode, 2201 Height = 845, 2202 Width = 1920 2203 }, 2204 ImageMedium = new ImageSettings 2205 { 2206 Crop = cropMode, 2207 Height = 450, 2208 Width = 1024 2209 }, 2210 ImageSmall = new ImageSettings 2211 { 2212 Crop = cropMode, 2213 Height = 544, 2214 Width = 640 2215 } 2216 }; 22172218 if(slideNumber == 1) 2219 { 2220 image.DisableLazyLoad = true; 2221 } 22222223 image.FilterPrimary = !string.IsNullOrEmpty(slide.GetList("ImageFilterPrimary").SelectedValue) ? (ImageFilter) Enum.Parse(typeof(ImageFilter), slide.GetList("ImageFilterPrimary").SelectedValue.Replace("-", ""), true) : ImageFilter.None; 2224 image.FilterSecondary = !string.IsNullOrEmpty(slide.GetList("ImageFilterSecondary").SelectedValue) ? (ImageFilter) Enum.Parse(typeof(ImageFilter), slide.GetList("ImageFilterSecondary").SelectedValue.Replace("-", ""), true) : ImageFilter.None; 22252226 if (!string.IsNullOrEmpty(slide.GetString("ColorForTheFilter"))) { 2227 image.FilterColor = slide.GetString("ColorForTheFilter").StartsWith("#") ? GenerateRgba(slide.GetString("ColorForTheFilter"), "0.3") : ""; 2228 } 22292230 <div class="background-image dw-mod"> 2231 <div class="background-image__wrapper dw-mod"> 2232 @Render(image) 2233 </div> 2234 </div> 2235 } 22362237 if (!string.IsNullOrEmpty(textColor)) { 2238 <style> 2239 .slideContent-@slide.Id p, .slideContent-@slide.Id h1, .slideContent-@slide.Id h2, .slideContent-@slide.Id h3 { 2240 color: @textColor; 2241 } 2242 </style> 2243 } 22442245 string link = !string.IsNullOrEmpty(slide.GetString("Link")) ? slide.GetString("Link") : ""; 2246 string linkTarget = link.Contains("http") ? "_blank" : "_self"; 22472248 if (!string.IsNullOrEmpty(link)) { 2249 <a href="@link" target="@linkTarget" class="u-full-width u-full-height u-position-absolute">&nbsp;</a> 2250 } 22512252 <div class="content-row__item__body @alignmentCssClasses slideContent-@slide.Id dw-mod"> 2253 @if (!string.IsNullOrEmpty(slide.GetString("Title")) || !string.IsNullOrEmpty(slide.GetString("Text"))) { 2254 <div class="grid__cell"> 2255 @Render(new Heading { Title = slide.GetString("Title"), Level = 1, CssClass = "nevotex-banner-large" }) 2256 @Render(new Text { Content = slide.GetString("Text") }) 2257 </div> 2258 } 22592260 @if (!string.IsNullOrEmpty(slide.GetItem("ButtonOne").GetString("Title")) || !string.IsNullOrEmpty(slide.GetItem("ButtonTwo").GetString("Title"))) { 2261 <div class="grid__cell"> 2262 @ParagraphButton(slide.GetItem("ButtonOne")) 2263 @ParagraphButton(slide.GetItem("ButtonTwo")) 2264 </div> 2265 } 2266 </div> 2267 } 22682269 @{ 2270 if (slides.Count > 1) 2271 { 2272 bool enableDots = !Model.Item.GetBoolean("HideDots"); 22732274 <script> 2275 document.addEventListener("DOMContentLoaded", function () { 2276 var hideArrows = "@Model.Item.GetBoolean("HideArrows")"; 22772278 new CarouselModule("#Paragraph_@(Model.ID)", { 2279 slideTime: @Model.Item.GetString("SlideTime"), 2280 dots: @(enableDots.ToString().ToLower()), 2281 prevBtn: hideArrows == "True" ? "u-hidden" : "carousel-prev-btn dw-mod", 2282 nextBtn: hideArrows == "True" ? "u-hidden" : "carousel-next-btn dw-mod" 2283 }); 2284 }) 2285 </script> 2286 } 2287 } 22882289 @helper ParagraphButton(ItemViewModel item) { 2290 if (item != null) { 2291 if (!string.IsNullOrEmpty(item.GetString("Title"))) { 2292 Button button = new Button { 2293 Title = item.GetString("Title"), 2294 Href = item.GetString("Link"), 2295 CssClass = "u-no-margin", 2296 ButtonLayout = (ButtonLayout)System.Enum.Parse(typeof(ButtonLayout), char.ToUpper(item.GetList("Layout").SelectedValue[0]) + item.GetList("Layout").SelectedValue.Substring(1)) 2297 }; 22982299 if (!string.IsNullOrEmpty(item.GetString("Icon"))) { 2300 button.Icon = new Icon { 2301 CssClass = item.GetString("Icon") 2302 }; 2303 } 23042305 @Render(button) 2306 } 2307 } 2308 }

VERHOILU

NAHKA

KEINONAHKA

VERHOT

TYÖKALUT & TARVIKKEET

TUOTANTO

TUOTEUUTISIA

Storm

Megan+

Kangas Savannah 120 Sand

Barnum Stripe

Megan Melange+

Galaxy

ASIAKASPALVELU

Tarvitsetko apua valinnassa?

Ota yhteyttä asiakaspalveluumme, niin autamme sinua löytämään tarpeisiisi sopivat tuotteet.

TUOTANTO

NEVOTEXIN TUOTANTO

Tuotantomme sijaitsee Viron Narvassa, ja räätälöimme kaiken tarvittavan aina kattavista ratkaisuista yksityiskohtiin saakka eurooppalaiselle valmistusteollisuudelle.