Error executing template "Designs/Rapido/_parsed/NewsArticle.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<RenderPageContent>b__150_0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 6200
   at RazorEngine.Templating.TemplateWriter.ToString()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 273
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 187
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<RenderMain>b__148_0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 6176
   at RazorEngine.Templating.TemplateWriter.ToString()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 273
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 187
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 295
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 187
   at CompiledRazorTemplates.Dynamic.RazorEngine_6b29280cb5fc4ebbb08efeb3b15cbfe5.Execute() in E:\WEB\egholm.stagingsite.dk\Files\Templates\Designs\Rapido\_parsed\NewsArticle.parsed.cshtml:line 6158
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

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