Error executing template "Designs/Rapido/_parsed/Page.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.b__148_0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 6163
   at RazorEngine.Templating.TemplateWriter.ToString()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.<>c__DisplayClass3_0.b__0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 266
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.<>c__DisplayClass2_0.b__0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 180
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.b__147_0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 6146
   at RazorEngine.Templating.TemplateWriter.ToString()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.<>c__DisplayClass3_0.b__0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 266
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.<>c__DisplayClass2_0.b__0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 180
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.<>c__DisplayClass3_0.b__0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 288
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.<>c__DisplayClass2_0.b__0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 180
   at CompiledRazorTemplates.Dynamic.RazorEngine_bb6ad8b2219d472e8fa2c7d7fe6d6cfd.Execute() in D:\Dynamicweb.net\Solutions\FactorAdman\egholm2019.cloud.dynamicweb-cms.com\Files\Templates\Designs\Rapido\_parsed\Page.parsed.cshtml:line 6128
   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.b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 2 3 @using System.Web; 4 @using Dynamicweb.Frontend 5 @using Dynamicweb.Frontend.Devices 6 @using Dynamicweb.Extensibility 7 @using Dynamicweb.Content 8 @using Dynamicweb.Security 9 @using Dynamicweb.Core 10 @using System 11 @using System.Web 12 @using System.IO 13 @using Dynamicweb.Rapido.Blocks 14 @using System.Net 15 16 @{ 17 //hack for redirecting back to order - because of bug in DW - if a user was logged in. It was logged off in Subscriber and two cookies set 18 //now check up on this and redirct back. 19 //cant redirect correctly in subscriber because Extranetlogoff wont pass with two queries 20 if(HttpContext.Current.Request.QueryString["forced_redirect_order_quote"] == "1") 21 { 22 string completedOrderid = HttpContext.Current.Request.Cookies["CompletedOrderIdTemp"] != null ? HttpContext.Current.Request.Cookies["CompletedOrderIdTemp"].Value.ToString() : ""; 23 string completeOrderSecret = HttpContext.Current.Request.Cookies["CompletedOrderSecretTemp"] != null ? HttpContext.Current.Request.Cookies["CompletedOrderSecretTemp"].Value.ToString() : ""; 24 25 int cartPageRedirect = GetPageIdByNavigationTag("CartPage"); 26 if (!String.IsNullOrEmpty(completedOrderid) && !String.IsNullOrEmpty(completeOrderSecret) && cartPageRedirect > 0) 27 { 28 //reset cookies 29 HttpCookie cookieOrderId = new HttpCookie("CompletedOrderIdTemp") 30 { 31 Value = "", 32 Expires = DateTime.Now.AddDays(-1) 33 }; 34 HttpContext.Current.Response.Cookies.Add(cookieOrderId); 35 36 HttpCookie cookieSecret = new HttpCookie("CompletedOrderSecretTemp") 37 { 38 Value = "", 39 Expires = DateTime.Now.AddDays(-1) 40 }; 41 HttpContext.Current.Response.Cookies.Add(cookieSecret); 42 43 //redirect 44 HttpContext.Current.Response.Redirect("/Default.aspx?ID=" + cartPageRedirect + "&CompletedOrderId=" + completedOrderid + "&CompletedOrderSecret=" + completeOrderSecret, true); 45 } 46 } 47 } 48 49 50 @functions { 51 BlocksPage masterPage = BlocksPage.GetBlockPage("Master"); 52 53 string getFontFamily(params string[] items) 54 { 55 var itemParent = Pageview.AreaSettings; 56 foreach (var item in items) 57 { 58 itemParent = itemParent.GetItem(item); 59 if (itemParent == null) 60 { 61 return null; 62 } 63 } 64 65 var googleFont = itemParent.GetGoogleFont("FontFamily"); 66 if (googleFont == null) 67 { 68 return null; 69 } 70 return googleFont.Family.Replace(" ", "+"); 71 } 72 } 73 74 @{ 75 //Font settings 76 var fonts = new string[] { 77 getFontFamily("Layout", "HeaderFont"), 78 getFontFamily("Layout", "SubheaderFont"), 79 getFontFamily("Layout", "TertiaryHeaderFont"), 80 getFontFamily("Layout", "Header", "ToolsFont"), 81 getFontFamily("Layout", "Header", "NavigationFont"), 82 getFontFamily("Layout", "MobileNavigation", "Font"), 83 getFontFamily("ProductList", "Facets", "HeaderFont"), 84 getFontFamily("ProductPage", "PriceFontDesign"), 85 getFontFamily("Ecommerce", "SaleSticker", "Font"), 86 getFontFamily("Ecommerce", "NewSticker", "Font"), 87 getFontFamily("Ecommerce", "CustomSticker", "Font") 88 }; 89 90 string autoCssLink = "/Files/Templates/Designs/Rapido/css/rapido/rapido_" + Model.Area.ID.ToString() + ".min.css?ticks=" + Model.Area.UpdatedDate.Ticks; 91 string favicon = Model.Area.Item.GetItem("Layout").GetFile("LogoFavicon") != null ? Model.Area.Item.GetItem("Layout").GetFile("LogoFavicon").Path : "/Files/Images/favicon.png"; 92 bool useFontAwesomePro = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetBoolean("UseFontAwesomePro"); 93 string fontAwesomeCssLink = "/Files/Templates/Designs/Rapido/css/fonts/FontAwesomeFree/css/fontawesome-all.min.css"; 94 if (useFontAwesomePro) 95 { 96 fontAwesomeCssLink = "/Files/Templates/Designs/Rapido/css/fonts/FontAwesomePro/css/fontawesome-all.min.css"; 97 } 98 //force logout if not proper user 99 int failedLoginPageId = Model.Area.Item.GetItem("Custom").GetInt32("FailedLoginRedirectPage"); 100 if (Pageview.User != null && !Pageview.User.HasGroup(323)) 101 { 102 string urlFailedLoginPage = "/"; 103 if (failedLoginPageId > 0) 104 { 105 urlFailedLoginPage = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(failedLoginPageId); 106 } 107 HttpContext.Current.Response.Redirect("/Admin/Public/ExtranetLogoff.aspx?Redirect="+ urlFailedLoginPage, true); 108 } 109 } 110 111 @{ 112 Block master = new Block() 113 { 114 Id = "Master", 115 BlocksList = new List<Block> { 116 new Block { 117 Id = "MasterTopSnippets", 118 SortId = 10 119 }, 120 new Block { 121 Id = "MasterMain", 122 SortId = 20, 123 Template = RenderMain(), 124 SkipRenderBlocksList = true, 125 BlocksList = new List<Block> { 126 new Block { 127 Id = "MasterHeader", 128 SortId = 10, 129 Template = RenderMasterHeader(), 130 SkipRenderBlocksList = true 131 }, 132 new Block { 133 Id = "MasterPageContent", 134 SortId = 20, 135 Template = RenderPageContent() 136 } 137 } 138 }, 139 new Block { 140 Id = "MasterFooter", 141 SortId = 30 142 }, 143 new Block { 144 Id = "MasterReferences", 145 SortId = 40 146 }, 147 new Block { 148 Id = "MasterBottomSnippets", 149 SortId = 50 150 } 151 } 152 }; 153 154 masterPage.Add(master); 155 } 156 157 @* Include the required Grid builder (Contains the methods @RenderBlockList and @RenderBlock) *@ 158 @using System.Text.RegularExpressions 159 @using System.Collections.Generic 160 @using System.Reflection 161 @using System.Web.UI.HtmlControls 162 @using Dynamicweb.Rapido.Blocks.Components 163 @using Dynamicweb.Rapido.Blocks.Components.Articles 164 @using Dynamicweb.Rapido.Blocks.Components.Documentation 165 @using Dynamicweb.Rapido.Blocks 166 167 168 @*--- START: Base block renderers ---*@ 169 170 @helper RenderBlockList(List<Block> blocks) 171 { 172 blocks = blocks.OrderBy(item => item.SortId).ToList(); 173 174 foreach (Block item in blocks) 175 { 176 <!-- START: @item.Id --> 177 178 if (item.Design == null) 179 { 180 @RenderBlock(item) 181 } 182 else if (item.Design.RenderType == RenderType.None) { 183 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : ""; 184 185 <div class="@cssClass dw-mod"> 186 @RenderBlock(item) 187 </div> 188 } 189 else if (item.Design.RenderType != RenderType.Hide) 190 { 191 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : ""; 192 193 if (!item.SkipRenderBlocksList) { 194 if (item.Design.RenderType == RenderType.Row) 195 { 196 <div class="grid grid--align-content-start @cssClass dw-mod" id="Block__@item.Id"> 197 @RenderBlock(item) 198 </div> 199 } 200 201 if (item.Design.RenderType == RenderType.Column) 202 { 203 string hidePadding = item.Design.HidePadding ? "u-no-padding" : ""; 204 string size = item.Design.Size ?? "12"; 205 size = Regex.IsMatch(size, @"\d") ? "md-" + item.Design.Size : item.Design.Size; 206 207 <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"> 208 @RenderBlock(item) 209 </div> 210 } 211 212 if (item.Design.RenderType == RenderType.Table) 213 { 214 <table class="table @cssClass dw-mod" id="Block__@item.Id"> 215 @RenderBlock(item) 216 </table> 217 } 218 219 if (item.Design.RenderType == RenderType.TableRow) 220 { 221 <tr class="@cssClass dw-mod" id="Block__@item.Id"> 222 @RenderBlock(item) 223 </tr> 224 } 225 226 if (item.Design.RenderType == RenderType.TableColumn) 227 { 228 <td class="@cssClass dw-mod" id="Block__@item.Id"> 229 @RenderBlock(item) 230 </td> 231 } 232 233 if (item.Design.RenderType == RenderType.CardHeader) 234 { 235 <div class="card-header @cssClass dw-mod"> 236 @RenderBlock(item) 237 </div> 238 } 239 240 if (item.Design.RenderType == RenderType.CardBody) 241 { 242 <div class="card @cssClass dw-mod"> 243 @RenderBlock(item) 244 </div> 245 } 246 247 if (item.Design.RenderType == RenderType.CardFooter) 248 { 249 <div class="card-footer @cssClass dw-mod"> 250 @RenderBlock(item) 251 </div> 252 } 253 } 254 else 255 { 256 @RenderBlock(item) 257 } 258 } 259 260 <!-- END: @item.Id --> 261 } 262 } 263 264 @helper RenderBlock(Block item) 265 { 266 if (item.Template != null) 267 { 268 @BlocksPage.RenderTemplate(item.Template) 269 } 270 271 if (item.Component != null) 272 { 273 string methodName = item.Component.HelperName; 274 dynamic[] methodParameters = new dynamic[1]; 275 methodParameters[0] = item.Component; 276 Type methodType = this.GetType(); 277 MethodInfo generalMethod = methodType.GetMethod(methodName); 278 279 if (generalMethod != null) { 280 @generalMethod.Invoke(this, methodParameters).ToString(); 281 } else { 282 throw new Exception(item.Component.GetType().Name + " method '" + methodName +"' could not be invoked"); 283 } 284 } 285 286 if (item.BlocksList.Count > 0 && !item.SkipRenderBlocksList) 287 { 288 @RenderBlockList(item.BlocksList) 289 } 290 } 291 292 @*--- END: Base block renderers ---*@ 293 294 295 @* Include the components *@ 296 @using Dynamicweb.Rapido.Blocks.Components 297 @using Dynamicweb.Rapido.Blocks.Components.General 298 @using Dynamicweb.Rapido.Blocks 299 300 301 @* Components *@ 302 @using System.Reflection 303 @using Dynamicweb.Rapido.Blocks.Components.General 304 305 306 @* Component *@ 307 308 @helper RenderIcon(Icon settings) { 309 if (settings != null) 310 { 311 dynamic[] methodParameters = new dynamic[1]; 312 methodParameters[0] = settings; 313 MethodInfo customMethod = this.GetType().GetMethod("RenderIconCustom"); 314 315 if (customMethod != null) 316 { 317 @customMethod.Invoke(this, methodParameters).ToString(); 318 } else { 319 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : ""; 320 321 if (settings.Name != null) 322 { 323 if (String.IsNullOrEmpty(settings.Label)) { 324 <i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i> 325 } else { 326 if (settings.LabelPosition == IconLabelPosition.Before) { 327 <span>@settings.Label <i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i></span> 328 } else { 329 <span><i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i> @settings.Label</span> 330 } 331 } 332 } 333 } 334 } 335 } 336 @using System.Reflection 337 @using Dynamicweb.Rapido.Blocks.Components.General 338 @using Dynamicweb.Rapido.Blocks.Components 339 340 341 @* Component *@ 342 343 @helper RenderButton(Button settings) { 344 dynamic[] methodParameters = new dynamic[1]; 345 methodParameters[0] = settings; 346 MethodInfo customMethod = this.GetType().GetMethod("RenderButtonCustom"); 347 348 if (customMethod != null) 349 { 350 @customMethod.Invoke(this, methodParameters).ToString(); 351 } 352 else 353 { 354 string target; 355 string disabled = settings.Disabled ? "disabled" : ""; 356 string buttonType = settings.ButtonType == ButtonType.Submit ? "submit" : "button"; 357 buttonType = settings.ButtonType == ButtonType.Reset ? "reset" : buttonType; 358 string buttonLayout = settings.ButtonLayout.ToString().ToLower(); 359 360 switch (settings.Target) 361 { 362 case LinkTargetType.Blank: 363 target = "_blank"; 364 break; 365 case LinkTargetType.Parent: 366 target = "_parent"; 367 break; 368 case LinkTargetType.Self: 369 target = "_self"; 370 break; 371 case LinkTargetType.Top: 372 target = "_top"; 373 break; 374 default: 375 target = "_self"; 376 break; 377 } 378 379 string onClickAction = settings.OnClick != null ? settings.OnClick : ""; 380 string noOpener = target == "_blank" ? "rel=\"noopener\"" : ""; 381 382 if (!String.IsNullOrEmpty(settings.ConfirmText)) 383 { 384 string modalId = settings.Id; 385 @RenderConfirmDialog(settings); 386 onClickAction = "document.getElementById('" + modalId + "ModalTrigger').checked = true"; 387 } 388 389 if (settings.Icon != null) 390 { 391 if (settings.IconPosition == null) { 392 settings.Icon.LabelPosition = IconLabelPosition.After; 393 } else { 394 settings.Icon.LabelPosition = settings.IconPosition == IconPosition.Before ? IconLabelPosition.After : IconLabelPosition.Before; 395 } 396 if (settings.Icon.Label == null) { 397 settings.Icon.Label = settings.Title; 398 } 399 } 400 string content = settings.Icon == null ? settings.Title : Convert.ToString(RenderIcon(settings.Icon)); 401 402 if (!String.IsNullOrEmpty(settings.Link) && String.IsNullOrEmpty(settings.ConfirmText)) 403 { 404 <a href="@settings.Link" target="@target" @noOpener class="btn btn--@buttonLayout @settings.CssClass @disabled dw-mod" onclick="@onClickAction" @ComponentMethods.AddAttributes(settings.ExtraAttributes) @disabled>@content</a> 405 } 406 else 407 { 408 <button type="@buttonType" class="btn btn--@buttonLayout @settings.CssClass @disabled dw-mod" onclick="@onClickAction" @ComponentMethods.AddAttributes(settings.ExtraAttributes) @disabled>@content</button> 409 } 410 } 411 } 412 413 414 @helper RenderConfirmDialog(Button settings) { 415 dynamic[] methodParameters = new dynamic[1]; 416 methodParameters[0] = settings; 417 MethodInfo customMethod = this.GetType().GetMethod("RenderConfirmDialogCustom"); 418 419 if (customMethod != null) 420 { 421 @customMethod.Invoke(this, methodParameters).ToString(); 422 } else { 423 string modalTriggerId = settings.Id + "ModalTrigger"; 424 425 <!-- Trigger for the confirm modal --> 426 <input type="checkbox" id="@modalTriggerId" class="modal-trigger" /> 427 428 <!-- Login modal --> 429 <div class="modal-container"> 430 <label for="@modalTriggerId" class="modal-overlay"></label> 431 <div class="modal modal--xs"> 432 <div class="modal__header"> 433 <h2>@settings.ConfirmText</h2> 434 </div> 435 <div class="modal__body"> 436 @RenderButton(new Button { Title = Translate("OK"), ButtonLayout = ButtonLayout.Primary, OnClick = settings.OnClick, CssClass = "u-full-width", Link = settings.Link }) 437 </div> 438 </div> 439 </div> 440 } 441 } 442 @using System.Reflection 443 @using Dynamicweb.Rapido.Blocks.Components 444 @using Dynamicweb.Rapido.Blocks.Components.General 445 @using Dynamicweb.Rapido.Blocks 446 447 448 @* Component *@ 449 450 @helper RenderRating(Rating settings) 451 { 452 dynamic[] methodParameters = new dynamic[1]; 453 methodParameters[0] = settings; 454 MethodInfo customMethod = this.GetType().GetMethod("RenderRatingCustom"); 455 456 if (customMethod != null) 457 { 458 @customMethod.Invoke(this, methodParameters).ToString(); 459 } else { 460 if (settings.Score > 0) 461 { 462 int rating = settings.Score; 463 string iconType = "fa-star"; 464 465 switch (settings.Type.ToString()) { 466 case "Stars": 467 iconType = "fa-star"; 468 break; 469 case "Hearts": 470 iconType = "fa-heart"; 471 break; 472 case "Lemons": 473 iconType = "fa-lemon"; 474 break; 475 case "Bombs": 476 iconType = "fa-bomb"; 477 break; 478 } 479 480 <div class="u-ta-right"> 481 @for (int i = 0; i < settings.OutOf; i++) 482 { 483 <i class="@(rating > i ? "fas" : "far") @iconType"></i> 484 } 485 </div> 486 } 487 } 488 } 489 @using System.Reflection 490 @using Dynamicweb.Rapido.Blocks.Components.General 491 @using Dynamicweb.Rapido.Blocks.Components 492 493 494 @* Component *@ 495 496 @helper RenderFieldListOption(FieldListOption settings) { 497 dynamic[] methodParameters = new dynamic[1]; 498 methodParameters[0] = settings; 499 MethodInfo customMethod = this.GetType().GetMethod("RenderFieldListOptionCustom"); 500 501 if (customMethod != null) 502 { 503 @customMethod.Invoke(this, methodParameters).ToString(); 504 } else { 505 string disabled = settings.Disabled ? "disabled" : ""; 506 string selected = settings.Checked ? "checked" : ""; 507 508 if (settings.Type.ToString() == "RadioButton") 509 { 510 <input class="form__control @disabled dw-mod" onchange="@settings.OnChange" onclick="@settings.OnClick" type="radio" name="@settings.Name" id="@settings.Id" value="@settings.Value" @selected @disabled @ComponentMethods.AddAttributes(settings.ExtraAttributes) /> 511 <label for="@settings.Id" class="u-inline @disabled dw-mod">@settings.Label</label> 512 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 513 } 514 515 if (settings.Type.ToString() == "Checkbox") 516 { 517 @RenderCheckboxField(settings) 518 } 519 520 if (settings.Type.ToString() == "SelectOption") 521 { 522 <option value="@settings.Value" id="@settings.Id" onclick="@settings.OnClick" class="@disabled" @disabled @selected @ComponentMethods.AddAttributes(settings.ExtraAttributes) >@settings.Name</option> 523 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 524 } 525 } 526 } 527 528 @using System.Reflection 529 @using Dynamicweb.Rapido.Blocks.Components.General 530 @using Dynamicweb.Rapido.Blocks.Components 531 532 533 @* Component *@ 534 535 @helper RenderNavigation(Navigation settings) { 536 dynamic[] methodParameters = new dynamic[1]; 537 methodParameters[0] = settings; 538 MethodInfo customMethod = this.GetType().GetMethod("RenderNavigationCustom"); 539 540 if (customMethod != null) 541 { 542 @customMethod.Invoke(this, methodParameters).ToString(); 543 } else { 544 @RenderNavigation(new 545 { 546 id = settings.Id, 547 cssclass = settings.CssClass, 548 startLevel = settings.StartLevel, 549 endlevel = settings.EndLevel, 550 expandmode = settings.Expandmode, 551 template = settings.Template 552 }) 553 } 554 } 555 @using System.Reflection 556 @using Dynamicweb.Rapido.Blocks.Components.General 557 @using Dynamicweb.Rapido.Blocks.Components 558 559 560 @* Component *@ 561 562 @helper RenderBreadcrumbNavigation(BreadcrumbNavigation settings) { 563 dynamic[] methodParameters = new dynamic[1]; 564 methodParameters[0] = settings; 565 MethodInfo customMethod = this.GetType().GetMethod("RenderBreadcrumbNavigationCustom"); 566 567 if (customMethod != null) 568 { 569 @customMethod.Invoke(this, methodParameters).ToString(); 570 } else { 571 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id; 572 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template; 573 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel; 574 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel; 575 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode; 576 577 @RenderNavigation(settings) 578 } 579 } 580 @using System.Reflection 581 @using Dynamicweb.Rapido.Blocks.Components.General 582 583 584 @* Component *@ 585 586 @helper RenderHeading(Heading settings) { 587 dynamic[] methodParameters = new dynamic[1]; 588 methodParameters[0] = settings; 589 MethodInfo customMethod = this.GetType().GetMethod("RenderHeadingCustom"); 590 591 if (customMethod != null) 592 { 593 @customMethod.Invoke(this, methodParameters).ToString(); 594 } else { 595 string startTag = "<h" + settings.Level.ToString() + " class=\"" + settings.CssClass + "\">"; 596 string endTag = "</h" + settings.Level.ToString() + "\">"; 597 598 if (settings.Icon != null) 599 { 600 if (settings.IconPosition == null) { 601 settings.Icon.LabelPosition = IconLabelPosition.After; 602 } else { 603 settings.Icon.LabelPosition = settings.IconPosition == IconPosition.Before ? IconLabelPosition.After : IconLabelPosition.Before; 604 } 605 if (settings.Icon.Label == null) { 606 settings.Icon.Label = settings.Title; 607 } 608 609 @startTag@RenderIcon(settings.Icon)@endTag 610 } else { 611 @startTag@settings.Title@endTag 612 } 613 } 614 } 615 @using System.Reflection 616 @using Dynamicweb.Rapido.Blocks.Components 617 @using Dynamicweb.Rapido.Blocks.Components.General 618 @using Dynamicweb.Rapido.Blocks 619 620 621 @* Component *@ 622 623 @helper RenderImage(Image settings) 624 { 625 if (settings.Path != null) 626 { 627 dynamic[] methodParameters = new dynamic[1]; 628 methodParameters[0] = settings; 629 MethodInfo customMethod = this.GetType().GetMethod("RenderImageCustom"); 630 631 if (customMethod != null) 632 { 633 @customMethod.Invoke(this, methodParameters).ToString(); 634 } else { 635 <div> 636 @if (settings.Link != null) 637 { 638 <a href="@settings.Link"> 639 640 @RenderTheImage(settings); 641 </a> 642 } 643 else 644 { 645 @RenderTheImage(settings); 646 } 647 </div> 648 } 649 } 650 } 651 652 @functions { 653 string getImagePathFromSettings(ImageSettings settings) 654 { 655 string result = ""; 656 657 if (settings != null) 658 { 659 result += settings.Width != 0 ? "Width=" + settings.Width + "&" : ""; 660 result += settings.Height != 0 ? "Height=" + settings.Height + "&" : ""; 661 result += "Crop=" + settings.Crop + "&"; 662 result += "Compression=" + 99 + "&"; 663 result += "DoNotUpscale=" + settings.DoNotUpscale.ToString() + "&"; 664 result += "FillCanvas=" + settings.FillCanvas.ToString() + "&"; 665 } 666 667 return result; 668 } 669 } 670 671 @helper RenderTheImage(Image settings) 672 { 673 if (settings != null) 674 { 675 dynamic[] methodParameters = new dynamic[1]; 676 methodParameters[0] = settings; 677 MethodInfo customMethod = this.GetType().GetMethod("RenderTheImageCustom"); 678 679 if (customMethod != null) 680 { 681 @customMethod.Invoke(this, methodParameters).ToString(); 682 } else { 683 string placeholderImage = "/Files/Images/placeholder.gif"; 684 string imageEngine = "/Admin/Public/GetImage.ashx?"; 685 686 string imageStyle = ""; 687 688 switch (settings.Style) 689 { 690 case ImageStyle.Ball: 691 imageStyle = "grid__cell-img--ball"; 692 break; 693 } 694 695 if (settings.Style == ImageStyle.Ball || settings.Style == ImageStyle.Circle) 696 { 697 if (settings.ImageDefault != null) 698 { 699 settings.ImageDefault.Height = settings.ImageDefault.Width; 700 } 701 if (settings.ImageMedium != null) 702 { 703 settings.ImageMedium.Height = settings.ImageMedium.Width; 704 } 705 if (settings.ImageSmall != null) 706 { 707 settings.ImageSmall.Height = settings.ImageSmall.Width; 708 } 709 } 710 711 string defaultImage = imageEngine; 712 string imageSmall = ""; 713 string imageMedium = ""; 714 715 if (settings.DisableImageEngine) { 716 defaultImage = settings.Path; 717 } else { 718 if (settings.ImageDefault != null) 719 { 720 defaultImage += getImagePathFromSettings(settings.ImageDefault); 721 722 if (settings.Path.GetType() != typeof(string)) 723 { 724 defaultImage += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 725 defaultImage += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 726 } 727 else 728 { 729 defaultImage += settings.Path != null ? "Image=" + settings.Path : ""; 730 } 731 } 732 733 if (settings.ImageSmall != null) 734 { 735 imageSmall = "data-src-small=\"" + imageEngine; 736 imageSmall += getImagePathFromSettings(settings.ImageSmall); 737 738 if (settings.Path.GetType() != typeof(string)) 739 { 740 imageSmall += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 741 imageSmall += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 742 } 743 else 744 { 745 imageSmall += settings.Path != null ? "Image=" + settings.Path : ""; 746 } 747 748 imageSmall += "\""; 749 } 750 751 if (settings.ImageMedium != null) 752 { 753 imageMedium = "data-src-medium=\"" + imageEngine; 754 imageMedium += getImagePathFromSettings(settings.ImageMedium); 755 756 if (settings.Path.GetType() != typeof(string)) 757 { 758 imageMedium += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : ""; 759 imageMedium += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : ""; 760 } 761 else 762 { 763 imageMedium += settings.Path != null ? "Image=" + settings.Path : ""; 764 } 765 766 imageMedium += "\""; 767 } 768 } 769 770 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>(); 771 if (!String.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick); } 772 if (!String.IsNullOrEmpty(settings.Title)) { optionalAttributes.Add("alt", settings.Title); } 773 774 if (settings.DisableLazyLoad) { 775 <img class="grid__cell-img @imageStyle @settings.CssClass dw-mod" src="@defaultImage" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) /> 776 } else { 777 <img class="grid__cell-img b-lazy @imageStyle @settings.CssClass dw-mod" src="@placeholderImage" data-src="@defaultImage" @imageSmall @imageMedium @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) /> 778 } 779 780 if (settings.Caption != null) 781 { 782 <span class="image-caption dw-mod">@settings.Caption</span> 783 } 784 } 785 } 786 } 787 @using System.Reflection 788 @using Dynamicweb.Rapido.Blocks.Components.General 789 @using Dynamicweb.Rapido.Blocks.Components 790 791 792 @* Component *@ 793 794 @helper RenderTextField(TextField settings) { 795 dynamic[] methodParameters = new dynamic[1]; 796 methodParameters[0] = settings; 797 MethodInfo customMethod = this.GetType().GetMethod("RenderTextFieldCustom"); 798 799 if (customMethod != null) 800 { 801 @customMethod.Invoke(this, methodParameters).ToString(); 802 } else { 803 int maxLength = settings.MaxLength != 0 ? settings.MaxLength : 524288; 804 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>(); 805 if (settings.Type == TextFieldType.Password) { optionalAttributes.Add("autocomplete", "off"); }; 806 if (!String.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick.ToString()); } 807 if (!String.IsNullOrEmpty(settings.Placeholder)) { optionalAttributes.Add("placeholder", settings.Placeholder); } 808 if (settings.Disabled) { optionalAttributes.Add("disabled", settings.Disabled.ToString()); } 809 if (settings.Required) { optionalAttributes.Add("required", settings.Required.ToString()); } 810 if (settings.MaxLength != 0) { optionalAttributes.Add("maxlength", settings.MaxLength.ToString()); } 811 812 <div class="form__field-group dw-mod"> 813 @if (!String.IsNullOrEmpty(settings.Label)) 814 { 815 <label for="@settings.Id">@settings.Label</label> 816 } 817 818 <input type="@settings.Type" class="u-full-width @settings.CssClass dw-mod" name="@settings.Id" id="@(settings.Id)" value="@settings.Value" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) /> 819 820 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 821 </div> 822 } 823 } 824 @using System.Reflection 825 @using Dynamicweb.Rapido.Blocks.Components.General 826 @using Dynamicweb.Rapido.Blocks.Components 827 828 829 @* Component *@ 830 831 @helper RenderNumberField(NumberField settings) { 832 dynamic[] methodParameters = new dynamic[1]; 833 methodParameters[0] = settings; 834 MethodInfo customMethod = this.GetType().GetMethod("RenderNumberFieldCustom"); 835 836 if (customMethod != null) 837 { 838 @customMethod.Invoke(this, methodParameters).ToString(); 839 } else { 840 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>(); 841 if (!String.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick.ToString()); } 842 if (settings.Disabled) { optionalAttributes.Add("disabled", settings.Disabled.ToString()); } 843 if (settings.Required) { optionalAttributes.Add("required", settings.Required.ToString()); } 844 if (settings.Max != 0) { optionalAttributes.Add("max", settings.Max.ToString()); } 845 if (settings.Min != 0) { optionalAttributes.Add("min", settings.Min.ToString()); } 846 if (settings.Step != 0) { optionalAttributes.Add("step", settings.Step.ToString()); } 847 848 <div class="form__field-group dw-mod"> 849 @if (!String.IsNullOrEmpty(settings.Label)) 850 { 851 <div> 852 <label for="@settings.Id">@settings.Label</label> 853 </div> 854 } 855 856 <input type="Number" class="u-w70px @settings.CssClass dw-mod" name="@settings.Id" id="@(settings.Id)" value="@settings.Value" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) /> 857 858 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 859 </div> 860 } 861 } 862 @using System.Reflection 863 @using Dynamicweb.Rapido.Blocks.Components.General 864 @using Dynamicweb.Rapido.Blocks.Components 865 866 867 @* Component *@ 868 869 @helper RenderTextareaField(TextareaField settings) { 870 dynamic[] methodParameters = new dynamic[1]; 871 methodParameters[0] = settings; 872 MethodInfo customMethod = this.GetType().GetMethod("RenderTextareaFieldCustom"); 873 874 if (customMethod != null) 875 { 876 @customMethod.Invoke(this, methodParameters).ToString(); 877 } else { 878 int maxLength = settings.MaxLength != 0 ? settings.MaxLength : 524288; 879 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>(); 880 if (!String.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick.ToString()); } 881 if (!String.IsNullOrEmpty(settings.Placeholder)) { optionalAttributes.Add("placeholder", settings.Placeholder); } 882 if (settings.Disabled) { optionalAttributes.Add("disabled", settings.Disabled.ToString()); } 883 if (settings.Required) { optionalAttributes.Add("required", settings.Required.ToString()); } 884 if (settings.MaxLength != 0) { optionalAttributes.Add("maxlength", settings.MaxLength.ToString()); } 885 if (settings.Rows != 0) { optionalAttributes.Add("rows", settings.Rows.ToString()); } 886 887 <div class="form__field-group dw-mod"> 888 @if (!String.IsNullOrEmpty(@settings.Label)) 889 { 890 <label for="@settings.Id">@settings.Label</label> 891 } 892 893 <textarea class="u-full-width @settings.CssClass dw-mod" name="@settings.Id" id="@(settings.Id)" value="@settings.Value" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)></textarea> 894 895 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 896 </div> 897 } 898 } 899 @using System.Reflection 900 @using Dynamicweb.Rapido.Blocks.Components.General 901 @using Dynamicweb.Rapido.Blocks.Components 902 903 904 @* Component *@ 905 906 @helper RenderHiddenField(HiddenField settings) { 907 dynamic[] methodParameters = new dynamic[1]; 908 methodParameters[0] = settings; 909 MethodInfo customMethod = this.GetType().GetMethod(settings.HelperName + "Custom"); 910 911 if (customMethod != null) 912 { 913 @customMethod.Invoke(this, methodParameters).ToString(); 914 } else { 915 <input type="hidden" name="@settings.Id" id="@(settings.Id)" value="@settings.Value" @ComponentMethods.AddAttributes(settings.ExtraAttributes)/> 916 } 917 } 918 @using System.Reflection 919 @using Dynamicweb.Rapido.Blocks.Components.General 920 @using Dynamicweb.Rapido.Blocks.Components 921 922 923 @* Component *@ 924 925 @helper RenderCheckboxField(dynamic settings) { 926 dynamic[] methodParameters = new dynamic[1]; 927 methodParameters[0] = settings; 928 MethodInfo customMethod = this.GetType().GetMethod("RenderCheckboxFieldCustom"); 929 930 if (customMethod != null) 931 { 932 @customMethod.Invoke(this, methodParameters).ToString(); 933 } else { 934 settings.Type = FieldListOptionType.Checkbox; 935 string disabled = settings.Disabled ? "disabled" : ""; 936 string required = settings.Required ? "required" : ""; 937 string checkedString = settings.Checked == true ? "checked" : ""; 938 string id = settings.Id != null ? settings.Id : settings.Label.Replace(" ", ""); 939 940 <div class="form__field-group dw-mod"> 941 <input type="checkbox" class="form__control @settings.CssClass @disabled dw-mod" name="@settings.Name" id="@id" value="@settings.Value" onclick="@settings.OnClick" @disabled @required @checkedString @ComponentMethods.AddAttributes(settings.ExtraAttributes) /> 942 943 @if (!String.IsNullOrEmpty(settings.Label)) 944 { 945 <label for="@id" class="@disabled dw-mod">@settings.Label</label> 946 } 947 948 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 949 </div> 950 } 951 } 952 @using System.Reflection 953 @using Dynamicweb.Rapido.Blocks.Components.General 954 @using Dynamicweb.Rapido.Blocks.Components 955 956 957 @* Component *@ 958 959 @helper RenderCheckboxListField(CheckboxListField settings) { 960 dynamic[] methodParameters = new dynamic[1]; 961 methodParameters[0] = settings; 962 MethodInfo customMethod = this.GetType().GetMethod("RenderCheckboxListFieldCustom"); 963 964 if (customMethod != null) 965 { 966 @customMethod.Invoke(this, methodParameters).ToString(); 967 } else { 968 string disabled = settings.Disabled ? "disabled" : ""; 969 970 <div class="form__field-group @settings.CssClass u-margin-bottom @disabled dw-mod" @disabled @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 971 @if (!String.IsNullOrEmpty(settings.Label)) 972 { 973 <div class="u-bold u-margin-bottom">@settings.Label</div> 974 } 975 976 @foreach (var item in settings.Options) 977 { 978 item.Type = FieldListOptionType.Checkbox; 979 @RenderFieldListOption(item) 980 } 981 982 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 983 </div> 984 } 985 } 986 987 @using System.Reflection 988 @using Dynamicweb.Rapido.Blocks.Components.General 989 @using Dynamicweb.Rapido.Blocks.Components 990 991 992 @* Component *@ 993 994 @helper RenderSelectField(SelectField settings) { 995 dynamic[] methodParameters = new dynamic[1]; 996 methodParameters[0] = settings; 997 MethodInfo customMethod = this.GetType().GetMethod("RenderSelectFieldCustom"); 998 999 if (customMethod != null) 1000 { 1001 @customMethod.Invoke(this, methodParameters).ToString(); 1002 } else { 1003 string disabled = settings.Disabled ? "disabled" : ""; 1004 string required = settings.Required ? "required" : ""; 1005 1006 if (settings.Default != null) 1007 { 1008 settings.Default.Type = FieldListOptionType.SelectOption; 1009 } 1010 1011 <div class="form__field-group u-full-width dw-mod"> 1012 @if (!String.IsNullOrEmpty(settings.Label)) 1013 { 1014 <label for="@settings.Id">@settings.Label</label> 1015 } 1016 1017 <div class="form__field-combi u-no-margin dw-mod"> 1018 <select id="@settings.Id" class="u-full-width @settings.CssClass dw-mod" onchange="@settings.OnChange" @ComponentMethods.AddAttributes(settings.ExtraAttributes) > 1019 @if (settings.Default.Value != null) 1020 { 1021 @RenderFieldListOption(settings.Default) 1022 } 1023 1024 @foreach (var item in settings.Options) 1025 { 1026 item.Type = FieldListOptionType.SelectOption; 1027 @RenderFieldListOption(item) 1028 } 1029 </select> 1030 @if (settings.ActionButton.Link != null || settings.ActionButton.OnClick != null) { 1031 settings.ActionButton.CssClass += " btn--condensed u-no-margin"; 1032 @RenderButton(settings.ActionButton); 1033 } 1034 </div> 1035 1036 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 1037 </div> 1038 } 1039 } 1040 @using System.Reflection 1041 @using Dynamicweb.Rapido.Blocks.Components.General 1042 @using Dynamicweb.Rapido.Blocks.Components 1043 1044 1045 @* Component *@ 1046 1047 @helper RenderRadioButtonField(RadioButtonField settings) { 1048 dynamic[] methodParameters = new dynamic[1]; 1049 methodParameters[0] = settings; 1050 MethodInfo customMethod = this.GetType().GetMethod("RenderRadioButtonFieldCustom"); 1051 1052 if (customMethod != null) 1053 { 1054 @customMethod.Invoke(this, methodParameters).ToString(); 1055 } else { 1056 string disabled = settings.Disabled ? "disabled" : ""; 1057 1058 <div class="form__field-group @settings.CssClass u-margin-bottom @disabled" @disabled @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1059 @if (!String.IsNullOrEmpty(settings.Label)) 1060 { 1061 <div class="u-bold u-margin-bottom">@settings.Label</div> 1062 } 1063 1064 @foreach (var item in settings.Options) 1065 { 1066 item.Type = FieldListOptionType.RadioButton; 1067 1068 if (settings.Name != null) 1069 { 1070 item.Name = settings.Name; 1071 } 1072 1073 if (settings.RenderOptionsInline) 1074 { 1075 @RenderFieldListOption(item) 1076 } 1077 else 1078 { 1079 <div> 1080 @RenderFieldListOption(item) 1081 </div> 1082 } 1083 } 1084 1085 @RenderNotificationMessage(new NotificationMessage { Message = settings.ErrorMessage }) 1086 </div> 1087 } 1088 } 1089 @using System.Reflection 1090 @using Dynamicweb.Rapido.Blocks.Components.General 1091 @using Dynamicweb.Rapido.Blocks.Components 1092 1093 1094 @* Component *@ 1095 1096 @helper RenderNotificationMessage(NotificationMessage settings) { 1097 dynamic[] methodParameters = new dynamic[1]; 1098 methodParameters[0] = settings; 1099 MethodInfo customMethod = this.GetType().GetMethod("RenderNotificationMessageCustom"); 1100 1101 if (customMethod != null) 1102 { 1103 @customMethod.Invoke(this, methodParameters).ToString(); 1104 } else { 1105 if (!String.IsNullOrEmpty(settings.Message)) 1106 { 1107 string messageTypeClass = settings.MessageType.ToString().ToLower(); 1108 <div class="field-@messageTypeClass @settings.CssClass u-full-width dw-mod">@settings.Message</div> 1109 } 1110 } 1111 } 1112 @using System.Reflection 1113 @using Dynamicweb.Rapido.Blocks.Components.General 1114 1115 1116 @* Component *@ 1117 1118 @helper RenderHandlebarsRoot(HandlebarsRoot settings) { 1119 dynamic[] methodParameters = new dynamic[1]; 1120 methodParameters[0] = settings; 1121 MethodInfo customMethod = this.GetType().GetMethod("RenderHandlebarsRootCustom"); 1122 1123 if (customMethod != null) 1124 { 1125 @customMethod.Invoke(this, methodParameters).ToString(); 1126 } else { 1127 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : ""; 1128 1129 <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> 1130 @if (settings.SubBlocks != null) { 1131 @RenderBlockList(settings.SubBlocks) 1132 } 1133 </div> 1134 } 1135 } 1136 @using System.Reflection 1137 @using Dynamicweb.Rapido.Blocks.Components.General 1138 @using Dynamicweb.Rapido.Blocks.Components 1139 @using System.Text.RegularExpressions 1140 1141 1142 @* Component *@ 1143 1144 @helper RenderSticker(Sticker settings) { 1145 dynamic[] methodParameters = new dynamic[1]; 1146 methodParameters[0] = settings; 1147 MethodInfo customMethod = this.GetType().GetMethod("RenderStickerCustom"); 1148 1149 if (customMethod != null) 1150 { 1151 @customMethod.Invoke(this, methodParameters).ToString(); 1152 } 1153 else 1154 { 1155 if (!String.IsNullOrEmpty(settings.Title)) { 1156 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : ""; 1157 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : ""; 1158 1159 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>(); 1160 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) { 1161 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : ""; 1162 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : ""; 1163 optionalAttributes.Add("style", styleTag); 1164 } 1165 1166 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div> 1167 } 1168 } 1169 } 1170 1171 @using System.Reflection 1172 @using Dynamicweb.Rapido.Blocks.Components.General 1173 @using Dynamicweb.Rapido.Blocks.Components 1174 1175 1176 @* Component *@ 1177 1178 @helper RenderStickersCollection(StickersCollection settings) { 1179 dynamic[] methodParameters = new dynamic[1]; 1180 methodParameters[0] = settings; 1181 MethodInfo customMethod = this.GetType().GetMethod("RenderStickersCollectionCustom"); 1182 1183 if (customMethod != null) 1184 { 1185 @customMethod.Invoke(this, methodParameters).ToString(); 1186 } 1187 else 1188 { 1189 if (settings.Stickers.Count > 0) { 1190 string position = settings.Position != null ? "" + "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower() : ""; 1191 1192 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)> 1193 @foreach (Sticker sticker in settings.Stickers) 1194 { 1195 @RenderSticker(sticker) 1196 } 1197 </div> 1198 } 1199 } 1200 } 1201 1202 @using System.Reflection 1203 @using Dynamicweb.Rapido.Blocks.Components.General 1204 @using Dynamicweb.Rapido.Blocks.Components 1205 1206 1207 1208 @* Component *@ 1209 1210 @helper RenderField(Field settings) { 1211 dynamic[] methodParameters = new dynamic[1]; 1212 methodParameters[0] = settings; 1213 MethodInfo customMethod = this.GetType().GetMethod("RenderFieldCustom"); 1214 1215 if (customMethod != null) 1216 { 1217 @customMethod.Invoke(this, methodParameters).ToString(); 1218 } else { 1219 switch (settings.FieldType) 1220 { 1221 case FieldType.Checkbox: 1222 CheckboxField checkbox = new CheckboxField 1223 { 1224 Label = settings.Label, 1225 Id = settings.Id, 1226 Name = settings.Label.Replace(" ", ""), 1227 Value = settings.Value, 1228 Checked = Convert.ToBoolean(settings.Placeholder), 1229 OnClick = settings.OnClick, 1230 Disabled = settings.Disabled, 1231 Required = settings.Required, 1232 CssClass = settings.CssClass, 1233 ExtraAttributes = settings.ExtraAttributes, 1234 ErrorMessage = settings.ErrorMessage 1235 }; 1236 1237 @RenderCheckboxField(checkbox) 1238 break; 1239 case FieldType.Email: 1240 TextField emailField = new TextField 1241 { 1242 Label = settings.Label != null ? settings.Label : Translate("Email"), 1243 Id = settings.Id, 1244 Value = settings.Value, 1245 OnClick = settings.OnClick, 1246 Disabled = settings.Disabled, 1247 Required = settings.Required, 1248 CssClass = settings.CssClass, 1249 ExtraAttributes = settings.ExtraAttributes, 1250 ErrorMessage = settings.ErrorMessage, 1251 Placeholder = settings.Placeholder, 1252 Type = TextFieldType.Email 1253 }; 1254 1255 @RenderTextField(emailField) 1256 break; 1257 case FieldType.Hidden: 1258 HiddenField hiddenField = new HiddenField 1259 { 1260 Label = settings.Label, 1261 Id = settings.Id, 1262 Value = settings.Value, 1263 Disabled = settings.Disabled, 1264 Required = settings.Required, 1265 CssClass = settings.CssClass, 1266 ExtraAttributes = settings.ExtraAttributes, 1267 ErrorMessage = settings.ErrorMessage 1268 }; 1269 1270 @RenderHiddenField(hiddenField) 1271 break; 1272 case FieldType.Integer: 1273 NumberField numberField = new NumberField 1274 { 1275 Label = settings.Label, 1276 Id = settings.Id, 1277 Value = settings.Value.GetType() == typeof(int) ? Convert.ToInt32(settings.Value) : 1, 1278 OnClick = settings.OnClick, 1279 Disabled = settings.Disabled, 1280 Required = settings.Required, 1281 CssClass = settings.CssClass, 1282 ExtraAttributes = settings.ExtraAttributes, 1283 ErrorMessage = settings.ErrorMessage, 1284 Step = 1 1285 }; 1286 1287 @RenderNumberField(numberField) 1288 break; 1289 case FieldType.Password: 1290 TextField passwordField = new TextField 1291 { 1292 Label = settings.Label != null ? settings.Label : Translate("Password"), 1293 Id = settings.Id, 1294 Value = settings.Value, 1295 OnClick = settings.OnClick, 1296 Disabled = settings.Disabled, 1297 Required = settings.Required, 1298 CssClass = settings.CssClass, 1299 ExtraAttributes = settings.ExtraAttributes, 1300 ErrorMessage = settings.ErrorMessage, 1301 Placeholder = settings.Placeholder, 1302 Type = TextFieldType.Password 1303 }; 1304 1305 @RenderTextField(passwordField) 1306 break; 1307 case FieldType.Reset: 1308 Button resetField = new Button 1309 { 1310 Title = settings.Label != null ? settings.Label : Translate("Reset"), 1311 Id = settings.Id, 1312 OnClick = settings.OnClick, 1313 Disabled = settings.Disabled, 1314 CssClass = settings.CssClass, 1315 ExtraAttributes = settings.ExtraAttributes, 1316 ButtonLayout = ButtonLayout.Secondary, 1317 ButtonType = ButtonType.Reset 1318 }; 1319 1320 @RenderButton(resetField) 1321 break; 1322 case FieldType.Submit: 1323 Button submitField = new Button 1324 { 1325 Title = settings.Label != null ? settings.Label : Translate("Submit"), 1326 Id = settings.Id, 1327 OnClick = settings.OnClick, 1328 Disabled = settings.Disabled, 1329 CssClass = settings.CssClass, 1330 ExtraAttributes = settings.ExtraAttributes, 1331 ButtonLayout = ButtonLayout.Primary, 1332 ButtonType = ButtonType.Submit 1333 }; 1334 1335 @RenderButton(submitField) 1336 break; 1337 case FieldType.Tel: 1338 TextField telField = new TextField 1339 { 1340 Label = settings.Label != null ? settings.Label : Translate("Phone"), 1341 Id = settings.Id, 1342 Value = settings.Value, 1343 OnClick = settings.OnClick, 1344 Disabled = settings.Disabled, 1345 Required = settings.Required, 1346 CssClass = settings.CssClass, 1347 ExtraAttributes = settings.ExtraAttributes, 1348 ErrorMessage = settings.ErrorMessage, 1349 Placeholder = settings.Placeholder, 1350 Type = TextFieldType.Tel 1351 }; 1352 1353 @RenderTextField(telField) 1354 break; 1355 case FieldType.Text: 1356 TextField textField = new TextField 1357 { 1358 Label = settings.Label, 1359 Id = settings.Id, 1360 Value = settings.Value, 1361 OnClick = settings.OnClick, 1362 Disabled = settings.Disabled, 1363 Required = settings.Required, 1364 CssClass = settings.CssClass, 1365 ExtraAttributes = settings.ExtraAttributes, 1366 ErrorMessage = settings.ErrorMessage, 1367 Placeholder = settings.Placeholder, 1368 Type = TextFieldType.Text 1369 }; 1370 1371 @RenderTextField(textField) 1372 break; 1373 case FieldType.Textarea: 1374 TextareaField textareaField = new TextareaField 1375 { 1376 Label = settings.Label, 1377 Id = settings.Id, 1378 Value = settings.Value, 1379 OnClick = settings.OnClick, 1380 Disabled = settings.Disabled, 1381 Required = settings.Required, 1382 CssClass = settings.CssClass, 1383 ExtraAttributes = settings.ExtraAttributes, 1384 ErrorMessage = settings.ErrorMessage, 1385 Placeholder = settings.Placeholder 1386 }; 1387 1388 @RenderTextareaField(textareaField) 1389 break; 1390 default: 1391 TextField defaultField = new TextField 1392 { 1393 Label = settings.Label, 1394 Id = settings.Id, 1395 Value = settings.Value, 1396 OnClick = settings.OnClick, 1397 Disabled = settings.Disabled, 1398 Required = settings.Required, 1399 CssClass = settings.CssClass, 1400 ExtraAttributes = settings.ExtraAttributes, 1401 ErrorMessage = settings.ErrorMessage, 1402 Placeholder = settings.Placeholder, 1403 Type = TextFieldType.Text 1404 }; 1405 1406 @RenderTextField(defaultField) 1407 break; 1408 } 1409 } 1410 } 1411 1412 1413 @using Dynamicweb.Frontend 1414 @using System.Reflection 1415 @using Dynamicweb.Content.Items 1416 @using System.Web.UI.HtmlControls 1417 @using Dynamicweb.Rapido.Blocks.Components 1418 @using Dynamicweb.Rapido.Blocks 1419 1420 1421 @* Components for the articles *@ 1422 @using System.Reflection 1423 @using Dynamicweb.Rapido.Blocks.Components.Articles 1424 1425 1426 @* Component for the articles *@ 1427 1428 @helper RenderArticleBanner(dynamic settings) { 1429 dynamic[] methodParameters = new dynamic[1]; 1430 methodParameters[0] = settings; 1431 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleBannerCustom"); 1432 1433 if (customMethod != null) 1434 { 1435 @customMethod.Invoke(this, methodParameters).ToString(); 1436 } else { 1437 string filterClasses = "image-filter image-filter--darken"; 1438 settings.Layout = ArticleHeaderLayout.Banner; 1439 1440 if (settings.Image != null) 1441 { 1442 if (settings.Image.Path != null) 1443 { 1444 <section class="multiple-paragraphs-container u-color-light paragraph-container--full-width"> 1445 <div class="background-image @filterClasses dw-mod"> 1446 <div class="background-image__wrapper @filterClasses dw-mod"> 1447 @{ 1448 settings.Image.CssClass += "background-image__cover dw-mod"; 1449 } 1450 @RenderImage(settings.Image) 1451 </div> 1452 </div> 1453 <div class="center-container dw-mod"> 1454 <div class="grid"> 1455 <div class="grid__col-md-8 grid__col-xs-12 paragraph-container paragraph-container--height-lg"> 1456 <div class="u-left-middle"> 1457 <div> 1458 @if (!String.IsNullOrEmpty(settings.Heading)) 1459 { 1460 <h1 class="article__header article__header--giant dw-mod" style="color: @settings.TextColor">@settings.Heading</h1> 1461 } 1462 @if (!String.IsNullOrEmpty(settings.Subheading)) 1463 { 1464 <div class="article__leadtext dw-mod" style="color: @settings.TextColor">@settings.Subheading</div> 1465 } 1466 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date)) 1467 { 1468 <small class="article__post-info u-margin-bottom--lg dw-mod" style="color: @settings.TextColor">@settings.Author @settings.Date</small> 1469 } 1470 @if (!String.IsNullOrEmpty(settings.Link)) { 1471 <div class="grid__cell"> 1472 @RenderButton(new Button { Link= settings.Link, Title= settings.LinkText, ButtonLayout= settings.ButtonLayout }) 1473 </div> 1474 } 1475 </div> 1476 </div> 1477 </div> 1478 @if (settings.ExternalParagraphId != 0) 1479 { 1480 <div class="grid__col-md-4 grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-auto dw-mod"> 1481 <div class="u-color-light-gray--bg u-color-dark dw-mod"> 1482 @RenderParagraphContent(settings.ExternalParagraphId) 1483 </div> 1484 </div> 1485 } 1486 </div> 1487 </div> 1488 </section> 1489 } 1490 else 1491 { 1492 settings.Layout = ArticleHeaderLayout.Clean; 1493 @RenderArticleCleanHeader(settings); 1494 } 1495 } 1496 else 1497 { 1498 settings.Layout = ArticleHeaderLayout.Clean; 1499 @RenderArticleCleanHeader(settings); 1500 } 1501 } 1502 } 1503 @using System.Reflection 1504 @using Dynamicweb.Rapido.Blocks.Components 1505 @using Dynamicweb.Rapido.Blocks.Components.General 1506 @using Dynamicweb.Rapido.Blocks.Components.Articles 1507 @using Dynamicweb.Rapido.Blocks 1508 1509 1510 @* Component for the articles *@ 1511 1512 @helper RenderArticleHeader(ArticleHeader settings) { 1513 dynamic[] methodParameters = new dynamic[1]; 1514 methodParameters[0] = settings; 1515 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleHeaderCustom"); 1516 1517 if (customMethod != null) 1518 { 1519 @customMethod.Invoke(this, methodParameters).ToString(); 1520 } else { 1521 switch (settings.Layout) 1522 { 1523 case ArticleHeaderLayout.Clean: 1524 @RenderArticleCleanHeader(settings); 1525 break; 1526 case ArticleHeaderLayout.Split: 1527 @RenderArticleSplitHeader(settings); 1528 break; 1529 case ArticleHeaderLayout.Banner: 1530 @RenderArticleBannerHeader(settings); 1531 break; 1532 case ArticleHeaderLayout.Overlay: 1533 @RenderArticleOverlayHeader(settings); 1534 break; 1535 default: 1536 @RenderArticleCleanHeader(settings); 1537 break; 1538 } 1539 } 1540 } 1541 1542 @helper RenderArticleCleanHeader(ArticleHeader settings) { 1543 dynamic[] methodParameters = new dynamic[1]; 1544 methodParameters[0] = settings; 1545 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleCleanHeaderCustom"); 1546 1547 if (customMethod != null) 1548 { 1549 @customMethod.Invoke(this, methodParameters).ToString(); 1550 } 1551 else 1552 { 1553 string contentColumns = settings.TextLayout != ArticleHeaderTextLayout.Full ? "8" : "12"; 1554 1555 <div class="grid grid--align-content-start grid--justify-start"> 1556 <div class="grid__col-md-@contentColumns grid__col-sm-12 u-padding--lg dw-mod"> 1557 @if (!String.IsNullOrEmpty(settings.Category) || !String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date) || settings.RatingOutOf != 0) 1558 { 1559 <div class="u-border-bottom u-padding-bottom"> 1560 @if (!String.IsNullOrEmpty(settings.Category)) 1561 { 1562 <div class="u-pull--left"> 1563 <div class="article__category dw-mod" style="color: @settings.CategoryColor">@settings.Category</div> 1564 </div> 1565 } 1566 <div class="u-pull--right"> 1567 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date)) 1568 { 1569 <small class="article__post-info dw-mod">@settings.Author @settings.Date</small> 1570 } 1571 @if (settings.RatingOutOf != 0) 1572 { 1573 @RenderRating(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf }) 1574 } 1575 </div> 1576 </div> 1577 } 1578 1579 <div class="grid__cell"> 1580 @if (!String.IsNullOrEmpty(settings.Heading)) 1581 { 1582 <h1 class="article__header article__header--giant dw-mod">@settings.Heading</h1> 1583 } 1584 @if (settings.Image != null) 1585 { 1586 if (settings.Image.Path != null) 1587 { 1588 <div class="u-padding-bottom--lg"> 1589 @RenderImage(settings.Image) 1590 </div> 1591 } 1592 } 1593 @if (!String.IsNullOrEmpty(settings.Subheading)) 1594 { 1595 <div class="article__leadtext dw-mod">@settings.Subheading</div> 1596 } 1597 @if (!String.IsNullOrEmpty(settings.Link)) 1598 { 1599 <div class="grid__cell"> 1600 @RenderButton(new Button { Link = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout }) 1601 </div> 1602 } 1603 </div> 1604 </div> 1605 @if (settings.ExternalParagraphId != 0) 1606 { 1607 <div class="grid__col-md-4 grid__col-sm-12 u-padding--lg u-color-light-gray--bg dw-mod"> 1608 @RenderParagraphContent(settings.ExternalParagraphId) 1609 </div> 1610 } 1611 </div> 1612 } 1613 } 1614 1615 @helper RenderArticleSplitHeader(ArticleHeader settings) { 1616 dynamic[] methodParameters = new dynamic[1]; 1617 methodParameters[0] = settings; 1618 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleSplitHeaderCustom"); 1619 1620 if (customMethod != null) 1621 { 1622 @customMethod.Invoke(this, methodParameters).ToString(); 1623 } 1624 else 1625 { 1626 string headerColumnWidth = settings.ExternalParagraphId != 0 ? "4" : "6"; 1627 1628 if (settings.Image != null) 1629 { 1630 if (settings.Image.Path != null) 1631 { 1632 <section class="multiple-paragraphs-container paragraph-container--full-width"> 1633 <div class="grid"> 1634 <div class="grid__col-md-@headerColumnWidth grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-xl dw-mod"> 1635 <div class="u-left-middle u-padding--lg"> 1636 <div> 1637 @if (!String.IsNullOrEmpty(settings.Category)) 1638 { 1639 <div class="article__category dw-mod" style="color: @settings.CategoryColor">@settings.Category</div> 1640 } 1641 @if (!String.IsNullOrEmpty(settings.Heading)) 1642 { 1643 <h1 class="article__header article__header--giant dw-mod">@settings.Heading</h1> 1644 } 1645 @if (!String.IsNullOrEmpty(settings.Subheading)) 1646 { 1647 <div class="article__leadtext dw-mod">@settings.Subheading</div> 1648 } 1649 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date)) 1650 { 1651 <small class="article__post-info u-pull--left dw-mod">@settings.Author @settings.Date</small> 1652 } 1653 @if (settings.RatingOutOf != 0) 1654 { 1655 <div class="u-pull--right"> 1656 @RenderRating(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf }) 1657 </div> 1658 } 1659 @if (!String.IsNullOrEmpty(settings.Link)) { 1660 @RenderButton(new Button { Link = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout }) 1661 } 1662 </div> 1663 </div> 1664 </div> 1665 <div class="grid__col-md-@headerColumnWidth grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-auto dw-mod" style="background-image:url(/Admin/Public/GetImage.ashx?width=1800&amp;height=1100&amp;crop=0&amp;Compression=85&amp;DoNotUpscale=true&amp;image=@settings.Image.Path); background-position: center center; background-size: cover;"></div> 1666 @if (settings.ExternalParagraphId != 0) 1667 { 1668 <div class="grid__col-md-4 grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-auto u-color-light-gray--bg dw-mod"> 1669 @RenderParagraphContent(settings.ExternalParagraphId) 1670 </div> 1671 } 1672 </div> 1673 </section> 1674 } 1675 } 1676 else 1677 { 1678 @RenderArticleCleanHeader(settings); 1679 } 1680 } 1681 } 1682 1683 @helper RenderArticleOverlayHeader(ArticleHeader settings) { 1684 dynamic[] methodParameters = new dynamic[1]; 1685 methodParameters[0] = settings; 1686 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleOverlayHeaderCustom"); 1687 1688 if (customMethod != null) 1689 { 1690 @customMethod.Invoke(this, methodParameters).ToString(); 1691 } 1692 else 1693 { 1694 string contentColumns = settings.TextLayout != ArticleHeaderTextLayout.Full ? "8" : "12"; 1695 string contentAlignment = settings.TextLayout == ArticleHeaderTextLayout.Center ? "grid--justify-center" : ""; 1696 1697 if (settings.Image != null) 1698 { 1699 if (settings.Image.Path != null) 1700 { 1701 if (settings.ExternalParagraphId == 0) 1702 { 1703 <section class="multiple-paragraphs-container u-color-light paragraph-container--full-width"> 1704 <div class="background-image image-filter image-filter--darken dw-mod"> 1705 <div class="background-image__wrapper image-filter image-filter--darken dw-mod"> 1706 @{ 1707 settings.Image.CssClass += "background-image__cover dw-mod"; 1708 } 1709 @RenderImage(settings.Image) 1710 </div> 1711 </div> 1712 <div class="center-container dw-mod"> 1713 <div class="grid @contentAlignment"> 1714 <div class="grid__col-md-@contentColumns grid__col-xs-12 paragraph-container paragraph-container--height-xl dw-mod"> 1715 @if (!String.IsNullOrEmpty(settings.Heading)) 1716 { 1717 <h1 class="article__header article__header--giant u-padding-top--lg dw-mod" style="color: @settings.TextColor">@settings.Heading</h1> 1718 } 1719 @if (!String.IsNullOrEmpty(settings.Subheading)) 1720 { 1721 <div class="article__leadtext dw-mod" style="color: @settings.TextColor">@settings.Subheading</div> 1722 } 1723 <div class="u-margin-top"> 1724 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date)) 1725 { 1726 <small class="article__post-info u-pull--left dw-mod" style="color: @settings.TextColor">@settings.Author @settings.Date</small> 1727 } 1728 @if (settings.RatingOutOf != 0) 1729 { 1730 <div class="u-pull--right"> 1731 @RenderRating(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf }) 1732 </div> 1733 } 1734 </div> 1735 @if (!String.IsNullOrEmpty(settings.Link)) 1736 { 1737 <div class="grid__cell"> 1738 @RenderButton(new Button { Link= settings.Link, Title= settings.LinkText, ButtonLayout= settings.ButtonLayout }) 1739 </div> 1740 } 1741 </div> 1742 </div> 1743 </div> 1744 </section> 1745 } 1746 else 1747 { 1748 @RenderArticleBanner(settings); 1749 } 1750 } 1751 } 1752 else 1753 { 1754 @RenderArticleCleanHeader(settings); 1755 } 1756 } 1757 } 1758 1759 @helper RenderArticleBannerHeader(dynamic settings) { 1760 dynamic[] methodParameters = new dynamic[1]; 1761 methodParameters[0] = settings; 1762 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleBannerHeaderCustom"); 1763 1764 if (customMethod != null) 1765 { 1766 @customMethod.Invoke(this, methodParameters).ToString(); 1767 } 1768 else 1769 { 1770 @RenderArticleBanner(settings); 1771 } 1772 } 1773 @using System.Reflection 1774 @using System.Text.RegularExpressions; 1775 @using Dynamicweb.Frontend 1776 @using Dynamicweb.Content.Items 1777 @using Dynamicweb.Rapido.Blocks.Components 1778 @using Dynamicweb.Rapido.Blocks.Components.Articles 1779 @using Dynamicweb.Rapido.Blocks 1780 1781 @* Component for the articles *@ 1782 1783 @helper RenderArticleBodyRow(ArticleBodyRow settings) 1784 { 1785 dynamic[] methodParameters = new dynamic[1]; 1786 methodParameters[0] = settings; 1787 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleBodyRowCustom"); 1788 1789 if (customMethod != null) 1790 { 1791 @customMethod.Invoke(this, methodParameters).ToString(); 1792 } else { 1793 string position = settings.TopLayout == "overlay" ? "article__overlay-offset" : ""; 1794 string contentAlignment = settings.TextLayout == "center" ? "grid--justify-center" : ""; 1795 1796 <div class="grid grid--align-content-start @contentAlignment @position dw-mod"> 1797 @RenderBlockList(settings.SubBlocks) 1798 </div> 1799 } 1800 } 1801 @using System.Reflection 1802 @using Dynamicweb.Rapido.Blocks.Components 1803 @using Dynamicweb.Rapido.Blocks.Components.General 1804 @using Dynamicweb.Rapido.Blocks.Components.Articles 1805 @using Dynamicweb.Rapido.Blocks 1806 1807 @* Component for the articles *@ 1808 1809 @helper RenderArticleImage(ArticleImage settings) 1810 { 1811 dynamic[] methodParameters = new dynamic[1]; 1812 methodParameters[0] = settings; 1813 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleImageCustom"); 1814 1815 if (customMethod != null) 1816 { 1817 @customMethod.Invoke(this, methodParameters).ToString(); 1818 } 1819 else 1820 { 1821 if (settings.Image != null) 1822 { 1823 if (settings.Image.Path != null) 1824 { 1825 <div class="u-margin-bottom--lg"> 1826 @RenderImage(settings.Image) 1827 </div> 1828 } 1829 } 1830 } 1831 } 1832 @using System.Reflection 1833 @using Dynamicweb.Rapido.Blocks.Components 1834 @using Dynamicweb.Rapido.Blocks.Components.Articles 1835 1836 1837 @* Component for the articles *@ 1838 1839 @helper RenderArticleSubHeader(ArticleSubHeader settings) 1840 { 1841 dynamic[] methodParameters = new dynamic[1]; 1842 methodParameters[0] = settings; 1843 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleSubHeaderCustom"); 1844 1845 if (customMethod != null) 1846 { 1847 @customMethod.Invoke(this, methodParameters).ToString(); 1848 } else { 1849 if (!String.IsNullOrEmpty(settings.Title)) 1850 { 1851 <h2 class="article__header">@settings.Title</h2> 1852 } 1853 } 1854 } 1855 @using System.Reflection 1856 @using Dynamicweb.Rapido.Blocks.Components 1857 @using Dynamicweb.Rapido.Blocks.Components.Articles 1858 @using Dynamicweb.Rapido.Blocks 1859 1860 1861 @* Component for the articles *@ 1862 1863 @helper RenderArticleText(ArticleText settings) 1864 { 1865 dynamic[] methodParameters = new dynamic[1]; 1866 methodParameters[0] = settings; 1867 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleTextCustom"); 1868 1869 if (customMethod != null) 1870 { 1871 @customMethod.Invoke(this, methodParameters).ToString(); 1872 } else { 1873 if (!String.IsNullOrEmpty(settings.Text)) 1874 { 1875 string greatTextClass = settings.EnableLargeText == true ? "article__paragraph--great-text" : ""; 1876 1877 <div class="article__paragraph @greatTextClass"> 1878 @settings.Text 1879 </div> 1880 } 1881 } 1882 } 1883 @using System.Reflection 1884 @using Dynamicweb.Rapido.Blocks.Components 1885 @using Dynamicweb.Rapido.Blocks.Components.Articles 1886 @using Dynamicweb.Rapido.Blocks 1887 1888 1889 @* Component for the articles *@ 1890 1891 @helper RenderArticleQuote(ArticleQuote settings) 1892 { 1893 dynamic[] methodParameters = new dynamic[1]; 1894 methodParameters[0] = settings; 1895 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleQuoteCustom"); 1896 1897 if (customMethod != null) 1898 { 1899 @customMethod.Invoke(this, methodParameters).ToString(); 1900 } else { 1901 string text = Regex.Replace(settings.Text, "<.*?>", String.Empty); 1902 1903 <div class="grid u-padding-bottom--lg"> 1904 @if (settings.Image != null) 1905 { 1906 if (settings.Image.Path != null) { 1907 <div class="grid__col-3"> 1908 <div class="grid__cell-img"> 1909 @{ 1910 settings.Image.Title = !String.IsNullOrEmpty(settings.Image.Title) ? settings.Image.Title : settings.Author; 1911 settings.Image.CssClass += " article__image article__image--ball"; 1912 settings.Image.ImageDefault.Width = 200; 1913 settings.Image.ImageDefault.Height = 200; 1914 } 1915 @RenderImage(settings.Image) 1916 </div> 1917 </div> 1918 } 1919 } 1920 <div class="grid__col-auto"> 1921 @if (!String.IsNullOrEmpty(settings.Text)) 1922 { 1923 <div class="article__quote dw-mod"> 1924 @settings.Text 1925 </div> 1926 } 1927 @if (!String.IsNullOrEmpty(settings.Author)) 1928 { 1929 <div class="article__quote-author dw-mod"> 1930 - @settings.Author 1931 </div> 1932 } 1933 </div> 1934 </div> 1935 } 1936 } 1937 @using System.Reflection 1938 @using Dynamicweb.Rapido.Blocks.Components 1939 @using Dynamicweb.Rapido.Blocks.Components.Articles 1940 @using Dynamicweb.Rapido.Blocks 1941 1942 @* Component for the articles *@ 1943 1944 @helper RenderArticleInfoTable(ArticleInfoTable settings) 1945 { 1946 dynamic[] methodParameters = new dynamic[1]; 1947 methodParameters[0] = settings; 1948 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleInfoTableCustom"); 1949 1950 if (customMethod != null) 1951 { 1952 @customMethod.Invoke(this, methodParameters).ToString(); 1953 } else { 1954 <table class="table table--clean"> 1955 @foreach (var row in settings.Rows) 1956 { 1957 string iconColor = row.IconColor != null ? row.IconColor : "u-brand-color-two"; 1958 1959 <tr> 1960 @if (!String.IsNullOrEmpty(row.Icon)) 1961 { 1962 <td class="u-w32px"><i class="@row.Icon fa-2x @row.IconColor"></i></td> 1963 } 1964 <td class="u-no-margin-on-p-elements"> 1965 <div class="u-bold">@row.Title</div> 1966 @if (!String.IsNullOrEmpty(row.SubTitle)) 1967 { 1968 if (row.Link == null) 1969 { 1970 <div>@row.SubTitle</div> 1971 } 1972 else 1973 { 1974 <a href="@row.Link" class="u-color-inherit">@row.SubTitle</a> 1975 } 1976 } 1977 </td> 1978 </tr> 1979 } 1980 </table> 1981 } 1982 } 1983 @using System.Reflection 1984 @using Dynamicweb.Rapido.Blocks.Components 1985 @using Dynamicweb.Rapido.Blocks.Components.Articles 1986 @using Dynamicweb.Rapido.Blocks 1987 1988 @* Component for the articles *@ 1989 1990 @helper RenderArticleGalleryModal(ArticleGalleryModal settings) 1991 { 1992 dynamic[] methodParameters = new dynamic[1]; 1993 methodParameters[0] = settings; 1994 MethodInfo customMethod = this.GetType().GetMethod(settings.HelperName + "Custom"); 1995 1996 if (customMethod != null) 1997 { 1998 @customMethod.Invoke(this, methodParameters).ToString(); 1999 } 2000 else 2001 { 2002 <input type="checkbox" id="ParagraphGalleryTrigger" class="modal-trigger" /> 2003 <div class="modal-container"> 2004 <label for="ParagraphGalleryTrigger" id="ParagraphGalleryOverlay" class="modal-overlay"></label> 2005 <div class="modal modal--full" id="ParagraphGallery"> 2006 <div class="modal__body modal__body--full"> 2007 <img src="/Files/Images/placeholder.gif" alt="" id="ParagraphGalleryModalImage" style="margin: 0 auto;" /> 2008 <div class="u-padding u-ta-center" id="ParagraphGalleryModalCaption"></div> 2009 <label class="modal__close-btn dw-mod" for="ParagraphGalleryTrigger"></label> 2010 </div> 2011 </div> 2012 </div> 2013 <script> 2014 function showImageInModal(image) { 2015 let imageNode = document.getElementById('ParagraphGalleryModalImage'); 2016 let captionNode = document.getElementById('ParagraphGalleryModalCaption'); 2017 let trigger = document.getElementById('ParagraphGalleryTrigger'); 2018 imageNode.src = image.src; 2019 if (image.alt != "") { 2020 captionNode.innerText = image.alt; 2021 imageNode.alt = image.alt; 2022 captionNode.style.display = "block"; 2023 } else { 2024 captionNode.style.display = "none"; 2025 } 2026 trigger.checked = true; 2027 } 2028 </script> 2029 } 2030 } 2031 @using System.Reflection 2032 @using Dynamicweb.Rapido.Blocks.Components 2033 @using Dynamicweb.Rapido.Blocks.Components.Articles 2034 @using Dynamicweb.Rapido.Blocks 2035 2036 2037 @* Component for the articles *@ 2038 2039 @helper RenderArticleRelated(ArticleRelated settings) 2040 { 2041 string cardClass = Pageview.Device.ToString() != "Tablet" ? "card u-color-light--bg u-full-height" : ""; 2042 string cardFooterClass = Pageview.Device.ToString() != "Tablet" ? "card-footer u-color-light--bg" : ""; 2043 2044 <section class="multiple-paragraphs-container u-color-light-gray--bg paragraph-container--full-width"> 2045 <div class="center-container dw-mod"> 2046 <div class="grid u-padding"> 2047 <div class="grid__col-md-12 grid__col-xs-12"> 2048 <h2 class="article__header u-no-margin u-margin-top">@settings.Title</h2> 2049 </div> 2050 </div> 2051 2052 <div class="js-handlebars-root u-padding" id="@settings.Title.Replace(" ", String.Empty)" data-template="RelatedSimpleTemplate" data-json-feed="/Default.aspx?ID=@settings.FeedPageId&@settings.Query&ExcludeItemID=@settings.CurrentPageId&PageSize=@settings.PageSize"></div> 2053 2054 <script id="RelatedSimpleTemplate" type="text/x-template"> 2055 {{#.}} 2056 <div class="grid u-padding-bottom--lg"> 2057 {{#Cases}} 2058 <div class="grid__col-md-3 grid__col-xs-12 image-hover--zoom dw-mod"> 2059 <a href="{{link}}" class="u-full-height u-color-light--bg"> 2060 {{#if image}} 2061 <div class="u-color-light--bg u-no-padding dw-mod"> 2062 <div class="flex-img image-hover__wrapper"> 2063 <img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=680&height=314&amp;crop=1&amp;DoNotUpscale=True&amp;Compression=75&amp;image={{image}}" alt="{{title}}" /> 2064 </div> 2065 </div> 2066 {{/if}} 2067 2068 <div class="card u-color-light--bg dw-mod"> 2069 <h3 class="article-list__item-header u-truncate-text dw-mod">{{title}}</h3> 2070 <p class="article__short-summary dw-mod">{{summary}}</p> 2071 </div> 2072 </a> 2073 </div> 2074 {{/Cases}} 2075 </div> 2076 {{/.}} 2077 </script> 2078 </div> 2079 </section> 2080 } 2081 @using System.Reflection 2082 @using Dynamicweb.Rapido.Blocks.Components 2083 @using Dynamicweb.Rapido.Blocks.Components.Articles 2084 @using Dynamicweb.Rapido.Blocks 2085 2086 2087 @* Component for the articles *@ 2088 2089 @helper RenderArticleMenu(ArticleMenu settings) 2090 { 2091 dynamic[] methodParameters = new dynamic[1]; 2092 methodParameters[0] = settings; 2093 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleMenuCustom"); 2094 2095 if (customMethod != null) 2096 { 2097 @customMethod.Invoke(this, methodParameters).ToString(); 2098 } else { 2099 if (!String.IsNullOrEmpty(settings.Title)) { 2100 <div class="u-margin u-border-bottom"> 2101 <h3 class="u-no-margin">@settings.Title</h3> 2102 </div> 2103 } 2104 2105 <ul class="menu-left u-margin-bottom dw-mod"> 2106 @foreach (var item in settings.Items) 2107 { 2108 @RenderArticleMenuItem(item) 2109 } 2110 </ul> 2111 } 2112 } 2113 2114 @helper RenderArticleMenuItem(ArticleMenuItem settings) 2115 { 2116 dynamic[] methodParameters = new dynamic[1]; 2117 methodParameters[0] = settings; 2118 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleMenuItemCustom"); 2119 2120 if (customMethod != null) 2121 { 2122 @customMethod.Invoke(this, methodParameters).ToString(); 2123 } else { 2124 string link = !String.IsNullOrEmpty(settings.Link) ? settings.Link : "#"; 2125 2126 if (!String.IsNullOrEmpty(settings.Title)) { 2127 <li class="menu-left__item dw-mod"> 2128 <a href="@link" onclick="@settings.OnClick" class="menu-left__link dw-mod">@settings.Title</a> 2129 </li> 2130 } 2131 } 2132 } 2133 @using System.Reflection 2134 @using Dynamicweb.Rapido.Blocks.Components 2135 @using Dynamicweb.Rapido.Blocks.Components.Articles 2136 @using Dynamicweb.Rapido.Blocks 2137 2138 @* Component for the articles *@ 2139 2140 @helper RenderArticleList(ArticleList settings) 2141 { 2142 dynamic[] methodParameters = new dynamic[1]; 2143 methodParameters[0] = settings; 2144 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleListCustom"); 2145 2146 if (customMethod != null) 2147 { 2148 @customMethod.Invoke(this, methodParameters).ToString(); 2149 } else { 2150 if (Pageview != null) 2151 { 2152 bool isParagraph = Pageview.CurrentParagraph != null ? true : false; 2153 string[] sortArticlesListBy = new string[2]; 2154 2155 if (isParagraph) { 2156 sortArticlesListBy = Pageview.CurrentParagraph.Item["SortArticlesListBy"] != null && !string.IsNullOrEmpty(Pageview.CurrentParagraph.Item["SortArticlesListBy"].ToString()) ? Pageview.CurrentParagraph.Item["SortArticlesListBy"].ToString().Split('+') : new string[] { "Date", "ASC" }; 2157 } 2158 else { 2159 sortArticlesListBy = Pageview.Item["SortArticlesListBy"] != null && !string.IsNullOrEmpty(Pageview.Item["SortArticlesListBy"].ToString()) ? Pageview.Item["SortArticlesListBy"].ToString().Split('+') : new string[] { "Date", "ASC" }; 2160 } 2161 2162 string sourcePage = settings.SourcePage != null ? settings.SourcePage : Pageview.ID.ToString(); 2163 2164 @RenderItemList(new 2165 { 2166 ItemType = !String.IsNullOrEmpty(settings.ItemType) ? settings.ItemType : "DynamicArticle", 2167 ListSourceType = settings.SourceType, 2168 ListSourcePage = sourcePage, 2169 ItemFieldsList = "*", 2170 Filter = settings.Filter, 2171 ListOrderBy = sortArticlesListBy[0], 2172 ListOrderByDirection = sortArticlesListBy[1], 2173 ListSecondOrderBy = sortArticlesListBy[0] == "Date" ? "InFocusSortId" : "Date", 2174 ListSecondOrderByDirection = "ASC", 2175 IncludeAllChildItems = true, 2176 ListTemplate = settings.Template, 2177 ListPageSize = settings.PageSize.ToString() 2178 }); 2179 } 2180 } 2181 } 2182 @using System.Reflection 2183 @using Dynamicweb.Rapido.Blocks.Components.Articles 2184 2185 2186 @* Component for the articles *@ 2187 2188 @helper RenderArticleSummary(ArticleSummary settings) 2189 { 2190 dynamic[] methodParameters = new dynamic[1]; 2191 methodParameters[0] = settings; 2192 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleSummaryCustom"); 2193 2194 if (customMethod != null) 2195 { 2196 @customMethod.Invoke(this, methodParameters).ToString(); 2197 } else { 2198 if (!String.IsNullOrEmpty(settings.Text)) 2199 { 2200 <div class="article__summary dw-mod">@settings.Text</div> 2201 } 2202 } 2203 } 2204 @using System.Reflection 2205 @using Dynamicweb.Rapido.Blocks.Components 2206 @using Dynamicweb.Rapido.Blocks.Components.Articles 2207 @using Dynamicweb.Rapido.Blocks 2208 2209 @* Component for the articles *@ 2210 2211 @helper RenderArticleListCategoryFilter(ArticleListCategoryFilter settings) 2212 { 2213 dynamic[] methodParameters = new dynamic[1]; 2214 methodParameters[0] = settings; 2215 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleListCategoryFilterCustom"); 2216 2217 if (customMethod != null) 2218 { 2219 @customMethod.Invoke(this, methodParameters).ToString(); 2220 } else { 2221 string pageId = Pageview.ID.ToString(); 2222 string selectedFilter = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("sourcePage")) ? HttpContext.Current.Request.QueryString.Get("sourcePage") : Translate("All"); 2223 var query = HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString()); 2224 2225 foreach (var option in settings.Categories) 2226 { 2227 selectedFilter = selectedFilter == option.Value ? option.Key : selectedFilter; 2228 } 2229 2230 if (selectedFilter == pageId) 2231 { 2232 selectedFilter = Translate("All"); 2233 } 2234 2235 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 2236 { 2237 <div class="u-pull--right u-margin-left"> 2238 <div class="collection u-no-margin"> 2239 <h5>@Translate("Category")</h5> 2240 <input type="checkbox" id="CategorySelector" class="dropdown-trigger" /> 2241 <div class="dropdown u-w180px dw-mod"> 2242 <label class="dropdown__header dropdown__btn dw-mod" for="CategorySelector">@Translate(selectedFilter)</label> 2243 <div class="dropdown__content dw-mod"> 2244 @foreach (var option in settings.Categories) 2245 { 2246 <div class="dropdown__item" onclick="QueryArray.setParametersInCurrentURL({ sourceType: 'Page', sourcePage: '@(option.Key.ToLower() == "all" ? pageId : option.Value)' })">@Translate(option.Key)</div> 2247 } 2248 </div> 2249 <label class="dropdown-trigger-off" for="CategorySelector"></label> 2250 </div> 2251 </div> 2252 </div> 2253 } 2254 else 2255 { 2256 <div class="u-full-width u-margin-bottom"> 2257 <h5 class="u-no-margin">@Translate("Category")</h5> 2258 <input type="checkbox" id="CategorySelector" class="dropdown-trigger" /> 2259 <div class="dropdown u-full-width dw-mod"> 2260 <label class="dropdown__header dropdown__btn dw-mod" for="CategorySelector">@Translate(selectedFilter)</label> 2261 <div class="dropdown__content dw-mod"> 2262 @foreach (var option in settings.Categories) 2263 { 2264 <div class="dropdown__item" onclick="QueryArray.setParametersInCurrentURL({ sourceType: 'Page', sourcePage: '@(option.Key.ToLower() == "all" ? pageId : option.Value)' })">@Translate(option.Key)</div> 2265 } 2266 </div> 2267 <label class="dropdown-trigger-off" for="CategorySelector"></label> 2268 </div> 2269 </div> 2270 } 2271 } 2272 } 2273 @using System.Reflection 2274 @using Dynamicweb.Rapido.Blocks.Components 2275 @using Dynamicweb.Rapido.Blocks.Components.Articles 2276 @using Dynamicweb.Rapido.Blocks 2277 2278 @* Component for the articles *@ 2279 2280 @helper RenderArticleListFilter(ArticleListFilter settings) 2281 { 2282 string selectedFilter = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get(settings.SystemName)) ? HttpContext.Current.Request.QueryString.Get(settings.SystemName) : Translate("All"); 2283 var query = HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString()); 2284 2285 if (settings.Options != null) 2286 { 2287 foreach (var option in settings.Options) 2288 { 2289 selectedFilter = selectedFilter == option.Value ? option.Name : selectedFilter; 2290 } 2291 2292 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 2293 { 2294 <div class="u-pull--right u-margin-left"> 2295 <div class="collection u-no-margin"> 2296 <h5>@settings.Label</h5> 2297 <input type="checkbox" id="@(settings.SystemName)Selector" class="dropdown-trigger" /> 2298 <div class="dropdown u-w180px dw-mod"> 2299 <label class="dropdown__header dropdown__btn dw-mod" for="@(settings.SystemName)Selector">@Translate(selectedFilter)</label> 2300 <div class="dropdown__content dw-mod"> 2301 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '')">@Translate("All")</div> 2302 @foreach (var option in settings.Options) 2303 { 2304 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '@option.Value')">@Translate(option.Name)</div> 2305 } 2306 </div> 2307 <label class="dropdown-trigger-off" for="@(settings.SystemName)Selector"></label> 2308 </div> 2309 </div> 2310 </div> 2311 } 2312 else 2313 { 2314 <div class="u-full-width u-margin-bottom"> 2315 <h5 class="u-no-margin">@settings.Label</h5> 2316 <input type="checkbox" id="@(settings.SystemName)Selector" class="dropdown-trigger" /> 2317 <div class="dropdown u-full-width w-mod"> 2318 <label class="dropdown__header dropdown__btn dw-mod" for="@(settings.SystemName)Selector">@Translate(selectedFilter)</label> 2319 <div class="dropdown__content dw-mod"> 2320 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '')">@Translate("All")</div> 2321 @foreach (var option in settings.Options) 2322 { 2323 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '@option.Value')">@Translate(option.Name)</div> 2324 } 2325 </div> 2326 <label class="dropdown-trigger-off" for="@(settings.SystemName)Selector"></label> 2327 </div> 2328 </div> 2329 } 2330 } 2331 } 2332 @using System.Reflection 2333 @using Dynamicweb.Rapido.Blocks.Components 2334 @using Dynamicweb.Rapido.Blocks.Components.Articles 2335 @using Dynamicweb.Rapido.Blocks 2336 2337 @* Component for the articles *@ 2338 2339 @helper RenderArticleListSearch(ArticleListSearch settings) 2340 { 2341 dynamic[] methodParameters = new dynamic[1]; 2342 methodParameters[0] = settings; 2343 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleListSearchCustom"); 2344 2345 if (customMethod != null) 2346 { 2347 @customMethod.Invoke(this, methodParameters).ToString(); 2348 } else { 2349 string searchString = !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("Title")) ? HttpContext.Current.Request.QueryString.Get("Title").Trim('*') : ""; 2350 string className = "u-w340px u-pull--right u-margin-left"; 2351 2352 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 2353 { 2354 className = "u-full-width"; 2355 } 2356 2357 <div class="typeahead u-color-inherit u-margin-bottom dw-mod @className"> 2358 <input type="text" class="typeahead-search-field u-no-margin dw-mod" placeholder="@Translate("Search in list")" value="@searchString" id="ArticleListSearchInput" onchange="QueryArray.setParameterInCurrentURL('Title', '*' + document.getElementById('ArticleListSearchInput').value + '*')"> 2359 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod"><i class="fas fa-search"></i></button> 2360 </div> 2361 } 2362 } 2363 @using System.Reflection 2364 @using Dynamicweb.Rapido.Blocks.Components 2365 @using Dynamicweb.Rapido.Blocks.Components.Articles 2366 @using Dynamicweb.Rapido.Blocks 2367 2368 @* Component for the articles *@ 2369 2370 @helper RenderArticleListNoResultsInfo(ArticleListNoResultsInfo settings) 2371 { 2372 dynamic[] methodParameters = new dynamic[1]; 2373 methodParameters[0] = settings; 2374 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleListNoResultsInfoCustom"); 2375 2376 if (customMethod != null) 2377 { 2378 @customMethod.Invoke(this, methodParameters).ToString(); 2379 } else { 2380 <div class="u-margin-top--lg u-bold u-ta-center u-bold">@Translate(settings.Message)</div> 2381 } 2382 } 2383 @using System.Reflection 2384 @using Dynamicweb.Rapido.Blocks.Components 2385 @using Dynamicweb.Rapido.Blocks.Components.General 2386 @using Dynamicweb.Rapido.Blocks.Components.Articles 2387 @using Dynamicweb.Rapido.Blocks 2388 @using System.Text.RegularExpressions 2389 2390 @* Component for the articles *@ 2391 2392 @helper RenderArticleListItem(ArticleListItem settings) 2393 { 2394 switch (settings.Type) { 2395 case ArticleListItemType.Card: 2396 @RenderArticleListItemCard(settings); 2397 break; 2398 case ArticleListItemType.List: 2399 @RenderArticleListItemList(settings); 2400 break; 2401 case ArticleListItemType.Simple: 2402 @RenderArticleListItemSimple(settings); 2403 break; 2404 default: 2405 @RenderArticleListItemCard(settings); 2406 break; 2407 } 2408 } 2409 2410 @helper RenderArticleListItemCard(ArticleListItem settings) 2411 { 2412 <a href="@settings.Link" class="u-full-height u-color-light--bg"> 2413 <div class="u-color-light--bg u-no-padding dw-mod"> 2414 @if (settings.Logo != null) 2415 { 2416 string backgroundImage = settings.Image != null ? "background-image:url(/Admin/Public/GetImage.ashx?width=992&amp;height=760&amp;crop=0&amp;Compression=75&amp;DoNotUpscale=True&amp;image=" + settings.Image.Path + "); background-size: cover;" : ""; 2417 settings.Logo.ImageDefault.Crop = 5; 2418 settings.Logo.ImageDefault.Width = settings.Logo.ImageDefault.Width == 1920 ? 240 : settings.Logo.ImageDefault.Width; 2419 settings.Logo.ImageDefault.Height = settings.Logo.ImageDefault.Height == 1080 ? 200 : settings.Logo.ImageDefault.Height; 2420 <div class="image-hover__wrapper layered-image layered-image--tinted dw-mod" style="@backgroundImage"> 2421 @if (settings.Stickers != null) 2422 { 2423 if (settings.Stickers.Position != StickersListPosition.Custom) 2424 { 2425 @RenderStickersCollection(settings.Stickers); 2426 } 2427 } 2428 @* @RenderImage(settings.Logo) *@ 2429 <div> 2430 <img class="grid__cell-img b-lazy dw-mod b-loaded" src="@settings.Logo.Path"> 2431 </div> 2432 </div> 2433 } 2434 else if (settings.Image != null) 2435 { 2436 <div class="flex-img image-hover__wrapper u-position-relative dw-mod"> 2437 @if (settings.Stickers != null) 2438 { 2439 if (settings.Stickers.Position != StickersListPosition.Custom) 2440 { 2441 @RenderStickersCollection(settings.Stickers); 2442 } 2443 } 2444 @RenderImage(settings.Image) 2445 </div> 2446 } 2447 </div> 2448 2449 @if (!String.IsNullOrEmpty(settings.Title) || !String.IsNullOrEmpty(settings.Summary)) 2450 { 2451 <div class="card u-color-light--bg dw-mod"> 2452 @if (settings.Stickers != null) 2453 { 2454 if (settings.Stickers.Position == StickersListPosition.Custom) 2455 { 2456 @RenderStickersCollection(settings.Stickers); 2457 } 2458 } 2459 @if (!String.IsNullOrEmpty(settings.Title)) 2460 { 2461 <h3 class="article-list__item-header u-truncate-text dw-mod">@settings.Title</h3> 2462 } 2463 @if (!String.IsNullOrEmpty(settings.SubTitle)) 2464 { 2465 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div> 2466 } 2467 @if (!String.IsNullOrEmpty(settings.Summary)) 2468 { 2469 <p class="article__short-summary dw-mod">@settings.Summary</p> 2470 } 2471 </div> 2472 } 2473 </a> 2474 } 2475 2476 @helper RenderArticleListItemList(ArticleListItem settings) 2477 { 2478 <a href="@settings.Link"> 2479 <div class="grid u-color-light--bg u-no-padding dw-mod"> 2480 <div class="grid__col-md-3"> 2481 <div class="u-color-light--bg u-no-padding dw-mod"> 2482 @if (settings.Logo != null) 2483 { 2484 string backgroundImage = settings.Image != null ? "background-image:url(/Admin/Public/GetImage.ashx?width=992&amp;height=760&amp;crop=0&amp;Compression=75&amp;DoNotUpscale=True&amp;image=" + settings.Image.Path + "); background-size: cover;" : ""; 2485 settings.Logo.ImageDefault.Crop = 5; 2486 settings.Logo.ImageDefault.Width = settings.Logo.ImageDefault.Width == 1920 ? 240 : settings.Logo.ImageDefault.Width; 2487 settings.Logo.ImageDefault.Height = settings.Logo.ImageDefault.Height == 1080 ? 200 : settings.Logo.ImageDefault.Height; 2488 <div class="image-hover__wrapper layered-image layered-image--tinted dw-mod" style="@backgroundImage"> 2489 @if (settings.Stickers != null) 2490 { 2491 if (settings.Stickers.Position != StickersListPosition.Custom) 2492 { 2493 @RenderStickersCollection(settings.Stickers); 2494 } 2495 } 2496 @RenderImage(settings.Logo) 2497 </div> 2498 } 2499 else if (settings.Image != null) 2500 { 2501 <div class="flex-img image-hover__wrapper dw-mod"> 2502 @if (settings.Stickers != null) 2503 { 2504 if (settings.Stickers.Position != StickersListPosition.Custom) 2505 { 2506 @RenderStickersCollection(settings.Stickers); 2507 } 2508 } 2509 @RenderImage(settings.Image) 2510 </div> 2511 } 2512 </div> 2513 </div> 2514 2515 @if (!String.IsNullOrEmpty(settings.Title) || !String.IsNullOrEmpty(settings.Summary)) 2516 { 2517 <div class="grid__col-md-9"> 2518 @if (!String.IsNullOrEmpty(settings.Title)) 2519 { 2520 <h3 class="article-list__item-header u-truncate-text dw-mod">@settings.Title</h3> 2521 } 2522 @if (settings.Stickers != null) 2523 { 2524 if (settings.Stickers.Position == StickersListPosition.Custom) 2525 { 2526 @RenderStickersCollection(settings.Stickers); 2527 } 2528 } 2529 @if (!String.IsNullOrEmpty(settings.SubTitle)) 2530 { 2531 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div> 2532 } 2533 @if (!String.IsNullOrEmpty(settings.Summary)) 2534 { 2535 <p class="article__short-summary dw-mod">@settings.Summary</p> 2536 } 2537 </div> 2538 } 2539 </div> 2540 </a> 2541 } 2542 2543 @helper RenderArticleListItemSimple(ArticleListItem settings) 2544 { 2545 <a href="@settings.Link" class="u-color-inherit"> 2546 <div class="grid u-color-light--bg u-no-padding dw-mod"> 2547 <div class="grid__col-md-12"> 2548 @if (!String.IsNullOrEmpty(settings.Title)) 2549 { 2550 <div class="article-list-item__header u-truncate-text u-no-margin dw-mod">@settings.Title</div> 2551 } 2552 @if (!String.IsNullOrEmpty(settings.SubTitle)) 2553 { 2554 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div> 2555 } 2556 </div> 2557 </div> 2558 </a> 2559 } 2560 @using System.Reflection 2561 @using Dynamicweb.Rapido.Blocks.Components.Articles 2562 2563 2564 @* Component for the articles *@ 2565 2566 @helper RenderArticleAuthorAndDate(ArticleAuthorAndDate settings) 2567 { 2568 dynamic[] methodParameters = new dynamic[1]; 2569 methodParameters[0] = settings; 2570 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleAuthorAndDateCustom"); 2571 2572 if (customMethod != null) 2573 { 2574 @customMethod.Invoke(this, methodParameters).ToString(); 2575 } else { 2576 <small class="article__subscription"> 2577 @if (!(string.IsNullOrWhiteSpace(settings.Author) && string.IsNullOrWhiteSpace(settings.Date))) 2578 { 2579 <text>@Translate("Written")</text> 2580 } 2581 @if (!string.IsNullOrWhiteSpace(settings.Author)) 2582 { 2583 <text>@Translate("by") @settings.Author</text> 2584 } 2585 @if (!string.IsNullOrWhiteSpace(settings.Date)) 2586 { 2587 <text>@Translate("on") @settings.Date</text> 2588 } 2589 </small> 2590 } 2591 } 2592 @using System.Reflection 2593 @using Dynamicweb.Rapido.Blocks.Components.Articles 2594 2595 2596 @* Component for the articles *@ 2597 2598 @helper RenderArticleLink(ArticleLink settings) 2599 { 2600 dynamic[] methodParameters = new dynamic[1]; 2601 methodParameters[0] = settings; 2602 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleLinkCustom"); 2603 2604 if (customMethod != null) 2605 { 2606 @customMethod.Invoke(this, methodParameters).ToString(); 2607 } else { 2608 if (!String.IsNullOrEmpty(settings.Title)) 2609 { 2610 <div class="grid__cell"> 2611 @RenderButton(settings) 2612 </div> 2613 } 2614 } 2615 } 2616 @using System.Reflection 2617 @using Dynamicweb.Rapido.Blocks 2618 @using Dynamicweb.Rapido.Blocks.Components.Articles 2619 @using Dynamicweb.Rapido.Blocks.Components.General 2620 2621 2622 @* Component for the articles *@ 2623 2624 @helper RenderArticleCarousel(ArticleCarousel settings) 2625 { 2626 dynamic[] methodParameters = new dynamic[1]; 2627 methodParameters[0] = settings; 2628 MethodInfo customMethod = this.GetType().GetMethod(settings.HelperName + "Custom"); 2629 2630 if (customMethod != null) 2631 { 2632 @customMethod.Invoke(this, methodParameters).ToString(); 2633 } else { 2634 <div class="grid"> 2635 <div class="grid__col-12"> 2636 <div class="carousel" id="carousel_@settings.Id"> 2637 <div class="carousel__container js-carousel-slides dw-mod"> 2638 @RenderBlockList(settings.SubBlocks) 2639 </div> 2640 </div> 2641 </div> 2642 </div> 2643 2644 <script> 2645 document.addEventListener("DOMContentLoaded", function () { 2646 new CarouselModule("#carousel_@settings.Id", { 2647 slideTime: 0, 2648 dots: true 2649 }); 2650 }); 2651 </script> 2652 } 2653 } 2654 2655 @helper RenderArticleCarouselSlide(ArticleCarouselSlide settings) 2656 { 2657 dynamic[] methodParameters = new dynamic[1]; 2658 methodParameters[0] = settings; 2659 MethodInfo customMethod = this.GetType().GetMethod(settings.HelperName + "Custom"); 2660 2661 if (customMethod != null) 2662 { 2663 @customMethod.Invoke(this, methodParameters).ToString(); 2664 } 2665 else 2666 { 2667 string imageEngine = "/Admin/Public/GetImage.ashx?"; 2668 2669 string defaultImage = settings.ImageSettings != null ? imageEngine : settings.Image; 2670 if (settings.ImageSettings != null) 2671 { 2672 defaultImage += settings.ImageSettings.Width != 0 ? "Width=" + settings.ImageSettings.Width + "&" : ""; 2673 defaultImage += settings.ImageSettings.Height != 0 ? "Height=" + settings.ImageSettings.Height + "&" : ""; 2674 defaultImage += "Crop=" + settings.ImageSettings.Crop + "&"; 2675 defaultImage += "Compression=" + settings.ImageSettings.Compression + "&"; 2676 defaultImage += "DoNotUpscale=" + settings.ImageSettings.DoNotUpscale.ToString() + "&"; 2677 defaultImage += "FillCanvas=" + settings.ImageSettings.FillCanvas.ToString() + "&"; 2678 } 2679 defaultImage += "&Image=" + settings.Image; 2680 2681 <div class="carousel__slide u-min-h300px u-flex dw-mod" style="background-size:cover; background-image:url('@defaultImage')"> 2682 <a class="article-carousel-item__wrap" href="@settings.Link" title="@settings.Title"> 2683 <h2 class="article-list__item-header u-truncate-text u-color-light dw-mod">@settings.Title</h2> 2684 <div class="article-list__item-info"> 2685 @if (settings.Stickers != null) 2686 { 2687 settings.Stickers.Position = StickersListPosition.Custom; 2688 @RenderStickersCollection(settings.Stickers); 2689 } 2690 2691 <small class="u-margin-top--lg u-color-light"> 2692 @if (!(string.IsNullOrWhiteSpace(settings.Author) && string.IsNullOrWhiteSpace(settings.Date))) 2693 { 2694 <text>@Translate("Written")</text> 2695 } 2696 @if (!string.IsNullOrWhiteSpace(settings.Author)) 2697 { 2698 <text>@Translate("by") @settings.Author</text> 2699 } 2700 @if (!string.IsNullOrWhiteSpace(settings.Date)) 2701 { 2702 <text>@Translate("on") @settings.Date</text> 2703 } 2704 </small> 2705 </div> 2706 2707 <h3 class="article__short-summary u-color-light">@settings.Summary</h3> 2708 </a> 2709 @if (settings.UseFilters == true) 2710 { 2711 <div class="background-image image-filter image-filter--darken dw-mod"></div> 2712 } 2713 </div> 2714 } 2715 } 2716 @using System.Text.RegularExpressions 2717 @using Dynamicweb.Rapido.Blocks.Components 2718 @using Dynamicweb.Rapido.Blocks.Components.General 2719 @using Dynamicweb.Rapido.Blocks.Components.Articles 2720 @using Dynamicweb.Rapido.Blocks 2721 2722 @* Component for the articles *@ 2723 2724 @helper RenderArticleVideo(ArticleVideo settings) 2725 { 2726 dynamic[] methodParameters = new dynamic[1]; 2727 methodParameters[0] = settings; 2728 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleTextCustom"); 2729 2730 if (customMethod != null) 2731 { 2732 @customMethod.Invoke(this, methodParameters).ToString(); 2733 } else { 2734 if (settings.Url != null) 2735 { 2736 //getting video ID from youtube URL 2737 string videoCode = settings.Url; 2738 Regex regex = new Regex(@".be\/(.[^?]*)"); 2739 Match match = regex.Match(videoCode); 2740 string videoId = ""; 2741 if (match.Success) 2742 { 2743 videoId = match.Groups[1].Value; 2744 } 2745 else 2746 { 2747 regex = new Regex(@"v=([^&]+)"); 2748 match = regex.Match(videoCode); 2749 if (match.Success) 2750 { 2751 videoId = match.Groups[1].Value; 2752 } 2753 } 2754 2755 int autoPlay = settings.AutoPlay == "true" ? 1 : 0; 2756 2757 <div class="video-wrapper"> 2758 <div class="js-youtube-video" data-video="@videoId" id="ytPlayer@(Guid.NewGuid().ToString("N"))" data-auto-play="@autoPlay" data-enable-controls="1"></div> 2759 </div> 2760 } 2761 } 2762 } 2763 2764 2765 2766 @* Simple helpers *@ 2767 2768 @*Requires the Gallery ItemType that comes with Rapido*@ 2769 @helper RenderArticleItemGallery(IList<ItemViewModel> gallery) { 2770 if (gallery != null && gallery.Count > 0) 2771 { 2772 int count = 1; 2773 2774 foreach (var item in gallery) 2775 { 2776 if (item.GetFile("ImagePath") != null) 2777 { 2778 string image = item.GetFile("ImagePath").PathUrlEncoded; 2779 string imagePrefix = "/Admin/Public/GetImage.ashx?width=1200&amp;height=820&amp;crop=5&amp;Compression=99&amp;DoNotUpscale=1&amp;image="; 2780 int imagesCount = gallery.Count; 2781 2782 if (count == 1) 2783 { 2784 <label class="gallery" for="GalleryModalTrigger" onclick="Gallery.openImage(this.querySelector('.js-gallery'))"> 2785 <span class="gallery__main-image"> 2786 <img src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=992&amp;height=760&amp;crop=0&amp;Compression=99&amp;DoNotUpscale=1&amp;image=@image" class="b-lazy flex-img js-gallery" alt="" data-for="FullImage" data-image="@imagePrefix@image" /> 2787 </span> 2788 <span class="gallery__image-counter"> 2789 <i class="fas fa-camera fa-2x"></i> <span class="gallery__image-counter__number">@imagesCount</span> 2790 <span class="gallery__image-counter__text">@Translate("See all") <i class="fas fa-angle-right"></i></span> 2791 </span> 2792 </label> 2793 } 2794 else 2795 { 2796 <div class="u-hidden js-gallery" data-for="FullImage" data-image="@imagePrefix@image"></div> 2797 } 2798 2799 count++; 2800 } 2801 } 2802 } 2803 } 2804 2805 @helper RenderArticleItemGalleryModal() { 2806 <!-- Trigger for the gallery modal --> 2807 <input type="checkbox" id="GalleryModalTrigger" class="modal-trigger" /> 2808 2809 <!-- Gallery modal --> 2810 <div class="modal-container"> 2811 <label for="GalleryModalTrigger" id="GalleryModalOverlay" class="modal-overlay"></label> 2812 <div class="modal modal--full" id="GalleryModal"> 2813 <div class="modal__body modal__body--full"> 2814 <div class="gallery-slider"> 2815 <div class="gallery-slider__image"> 2816 <img src="#" alt="" class="modal--full__img" id="FullImage" /> 2817 </div> 2818 <div class="gallery-slider__image-counter" id="FullImage_counter"></div> 2819 <label class="gallery-slider__close-btn" for="GalleryModalTrigger"></label> 2820 <button class="gallery-slider__previous-btn" id="FullImage_prev" onclick="Gallery.prevImage('FullImage')"></button> 2821 <button class="gallery-slider__next-btn" id="FullImage_next" onclick="Gallery.nextImage('FullImage')"></button> 2822 </div> 2823 </div> 2824 </div> 2825 </div> 2826 } 2827 2828 2829 @helper RenderMobileFilters(List<Block> subBlocks) 2830 { 2831 if (subBlocks.Count > 0) 2832 { 2833 <div class="grid__col-12"> 2834 <input type="checkbox" id="CheckFilters" class="js-remember-state u-hidden" data-expand="CheckFilters" /> 2835 <div class="grid u-margin-bottom dw-mod" data-trigger="CheckFilters"> 2836 @RenderBlockList(subBlocks) 2837 </div> 2838 <label for="CheckFilters" class="btn btn--secondary btn--full dw-mod js-expand-hide" data-trigger="CheckFilters">@Translate("Select filters")</label> 2839 <label for="CheckFilters" class="btn btn--secondary btn--full dw-mod expandable--collapsed" data-trigger="CheckFilters">@Translate("Close filters")</label> 2840 </div> 2841 } 2842 } 2843 2844 @if (File.Exists(HttpContext.Current.Server.MapPath("/Components/Custom/Custom__Components.cshtml"))) 2845 { 2846 <text>@using Dynamicweb.Rapido.Blocks.Components.General 2847 </text> 2848 } 2849 2850 2851 @* Include the Blocks for the page *@ 2852 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2853 2854 @using System 2855 @using System.Web 2856 @using System.Collections.Generic 2857 @using Dynamicweb.Rapido.Blocks.Extensibility 2858 @using Dynamicweb.Rapido.Blocks 2859 2860 @{ 2861 BlocksPage topSnippetsBlocksPage = BlocksPage.GetBlockPage("Master"); 2862 2863 Block tagManager = new Block() 2864 { 2865 Id = "TagManager", 2866 SortId = 1, 2867 Template = RenderGoogleTagManager() 2868 }; 2869 2870 Block facebookPixel = new Block() 2871 { 2872 Id = "FacebookPixel", 2873 SortId = 2, 2874 Template = RenderFacebookPixel() 2875 }; 2876 2877 topSnippetsBlocksPage.Add(MasterBlockId.MasterTopSnippets, tagManager); 2878 topSnippetsBlocksPage.Add(MasterBlockId.MasterTopSnippets, facebookPixel); 2879 } 2880 2881 @helper RenderGoogleTagManager() { 2882 string GoogleTagManagerID = Model.Area.Item.GetItem("Settings").GetString("GoogleTagManagerID"); 2883 2884 if (!string.IsNullOrWhiteSpace(GoogleTagManagerID)) 2885 { 2886 <script> 2887 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 2888 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 2889 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 2890 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 2891 })(window,document,'script','dataLayer','@GoogleTagManagerID'); 2892 </script> 2893 <!-- Google Tag Manager (noscript) --> 2894 <noscript> 2895 <iframe src="https://www.googletagmanager.com/ns.html?id=@GoogleTagManagerID" 2896 height="0" width="0" style="display:none;visibility:hidden"></iframe> 2897 </noscript> 2898 <!-- End Google Tag Manager (noscript) --> 2899 } 2900 } 2901 2902 @helper RenderFacebookPixel() { 2903 string FacebookPixelID = Model.Area.Item.GetItem("Settings").GetString("FacebookPixelID"); 2904 2905 if (!string.IsNullOrWhiteSpace(FacebookPixelID)) 2906 { 2907 <!-- Facebook Pixel Code --> 2908 <script> 2909 !function(f,b,e,v,n,t,s) 2910 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 2911 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 2912 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 2913 n.queue=[];t=b.createElement(e);t.async=!0; 2914 t.src=v;s=b.getElementsByTagName(e)[0]; 2915 s.parentNode.insertBefore(t,s)}(window, document,'script', 2916 'https://connect.facebook.net/en_US/fbevents.js'); 2917 fbq('init', '@FacebookPixelID'); 2918 fbq('track', 'PageView'); 2919 </script> 2920 <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=@FacebookPixelID&ev=PageView&noscript=1" alt="" /></noscript> 2921 } 2922 } 2923 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2924 2925 @using System 2926 @using System.Web 2927 @using System.Collections.Generic 2928 @using Dynamicweb.Rapido.Blocks 2929 @using Dynamicweb.Rapido.Blocks.Extensibility 2930 @using Dynamicweb.Security.UserManagement 2931 @using Dynamicweb.Security.UserManagement.ExternalAuthentication 2932 @{ 2933 BlocksPage loginBlocksPage = BlocksPage.GetBlockPage("Master"); 2934 2935 Block loginModal = new Block() 2936 { 2937 Id = "LoginModal", 2938 SortId = 10, 2939 Template = LoginModal() 2940 }; 2941 2942 //loginBlocksPage.Add(MasterBlockId.MasterTopSnippets, loginModal); 2943 } 2944 2945 @helper LoginModal() { 2946 int pageId = Model.TopPage.ID; 2947 string userSignedInError = !Model.LogOnFailed ? "" : "checked"; 2948 string userSignedInErrorText = ""; 2949 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator"); 2950 string forgotPasswordPageLink = "/Default.aspx?ID=" + signInProfilePageId + "&LoginAction=Recovery"; 2951 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 2952 2953 if (Model.LogOnFailed) { 2954 switch (Model.LogOnFailedReason) 2955 { 2956 case LogOnFailedReason.PasswordLengthInvalid: 2957 userSignedInErrorText = Translate("Password length is invalid"); 2958 break; 2959 case LogOnFailedReason.IncorrectLogin: 2960 userSignedInErrorText = Translate("Invalid email or password"); 2961 break; 2962 case LogOnFailedReason.ExceededFailedLogOnLimit: 2963 userSignedInErrorText = Translate("You have exceeded the limit of allowed login attempts. The user account is temporarily locked"); 2964 break; 2965 case LogOnFailedReason.LoginLocked: 2966 userSignedInErrorText = Translate("The user account is temporarily locked"); 2967 break; 2968 case LogOnFailedReason.PasswordExpired: 2969 userSignedInErrorText = Translate("The password has expired and needs to be renewed"); 2970 break; 2971 default: 2972 userSignedInErrorText = Translate("An unknown error occured"); 2973 break; 2974 } 2975 } 2976 2977 <!-- Trigger for the login modal --> 2978 <input type="checkbox" id="SignInModalTrigger" class="modal-trigger" @userSignedInError /> 2979 2980 <!-- Login modal --> 2981 <div class="modal-container"> 2982 <label for="SignInModalTrigger" id="SignInModalOverlay" class="modal-overlay"></label> 2983 <div class="modal modal--xs" id="SignInModal"> 2984 <div class="modal__header"> 2985 <h2>@Translate("Sign in")</h2> 2986 </div> 2987 <div class="modal__body"> 2988 <form method="post" id="LoginForm" class="u-no-margin"> 2989 <input type="hidden" name="ID" value="@pageId" /> 2990 <input type="hidden" name="DWExtranetUsernameRemember" value="True" /> 2991 <input type="hidden" name="DWExtranetPasswordRemember" value="True" /> 2992 <input type="text" class="u-full-width" id="LoginUsername" name="username" placeholder="@Translate("Username")" /> 2993 <input type="password" class="u-full-width" id="LoginPassword" name="password" placeholder="@Translate("Password")" /> 2994 <div class="field-error dw-mod">@userSignedInErrorText</div> 2995 2996 <div class="form__field-group dw-mod"> 2997 <input type="checkbox" id="LoginRememberMe" name="Autologin" checked="checked" value="True" class="form__control"> 2998 <label for="LoginRememberMe"> 2999 @Translate("Remember me", "Remember me") 3000 </label> 3001 </div> 3002 3003 <button type="submit" class="btn btn--primary btn--full dw-mod" name="LoginAction" value="Login" onclick="Buttons.LockButton(event)">@Translate("Sign in")</button> 3004 @{ 3005 ProviderCollection providers = Provider.GetActiveProviders(); 3006 } 3007 3008 @foreach(Provider LoginProvider in providers) 3009 { 3010 var ProviderName = LoginProvider.Name.ToLower(); 3011 <a href="/Admin/Public/Social/ExternalLogin.aspx?action=login&providerID=@LoginProvider.ID" title="@LoginProvider.Name" class="btn btn--clean btn--condensed u-color-@ProviderName dw-mod"><i class="fab fa-@ProviderName fa-1_5x"></i></a> 3012 } 3013 3014 <a class="btn btn--link-clean dw-mod" href="@forgotPasswordPageLink">@Translate("Forgot your password?", "Forgot your password?")</a> 3015 3016 3017 </form> 3018 </div> 3019 </div> 3020 </div> 3021 } 3022 3023 3024 @*if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 3025 { 3026 <text>*@@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 3027 3028 @using System 3029 @using System.Web 3030 @using System.Collections.Generic 3031 @using Dynamicweb.Rapido.Blocks.Extensibility 3032 @using Dynamicweb.Rapido.Blocks 3033 3034 3035 @functions { 3036 BlocksPage mobileHeaderBlocksPage = BlocksPage.GetBlockPage("Master"); 3037 } 3038 3039 @{ 3040 var mobileTopLayout = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetString("Design")) ? Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design").SelectedValue : "nav-left"; 3041 bool mobileHideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch"); 3042 bool mobileHideCart = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideCart"); 3043 bool mobileHideSignIn = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSignIn"); 3044 3045 3046 Block mobileHeader = new Block() 3047 { 3048 Id = "MobileTop", 3049 SortId = 10, 3050 Template = RenderMobileTop(), 3051 SkipRenderBlocksList = true 3052 }; 3053 mobileHeaderBlocksPage.Add(MasterBlockId.MasterHeader, mobileHeader); 3054 3055 Block mobileHeaderNavigation = new Block() 3056 { 3057 Id = "MobileHeaderNavigation", 3058 SortId = 10, 3059 Template = RenderMobileHeaderNavigation(), 3060 SkipRenderBlocksList = true, 3061 BlocksList = new List<Block> { 3062 new Block { 3063 Id = "MobileHeaderNavigationTrigger", 3064 SortId = 10, 3065 Template = RenderMobileHeaderNavigationTrigger() 3066 } 3067 } 3068 }; 3069 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderNavigation); 3070 3071 3072 Block mobileHeaderLogo = new Block() 3073 { 3074 Id = "MobileHeaderLogo", 3075 SortId = 20, 3076 Template = RenderMobileHeaderLogo(), 3077 SkipRenderBlocksList = true 3078 }; 3079 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderLogo); 3080 3081 Block mobileHeaderActions = new Block() 3082 { 3083 Id = "MobileHeaderActions", 3084 SortId = 30, 3085 Template = RenderMobileTopActions(), 3086 SkipRenderBlocksList = true 3087 }; 3088 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderActions); 3089 3090 if (mobileHideSearch == false) 3091 { 3092 Block mobileHeaderSearch = new Block 3093 { 3094 Id = "MobileHeaderSearch", 3095 SortId = 10, 3096 Template = RenderMobileTopSearch() 3097 }; 3098 mobileHeaderBlocksPage.Add("MobileHeaderActions", mobileHeaderSearch); 3099 } 3100 3101 Block mobileHeaderMiniCart; 3102 3103 if (!mobileHideCart) 3104 { 3105 mobileHeaderMiniCart = new Block 3106 { 3107 Id = "MobileHeaderMiniCart", 3108 SortId = 20, 3109 Template = RenderMobileTopMiniCart() 3110 }; 3111 3112 Block miniCartCounterScriptTemplate = new Block 3113 { 3114 Id = "MiniCartCounterScriptTemplate", 3115 Template = RenderMobileMiniCartCounterContent() 3116 }; 3117 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", miniCartCounterScriptTemplate); 3118 } else { 3119 mobileHeaderMiniCart = new Block 3120 { 3121 Id = "MobileHeaderMiniCart", 3122 SortId = 20 3123 }; 3124 } 3125 3126 if (!mobileHideSearch) { 3127 Block mobileHeaderSearchBar = new Block() 3128 { 3129 Id = "MobileHeaderSearchBar", 3130 SortId = 30, 3131 Template = RenderMobileTopSearchBar() 3132 }; 3133 mobileHeaderBlocksPage.Add(MasterBlockId.MasterHeader, mobileHeaderSearchBar); 3134 } 3135 3136 switch (mobileTopLayout) 3137 { 3138 case "nav-left": 3139 mobileHeaderNavigation.SortId = 10; 3140 mobileHeaderLogo.SortId = 20; 3141 mobileHeaderActions.SortId = 30; 3142 mobileHeaderBlocksPage.Add("MobileHeaderActions", mobileHeaderMiniCart); 3143 break; 3144 case "nav-right": 3145 mobileHeaderLogo.SortId = 10; 3146 mobileHeaderActions.SortId = 20; 3147 mobileHeaderNavigation.SortId = 30; 3148 mobileHeaderBlocksPage.Add("MobileHeaderActions", mobileHeaderMiniCart); 3149 break; 3150 case "nav-search-left": 3151 mobileHeaderNavigation.SortId = 10; 3152 mobileHeaderLogo.SortId = 20; 3153 mobileHeaderActions.SortId = 30; 3154 mobileHeaderBlocksPage.Add("MobileHeaderNavigation", mobileHeaderMiniCart); 3155 break; 3156 case "search-left": 3157 mobileHeaderActions.SortId = 10; 3158 mobileHeaderLogo.SortId = 20; 3159 mobileHeaderNavigation.SortId = 30; 3160 mobileHeaderMiniCart.SortId = 0; 3161 mobileHeaderBlocksPage.Add("MobileHeaderNavigation", mobileHeaderMiniCart); 3162 break; 3163 } 3164 } 3165 3166 3167 @helper RenderMobileTop() { 3168 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileTop").OrderBy(item => item.SortId).ToList(); 3169 3170 <nav class="main-navigation-mobile dw-mod"> 3171 <div class="center-container top-container__center-container dw-mod"> 3172 <div class="grid grid--align-center"> 3173 @RenderBlockList(subBlocks) 3174 </div> 3175 </div> 3176 </nav> 3177 } 3178 3179 @helper RenderMobileHeaderNavigation() { 3180 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderNavigation").OrderBy(item => item.SortId).ToList(); 3181 3182 <div class="grid__col-auto-width"> 3183 <ul class="menu dw-mod"> 3184 @RenderBlockList(subBlocks) 3185 </ul> 3186 </div> 3187 } 3188 3189 @helper RenderMobileHeaderNavigationTrigger() { 3190 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 3191 <label for="MobileNavTrigger" class="mobile-nav-trigger-button menu__link menu__link--icon menu__link--mobile dw-mod"></label> 3192 </li> 3193 } 3194 3195 @helper RenderMobileHeaderLogo() { 3196 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderLogo").OrderBy(item => item.SortId).ToList(); 3197 3198 var mobileTopLayout = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetString("Design")) ? Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design").SelectedValue : "nav-left"; 3199 string centeredLogo = mobileTopLayout != "nav-right" ? "u-ta-center" : ""; 3200 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 3201 string businessName = Model.Area.Item.GetItem("Settings").GetString("BusinessName"); 3202 3203 string mobileLogo = "/Files/Images/logo-dynamicweb.png"; 3204 if (Model.Area.Item.GetItem("Layout").GetItem("MobileTop") != null && Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetFile("Logo") != null) 3205 { 3206 mobileLogo = Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetFile("Logo").PathUrlEncoded; 3207 } 3208 3209 if (Path.GetExtension(mobileLogo).ToLower() != ".svg") 3210 { 3211 mobileLogo = "/Admin/Public/GetImage.ashx?height=40&amp;crop=5&amp;Compression=75&amp;image=" + mobileLogo; 3212 } 3213 else 3214 { 3215 mobileLogo = HttpUtility.UrlDecode(mobileLogo); 3216 } 3217 3218 <div class="grid__col-auto grid__col--bleed"> 3219 <div class="grid__cell @centeredLogo"> 3220 <a href="/Default.aspx?ID=@firstPageId" class="logo logo--mobile u-inline-block dw-mod"> 3221 <img class="grid__cell-img logo__img logo__img--mobile dw-mod" src="@mobileLogo" alt="@businessName" /> 3222 </a> 3223 </div> 3224 3225 @RenderBlockList(subBlocks) 3226 </div> 3227 } 3228 3229 @helper RenderMobileTopActions() { 3230 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderActions").OrderBy(item => item.SortId).ToList(); 3231 3232 <div class="grid__col-auto-width"> 3233 <ul class="menu dw-mod"> 3234 @{ 3235 string headerButtonText = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonText"); 3236 string headerButtonLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonLink"); 3237 string headerButtonType = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType") != null ? "btn--" + Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType").SelectedName.ToLower() : ""; 3238 3239 <li class="menu__item menu__item--horizontal menu--clean dw-mod"> 3240 <a class="btn @headerButtonType dw-mod u-no-margin u-margin-left" style="margin-top: 15px;" href="@headerButtonLink">@headerButtonText</a> 3241 </li> 3242 } 3243 @RenderBlockList(subBlocks) 3244 </ul> 3245 </div> 3246 } 3247 3248 @helper RenderMobileTopSearch() { 3249 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 3250 <label for="MobileSearchTrigger" class="menu__link menu__link--icon menu__link--mobile dw-mod"> 3251 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue fa-1_5x"></i> 3252 </label> 3253 </li> 3254 } 3255 3256 @helper RenderMobileTopMiniCart() { 3257 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 3258 int cartPageId = GetPageIdByNavigationTag("CartPage"); 3259 double cartProductsCount = Model.Cart.TotalProductsCount; 3260 3261 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod" id="miniCartWrapper" onmouseenter="Cart.UpdateMiniCart('miniCartWrapper', 'miniCart', 'cartCounter', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart')"> 3262 <div class="mini-cart dw-mod"> 3263 <a href="/Default.aspx?ID=@cartPageId&Purge=True" id="miniCartCounterWrap" class="menu__link menu__link--icon menu__link--mobile dw-mod js-mini-cart-button"> 3264 <div class="u-inline u-position-relative"> 3265 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue fa-1_5x"></i> 3266 <div class="mini-cart__counter dw-mod"> 3267 <div class="js-handlebars-root js-mini-cart-counter" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-init-onload="false" data-preloader="false"> 3268 <div class="js-mini-cart-counter-content"> 3269 @cartProductsCount 3270 </div> 3271 </div> 3272 </div> 3273 </div> 3274 </a> 3275 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 3276 { 3277 <div class="mini-cart-dropdown js-handlebars-root js-mini-cart dw-mod" id="miniCart" data-template="MiniCartContent" data-cart-id="@miniCartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 3278 } 3279 </div> 3280 </li> 3281 } 3282 3283 @helper RenderMobileTopSearchBar() 3284 { 3285 string searchFeedId = ""; 3286 string searchSecondFeedId = ""; 3287 int groupsFeedId; 3288 int productsPageId = GetPageIdByNavigationTag("ProductsPage"); 3289 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID; 3290 string resultPageLink; 3291 string searchPlaceholder; 3292 string searchType = "product-search"; 3293 string searchTemplate; 3294 string searchContentTemplate = ""; 3295 string searchValue = HttpContext.Current.Request.QueryString.Get("Search") ?? ""; 3296 bool showGroups = true; 3297 3298 if (Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue == "contentSearch") 3299 { 3300 searchFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true"; 3301 resultPageLink = contentSearchPageLink; 3302 searchPlaceholder = Translate("Search page"); 3303 groupsFeedId = 0; 3304 searchType = "content-search"; 3305 searchTemplate = "SearchPagesTemplate"; 3306 showGroups = false; 3307 } 3308 else if (Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue == "combinedSearch") 3309 { 3310 searchFeedId = productsPageId + "&feed=true"; 3311 searchSecondFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true"; 3312 resultPageLink = Converter.ToString(productsPageId); 3313 searchPlaceholder = Translate("Search products or pages"); 3314 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed"); 3315 searchType = "combined-search"; 3316 searchTemplate = "SearchProductsTemplateWrap"; 3317 searchContentTemplate = "SearchPagesTemplateWrap"; 3318 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector"); 3319 } 3320 else 3321 { 3322 resultPageLink = Converter.ToString(productsPageId); 3323 searchFeedId = productsPageId + "&feed=true"; 3324 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed"); 3325 searchPlaceholder = Translate("Search products"); 3326 searchTemplate = "SearchProductsTemplate"; 3327 searchType = "product-search"; 3328 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector"); 3329 } 3330 3331 3332 <input type="checkbox" id="MobileSearchTrigger" class="mobile-search-trigger" /> 3333 3334 <div class="main-navigation-mobile typeahead-mobile dw-mod"> 3335 <div class="center-container top-container__center-container dw-mod"> 3336 <div class="grid"> 3337 <div class="grid__col-auto"> 3338 <div class="typeahead-mobile__search-field dw-mod js-typeahead" data-page-size="@(searchType == "combined-search" ? 4 : 8)" id="MobileProductSearch" data-search-feed-id="@searchFeedId" data-search-second-feed-id="@searchSecondFeedId" data-result-page-id="@resultPageLink" data-search-type="@searchType"> 3339 <input type="text" class="js-typeahead-search-field u-w160px u-no-margin" placeholder="@searchPlaceholder" value="@searchValue"> 3340 @if (string.IsNullOrEmpty(searchSecondFeedId)) 3341 { 3342 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></ul> 3343 } 3344 else 3345 { 3346 <div class="dropdown dropdown--absolute-position dropdown--combined grid dropdown--combined-mobile grid"> 3347 <div class="js-handlebars-root js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="MobileProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></div> 3348 <div class="js-handlebars-root js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="MobileContentSearchBarContent" data-template="@searchContentTemplate" data-json-feed="/Default.aspx?ID=@searchSecondFeedId" data-init-onload="false"></div> 3349 </div> 3350 } 3351 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue"></i></button> 3352 </div> 3353 </div> 3354 <div class="grid__col-auto-width"> 3355 <ul class="menu dw-mod"> 3356 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 3357 <label for="MobileSearchTrigger" class="menu__link menu__link--icon menu__link--mobile dw-mod"> 3358 <i class="fas fa-times fa-1_5x"></i> 3359 </label> 3360 </li> 3361 </ul> 3362 </div> 3363 </div> 3364 </div> 3365 </div> 3366 } 3367 3368 @helper RenderMobileMiniCartCounterContent() 3369 { 3370 bool showPrice = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetBoolean("ShowPrice"); 3371 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right"; 3372 bool showPriceInMiniCartCounter = Pageview.Device.ToString() != "Mobile" && counterPosition == "right" && showPrice; 3373 3374 <script id="MiniCartCounterContent" type="text/x-template"> 3375 {{#.}} 3376 <div class="js-mini-cart-counter-content dw-mod"> 3377 @if (showPriceInMiniCartCounter) 3378 { 3379 @Translate("Cart")<text>({{numberofproducts}}) {{totalprice}}</text> 3380 } 3381 else 3382 { 3383 <text>{{numberofproducts}}</text> 3384 } 3385 </div> 3386 {{/.}} 3387 </script> 3388 } 3389 @*</text> 3390 <text>*@@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 3391 3392 @using System 3393 @using System.Web 3394 @using System.Collections.Generic 3395 @using Dynamicweb.Rapido.Blocks.Extensibility 3396 @using Dynamicweb.Rapido.Blocks 3397 3398 @functions { 3399 BlocksPage mobileNavigationBlocksPage = BlocksPage.GetBlockPage("Master"); 3400 } 3401 3402 @{ 3403 bool navigationItemsHideSignIn = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSignIn"); 3404 bool mobileHideCreateAccountLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideCreateAccount"); 3405 bool mobileHideMyProfileLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideProfile"); 3406 bool mobileHideMyOrdersLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideOrders"); 3407 bool mobileHideMySavedCardsLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideSavedCards"); 3408 bool mobileHideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideFavorites"); 3409 3410 Block mobileNavigation = new Block() 3411 { 3412 Id = "MobileNavigation", 3413 SortId = 10, 3414 Template = MobileNavigation(), 3415 SkipRenderBlocksList = true 3416 }; 3417 mobileNavigationBlocksPage.Add(MasterBlockId.MasterTopSnippets, mobileNavigation); 3418 3419 if (Model.CurrentUser.ID > 0 && !mobileHideCreateAccountLink) 3420 { 3421 Block mobileNavigationSignIn = new Block 3422 { 3423 Id = "MobileNavigationSignIn", 3424 SortId = 10, 3425 Template = RenderMobileNavigationSignIn() 3426 }; 3427 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationSignIn); 3428 } 3429 3430 Block mobileNavigationMenu = new Block 3431 { 3432 Id = "MobileNavigationMenu", 3433 SortId = 20, 3434 Template = RenderMobileNavigationMenu() 3435 }; 3436 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationMenu); 3437 3438 Block mobileNavigationActions = new Block 3439 { 3440 Id = "MobileNavigationActions", 3441 SortId = 30, 3442 Template = RenderMobileNavigationActions(), 3443 SkipRenderBlocksList = true 3444 }; 3445 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationActions); 3446 3447 if (!navigationItemsHideSignIn) 3448 { 3449 if (Model.CurrentUser.ID <= 0) 3450 { 3451 Block mobileNavigationSignInAction = new Block 3452 { 3453 Id = "MobileNavigationSignInAction", 3454 SortId = 10, 3455 Template = RenderMobileNavigationSignInAction() 3456 }; 3457 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSignInAction); 3458 3459 if (!mobileHideCreateAccountLink) 3460 { 3461 Block mobileNavigationCreateAccountAction = new Block 3462 { 3463 Id = "MobileNavigationCreateAccountAction", 3464 SortId = 20, 3465 Template = RenderMobileNavigationCreateAccountAction() 3466 }; 3467 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationCreateAccountAction); 3468 } 3469 } 3470 else 3471 { 3472 if (!mobileHideMyOrdersLink ) 3473 { 3474 Block mobileNavigationOrdersAction = new Block 3475 { 3476 Id = "MobileNavigationOrdersAction", 3477 SortId = 20, 3478 Template = RenderMobileNavigationOrdersAction() 3479 }; 3480 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationOrdersAction); 3481 } 3482 if (!mobileHideMyFavoritesLink) 3483 { 3484 Block mobileNavigationFavoritesAction = new Block 3485 { 3486 Id = "MobileNavigationFavoritesAction", 3487 SortId = 30, 3488 Template = RenderMobileNavigationFavoritesAction() 3489 }; 3490 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationFavoritesAction); 3491 } 3492 if (!mobileHideMyOrdersLink ) 3493 { 3494 Block mobileNavigationSavedCardsAction = new Block 3495 { 3496 Id = "MobileNavigationFavoritesAction", 3497 SortId = 30, 3498 Template = RenderMobileNavigationSavedCardsAction() 3499 }; 3500 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSavedCardsAction); 3501 } 3502 3503 Block mobileNavigationSignOutAction = new Block 3504 { 3505 Id = "MobileNavigationSignOutAction", 3506 SortId = 40, 3507 Template = RenderMobileNavigationSignOutAction() 3508 }; 3509 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSignOutAction); 3510 } 3511 } 3512 3513 if (Model.Languages.Count > 1) 3514 { 3515 Block mobileNavigationLanguagesAction = new Block 3516 { 3517 Id = "MobileNavigationLanguagesAction", 3518 SortId = 50, 3519 Template = RenderMobileNavigationLanguagesAction() 3520 }; 3521 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationLanguagesAction); 3522 } 3523 } 3524 3525 3526 @helper MobileNavigation() 3527 { 3528 List<Block> subBlocks = this.mobileNavigationBlocksPage.GetBlockListById("MobileNavigation").OrderBy(item => item.SortId).ToList(); 3529 3530 bool onlyPreview = Model.Area.Item.GetItem("Ecommerce").GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0; 3531 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 3532 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 3533 string mobileTopDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design") != null ? Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design").SelectedValue : "nav-left"; 3534 string position = mobileTopDesign == "nav-left" || mobileTopDesign == "nav-search-left" ? "left" : "right"; 3535 3536 <!-- Trigger for mobile navigation --> 3537 <input type="checkbox" id="MobileNavTrigger" class="mobile-nav-trigger mobile-nav-trigger--@position" autocomplete="off" /> 3538 3539 <!-- Mobile navigation --> 3540 <nav class="mobile-navigation mobile-navigation--@position dw-mod"> 3541 <div class="mobile-navigation__wrapper" id="mobileNavigationWrapper"> 3542 @RenderBlockList(subBlocks) 3543 </div> 3544 </nav> 3545 3546 <label class="mobile-nav-trigger-off" for="MobileNavTrigger"></label> 3547 3548 if (!onlyPreview) 3549 { 3550 <div class="u-visually-hidden js-handlebars-root js-mini-cart" id="miniCart" data-template="MiniCartContent" data-cart-id="@cartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 3551 } 3552 } 3553 3554 @helper RenderMobileNavigationSignIn() 3555 { 3556 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator"); 3557 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile"); 3558 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID="; 3559 string myProfilePageLink = linkStart + myProfilePageId; 3560 string userName = Model.CurrentUser.FirstName ?? ""; 3561 userName += " " + (Model.CurrentUser.LastName ?? ""); 3562 userName += userName == "" && Model.CurrentUser.UserName != null ? Model.CurrentUser.UserName : ""; 3563 3564 <ul class="menu menu-mobile"> 3565 <li class="menu-mobile__item"> 3566 <a href="@myProfilePageLink" class="menu-mobile__link dw-mod"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @userName</a> 3567 </li> 3568 </ul> 3569 } 3570 3571 @helper RenderMobileNavigationMenu() 3572 { 3573 bool isSlidesDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetList("Design").SelectedValue == "Slides"; 3574 string menuTemplate = isSlidesDesign ? "BaseMenuForMobileSlides.xslt" : "BaseMenuForMobileExpandable.xslt"; 3575 string levels = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetString("Levels")) ? Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetString("Levels") : "3"; 3576 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar"); 3577 int startLevel = renderPagesInToolBar ? 1 : 0; 3578 3579 @RenderNavigation(new 3580 { 3581 id = "mobilenavigation", 3582 cssclass = "menu menu-mobile dwnavigation", 3583 startLevel = @startLevel, 3584 ecomStartLevel = @startLevel + 1, 3585 endlevel = @levels, 3586 expandmode = "all", 3587 template = @menuTemplate 3588 }) 3589 3590 if (isSlidesDesign) 3591 { 3592 <script> 3593 function goToLevel(level) { 3594 document.getElementById('mobileNavigationWrapper').style.left = -(level * 100) + "%"; 3595 } 3596 3597 document.addEventListener('DOMContentLoaded', function () { 3598 goToLevel(document.getElementById('mobileNavigationWrapper').querySelectorAll('input[type=radio]:checked').length); 3599 }); 3600 </script> 3601 } 3602 3603 if (renderPagesInToolBar) 3604 { 3605 @RenderNavigation(new 3606 { 3607 id = "topToolsMobileNavigation", 3608 cssclass = "menu menu-mobile dwnavigation", 3609 template = "ToolsMenuForMobile.xslt" 3610 }) 3611 } 3612 } 3613 3614 @helper RenderMobileNavigationActions() 3615 { 3616 List<Block> subBlocks = this.mobileNavigationBlocksPage.GetBlockListById("MobileNavigationActions").OrderBy(item => item.SortId).ToList(); ; 3617 3618 <ul class="menu menu-mobile"> 3619 @RenderBlockList(subBlocks) 3620 </ul> 3621 } 3622 3623 @helper RenderMobileNavigationSignInAction() 3624 { 3625 <li class="menu-mobile__item"> 3626 <label for="SignInModalTrigger" onclick="document.getElementById('MobileNavTrigger').checked = false;" class="menu-mobile__link dw-mod menu-mobile__link--highlighted"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @Translate("Sign in")</label> 3627 </li> 3628 } 3629 3630 @helper RenderMobileNavigationCreateAccountAction() 3631 { 3632 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 3633 3634 <li class="menu-mobile__item"> 3635 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Default.aspx?ID=@createAccountPageId"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @Translate("Create account")</a> 3636 </li> 3637 } 3638 3639 @helper RenderMobileNavigationProfileAction() 3640 { 3641 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator"); 3642 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID="; 3643 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile"); 3644 string myProfilePageLink = linkStart + myProfilePageId; 3645 3646 <li class="menu-mobile__item"> 3647 <a href="@myProfilePageLink" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @Translate("My Profile")</a> 3648 </li> 3649 } 3650 3651 @helper RenderMobileNavigationOrdersAction() 3652 { 3653 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator"); 3654 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID="; 3655 int myOrdersPageId = GetPageIdByNavigationTag("CustomerOrders"); 3656 string myOrdersPageLink = linkStart + myOrdersPageId; 3657 string ordersIcon = "fas fa-list"; 3658 3659 <li class="menu-mobile__item"> 3660 <a href="@myOrdersPageLink" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@ordersIcon menu-mobile__link-icon"></i> @Translate("My Orders")</a> 3661 </li> 3662 } 3663 3664 @helper RenderMobileNavigationFavoritesAction() 3665 { 3666 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator"); 3667 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID="; 3668 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites"); 3669 string myFavoritesPageLink = linkStart + myFavoritesPageId; 3670 string favoritesIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon") != null ? "fas fa-" + Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon").SelectedValue : "fa fa-star"; 3671 3672 3673 <li class="menu-mobile__item"> 3674 <a href="@myFavoritesPageLink" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@favoritesIcon menu-mobile__link-icon"></i> @Translate("My Favorites")</a> 3675 </li> 3676 } 3677 3678 @helper RenderMobileNavigationSavedCardsAction() 3679 { 3680 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator"); 3681 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID="; 3682 int mySavedCardsPageId = GetPageIdByNavigationTag("SavedCards"); 3683 string mySavedCardsPageLink = linkStart + mySavedCardsPageId; 3684 string savedCardsIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SavedCards") != null ? "fas fa-" + Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SavedCards").SelectedValue : "fas fa-credit-card"; 3685 3686 <li class="menu-mobile__item"> 3687 <a href="@mySavedCardsPageLink" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@savedCardsIcon menu-mobile__link-icon"></i> @Translate("My Saved Cards")</a> 3688 </li> 3689 } 3690 3691 @helper RenderMobileNavigationSignOutAction() 3692 { 3693 int pageId = Model.TopPage.ID; 3694 string signOutIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignOutIcon") != null ? "fas fa-" + Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignOutIcon").SelectedValue : "far fa-sign-out-alt"; 3695 3696 <li class="menu-mobile__item"> 3697 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId"><i class="@signOutIcon menu-mobile__link-icon"></i> @Translate("Sign out")</a> 3698 </li> 3699 } 3700 3701 @helper RenderMobileNavigationLanguagesAction() 3702 { 3703 bool isSlidesDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetList("Design").SelectedValue == "Slides"; 3704 3705 string selectedLanguage = ""; 3706 foreach (var lang in Model.Languages) 3707 { 3708 if (lang.IsCurrent) 3709 { 3710 selectedLanguage = lang.Name; 3711 } 3712 } 3713 3714 <li class="menu-mobile__item dw-mod"> 3715 @if (isSlidesDesign) 3716 { 3717 <input id="MobileMenuCheck_Language" type="radio" class="expand-trigger" name="mobile-menu-level-1" onclick="goToLevel(1);"> 3718 } 3719 else 3720 { 3721 <input id="MobileMenuCheck_Language" type="checkbox" class="expand-trigger"> 3722 } 3723 <div class="menu-mobile__link__wrap"> 3724 <label for="MobileMenuCheck_Language" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("LanguageIcon").SelectedValue menu-mobile__link-icon"></i> @selectedLanguage</label> 3725 <label for="MobileMenuCheck_Language" class="menu-mobile__trigger"></label> 3726 </div> 3727 <ul class="menu-mobile menu-mobile__submenu expand-menu"> 3728 @if (isSlidesDesign) 3729 { 3730 <li class="menu-mobile__item dw-mod"> 3731 <div class="menu-mobile__link__wrap"> 3732 <input id="MobileMenuCheck_Language_back" type="radio" class="expand-trigger" name="mobile-menu-level-1" onclick="goToLevel(0);" /> 3733 <label for="MobileMenuCheck_Language_back" class="menu-mobile__trigger menu-mobile__trigger--back"></label> 3734 <label for="MobileMenuCheck_Language_back" class="menu-mobile__link dw-mod ">@Translate("Back")</label> 3735 </div> 3736 </li> 3737 } 3738 @foreach (var lang in Model.Languages) 3739 { 3740 <li class="menu-mobile__item dw-mod"> 3741 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod menu-mobile__link--level-1" href="/Default.aspx?ID=@lang.Page.ID">@lang.Name</a> 3742 </li> 3743 } 3744 </ul> 3745 </li> 3746 }@*</text> 3747 } 3748 else 3749 { 3750 <text>*@@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 3751 3752 @using System 3753 @using System.Web 3754 @using System.Collections.Generic 3755 @using Dynamicweb.Rapido.Blocks.Extensibility 3756 @using Dynamicweb.Rapido.Blocks 3757 3758 @functions { 3759 BlocksPage headerBlocksPage = BlocksPage.GetBlockPage("Master"); 3760 } 3761 3762 @{ 3763 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 3764 { 3765 Block masterTools = new Block() 3766 { 3767 Id = "MasterDesktopTools", 3768 SortId = 10, 3769 Template = RenderDesktopTools(), 3770 SkipRenderBlocksList = true, 3771 BlocksList = new List<Block> 3772 { 3773 new Block { 3774 Id = "MasterDesktopToolsText", 3775 SortId = 10, 3776 Template = RenderDesktopToolsText(), 3777 Design = new Design 3778 { 3779 Size = "auto", 3780 HidePadding = true, 3781 RenderType = RenderType.Column 3782 } 3783 }, 3784 new Block { 3785 Id = "MasterDesktopToolsNavigation", 3786 SortId = 20, 3787 Template = RenderDesktopToolsNavigation(), 3788 Design = new Design 3789 { 3790 Size = "auto-width", 3791 HidePadding = true, 3792 RenderType = RenderType.Column 3793 } 3794 } 3795 } 3796 }; 3797 headerBlocksPage.Add("MasterHeader", masterTools); 3798 } 3799 3800 Block masterDesktopExtra = new Block() 3801 { 3802 Id = "MasterDesktopExtra", 3803 SortId = 10, 3804 Template = RenderDesktopExtra(), 3805 SkipRenderBlocksList = true 3806 }; 3807 headerBlocksPage.Add("MasterHeader", masterDesktopExtra); 3808 3809 Block masterDesktopNavigation = new Block() 3810 { 3811 Id = "MasterDesktopNavigation", 3812 SortId = 20, 3813 Template = RenderDesktopNavigation(), 3814 SkipRenderBlocksList = true 3815 }; 3816 headerBlocksPage.Add("MasterHeader", masterDesktopNavigation); 3817 } 3818 3819 @* Include the Blocks for the page *@ 3820 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 3821 3822 @using System 3823 @using System.Web 3824 @using Dynamicweb.Rapido.Blocks.Extensibility 3825 @using Dynamicweb.Rapido.Blocks 3826 3827 @{ 3828 Block masterDesktopLogo = new Block 3829 { 3830 Id = "MasterDesktopLogo", 3831 SortId = 10, 3832 Template = RenderDesktopLogo(), 3833 Design = new Design 3834 { 3835 Size = "auto-width", 3836 HidePadding = true, 3837 RenderType = RenderType.Column, 3838 CssClass = "grid--align-self-center" 3839 } 3840 }; 3841 3842 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopLogo); 3843 } 3844 3845 3846 @helper RenderDesktopLogo() 3847 { 3848 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 3849 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 3850 string alignClass = topLayout == "two-lines-centered" || topLayout == "two-lines" ? "grid--align-self-center" : ""; 3851 string logo = Model.Area.Item.GetItem("Layout").GetFile("LogoImage") != null ? Model.Area.Item.GetItem("Layout").GetFile("LogoImage").PathUrlEncoded : "/Files/Images/logo-dynamicweb.png"; 3852 if (Path.GetExtension(logo).ToLower() != ".svg") 3853 { 3854 int logoHeight = Model.Area.Item.GetItem("Layout").GetInt32("LogoHeight"); 3855 logoHeight = logoHeight > 0 && Pageview.Device.ToString() != "Mobile" ? logoHeight : 40; 3856 logo = "/Admin/Public/GetImage.ashx?height=" + Converter.ToString(logoHeight) + "&amp;crop=5&amp;Compression=75&amp;image=" + logo; 3857 } 3858 else 3859 { 3860 logo = HttpUtility.UrlDecode(logo); 3861 } 3862 3863 <div class="logo @alignClass dw-mod"> 3864 <a href="/Default.aspx?ID=@firstPageId" class="logo__img dw-mod u-block"> 3865 <img class="grid__cell-img logo__img dw-mod" src="@logo" alt="@Translate("Logo")" /> 3866 </a> 3867 </div> 3868 } 3869 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 3870 3871 @using System 3872 @using System.Web 3873 @using Dynamicweb.Rapido.Blocks.Extensibility 3874 @using Dynamicweb.Rapido.Blocks 3875 3876 @functions { 3877 bool isMegaMenu; 3878 } 3879 3880 @{ 3881 isMegaMenu = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("NavigationMegaMenu") != null ? Converter.ToBoolean(Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("NavigationMegaMenu").SelectedValue) : false; 3882 Block masterDesktopMenu = new Block 3883 { 3884 Id = "MasterDesktopMenu", 3885 SortId = 10, 3886 Template = RenderDesktopMenu(), 3887 Design = new Design 3888 { 3889 Size = "auto", 3890 HidePadding = true, 3891 RenderType = RenderType.Column 3892 } 3893 }; 3894 3895 if (isMegaMenu) 3896 { 3897 masterDesktopMenu.Design.CssClass = "u-reset-position"; 3898 } 3899 3900 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopMenu); 3901 } 3902 3903 @helper RenderDesktopMenu() 3904 { 3905 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 3906 string menuAlignment = topLayout == "minimal-right" ? "grid--align-self-end" : ""; 3907 string megamenuPromotionImage = Model.Area.Item.GetItem("Layout").GetItem("Header").GetFile("MegamenuPromotionImage") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetFile("MegamenuPromotionImage").PathUrlEncoded : ""; 3908 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar"); 3909 bool showOnlyHeaders = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowOnlyHeaders"); 3910 int startLevel = renderPagesInToolBar ? 1 : 0; 3911 3912 string promotionLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("MegamenuPromotionLink"); 3913 3914 <div class="grid__cell u-flex @(isMegaMenu ? "u-reset-position" : "") @menuAlignment"> 3915 @if (!isMegaMenu) 3916 { 3917 @RenderNavigation(new 3918 { 3919 id = "topnavigation", 3920 cssclass = "menu dw-mod dwnavigation u-full-max-width u-flex grid--wrap", 3921 startLevel = startLevel, 3922 ecomStartLevel = startLevel + 1, 3923 endlevel = 5, 3924 expandmode = "all", 3925 template = "BaseMenuWithDropdown.xslt" 3926 }); 3927 } 3928 else 3929 { 3930 @RenderNavigation(new 3931 { 3932 id = "topnavigation", 3933 cssclass = "menu dw-mod dwnavigation u-full-max-width u-flex grid--wrap", 3934 startLevel = startLevel, 3935 ecomStartLevel = startLevel + 1, 3936 endlevel = 5, 3937 promotionImage = megamenuPromotionImage, 3938 promotionLink = promotionLink, 3939 expandmode = "all", 3940 showOnlyHeaders = showOnlyHeaders.ToString().ToLower(), 3941 template = "BaseMegaMenu.xslt" 3942 }); 3943 } 3944 </div> 3945 } 3946 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 3947 3948 @using System 3949 @using System.Web 3950 @using Dynamicweb.Rapido.Blocks.Extensibility 3951 @using Dynamicweb.Rapido.Blocks 3952 3953 @{ 3954 Block masterDesktopActionsMenu = new Block 3955 { 3956 Id = "MasterDesktopActionsMenu", 3957 SortId = 10, 3958 Template = RenderDesktopActionsMenu(), 3959 Design = new Design 3960 { 3961 CssClass = "u-flex" 3962 }, 3963 SkipRenderBlocksList = true 3964 3965 }; 3966 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopActionsMenu); 3967 3968 if (!string.IsNullOrWhiteSpace(Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonLink"))) 3969 { 3970 Block masterDesktopActionsHeaderButton = new Block 3971 { 3972 Id = "MasterDesktopActionsHeaderButton", 3973 SortId = 60, 3974 Template = RenderHeaderButton() 3975 }; 3976 masterDesktopActionsMenu.Add(masterDesktopActionsHeaderButton); 3977 } 3978 } 3979 3980 @helper RenderDesktopActionsMenu() 3981 { 3982 List<Block> subBlocks = this.headerBlocksPage.GetBlockListById("MasterDesktopActionsMenu").OrderBy(item => item.SortId).ToList(); 3983 3984 <ul class="menu u-flex dw-mod"> 3985 @RenderBlockList(subBlocks) 3986 </ul> 3987 } 3988 3989 @helper RenderHeaderButton() 3990 { 3991 string headerButtonText = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonText"); 3992 string headerButtonLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonLink"); 3993 string headerButtonType = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType") != null ? "btn--" + Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType").SelectedName.ToLower() : ""; 3994 3995 <li class="menu__item menu__item--horizontal menu--clean dw-mod"> 3996 <a class="btn @headerButtonType dw-mod u-no-margin u-margin-top u-margin-left" href="@headerButtonLink">@headerButtonText</a> 3997 </li> 3998 } 3999 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4000 4001 @using System 4002 @using System.Web 4003 @using Dynamicweb.Core; 4004 @using System.Text.RegularExpressions 4005 @using Dynamicweb.Rapido.Blocks.Extensibility 4006 @using Dynamicweb.Rapido.Blocks 4007 4008 @{ 4009 Block masterDesktopActionsMenuLanguageSelector = new Block 4010 { 4011 Id = "MasterDesktopActionsMenuLanguageSelector", 4012 SortId = 40, 4013 Template = RenderLanguageSelector() 4014 }; 4015 4016 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuLanguageSelector); 4017 } 4018 4019 @helper RenderLanguageSelector() 4020 { 4021 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4022 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean"; 4023 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon"; 4024 string languageViewType = !string.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("LanguageSelector").SelectedValue) ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("LanguageSelector").SelectedValue.ToLower() : ""; 4025 4026 if (Model.Languages.Count > 1) 4027 { 4028 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon is-dropdown is-dropdown--no-icon dw-mod"> 4029 <div class="@menuLinkClass dw-mod"> 4030 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("LanguageIcon").SelectedValue fa-1_5x"></i> 4031 </div> 4032 <div class="menu menu--dropdown menu--dropdown-right languages-dropdown dw-mod grid__cell"> 4033 @foreach (var lang in Model.Languages) 4034 { 4035 4036 string langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " u-margin-right\"></span>" + lang.Name; 4037 string cultureName = Regex.Replace(Dynamicweb.Services.Areas.GetArea(lang.ID).CultureInfo.NativeName, @" ?\(.*?\)", string.Empty); 4038 cultureName = char.ToUpper(cultureName[0]) + cultureName.Substring(1); 4039 4040 if (languageViewType == "flag-culture") 4041 { 4042 langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " \"></span> " + cultureName; 4043 } 4044 4045 if (languageViewType == "flag") 4046 { 4047 langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " \"></span>"; 4048 } 4049 4050 if (languageViewType == "name") 4051 { 4052 langInfo = lang.Name; 4053 } 4054 4055 if (languageViewType == "culture") 4056 { 4057 langInfo = cultureName; 4058 } 4059 4060 <a href="/Default.aspx?AreaID=@Dynamicweb.Services.Pages.GetPage(lang.Page.ID).Area.ID" class="menu-dropdown__item menu-dropdown__item--link dw-mod">@langInfo</a> 4061 } 4062 </div> 4063 </li> 4064 } 4065 } 4066 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4067 4068 @using System 4069 @using System.Web 4070 @using Dynamicweb.Rapido.Blocks.Extensibility 4071 @using Dynamicweb.Rapido.Blocks 4072 4073 @{ 4074 Block masterDesktopActionsMenuSignIn = new Block 4075 { 4076 Id = "MasterDesktopActionsMenuSignIn", 4077 SortId = 20, 4078 Template = RenderSignIn() 4079 }; 4080 4081 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuSignIn); 4082 } 4083 4084 @helper RenderSignIn() 4085 { 4086 bool navigationItemsHideSignIn = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSignIn"); 4087 string userInitials = ""; 4088 int pageId = Model.TopPage.ID; 4089 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 4090 int myDashboardPageId = GetPageIdByNavigationTag("CustomerDashboard"); 4091 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile"); 4092 int myOrdersPageId = GetPageIdByNavigationTag("CustomerOrders"); 4093 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites"); 4094 int mySavedCardsPageId = GetPageIdByNavigationTag("SavedCards"); 4095 int signInProfilePageId = GetPageIdByNavigationTag("SignInPageConfigurator"); 4096 bool hideCreateAccountLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideCreateAccount"); 4097 bool hideMyProfileLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideProfile"); 4098 bool hideMyOrdersLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideOrders"); 4099 bool hideMySavedCardsLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideSavedCards"); 4100 bool hideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideFavorites"); 4101 bool hideForgotPasswordLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideForgotPasswordLink"); 4102 4103 string linkStart = "/Default.aspx?ID="; 4104 if (Model.CurrentUser.ID <= 0) 4105 { 4106 linkStart += signInProfilePageId + "&RedirectPageId="; 4107 } 4108 4109 string forgotPasswordPageLink = "/Default.aspx?ID=" + signInProfilePageId + "&LoginAction=Recovery"; 4110 string myProfilePageLink = linkStart + myProfilePageId; 4111 string myOrdersPageLink = linkStart + myOrdersPageId; 4112 string myFavoritesPageLink = linkStart + myFavoritesPageId; 4113 string mySavedCardsPageLink = linkStart + mySavedCardsPageId; 4114 4115 string profileIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue : "fa fa-user"; 4116 string favoritesIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon") != null ? "fas fa-" + Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon").SelectedValue : "fa fa-star"; 4117 4118 if (Model.CurrentUser.ID != 0) 4119 { 4120 if (!String.IsNullOrEmpty(Model.CurrentUser.Name)) 4121 { 4122 string[] names = Model.CurrentUser.Name.Trim().Split(' '); 4123 userInitials += Model.CurrentUser.Name.Substring(0, 1); 4124 4125 if (names.Length > 1) 4126 { 4127 userInitials += names[names.Length - 1].Substring(0, 1); 4128 } 4129 } 4130 else 4131 { 4132 userInitials += Model.CurrentUser.FirstName != null && Model.CurrentUser.FirstName != "" ? Model.CurrentUser.FirstName.Substring(0, 1) : ""; 4133 userInitials += Model.CurrentUser.LastName != null && Model.CurrentUser.LastName != "" ? Model.CurrentUser.LastName.Substring(0, 1) : ""; 4134 userInitials += userInitials.Length == 1 && Model.CurrentUser.FirstName != null && Model.CurrentUser.FirstName.Length > 1 ? Model.CurrentUser.FirstName.Substring(1, 2) : ""; 4135 userInitials += userInitials == "" && Model.CurrentUser.Email != null && Model.CurrentUser.Email.Length > 1 ? Model.CurrentUser.Email.Substring(0, 2) : ""; 4136 userInitials += userInitials == "" ? Model.CurrentUser.UserName.Substring(0, 2) : ""; 4137 } 4138 } 4139 4140 if (!navigationItemsHideSignIn) 4141 { 4142 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4143 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu__item--clean"; 4144 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon"; 4145 4146 <li class="menu__item menu__item--horizontal menu__item menu__item--icon @liClasses is-dropdown is-dropdown--no-icon dw-mod"> 4147 <div class="@menuLinkClass dw-mod"> 4148 @if (Model.CurrentUser.ID <= 0) 4149 { 4150 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue fa-1_5x"></i> 4151 } 4152 else 4153 { 4154 <a href="/default.aspx?ID=@myDashboardPageId" class="u-color-inherit"><div class="circle-icon-btn">@userInitials.ToUpper()</div></a> 4155 } 4156 </div> 4157 <div class="menu menu--dropdown menu--dropdown-right menu--sign-in grid__cell dw-mod"> 4158 <ul class="list list--clean dw-mod"> 4159 @if (Model.CurrentUser.ID <= 0) 4160 { 4161 <li> 4162 <label for="SignInModalTrigger" class="btn btn--primary btn--full u-no-margin sign-in-modal-trigger-button dw-mod" onclick="setTimeout(function () { document.getElementById('LoginUsername').focus() }, 10)">@Translate("Sign in")</label> 4163 </li> 4164 4165 if (!hideCreateAccountLink) 4166 { 4167 @RenderListItem("/default.aspx?ID=" + createAccountPageId, Translate("Create account")); 4168 } 4169 if (!hideForgotPasswordLink) 4170 { 4171 @RenderListItem(forgotPasswordPageLink, Translate("Forgot your password?")) 4172 } 4173 if (!hideMyProfileLink || !hideMyOrdersLink || !hideMyFavoritesLink || !hideMySavedCardsLink) 4174 { 4175 @RenderSeparator() 4176 } 4177 } 4178 @if (!hideMyProfileLink) 4179 { 4180 @RenderListItem(myProfilePageLink, Translate("My Profile"), profileIcon) 4181 } 4182 @if (!hideMyOrdersLink) 4183 { 4184 @RenderListItem(myOrdersPageLink, Translate("My Orders"), "fas fa-list") 4185 } 4186 @if (!hideMyFavoritesLink) 4187 { 4188 @RenderListItem(myFavoritesPageLink, Translate("My Favorites"), favoritesIcon) 4189 } 4190 @if (!hideMySavedCardsLink) 4191 { 4192 @RenderListItem(mySavedCardsPageLink, Translate("My Saved cards"), "fas fa-credit-card") 4193 } 4194 @if (Model.CurrentUser.ID > 0) 4195 { 4196 if (!hideMyProfileLink || !hideMyOrdersLink || !hideMyFavoritesLink || !hideMySavedCardsLink) 4197 { 4198 @RenderSeparator() 4199 } 4200 4201 @RenderListItem("/Admin/Public/ExtranetLogoff.aspx?ID=" + pageId, Translate("Sign out")) 4202 } 4203 </ul> 4204 </div> 4205 </li> 4206 } 4207 } 4208 4209 @helper RenderListItem(string link, string text, string icon = null) { 4210 <li> 4211 <a href="@link" class="list__link dw-mod"> 4212 @if (!string.IsNullOrEmpty(icon)) 4213 { 4214 <i class="@icon u-margin-right"></i> 4215 } 4216 @text 4217 </a> 4218 </li> 4219 } 4220 4221 @helper RenderSeparator() 4222 { 4223 <li class="list__seperator dw-mod"></li> 4224 } 4225 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4226 4227 @using System 4228 @using System.Web 4229 @using Dynamicweb.Rapido.Blocks.Extensibility 4230 @using Dynamicweb.Rapido.Blocks 4231 4232 @{ 4233 bool hideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideFavorites"); 4234 4235 Block masterDesktopActionsMenuFavorites = new Block 4236 { 4237 Id = "MasterDesktopActionsMenuFavorites", 4238 SortId = 30, 4239 Template = RenderFavorites() 4240 }; 4241 4242 if (!hideMyFavoritesLink && Model.CurrentUser.ID > 0) 4243 { 4244 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuFavorites); 4245 } 4246 } 4247 4248 @helper RenderFavorites() 4249 { 4250 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites"); 4251 string myFavoritesPageLink = "/Default.aspx?ID=" + myFavoritesPageId; 4252 4253 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4254 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean"; 4255 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon"; 4256 4257 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon dw-mod"> 4258 <a href="@myFavoritesPageLink" class="@menuLinkClass dw-mod"> 4259 <i class="fas fa-@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon").SelectedValue fa-1_5x"></i> 4260 </a> 4261 </li> 4262 } 4263 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4264 4265 @using System 4266 @using System.Web 4267 @using Dynamicweb.Rapido.Blocks.Extensibility 4268 @using Dynamicweb.Rapido.Blocks 4269 4270 @{ 4271 bool onlyPreview = Model.Area.Item.GetItem("Ecommerce").GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0; 4272 bool hideCart = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideCart"); 4273 string miniCartLayout = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("Layout") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("Layout").SelectedValue : "dropdown"; 4274 4275 if (!onlyPreview && !hideCart) 4276 { 4277 Block masterDesktopActionsMenuMiniCart = new Block 4278 { 4279 Id = "MasterDesktopActionsMenuMiniCart", 4280 SortId = 50, 4281 Template = RenderMiniCart(miniCartLayout == "dropdown"), 4282 SkipRenderBlocksList = true, 4283 BlocksList = new List<Block>() 4284 }; 4285 4286 Block miniCartCounterScriptTemplate = new Block 4287 { 4288 Id = "MiniCartCounterScriptTemplate", 4289 Template = RenderMiniCartCounterContent() 4290 }; 4291 4292 //dropdown layout is default 4293 RazorEngine.Templating.TemplateWriter layoutTemplate = RenderMiniCartDropdownLayout(); 4294 RazorEngine.Templating.TemplateWriter miniCartTriggerTemplate = RenderMiniCartTriggerLink(); 4295 4296 switch (miniCartLayout) 4297 { 4298 case "panel": 4299 layoutTemplate = RenderMiniCartPanelLayout(); 4300 miniCartTriggerTemplate = RenderMiniCartTriggerLabel(); 4301 break; 4302 case "modal": 4303 layoutTemplate = RenderMiniCartModalLayout(); 4304 miniCartTriggerTemplate = RenderMiniCartTriggerLabel(); 4305 break; 4306 } 4307 4308 masterDesktopActionsMenuMiniCart.BlocksList.Add(new Block 4309 { 4310 Id = "MiniCartTrigger", 4311 Template = miniCartTriggerTemplate 4312 }); 4313 4314 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 4315 { 4316 masterDesktopActionsMenuMiniCart.BlocksList.Add(new Block 4317 { 4318 Id = "MiniCartLayout", 4319 Template = layoutTemplate 4320 }); 4321 } 4322 4323 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuMiniCart); 4324 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", miniCartCounterScriptTemplate); 4325 } 4326 } 4327 4328 @helper RenderMiniCart(bool hasMouseEnterEvent) 4329 { 4330 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterDesktopActionsMenuMiniCart").OrderBy(item => item.SortId).ToList(); 4331 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4332 string liClasses = topLayout != "normal" ? "menu__item--top-level" : "menu--clean"; 4333 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 4334 string mouseEvent = ""; 4335 string id = "MiniCart"; 4336 if (hasMouseEnterEvent) { 4337 mouseEvent = "onmouseenter=\"Cart.UpdateMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '/Default.aspx?ID=" + miniCartFeedPageId + "&feedType=MiniCart')\""; 4338 id = "miniCartTrigger"; 4339 } 4340 <li class="menu__item menu__item--horizontal menu__item--icon @liClasses dw-mod" id="@id" @mouseEvent> 4341 @RenderBlockList(subBlocks) 4342 </li> 4343 } 4344 4345 @helper RenderMiniCartTriggerLabel() 4346 { 4347 int cartPageId = GetPageIdByNavigationTag("CartPage"); 4348 string cartIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue : "fa fa-cart"; 4349 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4350 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon"; 4351 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 4352 4353 <div class="@menuLinkClass dw-mod js-mini-cart-button" onclick="Cart.UpdateMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart')"> 4354 <div class="u-inline u-position-relative"> 4355 <i class="@cartIcon fa-1_5x"></i> 4356 @RenderMiniCartCounter() 4357 </div> 4358 </div> 4359 } 4360 4361 @helper RenderMiniCartTriggerLink() 4362 { 4363 int cartPageId = GetPageIdByNavigationTag("CartPage"); 4364 string cartIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue : "fa fa-cart"; 4365 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4366 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon"; 4367 4368 <a href="/Default.aspx?ID=@cartPageId&Purge=True" class="@menuLinkClass menu__item--icon dw-mod js-mini-cart-button"> 4369 <div class="u-inline u-position-relative"> 4370 <i class="@cartIcon fa-1_5x"></i> 4371 @RenderMiniCartCounter() 4372 </div> 4373 </a> 4374 } 4375 4376 @helper RenderMiniCartCounter() 4377 { 4378 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 4379 string cartProductsCount = Model.Cart.TotalProductsCount.ToString(); 4380 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right"; 4381 bool showPrice = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetBoolean("ShowPrice"); 4382 string cartProductsTotalPrice = showPrice && Model.Cart.TotalPrice != null ? Model.Cart.TotalPrice.Price.Formatted : ""; 4383 cartProductsTotalPrice = counterPosition == "right" ? cartProductsTotalPrice : ""; 4384 4385 if (showPrice && counterPosition == "right") 4386 { 4387 cartProductsCount = Translate("Cart") + "(" + cartProductsCount + ")"; 4388 } 4389 4390 <div class="mini-cart__counter dw-mod"> 4391 <div class="js-handlebars-root js-mini-cart-counter" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-init-onload="false" data-preloader="false"> 4392 <div class="js-mini-cart-counter-content" data-count="@Model.Cart.TotalProductsCount.ToString()"> 4393 @cartProductsCount 4394 @cartProductsTotalPrice 4395 </div> 4396 </div> 4397 </div> 4398 } 4399 4400 @helper RenderMiniCartCounterContent() 4401 { 4402 bool showPrice = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetBoolean("ShowPrice"); 4403 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right"; 4404 bool showPriceInMiniCartCounter = Pageview.Device.ToString() != "Mobile" && counterPosition == "right" && showPrice; 4405 4406 <script id="MiniCartCounterContent" type="text/x-template"> 4407 {{#.}} 4408 <div class="js-mini-cart-counter-content dw-mod" data-count="{{numberofproducts}}"> 4409 @if (showPriceInMiniCartCounter) 4410 { 4411 @Translate("Cart")<text>({{numberofproducts}}) {{totalprice}}</text> 4412 } 4413 else 4414 { 4415 <text>{{numberofproducts}}</text> 4416 } 4417 </div> 4418 {{/.}} 4419 </script> 4420 } 4421 4422 @helper RenderMiniCartDropdownLayout() 4423 { 4424 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 4425 4426 <div class="mini-cart mini-cart-dropdown js-mini-cart grid__cell dw-mod" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="dropdown"> 4427 <div class="mini-cart-dropdown__inner dw-mod"> 4428 <h3 class="u-ta-center dw-mod">@Translate("Shopping cart")</h3> 4429 <div class="mini-cart-dropdown__body u-flex dw-mod"> 4430 <div class="js-handlebars-root u-flex grid--direction-column u-full-width dw-mod" id="miniCartContent" data-template="MiniCartContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 4431 </div> 4432 </div> 4433 </div> 4434 } 4435 4436 @helper RenderMiniCartPanelLayout() 4437 { 4438 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 4439 4440 <div class="mini-cart grid__cell dw-mod"> 4441 <input type="checkbox" id="miniCartTrigger" class="panel-trigger" /> 4442 <div class="panel panel--right panel--with-close-btn dw-mod js-mini-cart" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="block"> 4443 <label for="miniCartTrigger" class="panel__close-btn" title="@Translate("Close panel")"><i class="fas fa-times"></i></label> 4444 <div class="panel__content u-full-width dw-mod"> 4445 <h3 class="panel__header dw-mod u-margin-bottom u-ta-center">@Translate("Shopping cart")</h3> 4446 <div class="panel__content-body panel__content-body--cart dw-mod"> 4447 <div class="js-handlebars-root u-flex grid--direction-column u-full-height dw-mod" id="miniCartContent" data-template="MiniCartContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 4448 </div> 4449 </div> 4450 </div> 4451 </div> 4452 } 4453 4454 @helper RenderMiniCartModalLayout() 4455 { 4456 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 4457 <div class="mini-cart grid__cell dw-mod"> 4458 <input type="checkbox" id="miniCartTrigger" class="modal-trigger" autocomplete="off" /> 4459 <div class="modal-container dw-mod js-mini-cart" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="block"> 4460 <label for="miniCartTrigger" class="modal-overlay"></label> 4461 <div class="modal modal--top-right dw-mod"> 4462 <div class="modal__body u-flex grid--direction-column dw-mod"> 4463 <h3 class="dw-mod u-ta-center">@Translate("Shopping cart")</h3> 4464 <div class="js-handlebars-root u-flex grid--direction-column dw-mod" id="miniCartContent" data-template="MiniCartContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 4465 </div> 4466 <label class="modal__close-btn modal__close-btn--clean dw-mod" for="miniCartTrigger" title="@Translate("Close modal")"></label> 4467 </div> 4468 </div> 4469 </div> 4470 } 4471 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4472 4473 @using System 4474 @using System.Web 4475 @using Dynamicweb.Rapido.Blocks.Extensibility 4476 @using Dynamicweb.Rapido.Blocks 4477 4478 @{ 4479 bool showDownloadCartLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowDownloadCart"); 4480 4481 Block masterDesktopActionsMenuDownloadCart = new Block 4482 { 4483 Id = "MasterDesktopActionsMenuDownloadCart", 4484 SortId = 35, 4485 Template = RenderDownloadCart() 4486 }; 4487 4488 if (showDownloadCartLink && Model.CurrentUser.ID > 0) 4489 { 4490 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuDownloadCart); 4491 } 4492 } 4493 4494 @helper RenderDownloadCart() 4495 { 4496 int downloadCartPageId = GetPageIdByNavigationTag("DownloadCart"); 4497 string downloadCartPageLink = "/Default.aspx?ID=" + downloadCartPageId; 4498 4499 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4500 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean"; 4501 string menuLinkClass = topLayout != "normal" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon"; 4502 4503 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon dw-mod"> 4504 <a href="@downloadCartPageLink" class="@menuLinkClass dw-mod"> 4505 <i class="fas fa-cart-arrow-down fa-1_5x"></i> 4506 </a> 4507 </li> 4508 } 4509 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4510 4511 @using System 4512 @using System.Web 4513 @using Dynamicweb.Rapido.Blocks.Extensibility 4514 @using Dynamicweb.Rapido.Blocks 4515 4516 @functions { 4517 public class SearchConfiguration 4518 { 4519 public string searchFeedId { get; set; } 4520 public string searchSecondFeedId { get; set; } 4521 public int groupsFeedId { get; set; } 4522 public string resultPageLink { get; set; } 4523 public string searchPlaceholder { get; set; } 4524 public string searchType { get; set; } 4525 public string searchTemplate { get; set; } 4526 public string searchContentTemplate { get; set; } 4527 public string searchValue { get; set; } 4528 public bool showGroups { get; set; } 4529 4530 public SearchConfiguration() 4531 { 4532 searchFeedId = ""; 4533 searchSecondFeedId = ""; 4534 searchType = "product-search"; 4535 searchContentTemplate = ""; 4536 showGroups = true; 4537 } 4538 } 4539 } 4540 @{ 4541 Block masterSearchBar = new Block 4542 { 4543 Id = "MasterSearchBar", 4544 SortId = 40, 4545 Template = RenderSearch("bar"), 4546 Design = new Design 4547 { 4548 Size = "auto", 4549 HidePadding = true, 4550 RenderType = RenderType.Column 4551 } 4552 }; 4553 4554 Block masterSearchAction = new Block 4555 { 4556 Id = "MasterDesktopActionsMenuSearch", 4557 SortId = 10, 4558 Template = RenderSearch() 4559 }; 4560 4561 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterSearchBar); 4562 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterSearchAction); 4563 } 4564 4565 @helper RenderSearch(string type = "mini-search") 4566 { 4567 string productsPageId = Converter.ToString(GetPageIdByNavigationTag("ProductsPage")); 4568 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID; 4569 string searchType = Model.Area.Item.GetItem("Layout").GetList("TopSearch") != null ? Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue : "productSearch"; 4570 4571 SearchConfiguration searchConfiguration = null; 4572 4573 switch (searchType) { 4574 case "contentSearch": 4575 searchConfiguration = new SearchConfiguration() { 4576 searchFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true", 4577 resultPageLink = contentSearchPageLink, 4578 searchPlaceholder = Translate("Search page"), 4579 groupsFeedId = 0, 4580 searchType = "content-search", 4581 searchTemplate = "SearchPagesTemplate", 4582 showGroups = false 4583 }; 4584 break; 4585 case "combinedSearch": 4586 searchConfiguration = new SearchConfiguration() { 4587 searchFeedId = productsPageId + "&feed=true", 4588 searchSecondFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true", 4589 resultPageLink = Converter.ToString(productsPageId), 4590 searchPlaceholder = Translate("Search products or pages"), 4591 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed"), 4592 searchType = "combined-search", 4593 searchTemplate = "SearchProductsTemplateWrap", 4594 searchContentTemplate = "SearchPagesTemplateWrap", 4595 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector") 4596 }; 4597 break; 4598 default: //productSearch 4599 searchConfiguration = new SearchConfiguration() { 4600 resultPageLink = Converter.ToString(productsPageId), 4601 searchFeedId = productsPageId + "&feed=true", 4602 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed"), 4603 searchPlaceholder = Translate("Search products"), 4604 searchTemplate = "SearchProductsTemplate", 4605 searchType = "product-search", 4606 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector") 4607 }; 4608 break; 4609 } 4610 searchConfiguration.searchValue = HttpContext.Current.Request.QueryString.Get("Search") ?? ""; 4611 4612 if (type == "mini-search") { 4613 @RenderMiniSearch(searchConfiguration) 4614 } else { 4615 @RenderSearchBar(searchConfiguration) 4616 } 4617 } 4618 4619 @helper RenderSearchBar(SearchConfiguration options) 4620 { 4621 <div class="typeahead typeahead--centered u-color-inherit js-typeahead dw-mod" id="ProductSearchBar" 4622 data-page-size="7" 4623 data-search-feed-id="@options.searchFeedId" 4624 data-search-second-feed-id="@options.searchSecondFeedId" 4625 data-result-page-id="@options.resultPageLink" 4626 data-groups-page-id="@options.groupsFeedId" 4627 data-search-type="@options.searchType"> 4628 @if (options.showGroups) 4629 { 4630 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button> 4631 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-groups-content dw-mod" id="ProductSearchBarGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@options.groupsFeedId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul> 4632 } 4633 <div class="typeahead-search-field"> 4634 <input type="text" class="u-no-margin u-full-width u-full-height js-typeahead-search-field" placeholder="@options.searchPlaceholder" value="@options.searchValue"> 4635 @if (string.IsNullOrEmpty(options.searchSecondFeedId)) 4636 { 4637 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="ProductSearchBarContent" data-template="@options.searchTemplate" data-json-feed="/Default.aspx?ID=@options.searchFeedId&feedType=productsOnly" data-init-onload="false"></ul> 4638 } 4639 else 4640 { 4641 <div class="dropdown dropdown--absolute-position dropdown--combined grid"> 4642 <div class="js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="ProductSearchBarContent" data-template="@options.searchTemplate" data-init-onload="false"></div> 4643 <div class="js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="ContentSearchBarContent" data-template="@options.searchContentTemplate" data-init-onload="false"></div> 4644 </div> 4645 } 4646 </div> 4647 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue"></i></button> 4648 </div> 4649 } 4650 4651 @helper RenderMiniSearch(SearchConfiguration options) 4652 { 4653 <li class="menu__item menu__item--horizontal menu__item--top-level menu__item--icon u-hidden-xxs is-dropdown is-dropdown--no-icon dw-mod" onmouseover="document.getElementById('headerSearch').focus()"> 4654 <div class="menu__link menu__link--icon dw-mod"> 4655 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue fa-1_5x"></i> 4656 </div> 4657 <div class="menu menu--dropdown menu--dropdown-right u-no-padding u-w380px grid__cell dw-mod"> 4658 <div class="typeahead js-typeahead" id="ProductSearchBar" 4659 data-page-size="7" 4660 data-search-feed-id="@options.searchFeedId" 4661 data-search-second-feed-id="@options.searchSecondFeedId" 4662 data-result-page-id="@options.resultPageLink" 4663 data-search-type="@options.searchType"> 4664 <div class="typeahead-search-field"> 4665 <input type="text" class="u-no-margin u-full-width js-typeahead-search-field" id="headerSearch" placeholder="@options.searchPlaceholder" value="@options.searchValue"> 4666 @if (string.IsNullOrEmpty(options.searchSecondFeedId)) 4667 { 4668 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="ProductSearchBarContent" data-template="@options.searchTemplate" data-json-feed="/Default.aspx?ID=@options.searchFeedId&feedType=productsOnly" data-init-onload="false"></ul> 4669 } 4670 else 4671 { 4672 <div class="dropdown dropdown--absolute-position dropdown--combined grid dropdown--right-aligned"> 4673 <div class="js-handlebars-root js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="ProductSearchBarContent" data-template="@options.searchTemplate" data-json-feed="/Default.aspx?ID=@options.searchFeedId&feedType=productsOnly" data-init-onload="false"></div> 4674 <div class="js-handlebars-root js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="ContentSearchBarContent" data-template="@options.searchContentTemplate" data-json-feed="/Default.aspx?ID=@options.searchSecondFeedId" data-init-onload="false"></div> 4675 </div> 4676 } 4677 </div> 4678 </div> 4679 </div> 4680 </li> 4681 } 4682 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4683 4684 @using System 4685 @using System.Web 4686 @using Dynamicweb.Rapido.Blocks.Extensibility 4687 @using Dynamicweb.Rapido.Blocks 4688 4689 @{ 4690 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4691 bool hideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch"); 4692 4693 BlocksPage headerConfigurationPage = BlocksPage.GetBlockPage("Master"); 4694 4695 Block configDesktopLogo = headerConfigurationPage.GetBlockById("MasterDesktopLogo"); 4696 headerConfigurationPage.RemoveBlock(configDesktopLogo); 4697 4698 Block configDesktopMenu = headerConfigurationPage.GetBlockById("MasterDesktopMenu"); 4699 headerConfigurationPage.RemoveBlock(configDesktopMenu); 4700 4701 Block configSearchBar = headerConfigurationPage.GetBlockById("MasterSearchBar"); 4702 headerConfigurationPage.RemoveBlock(configSearchBar); 4703 4704 Block configSearchAction = headerConfigurationPage.GetBlockById("MasterDesktopActionsMenuSearch"); 4705 headerConfigurationPage.RemoveBlock(configSearchAction); 4706 4707 Block configDesktopActionsMenu = headerConfigurationPage.GetBlockById("MasterDesktopActionsMenu"); 4708 headerConfigurationPage.RemoveBlock(configDesktopActionsMenu); 4709 4710 Block configDesktopExtra = headerConfigurationPage.GetBlockById("MasterDesktopExtra"); 4711 4712 switch (topLayout) 4713 { 4714 case "condensed": //2 4715 configDesktopLogo.Design.Size = "auto-width"; 4716 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo); 4717 4718 configDesktopMenu.SortId = 20; 4719 configDesktopMenu.Design.Size = "auto"; 4720 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu); 4721 4722 configDesktopActionsMenu.SortId = 30; 4723 configDesktopActionsMenu.Design.Size = "auto-width"; 4724 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu); 4725 4726 if (!hideSearch) 4727 { 4728 configSearchBar.SortId = 40; 4729 configSearchBar.Design.Size = "12"; 4730 configDesktopExtra.SortId = 50; 4731 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar); 4732 } 4733 break; 4734 case "splitted": //3 4735 configDesktopLogo.Design.Size = "auto"; 4736 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo); 4737 4738 if (!hideSearch) 4739 { 4740 configSearchBar.SortId = 20; 4741 configSearchBar.Design.Size = "auto"; 4742 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar); 4743 } 4744 4745 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu); 4746 4747 configDesktopActionsMenu.SortId = 20; 4748 configDesktopActionsMenu.Design.Size = "auto-width"; 4749 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu); 4750 break; 4751 case "minimal": //4 4752 configDesktopLogo.Design.Size = "auto-width"; 4753 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo); 4754 4755 configDesktopMenu.Design.Size = "auto"; 4756 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu); 4757 4758 configDesktopActionsMenu.SortId = 20; 4759 configDesktopActionsMenu.Design.Size = "auto-width"; 4760 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu); 4761 4762 if (!hideSearch) 4763 { 4764 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction); 4765 } 4766 break; 4767 case "minimal-right": //5 4768 configDesktopLogo.Design.Size = "auto-width"; 4769 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo); 4770 4771 configDesktopMenu.Design.Size = "auto"; 4772 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu); 4773 4774 configDesktopActionsMenu.SortId = 20; 4775 configDesktopActionsMenu.Design.Size = "auto-width"; 4776 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu); 4777 4778 if (!hideSearch) 4779 { 4780 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction); 4781 } 4782 break; 4783 case "two-lines": //6 4784 configDesktopLogo.Design.Size = "auto"; 4785 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo); 4786 4787 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu); 4788 4789 configDesktopActionsMenu.SortId = 20; 4790 configDesktopActionsMenu.Design.Size = "auto-width"; 4791 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu); 4792 4793 if (!hideSearch) 4794 { 4795 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction); 4796 } 4797 break; 4798 case "two-lines-centered": //7 4799 configDesktopLogo.Design.Size = "auto"; 4800 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo); 4801 4802 configDesktopMenu.Design.Size = "auto-width"; 4803 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu); 4804 4805 configDesktopActionsMenu.SortId = 20; 4806 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu); 4807 4808 if (!hideSearch) 4809 { 4810 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction); 4811 } 4812 break; 4813 case "normal": //1 4814 default: 4815 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo); 4816 4817 if (!hideSearch) 4818 { 4819 configSearchBar.SortId = 20; 4820 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar); 4821 } 4822 4823 configDesktopActionsMenu.SortId = 30; 4824 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopActionsMenu); 4825 4826 configDesktopActionsMenu.Design.Size = "auto-width"; 4827 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu); 4828 break; 4829 } 4830 } 4831 @if (File.Exists(HttpContext.Current.Server.MapPath("/Files/Templates/Designs/Rapido/MasterBlocks/HeaderBlocks/Custom__Blocks.cshtml"))) 4832 { 4833 <text>@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4834 4835 @using System 4836 @using System.Web 4837 @using Dynamicweb.Rapido.Blocks.Extensibility 4838 @using Dynamicweb.Rapido.Blocks 4839 4840 @{ 4841 4842 }</text> 4843 } 4844 4845 4846 @helper RenderDesktopTools() 4847 { 4848 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopTools").OrderBy(item => item.SortId).ToList(); 4849 4850 <div class="tools-navigation dw-mod"> 4851 <div class="center-container grid top-container__center-container dw-mod"> 4852 @RenderBlockList(subBlocks) 4853 </div> 4854 </div> 4855 } 4856 4857 @helper RenderDesktopToolsText() 4858 { 4859 string toolsText = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("ToolsText"); 4860 if (!string.IsNullOrEmpty(toolsText)) 4861 { 4862 <div class="u-margin-top u-margin-bottom">@toolsText</div> 4863 } 4864 } 4865 4866 @helper RenderDesktopToolsNavigation() 4867 { 4868 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar"); 4869 4870 if (renderPagesInToolBar) 4871 { 4872 @RenderNavigation(new 4873 { 4874 id = "topToolsNavigation", 4875 cssclass = "menu menu-tools dw-mod dwnavigation", 4876 template = "TopMenu.xslt" 4877 }) 4878 } 4879 } 4880 4881 @helper RenderDesktopNavigation() 4882 { 4883 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopNavigation").OrderBy(item => item.SortId).ToList(); 4884 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal"; 4885 string alignClass = topLayout == "two-lines-centered" ? "grid--justify-center" : ""; 4886 <nav class="main-navigation dw-mod"> 4887 <div class="center-container top-container__center-container grid @alignClass dw-mod"> 4888 @RenderBlockList(subBlocks) 4889 </div> 4890 </nav> 4891 } 4892 4893 @helper RenderDesktopExtra() 4894 { 4895 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopExtra").OrderBy(item => item.SortId).ToList(); 4896 4897 if (subBlocks.Count > 0) 4898 { 4899 <div class="header header-top dw-mod"> 4900 <div class="center-container top-container__center-container grid--justify-space-between grid grid--align-center dw-mod"> 4901 @RenderBlockList(subBlocks) 4902 </div> 4903 </div> 4904 } 4905 }@*</text> 4906 }*@ 4907 4908 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4909 4910 @using System 4911 @using System.Web 4912 @using Dynamicweb.Rapido.Blocks.Extensibility 4913 @using Dynamicweb.Rapido.Blocks 4914 4915 @{ 4916 Block impersonationBar = new Block 4917 { 4918 Id = "ImpersonationBar", 4919 SortId = 50, 4920 Template = RenderImpersonationBar(), 4921 Design = new Design 4922 { 4923 Size = "auto-width", 4924 HidePadding = true, 4925 RenderType = RenderType.Column 4926 } 4927 }; 4928 4929 if (Model.CurrentUser.ID > 0 && Model.SecondaryUsers.Count > 0) 4930 { 4931 BlocksPage.GetBlockPage("Master").Add("MasterHeader", impersonationBar); 4932 } 4933 } 4934 4935 @helper RenderImpersonationBar() 4936 { 4937 int impersonationPageId = GetPageIdByNavigationTag("Impersonation"); 4938 4939 <div class="u-color-warning--bg"> 4940 <div class="center-container top-container__center-container dw-mod"> 4941 @*Impersonation*@ 4942 <div class="grid"> 4943 <div class="grid--align-self-center grid__col-x"> 4944 @if (Model.CurrentSecondaryUser != null && Model.CurrentSecondaryUser.ID > 0) 4945 { 4946 string stopImpersonateTranslation = Translate("Stop impersonation"); 4947 string username = ""; 4948 if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.FirstName) && !string.IsNullOrEmpty(Model.CurrentSecondaryUser.LastName)) 4949 { 4950 username = Model.CurrentSecondaryUser.FirstName + " " + Model.CurrentSecondaryUser.LastName; 4951 } 4952 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Name)) 4953 { 4954 username = Model.CurrentSecondaryUser.Name; 4955 } 4956 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Email)) 4957 { 4958 username = Model.CurrentSecondaryUser.Email; 4959 } 4960 else 4961 { 4962 username = Model.CurrentSecondaryUser.UserName; 4963 } 4964 <div class="grid-cell"> 4965 <div class="u-pull--left u-bold u-margin-top"> 4966 <i class="fas fa-user-secret"></i> 4967 @Pageview.User.UserName<text>&nbsp;</text>@Translate("is impersonating")<text>&nbsp;</text>@username 4968 </div> 4969 <form method="post" class="u-pull--right u-no-margin"> 4970 <input type="submit" class="btn btn--secondary dw-mod u-no-margin" name="DwExtranetRemoveSecondaryUser" value="@stopImpersonateTranslation"> 4971 </form> 4972 </div> 4973 } 4974 else 4975 { 4976 string viewListTranslation = Translate("View the list of users you can impersonate"); 4977 <div class="grid-cell u-bold"> 4978 <i class="fas fa-user-secret"></i> 4979 <a href="/Default.aspx?ID=@impersonationPageId" title="@viewListTranslation" class="u-color-font-black">@viewListTranslation</a> 4980 </div> 4981 } 4982 </div> 4983 </div> 4984 </div> 4985 </div> 4986 } 4987 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 4988 4989 @using System 4990 @using System.Web 4991 @using System.Collections.Generic 4992 @using Dynamicweb.Rapido.Blocks.Extensibility 4993 @using Dynamicweb.Rapido.Blocks 4994 4995 @{ 4996 BlocksPage miniCartBlocksPage = BlocksPage.GetBlockPage("Master"); 4997 string orderlinesView = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("OrderlinesView") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("OrderlinesView").SelectedValue : "table"; 4998 4999 Block orderLines = new Block 5000 { 5001 Id = "MiniCartOrderLines", 5002 SkipRenderBlocksList = true, 5003 BlocksList = new List<Block> 5004 { 5005 new Block { 5006 Id = "MiniCartOrderLinesList", 5007 SortId = 20, 5008 Template = RenderMiniCartOrderLinesList() 5009 } 5010 } 5011 }; 5012 5013 Block orderlinesScriptTemplates = new Block 5014 { 5015 Id = "OrderlinesScriptTemplates" 5016 }; 5017 5018 if (orderlinesView == "table") 5019 { 5020 orderLines.Template = RenderMiniCartOrderLinesTable(); 5021 orderLines.BlocksList.Add( 5022 new Block { 5023 Id = "MiniCartOrderlinesTableHeader", 5024 SortId = 10, 5025 Template = RenderMiniCartOrderLinesHeader() 5026 } 5027 ); 5028 5029 orderlinesScriptTemplates.Template = RenderMiniCartScriptsTableTemplates(); 5030 } 5031 else 5032 { 5033 orderLines.Template = RenderMiniCartOrderLinesBlocks(); 5034 orderlinesScriptTemplates.Template = RenderMiniCartScriptsListTemplates(); 5035 } 5036 5037 miniCartBlocksPage.Add("MasterBottomSnippets", orderlinesScriptTemplates); 5038 5039 Block miniCartScriptTemplates = new Block() 5040 { 5041 Id = "MasterMiniCartTemplates", 5042 SortId = 1, 5043 Template = RenderMiniCartScriptTemplates(), 5044 SkipRenderBlocksList = true, 5045 BlocksList = new List<Block> 5046 { 5047 orderLines, 5048 new Block { 5049 Id = "MiniCartFooter", 5050 Template = RenderMiniCartFooter(), 5051 SortId = 50, 5052 SkipRenderBlocksList = true, 5053 BlocksList = new List<Block> 5054 { 5055 new Block { 5056 Id = "MiniCartFees", 5057 Template = RenderMiniCartFees(), 5058 SortId = 30 5059 }, 5060 new Block { 5061 Id = "MiniCartPoints", 5062 Template = RenderMiniCartPoints(), 5063 SortId = 40 5064 }, 5065 new Block { 5066 Id = "MiniCartTotal", 5067 Template = RenderMiniCartTotal(), 5068 SortId = 50 5069 }, 5070 new Block { 5071 Id = "MiniCartActions", 5072 Template = RenderMiniCartActions(), 5073 SortId = 60 5074 } 5075 } 5076 } 5077 } 5078 }; 5079 5080 miniCartBlocksPage.Add("MasterBottomSnippets", miniCartScriptTemplates); 5081 } 5082 5083 @helper RenderMiniCartScriptsTableTemplates() 5084 { 5085 <script id="MiniCartOrderline" type="text/x-template"> 5086 {{#unless isEmpty}} 5087 <tr> 5088 <td class="u-w60px"><a href="{{link}}" class="{{hideimage}}"><img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=50&height=50&crop=5&Compression=75&image={{image}}" alt="{{name}}"></a></td> 5089 <td class="u-va-middle"> 5090 <a href="{{link}}" class="mini-cart-orderline__name" title="{{name}}">{{name}}</a> 5091 {{#if variantname}} 5092 <a href="{{link}}" class="mini-cart-orderline__name mini-cart-orderline__name--sm">{{variantname}}</a> 5093 {{/if}} 5094 {{#if unitname}} 5095 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm">{{unitname}}</div> 5096 {{/if}} 5097 </td> 5098 <td class="u-ta-right u-va-middle">{{quantity}}</td> 5099 <td class="u-ta-right u-va-middle"> 5100 {{#if pointsTotal}} 5101 <span class="u-color--loyalty-points">{{pointsTotal}}</span> @Translate("points") 5102 {{else}} 5103 {{totalprice}} 5104 {{/if}} 5105 </td> 5106 </tr> 5107 {{/unless}} 5108 </script> 5109 5110 <script id="MiniCartOrderlineDiscount" type="text/x-template"> 5111 {{#unless isEmpty}} 5112 <tr class="table__row--no-border"> 5113 <td class="u-w60px">&nbsp;</td> 5114 <td><div class="mini-cart-orderline__name dw-mod">{{name}}</div></td> 5115 <td class="u-ta-right">&nbsp;</td> 5116 <td class="u-ta-right">{{totalprice}}</td> 5117 </tr> 5118 {{/unless}} 5119 </script> 5120 } 5121 5122 @helper RenderMiniCartScriptsListTemplates() 5123 { 5124 int cartOrderlinesFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 5125 <script id="MiniCartOrderline" type="text/x-template"> 5126 {{#unless isEmpty}} 5127 <div class="mini-cart-orderline grid dw-mod"> 5128 <div class="grid__col-4"> 5129 <a href="{{link}}" class="{{hideimage}}"> 5130 <img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=100&height=100&crop=5&Compression=75&image={{image}}" alt="{{name}}" title="{{name}}"> 5131 </a> 5132 </div> 5133 <div class="grid__col-8"> 5134 <a href="{{link}}" class="mini-cart-orderline__name mini-cart-orderline__name--truncate mini-cart-orderline__name--md u-padding-right--lg" title="{{name}}">{{name}}</a> 5135 {{#if variantname}} 5136 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Variant"): {{variantname}}</div> 5137 {{/if}} 5138 {{#if unitname}} 5139 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Unit"): {{unitname}}</div> 5140 {{/if}} 5141 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Qty"): {{quantity}}</div> 5142 5143 <div class="grid__cell-footer"> 5144 <div class="grid__cell"> 5145 <div class="u-pull--left mini-cart-orderline__price dw-mod"> 5146 {{#if pointsTotal}} 5147 <span class="u-color--loyalty-points">{{pointsTotal}}</span> @Translate("points") 5148 {{else}} 5149 {{totalprice}} 5150 {{/if}} 5151 </div> 5152 <button type="button" title="@Translate("Remove orderline")" class="btn btn--clean btn--condensed u-pull--right mini-cart-orderline__remove-btn dw-mod" onclick="{{removeFromCartGoogleImpression}}; Cart.UpdateCart('Cart', '/Default.aspx?ID=@cartOrderlinesFeedPageId', 'CartCmd=DelOrderLine&key={{orderLineId}}', true);">@Translate("Remove")</button> 5153 </div> 5154 </div> 5155 </div> 5156 </div> 5157 {{/unless}} 5158 </script> 5159 5160 <script id="MiniCartOrderlineDiscount" type="text/x-template"> 5161 {{#unless isEmpty}} 5162 <div class="mini-cart-orderline mini-cart-orderline--discount grid dw-mod"> 5163 <div class="grid__col-4"> 5164 <div class="mini-cart-orderline__name mini-cart-orderline__name dw-mod">{{name}}</div> 5165 </div> 5166 <div class="grid__col-8">{{totalprice}}</div> 5167 </div> 5168 {{/unless}} 5169 </script> 5170 } 5171 5172 @helper RenderMiniCartScriptTemplates() 5173 { 5174 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterMiniCartTemplates").OrderBy(item => item.SortId).ToList(); 5175 bool useGoogleTagManager = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("GoogleTagManagerID")); 5176 string cartPageLink = string.Concat("/Default.aspx?ID=", GetPageIdByNavigationTag("CartPage")); 5177 5178 <script id="MiniCartContent" type="text/x-template"> 5179 {{#.}} 5180 {{#unless isEmpty}} 5181 @if (useGoogleTagManager) 5182 { 5183 <text>{{{googleEnchantImpressionEmptyCart OrderLines}}}</text> 5184 } 5185 @RenderBlockList(subBlocks) 5186 {{/unless}} 5187 {{#if isEmpty}} 5188 {{{locationReload '@cartPageLink'}}} 5189 {{/if}} 5190 {{/.}} 5191 </script> 5192 } 5193 5194 @helper RenderMiniCartOrderLinesTable() 5195 { 5196 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartOrderLines").OrderBy(item => item.SortId).ToList(); 5197 5198 <div class="u-overflow-auto"> 5199 <table class="table mini-cart-table dw-mod"> 5200 @RenderBlockList(subBlocks) 5201 </table> 5202 </div> 5203 } 5204 5205 @helper RenderMiniCartOrderLinesBlocks() 5206 { 5207 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartOrderLines").OrderBy(item => item.SortId).ToList(); 5208 5209 <div class="u-overflow-auto"> 5210 @RenderBlockList(subBlocks) 5211 </div> 5212 } 5213 5214 @helper RenderMiniCartOrderLinesHeader() 5215 { 5216 <thead> 5217 <tr> 5218 <td>&nbsp;</td> 5219 <td>@Translate("Product")</td> 5220 <td class="u-ta-right">@Translate("Qty")</td> 5221 <td class="u-ta-right" width="120">@Translate("Price")</td> 5222 </tr> 5223 </thead> 5224 } 5225 5226 @helper RenderMiniCartOrderLinesList() 5227 { 5228 <text> 5229 {{#OrderLines}} 5230 {{#ifCond template "===" "CartOrderline"}} 5231 {{>MiniCartOrderline}} 5232 {{/ifCond}} 5233 {{#ifCond template "===" "CartOrderlineMobile"}} 5234 {{>MiniCartOrderline}} 5235 {{/ifCond}} 5236 {{#ifCond template "===" "CartOrderlineDiscount"}} 5237 {{>MiniCartOrderlineDiscount}} 5238 {{/ifCond}} 5239 {{/OrderLines}} 5240 </text> 5241 } 5242 5243 @helper RenderMiniCartFees() 5244 { 5245 <div class="grid u-border-top grid--external-bleed-bottom"> 5246 <div class="grid__col-6"> 5247 {{paymentmethod}} 5248 </div> 5249 <div class="grid__col-6 grid--align-end">{{paymentfee}}</div> 5250 </div> 5251 <div class="grid grid--external-bleed-bottom"> 5252 <div class="grid__col-6"> 5253 {{shippingmethod}} 5254 </div> 5255 <div class="grid__col-6 grid--align-end">{{shippingfee}}</div> 5256 </div> 5257 } 5258 5259 @helper RenderMiniCartFooter() 5260 { 5261 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartFooter").OrderBy(item => item.SortId).ToList(); 5262 5263 <div class="mini-cart__footer dw-mod"> 5264 @RenderBlockList(subBlocks) 5265 </div> 5266 } 5267 5268 @helper RenderMiniCartActions() 5269 { 5270 int cartPageId = GetPageIdByNavigationTag("CartPage"); 5271 5272 <button type="button" title="@Translate("Empty cart")" class="btn btn--secondary u-full-width dw-mod u-no-margin u-margin-bottom" onclick="googleEnchantImpressionEmptyCart(); Cart.EmptyCart(event);">@Translate("Empty cart")</button> 5273 <a href="/Default.aspx?ID=@cartPageId" title="@Translate("Proceed to checkout")" class="btn btn--primary u-full-width u-no-margin dw-mod">@Translate("Proceed to checkout")</a> 5274 } 5275 5276 @helper RenderMiniCartPoints() 5277 { 5278 <text> 5279 {{#if earnings}} 5280 <div class="grid grid--external-bleed-bottom"> 5281 <div class="grid__col-6">@Translate("Earnings")</div> 5282 <div class="grid__col-6 grid--align-end"> 5283 <div> 5284 <span class="u-color--loyalty-points">{{earnings}}</span> @Translate("points") 5285 </div> 5286 </div> 5287 </div> 5288 {{/if}} 5289 </text> 5290 } 5291 5292 @helper RenderMiniCartTotal() 5293 { 5294 <div class="mini-cart-totals grid u-margin-bottom dw-mod"> 5295 <div class="grid__col-6">@Translate("Total")</div> 5296 <div class="grid__col-6 grid--align-end">{{totalprice}}</div> 5297 </div> 5298 } 5299 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 5300 5301 @using Dynamicweb.Rapido.Blocks.Extensibility 5302 @using Dynamicweb.Rapido.Blocks 5303 5304 @{ 5305 bool addToCartNotificationOnlyPreview = Model.Area.Item.GetItem("Ecommerce").GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0; 5306 string addToCartNotificationType = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("AddToCartNotificationType") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("AddToCartNotificationType").SelectedValue : ""; 5307 5308 if (!addToCartNotificationOnlyPreview && !string.IsNullOrEmpty(addToCartNotificationType)) { 5309 if (addToCartNotificationType == "modal") 5310 { 5311 Block addToCartNotificationModal = new Block 5312 { 5313 Id = "AddToCartNotificationModal", 5314 Template = RenderAddToCartNotificationModal() 5315 }; 5316 5317 Block addToCartNotificationScript = new Block 5318 { 5319 Id = "AddToCartNotificationScript", 5320 Template = RenderAddToCartNotificationModalScript() 5321 }; 5322 BlocksPage.GetBlockPage("Master").Add("MasterTopSnippets", addToCartNotificationModal); 5323 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", addToCartNotificationScript); 5324 } 5325 else if (addToCartNotificationType == "toggle") 5326 { 5327 Block addToCartNotificationScript = new Block 5328 { 5329 Id = "AddToCartNotificationScript", 5330 Template = RenderAddToCartNotificationToggleScript() 5331 }; 5332 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", addToCartNotificationScript); 5333 } 5334 } 5335 } 5336 5337 @helper RenderAddToCartNotificationModal() 5338 { 5339 <div id="LastAddedProductModal" data-template="LastAddedProductTemplate"></div> 5340 } 5341 5342 @helper RenderAddToCartNotificationModalScript() 5343 { 5344 int cartPageId = GetPageIdByNavigationTag("CartPage"); 5345 5346 <script id="LastAddedProductTemplate" type="text/x-template"> 5347 <!-- Trigger for the login modal --> 5348 <input type="checkbox" id="LastAddedProductModalTrigger" class="modal-trigger" /> 5349 5350 <!-- Login modal --> 5351 <div class="modal-container"> 5352 <label for="LastAddedProductModalTrigger" class="modal-overlay"></label> 5353 <div class="modal modal--md"> 5354 <div class="modal__header"> 5355 <h2>@Translate("Product is added to the cart")</h2> 5356 </div> 5357 <div class="modal__body"> 5358 <div class="grid"> 5359 <div class="grid__col-2"> 5360 <a href="{{productInfo.link}}"> 5361 <img src="{{productInfo.image}}" alt="{{productInfo.name}}" class="dw-mod" /> 5362 </a> 5363 </div> 5364 <div class="u-padding grid--align-self-center"> 5365 <span>{{quantity}}</span> x 5366 </div> 5367 <div class="grid__col-auto grid--align-self-center"> 5368 <div>{{productInfo.name}}</div> 5369 {{#if productInfo.variantName}} 5370 <small class="u-margin-bottom-5px">{{productInfo.variantName}}</small> 5371 {{/if}} 5372 {{#if productInfo.unitName}} 5373 <small class="u-margin-bottom-5px">{{productInfo.unitName}}</small> 5374 {{/if}} 5375 </div> 5376 </div> 5377 <div class="modal__footer u-margin-top--lg"> 5378 <label class="btn btn--secondary u-pull--left u-no-margin dw-mod btn--sm" for="LastAddedProductModalTrigger">@Translate("Continue shopping")</label> 5379 <a href="/Default.aspx?ID=@cartPageId" class="btn btn--primary u-pull--right u-no-margin dw-mod btn--sm">@Translate("Proceed to checkout")</a> 5380 </div> 5381 </div> 5382 <label class="modal__close-btn" for="LastAddedProductModalTrigger"></label> 5383 </div> 5384 </div> 5385 </script> 5386 <script> 5387 document.addEventListener('addToCart', function (event) { 5388 Cart.ShowLastAddedProductModal(event.detail); 5389 }); 5390 </script> 5391 } 5392 5393 @helper RenderAddToCartNotificationToggleScript() 5394 { 5395 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 5396 5397 <script> 5398 document.addEventListener('addToCart', function () { 5399 Cart.ToggleMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '@miniCartFeedPageId'); 5400 }); 5401 </script> 5402 } 5403 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 5404 5405 @using System 5406 @using System.Web 5407 @using System.Collections.Generic 5408 @using Dynamicweb.Rapido.Blocks.Extensibility 5409 @using Dynamicweb.Rapido.Blocks 5410 5411 @functions { 5412 BlocksPage footerBlocksPage = BlocksPage.GetBlockPage("Master"); 5413 } 5414 5415 @{ 5416 string footerColumnOneContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetString("Content"); 5417 string footerColumnTwoContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetString("Content"); 5418 string footerColumnThreeContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetString("Content"); 5419 string footerColumnOneHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetString("Header"); 5420 string footerColumnTwoHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetString("Header"); 5421 string footerColumnThreeHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetString("Header"); 5422 5423 string footerColumnFourContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour")?.GetString("Content"); 5424 string footerColumnFourHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour")?.GetString("Header"); 5425 5426 Block masterFooterContent = new Block() 5427 { 5428 Id = "MasterFooterContent", 5429 SortId = 10, 5430 Template = RenderFooter(), 5431 SkipRenderBlocksList = true 5432 }; 5433 footerBlocksPage.Add(MasterBlockId.MasterFooter, masterFooterContent); 5434 5435 if (!string.IsNullOrEmpty(footerColumnOneContent) || !string.IsNullOrEmpty(footerColumnOneHeader)) 5436 { 5437 Block masterFooterColumnOne = new Block 5438 { 5439 Id = "MasterFooterColumnOne", 5440 SortId = 10, 5441 Template = RenderFooterColumn(footerColumnOneHeader, footerColumnOneContent), 5442 Design = new Design { 5443 Size = "auto", 5444 RenderType = RenderType.Column 5445 } 5446 }; 5447 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnOne); 5448 } 5449 5450 if (!string.IsNullOrEmpty(footerColumnTwoContent) || !string.IsNullOrEmpty(footerColumnTwoHeader)) 5451 { 5452 Block masterFooterColumnTwo = new Block 5453 { 5454 Id = "MasterFooterColumnTwo", 5455 SortId = 20, 5456 Template = RenderFooterColumn(footerColumnTwoHeader, footerColumnTwoContent), 5457 Design = new Design 5458 { 5459 Size = "auto", 5460 RenderType = RenderType.Column 5461 } 5462 }; 5463 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnTwo); 5464 } 5465 5466 if (!string.IsNullOrEmpty(footerColumnThreeContent) || !string.IsNullOrEmpty(footerColumnThreeHeader)) 5467 { 5468 Block masterFooterColumnThree = new Block 5469 { 5470 Id = "MasterFooterColumnThree", 5471 SortId = 30, 5472 Template = RenderFooterColumn(footerColumnThreeHeader, footerColumnThreeContent), 5473 Design = new Design 5474 { 5475 Size = "auto", 5476 RenderType = RenderType.Column 5477 } 5478 }; 5479 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnThree); 5480 } 5481 @*// Added out to enable new footer layout 11-12-2020 KR*@ 5482 if (!string.IsNullOrEmpty(footerColumnFourContent) || !string.IsNullOrEmpty(footerColumnFourHeader)) 5483 { 5484 Block masterFooterColumnFour = new Block 5485 { 5486 Id = "MasterFooterColumnFour", 5487 SortId = 40, 5488 Template = RenderFooterColumn(footerColumnFourHeader, footerColumnFourContent), 5489 Design = new Design 5490 { 5491 Size = "auto", 5492 RenderType = RenderType.Column 5493 } 5494 }; 5495 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnFour); 5496 } 5497 5498 if (Model.Area.Item.GetItem("Layout").GetBoolean("FooterNewsletterSignUp") || (Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks").Count > 0)) 5499 { 5500 Block socialLinksAndNewsletterCombined = new Block 5501 { 5502 Id = "SocialLinksAndNewsletterCombined", 5503 SortId = 50, 5504 Template = RenderSocialLinksAndNewsletterCombined(), 5505 Design = new Design 5506 { 5507 Size = "auto", 5508 RenderType = RenderType.Column 5509 } 5510 }; 5511 footerBlocksPage.Add("MasterFooterContent", socialLinksAndNewsletterCombined); 5512 } 5513 5514 @*//\ Added out to enable new footer layout 11-12-2020 KR*@ 5515 @*// Commented out to enable new footer layout 11-12-2020 KR*@ 5516 @*if (Model.Area.Item.GetItem("Layout").GetBoolean("FooterNewsletterSignUp")) 5517 { 5518 Block masterFooterNewsletterSignUp = new Block 5519 { 5520 Id = "MasterFooterNewsletterSignUp", 5521 SortId = 40, 5522 Template = RenderFooterNewsletterSignUp(), 5523 Design = new Design 5524 { 5525 Size = "auto", 5526 RenderType = RenderType.Column 5527 } 5528 }; 5529 footerBlocksPage.Add("MasterFooterContent", masterFooterNewsletterSignUp); 5530 } 5531 5532 if (Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks").Count > 0) 5533 { 5534 Block masterFooterSocialLinks = new Block 5535 { 5536 Id = "MasterFooterSocialLinks", 5537 SortId = 50, 5538 Template = RenderFooterSocialLinks(), 5539 Design = new Design 5540 { 5541 Size = "auto", 5542 RenderType = RenderType.Column 5543 } 5544 }; 5545 footerBlocksPage.Add("MasterFooterContent", masterFooterSocialLinks); 5546 }*@ 5547 @*//\ Commented out to enable new footer layout 11-12-2020 KR*@ 5548 5549 if (Model.Area.Item.GetItem("Layout").GetItems("FooterPayments") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterPayments").Count > 0) 5550 { 5551 Block masterFooterPayments = new Block 5552 { 5553 Id = "MasterFooterPayments", 5554 SortId = 60, 5555 Template = RenderFooterPayments(), 5556 Design = new Design 5557 { 5558 Size = "12", 5559 RenderType = RenderType.Column 5560 } 5561 }; 5562 footerBlocksPage.Add("MasterFooterContent", masterFooterPayments); 5563 } 5564 5565 Block masterFooterCopyright = new Block 5566 { 5567 Id = "MasterFooterCopyright", 5568 SortId = 70, 5569 Template = RenderFooterCopyright(), 5570 Design = new Design 5571 { 5572 Size = "12", 5573 RenderType = RenderType.Column 5574 } 5575 }; 5576 footerBlocksPage.Add("MasterFooterContent", masterFooterCopyright); 5577 } 5578 5579 @helper RenderFooter() { 5580 List<Block> subBlocks = this.footerBlocksPage.GetBlockListById("MasterFooterContent").OrderBy(item => item.SortId).ToList(); 5581 5582 <footer class="footer dw-mod"> 5583 <div class="center-container top-container__center-container dw-mod"> 5584 <div class="grid grid--external-bleed-x"> 5585 @RenderBlockList(subBlocks) 5586 </div> 5587 </div> 5588 </footer> 5589 } 5590 5591 @helper RenderFooterColumn(string header, string content) { 5592 <h3 class="footer__heading dw-mod">@header</h3> 5593 <div class="footer__content dw-mod"> 5594 @content 5595 </div> 5596 } 5597 5598 5599 @helper RenderFooterNewsletterSignUp() 5600 { 5601 string newsletterSignUpPageId = GetPageIdByNavigationTag("NewsletterSignUp").ToString(); 5602 <h3 class="footer__heading dw-mod">@Translate("Mailing list")</h3> 5603 <p style="margin-bottom: 1.4rem;">@Translate("Sign up if you would like to receive occasional treats from us", "Sign up if you would like to receive occasional treats from us")</p> 5604 <p btn="" btn--secondary="" dw-mod=""><a class="btn btn--primary dw-mod" href="@Translate("HubSpot Newsletter SignUp Link")" style="text-align: center;">@Translate("Subscribe")</a></p> 5605 <div class="footer__content dw-mod"> 5606 <!-- NEWSLETTER DW FOOTER REMOVED AND PUT IN - /workspace/ EGH 30943 CODE --> 5607 </div> 5608 } 5609 5610 @helper RenderFooterSocialLinks() { 5611 <h3 class="footer__heading dw-mod">@Translate("Social links")</h3> 5612 <div class="footer__content dw-mod" style="margin-bottom:1rem;"> 5613 <div class="collection dw-mod"> 5614 @foreach (var socialitem in Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks")) 5615 { 5616 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel; 5617 string socialIconClass = socialIcon.SelectedValue; 5618 string socialIconTitle = socialIcon.SelectedName; 5619 string socialLink = socialitem.GetString("Link"); 5620 5621 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px" rel="noopener"><i class="@socialIconClass fa-2x"></i></a> 5622 } 5623 </div> 5624 </div> 5625 } 5626 5627 @helper RenderFooterPayments() { 5628 <div class="footer__content dw-mod"> 5629 <div class="collection dw-mod"> 5630 @foreach (var payment in Model.Area.Item.GetItem("Layout").GetItems("FooterPayments")) 5631 { 5632 var paymentItem = payment.GetValue("CardTypeOrVerifiedPayment") as Dynamicweb.Frontend.ListViewModel; 5633 string paymentImage = null; 5634 string paymentTitle = paymentItem.SelectedName; 5635 ListOptionViewModel selected = paymentItem.SelectedOptions.FirstOrDefault(); 5636 if (selected != null) 5637 { 5638 paymentImage = selected.Icon; 5639 } 5640 5641 <div class="footer__card-type"> 5642 <img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=60&Compression=75&image=@paymentImage" alt="@paymentTitle" title="@paymentTitle" /> 5643 </div> 5644 } 5645 </div> 5646 </div> 5647 } 5648 5649 @helper RenderFooterCopyright() { 5650 <div class="grid__col-12 footer__copyright dw-mod"> 5651 @Model.Area.Item.GetItem("Layout").GetString("FooterCopyrightText")<p><font color="white">&copy; @DateTime.Now.Year Egholm A|S - All rights reserved&nbsp; &nbsp;|&nbsp; @Translate("Terms-Conditions-Footer", "Terms & Conditions")&nbsp; |&nbsp; @Translate("Legal-Info-Footer", "Legal Info")&nbsp; |&nbsp; @Translate("Privacy-Policy-Footer", "Privacy Policy")&nbsp; |&nbsp; @Translate("Cookie-Policy-Footer", "Cookie Policy") @Translate("Impressum-Footer")</font></p> 5652 </div> 5653 } 5654 @*//New helper to enable new footer layout 11-12-2020 KR*@ 5655 @helper RenderSocialLinksAndNewsletterCombined(){ 5656 if (Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks").Count > 0){ 5657 @RenderFooterSocialLinks() 5658 } 5659 if (Model.Area.Item.GetItem("Layout").GetBoolean("FooterNewsletterSignUp")){ 5660 @RenderFooterNewsletterSignUp() 5661 } 5662 } 5663 @*//\ New helper to enable new footer layout 11-12-2020 KR*@ 5664 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 5665 5666 @using System 5667 @using System.Web 5668 @using System.Collections.Generic 5669 @using Dynamicweb.Rapido.Blocks.Extensibility 5670 @using Dynamicweb.Rapido.Blocks 5671 @using Dynamicweb.Ecommerce.Common 5672 5673 @{ 5674 BlocksPage referencesBlocksPage = BlocksPage.GetBlockPage("Master"); 5675 5676 Block masterScriptReferences = new Block() 5677 { 5678 Id = "MasterScriptReferences", 5679 SortId = 1, 5680 Template = RenderMasterScriptReferences() 5681 }; 5682 referencesBlocksPage.Add(MasterBlockId.MasterReferences, masterScriptReferences); 5683 } 5684 5685 @helper RenderMasterScriptReferences() 5686 { 5687 <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script> 5688 <script src="/Files/Templates/Designs/Rapido/js/handlebars-v4.0.12.min.js"></script> 5689 <script src="/Files/Templates/Designs/Rapido/js/master.min.js"></script> 5690 5691 if (Model.Area.Item.GetItem("Custom").GetBoolean("UseCustomJavascript")) 5692 { 5693 <script src="/Files/Templates/Designs/Rapido/js/custom.min.js?q=28102021"></script> 5694 PushPromise("/Files/Templates/Designs/Rapido/js/custom.min.js"); 5695 } 5696 5697 PushPromise("/Files/Templates/Designs/Rapido/js/handlebars-v4.0.12.min.js"); 5698 PushPromise("/Files/Templates/Designs/Rapido/js/master.min.js"); 5699 } 5700 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 5701 5702 @using System 5703 @using System.Web 5704 @using System.Collections.Generic 5705 @using Dynamicweb.Rapido.Blocks.Extensibility 5706 @using Dynamicweb.Rapido.Blocks 5707 5708 @{ 5709 BlocksPage searchBlocksPage = BlocksPage.GetBlockPage("Master"); 5710 bool navigationItemsHideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch"); 5711 5712 if (!navigationItemsHideSearch) 5713 { 5714 Block masterSearchScriptTemplates = new Block() 5715 { 5716 Id = "MasterSearchScriptTemplates", 5717 SortId = 1, 5718 Template = RenderSearchScriptTemplates() 5719 }; 5720 5721 searchBlocksPage.Add(MasterBlockId.MasterBottomSnippets, masterSearchScriptTemplates); 5722 } 5723 } 5724 5725 @helper RenderSearchScriptTemplates() 5726 { 5727 int productsPageId = GetPageIdByNavigationTag("ProductsPage"); 5728 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID; 5729 bool useFacebookPixel = !string.IsNullOrWhiteSpace(Pageview.AreaSettings.GetItem("Settings").GetString("FacebookPixelID")); 5730 bool onlyPreview = Model.Area.Item.GetItem("Ecommerce").GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0; 5731 bool useGoogleTagManager = !string.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("GoogleTagManagerID")); 5732 bool showPrice = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HidePriceInSearchResults"); 5733 bool showAddToCartButton = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HideAddToCartButton"); 5734 bool showViewButton = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HideViewButton"); 5735 bool showAddToDownloadButton = Pageview.AreaSettings.GetItem("Layout").GetBoolean("ShowAddToDownloadButton"); 5736 bool pointShopOnly = Pageview.AreaSettings.GetItem("Ecommerce").GetBoolean("PointShopOnly"); 5737 5738 <script id="SearchGroupsTemplate" type="text/x-template"> 5739 {{#.}} 5740 <li class="dropdown__item dw-mod" onclick="Search.UpdateGroupSelection(this)" data-group-id="{{id}}">{{name}}</li> 5741 {{/.}} 5742 </script> 5743 5744 <script id="SearchProductsTemplate" type="text/x-template"> 5745 {{#each .}} 5746 {{#Product}} 5747 {{#ifCond template "!==" "SearchMore"}} 5748 <li class="dropdown__item dropdown__item--seperator dw-mod"> 5749 @if (useFacebookPixel) 5750 { 5751 <text>{{{facebookPixelSearch name number priceDouble currency searchParameter}}}</text> 5752 } 5753 @if (useGoogleTagManager) 5754 { 5755 <text>{{{googleEnchantImpression 'Search results' currency googleImpression}}}</text> 5756 } 5757 <div> 5758 <a href="{{link}}" class="js-typeahead-link u-color-inherit u-pull--left" onclick="{{googleImpressionClick}}" title="{{name}}"> 5759 <div class="u-margin-right u-pull--left {{noimage}} u-hidden-xs u-hidden-xxs"><img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=45&height=36&crop=5&FillCanvas=True&Compression=75&image={{image}}" alt="{{name}}"></div> 5760 <div class="u-pull--left"> 5761 <div class="u-bold u-max-w220px u-truncate-text js-typeahead-name">{{name}}</div> 5762 @if (showPrice && !onlyPreview) 5763 { 5764 if (pointShopOnly) 5765 { 5766 <text> 5767 {{#if havePointPrice}} 5768 <div> 5769 <span class="u-color--loyalty-points">{{points}}</span> @Translate("points") 5770 </div> 5771 {{else}} 5772 <small class="help-text u-no-margin">@Translate("Not available")</small> 5773 {{/if}} 5774 {{#unless canBePurchasedWithPoints}} 5775 {{#if havePointPrice}} 5776 <small class="help-text u-no-margin">@Translate("Not enough points to buy this")</small> 5777 {{/if}} 5778 {{/unless}} 5779 </text> 5780 } 5781 else 5782 { 5783 <div>{{price}}</div> 5784 } 5785 } 5786 </div> 5787 </a> 5788 <div class="u-margin-left u-pull--right"> 5789 @if (showAddToCartButton && !onlyPreview) { 5790 if (pointShopOnly) 5791 { 5792 <button type="button" class="btn btn--primary btn--condensed btn--full u-no-margin dw-mod {{hideBuyOptions}} js-ignore-click-outside {{#unless canBePurchasedWithPoints}}js-stay-disabled{{/unless}}" name="CartCmd" value="addWithPoints" 5793 onclick="Cart.AddToCart(event, { 5794 id: '{{productId}}', 5795 quantity: 1, 5796 buyForPoints: true, 5797 productInfo: {{productInfo}} 5798 }); {{facebookPixelAction}}" {{disabledBuyButton}}> 5799 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue js-ignore-click-outside"></i> 5800 </button> 5801 } else { 5802 <button type="button" class="btn btn--primary btn--condensed btn--full u-no-margin dw-mod {{hideBuyOptions}} js-ignore-click-outside" 5803 onclick="Cart.AddToCart(event, { 5804 id: '{{productId}}', 5805 quantity: 1, 5806 productInfo: {{productInfo}} 5807 }); {{facebookPixelAction}}"> 5808 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue js-ignore-click-outside"></i> 5809 </button> 5810 } 5811 <a href="{{link}}" onclick="{{googleImpressionClick}}" class="btn btn--secondary btn--condensed btn--full u-no-margin dw-mod {{hideViewMore}} js-ignore-click-outside" title="@Translate("View")">@Translate("View")</a> 5812 } 5813 else if (showViewButton) 5814 { 5815 <a href="{{link}}" onclick="{{googleImpressionClick}}" class="btn btn--secondary btn--condensed btn--full u-no-margin dw-mod js-ignore-click-outside" title="@Translate("View")">@Translate("View")</a> 5816 } 5817 @if (showAddToDownloadButton) 5818 { 5819 <button type="button" class="btn btn--primary u-no-margin btn--condensed dw-mod js-add-to-downloads" title="@Translate("Add")" data-product-id="{{productId}}"> 5820 <i class="fas fa-plus js-button-icon"></i> 5821 </button> 5822 } 5823 </div> 5824 </div> 5825 </li> 5826 {{/ifCond}} 5827 {{#ifCond template "===" "SearchMore"}} 5828 {{>SearchMoreProducts}} 5829 {{/ifCond}} 5830 {{/Product}} 5831 {{else}} 5832 <li class="dropdown__item dropdown__item--seperator dw-mod"> 5833 @Translate("Your search gave 0 results") 5834 </li> 5835 {{/each}} 5836 </script> 5837 5838 <script id="SearchMoreProducts" type="text/x-template"> 5839 <li class="dropdown__item dropdown__item--not-selectable {{stickToBottom}} dw-mod"> 5840 <a href="/Default.aspx?ID=@productsPageId&Search={{searchParameter}}&GroupID={{groupId}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link"> 5841 @Translate("View all") 5842 </a> 5843 </li> 5844 </script> 5845 5846 <script id="SearchMorePages" type="text/x-template"> 5847 <li class="dropdown__item dropdown__item--not-selectable {{stickToBottom}} dw-mod"> 5848 <a href="/Default.aspx?ID=@contentSearchPageLink&Search={{searchParameter}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link"> 5849 @Translate("View all") 5850 </a> 5851 </li> 5852 </script> 5853 5854 <script id="SearchPagesTemplate" type="text/x-template"> 5855 {{#each .}} 5856 {{#ifCond template "!==" "SearchMore"}} 5857 <li class="dropdown__item dropdown__item--seperator dw-mod"> 5858 <div> 5859 <a href="/Default.aspx?ID={{id}}" class="js-typeahead-link u-pull--left u-color-inherit"> 5860 <div class="u-margin-right u-pull--left"><i class="fa {{icon}} u-w20px u-ta-center"></i></div> 5861 <div class="u-pull--left"> 5862 <div class="u-bold u-truncate-text u-max-w220px js-typeahead-name">{{name}}</div> 5863 </div> 5864 </a> 5865 </div> 5866 </li> 5867 {{/ifCond}} 5868 {{#ifCond template "===" "SearchMore"}} 5869 {{>SearchMorePages}} 5870 {{/ifCond}} 5871 {{else}} 5872 <li class="dropdown__item dropdown__item--seperator dropdown__item--not-selectable dw-mod"> 5873 @Translate("Your search gave 0 results") 5874 </li> 5875 {{/each}} 5876 </script> 5877 5878 <script id="SearchPagesTemplateWrap" type="text/x-template"> 5879 <div class="dropdown__column-header">@Translate("Pages")</div> 5880 <ul class="dropdown__list u-min-w220px u-full-width u-margin-bottom dw-mod"> 5881 {{>SearchPagesTemplate}} 5882 </ul> 5883 </script> 5884 5885 <script id="SearchProductsTemplateWrap" type="text/x-template"> 5886 <div class="dropdown__column-header">@Translate("Products")</div> 5887 <ul class="dropdown__list u-min-w220px u-full-width u-margin-bottom dw-mod"> 5888 {{>SearchProductsTemplate}} 5889 </ul> 5890 </script> 5891 } 5892 5893 5894 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 5895 5896 @using System 5897 @using System.Web 5898 @using System.Collections.Generic 5899 @using Dynamicweb.Rapido.Blocks.Extensibility 5900 @using Dynamicweb.Rapido.Blocks 5901 5902 @{ 5903 BlocksPage bottomSnippetsBlocksPage = BlocksPage.GetBlockPage("Master"); 5904 5905 Block primaryBottomSnippets = new Block() 5906 { 5907 Id = "MasterJavascriptInitializers", 5908 SortId = 100, 5909 Template = RenderPrimaryBottomSnippets() 5910 }; 5911 bottomSnippetsBlocksPage.Add(MasterBlockId.MasterReferences, primaryBottomSnippets); 5912 } 5913 5914 @helper RenderPrimaryBottomSnippets() { 5915 bool isWireframeMode = Model.Area.Item.GetItem("Settings").GetBoolean("WireframeMode"); 5916 bool useGoogleTagManager = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("GoogleTagManagerID")); 5917 5918 if (isWireframeMode) 5919 { 5920 <script> 5921 Wireframe.Init(true); 5922 </script> 5923 } 5924 5925 5926 if (useGoogleTagManager) 5927 { 5928 <script> 5929 document.addEventListener('addToCart', function(event) { 5930 var googleImpression = event.detail.productInfo.googleImpression; 5931 dataLayer.push({ 5932 'event': 'addToCart', 5933 'ecommerce': { 5934 'currencyCode': '@(Dynamicweb.Ecommerce.Services.Currencies.GetDefaultCurrency()?.Code)', 5935 'add': { 5936 'products': [{ 5937 'name': googleImpression.name, 5938 'id': googleImpression.id, 5939 'price': googleImpression.price, 5940 'brand': googleImpression.brand, 5941 'category': googleImpression.category, 5942 'variant': googleImpression.variant, 5943 'quantity': event.detail.quantity 5944 }] 5945 } 5946 } 5947 }); 5948 }); 5949 </script> 5950 } 5951 5952 //if digitalwarehouse 5953 if (Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowDownloadCart")) 5954 { 5955 string cartContextId = Converter.ToString(HttpContext.Current.Application["DownloadCartContext"]); 5956 5957 if (string.IsNullOrEmpty(cartContextId)) { 5958 var moduleProps = Dynamicweb.Modules.Properties.GetParagraphModuleSettings(GetPageIdByNavigationTag("DownloadCart"), "eCom_CartV2"); 5959 var cartSettings = new Dynamicweb.Ecommerce.Cart.ModuleSettings(moduleProps); 5960 cartContextId = cartSettings.OrderContextID; 5961 HttpContext.Current.Application["DownloadCartContext"] = cartContextId; 5962 } 5963 5964 <script> 5965 let downloadCart = new DownloadCart({ 5966 cartPageId: @GetPageIdByNavigationTag("MiniCartFeed"), 5967 contextId: "@cartContextId", 5968 addButtonText: "@Translate("Add")", 5969 removeButtonText: "@Translate("Remove")" 5970 }); 5971 </script> 5972 } 5973 5974 <!--@Javascripts--> 5975 } 5976 @if (File.Exists(HttpContext.Current.Server.MapPath("/MasterBlocks/Custom__Blocks.cshtml"))) 5977 { 5978 <text>@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 5979 5980 @using System 5981 @using System.Web 5982 @using System.Collections.Generic 5983 @using Dynamicweb.Rapido.Blocks 5984 5985 @{ 5986 BlocksPage masterCustomBlocksPage = BlocksPage.GetBlockPage("Master"); 5987 5988 }</text> 5989 } 5990 5991 5992 @functions { 5993 public class ManifestIcon 5994 { 5995 public string src { get; set; } 5996 public string type { get; set; } 5997 public string sizes { get; set; } 5998 } 5999 6000 public class Manifest 6001 { 6002 public string name { get; set; } 6003 public string short_name { get; set; } 6004 public string start_url { get; set; } 6005 public string display { get; set; } 6006 public string background_color { get; set; } 6007 public string theme_color { get; set; } 6008 public List<ManifestIcon> icons { get; set; } 6009 } 6010 } 6011 @{ 6012 if (!String.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("AppName")) && Model.Area.Item.GetItem("Settings").GetFile("AppIcon") != null) { 6013 Manifest manifest = new Manifest 6014 { 6015 name = Model.Area.Item.GetItem("Settings").GetString("AppName"), 6016 short_name = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("AppShortName")) ? Model.Area.Item.GetItem("Settings").GetString("AppShortName") : Model.Area.Item.GetItem("Settings").GetString("AppName"), 6017 start_url = "/", 6018 display = "standalone", 6019 background_color = Model.Area.Item.GetItem("Settings").GetString("AppBackgroundColor"), 6020 theme_color = Model.Area.Item.GetItem("Settings").GetString("AppThemeColor") 6021 }; 6022 6023 manifest.icons = new List<ManifestIcon> { 6024 new ManifestIcon { 6025 src = "/Admin/Public/GetImage.ashx?width=192&height=192&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded, 6026 sizes = "192x192", 6027 type = "image/png" 6028 }, 6029 new ManifestIcon { 6030 src = "/Admin/Public/GetImage.ashx?width=512&height=512&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded, 6031 sizes = "512x512", 6032 type = "image/png" 6033 }, 6034 new ManifestIcon { 6035 src = "/Admin/Public/GetImage.ashx?width=1024&height=1024&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded, 6036 sizes = "1024x1024", 6037 type = "image/png" 6038 } 6039 }; 6040 6041 string manifestFilePath = HttpContext.Current.Request.MapPath("/Files/Templates/Designs/Rapido/manifest.json"); 6042 string manifestJSON = Newtonsoft.Json.JsonConvert.SerializeObject(manifest); 6043 string currentManifest = File.ReadAllText(manifestFilePath); 6044 6045 if (manifestJSON != currentManifest) 6046 { 6047 File.WriteAllText(manifestFilePath, manifestJSON); 6048 } 6049 } 6050 } 6051 6052 @{ 6053 var swatches = new Dynamicweb.Content.Items.ColorSwatchService(); 6054 var brandColors = swatches.GetColorSwatch(1); 6055 string brandColorOne = brandColors.Palette["BrandColor1"]; 6056 6057 //clear cart on configurator page. This template only used here. 6058 int configuratorPageId = GetPageIdByNavigationTag("ConfiguratorPage"); 6059 if(configuratorPageId == Model.ID) 6060 { 6061 var cartService = new Dynamicweb.Ecommerce.Frontend.Cart.CartService(); 6062 if (cartService.CartIsPresent()) 6063 { 6064 cartService.ClearCart(); 6065 } 6066 } 6067 } 6068 6069 <!DOCTYPE html> 6070 6071 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName"> 6072 <head> 6073 <!-- Rapido version 3.1 --> 6074 <meta charset="utf-8" /> 6075 <title>@Model.Title</title> 6076 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6077 <meta name="robots" content="index, follow"> 6078 <meta name="theme-color" content="@brandColorOne" /> 6079 <meta name="facebook-domain-verification" content="x7ajpopne9b3nip3tu0o4nzl18sr1e" /> 6080 6081 @Model.MetaTags 6082 6083 <!-- Favicon --> 6084 <link href="@favicon" rel="icon" type="image/png"> 6085 6086 <!-- Base (Default, wireframe) styles --> 6087 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/base/base.min.css" type="text/css"> 6088 6089 <!-- Rapido Css from Website Settings --> 6090 <link rel="stylesheet" id="rapidoCss" href="@autoCssLink" type="text/css"> 6091 6092 <!-- Ignite Css (Custom site specific styles) --> 6093 <link rel="stylesheet" id="igniteCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/ignite/ignite.min.css"> 6094 <!-- Custom Css (Custom site specific styles) --> 6095 <link rel="stylesheet" id="CustomCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/custom.css?q=28102021"> 6096 6097 <!-- Font awesome --> 6098 <link rel="stylesheet" href="@fontAwesomeCssLink" type="text/css"> 6099 6100 <!-- Flag icon --> 6101 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/fonts/flag-icon.min.css" type="text/css"> 6102 6103 <!-- Google fonts --> 6104 @{ 6105 var family = string.Join("%7C", fonts.Where(x => !string.IsNullOrEmpty(x)).Distinct().Select(x => string.Format("{0}:100,200,300,400,500,600,700,800,900", x))); 6106 } 6107 <link href="https://fonts.googleapis.com/css?family=@family" rel="stylesheet"> 6108 @{ 6109 PushPromise(favicon); 6110 PushPromise(fontAwesomeCssLink); 6111 PushPromise("/Files/Templates/Designs/Rapido/css/base/base.min.css"); 6112 PushPromise(autoCssLink); 6113 PushPromise("/Files/Templates/Designs/Rapido/css/ignite/ignite.min.css"); 6114 PushPromise("/Files/Images/placeholder.gif"); 6115 PushPromise("/Files/Templates/Designs/Rapido/css/fonts/flag-icon.min.css"); 6116 } 6117 6118 @if (!String.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("AppName"))) 6119 { 6120 <link rel="manifest" href="/Files/Templates/Designs/Rapido/manifest.json"> 6121 PushPromise("/Files/Templates/Designs/Rapido/manifest.json"); 6122 } 6123 </head> 6124 6125 <body> 6126 6127 @* The @RenderBlockList base helper is included in Components/GridBuilder.cshtml *@ 6128 @RenderBlockList(masterPage.BlocksRoot.BlocksList) 6129 6130 6131 @helper RenderMasterHeader() 6132 { 6133 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterHeader").OrderBy(item => item.SortId).ToList(); 6134 bool isNavigationStickyMenu = Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("StickyTop"); 6135 string stickyTop = isNavigationStickyMenu ? "top-container--sticky" : ""; 6136 6137 <header class="top-container @stickyTop dw-mod" id="Top"> 6138 @RenderBlockList(subBlocks) 6139 </header> 6140 } 6141 6142 @helper RenderMain() 6143 { 6144 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterMain").OrderBy(item => item.SortId).ToList(); 6145 <main class="site dw-mod"> 6146 @RenderBlockList(subBlocks) 6147 </main> 6148 } 6149 6150 @helper RenderPageContent() 6151 { 6152 bool isNavigationStickyMenu = Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("StickyTop"); 6153 string pagePos = isNavigationStickyMenu ? "js-page-pos" : ""; 6154 6155 <div id="Page" class="page @pagePos"> 6156 <section class="center-container content-container dw-mod" id="content"> 6157 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 6158 6159 6160 @{ 6161 string columnClass = "12"; 6162 bool isProductPage = HttpContext.Current.Request.QueryString.Get("ProductID") != null; 6163 string backgroundColorClass = Model.PropertyItem.GetList("BackgroundColor") != null && !isProductPage ? "u-" + Model.PropertyItem.GetList("BackgroundColor").SelectedValue + "--bg" : ""; 6164 } 6165 6166 @if (Model.PropertyItem.GetList("ShowBreadcrumb").SelectedValue == "True") 6167 { 6168 <div class="grid__col-12 grid__col--bleed-y"> 6169 @RenderNavigation(new 6170 { 6171 id = "breadcrumb", 6172 template = "Breadcrumb.xslt" 6173 }) 6174 </div> 6175 } 6176 6177 <div class="grid"> 6178 @if (Model.PropertyItem.GetList("LeftMenu") != null && Model.PropertyItem.GetList("LeftMenu").SelectedValue == "True" && (Pageview.Page.NavigationSettings == null || !Pageview.Page.NavigationSettings.UseEcomGroups)) 6179 { 6180 var navigationMarkup = RenderNavigation(new 6181 { 6182 id = "leftnav", 6183 cssclass = "dwnavigation", 6184 startLevel = 2, 6185 expandmode = "all", 6186 endlevel = 5, 6187 template = "LeftNavigation.xslt" 6188 }); 6189 6190 if (!string.IsNullOrEmpty(navigationMarkup)) 6191 { 6192 <nav class="grid__col-md-3"> 6193 <div class="grid__cell"> 6194 @navigationMarkup 6195 </div> 6196 </nav> 6197 columnClass = "9"; 6198 } 6199 } 6200 6201 <div class="grid__col-md-@columnClass grid__col--bleed"> 6202 <div class="grid"> 6203 @Model.Placeholder("dwcontent", "content", "default:true;sort:1") 6204 </div> 6205 </div> 6206 </div> 6207 6208 6209 @* Very small hack to make it cleanly, and easily possible to change the background color on a single page *@ 6210 @if (backgroundColorClass != "") 6211 { 6212 <script> 6213 document.getElementById("Page").classList.add("@backgroundColorClass"); 6214 </script> 6215 } 6216 </section> 6217 </div> 6218 } 6219 6220 </body> 6221 </html> 6222 6223