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