Error executing template "Designs/AgricoverCorporate/_parsed/DynamicArticle.parsed.cshtml"
System.IO.IOException: The process cannot access the file 'C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\manifest.json' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
at System.IO.File.InternalReadAllText(String path, Encoding encoding, Boolean checkHost)
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.<RenderMasterMetadata>b__222_0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 9400
at RazorEngine.Templating.TemplateWriter.ToString()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 262
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 172
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.<RenderMasterHead>b__221_0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 9288
at RazorEngine.Templating.TemplateWriter.ToString()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 262
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 172
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.<>c__DisplayClass3_0.<RenderBlock>b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 295
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.<>c__DisplayClass2_0.<RenderBlockList>b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 172
at CompiledRazorTemplates.Dynamic.RazorEngine_faaf665d28d54ce5995635b947af16f2.Execute() in C:\inetpub\wwwroot\dev.magazin.agricover.ro\Files\Templates\Designs\AgricoverCorporate\_parsed\DynamicArticle.parsed.cshtml:line 9278
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 @functions {
18 BlocksPage masterPage = BlocksPage.GetBlockPage("Master");
19
20 string getFontFamily(params string[] items)
21 {
22 var itemParent = Pageview.AreaSettings;
23 foreach (var item in items)
24 {
25 itemParent = itemParent.GetItem(item);
26 if (itemParent == null)
27 {
28 return null;
29 }
30 }
31
32 var googleFont = itemParent.GetGoogleFont("FontFamily");
33 if (googleFont == null)
34 {
35 return null;
36 }
37 return googleFont.Family.Replace(" ", "+");
38 }
39 }
40 @{
41 //set custom canonical
42 string host = Dynamicweb.Context.Current.Request.Url.Scheme + "://" + Dynamicweb.Context.Current.Request.Url.Host;
43 string pageID = Pageview.Page.ID.ToString();
44 string canonicalURL = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl("Default.aspx?ID=" + pageID);
45 var firstPageId = Model.Area.FirstActivePage.ID.ToString();
46 canonicalURL = firstPageId == pageID ? "" : canonicalURL ;
47
48 if(HttpContext.Current.Request.QueryString.Get("GroupID") == null) {
49 Pageview.Meta.AddTag("customCan", "<link rel=\"canonical\" href=\"" + host + canonicalURL + "\">");
50 }
51
52 Block root = new Block
53 {
54 Id = "Root",
55 SortId = 10,
56 BlocksList = new List<Block>
57 {
58 new Block {
59 Id = "Head",
60 SortId = 10,
61 SkipRenderBlocksList = true,
62 Template = RenderMasterHead(),
63 BlocksList = new List<Block>
64 {
65 new Block {
66 Id = "HeadMetadata",
67 SortId = 10,
68 Template = RenderMasterMetadata(),
69 },
70 new Block {
71 Id = "HeadCss",
72 SortId = 20,
73 Template = RenderMasterCss(),
74 },
75 new Block {
76 Id = "HeadManifest",
77 SortId = 30,
78 Template = RenderMasterManifest(),
79 }
80 }
81 },
82 new Block {
83 Id = "Body",
84 SortId = 20,
85 SkipRenderBlocksList = true,
86 Template = RenderMasterBody(),
87 BlocksList = new List<Block>
88 {
89 new Block()
90 {
91 Id = "Master",
92 SortId = 10,
93 BlocksList = new List<Block> {
94 new Block {
95 Id = "MasterTopSnippets",
96 SortId = 10
97 },
98 new Block {
99 Id = "MasterMain",
100 SortId = 20,
101 Template = RenderMain(),
102 SkipRenderBlocksList = true,
103 BlocksList = new List<Block> {
104 new Block {
105 Id = "MasterHeader",
106 SortId = 10,
107 Template = RenderMasterHeader(),
108 SkipRenderBlocksList = true
109 },
110 new Block {
111 Id = "MasterPageContent",
112 SortId = 20,
113 Template = RenderPageContent()
114 }
115 }
116 },
117 new Block {
118 Id = "MasterFooter",
119 SortId = 30
120 },
121 new Block {
122 Id = "MasterReferences",
123 SortId = 40
124 },
125 new Block {
126 Id = "MasterBottomSnippets",
127 SortId = 50,
128 BlocksList = new List<Block> {
129 new Block {
130 Id = "iOsTabletFix",
131 SortId = 10,
132 Template = RenderIosTabletFix()
133 }
134 }
135 }
136 }
137 }
138 }
139 }
140 }
141 };
142
143 masterPage.Add(root);
144 }
145 @* Include the required Grid builder (Contains the methods @RenderBlockList and @RenderBlock) *@
146 @using System.Text.RegularExpressions
147 @using System.Collections.Generic
148 @using System.Reflection
149 @using System.Web
150 @using System.Web.UI.HtmlControls
151 @using Dynamicweb.Rapido.Blocks.Components
152 @using Dynamicweb.Rapido.Blocks.Components.Articles
153 @using Dynamicweb.Rapido.Blocks.Components.Documentation
154 @using Dynamicweb.Rapido.Blocks
155
156
157 @*--- START: Base block renderers ---*@
158
159 @helper RenderBlockList(List<Block> blocks)
160 {
161 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false;
162 blocks = blocks.OrderBy(item => item.SortId).ToList();
163
164 foreach (Block item in blocks)
165 {
166 if (debug) {
167 <!-- Block START: @item.Id -->
168 }
169
170 if (item.Design == null)
171 {
172 @RenderBlock(item)
173 }
174 else if (item.Design.RenderType == RenderType.None) {
175 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
176
177 <div class="@cssClass dw-mod">
178 @RenderBlock(item)
179 </div>
180 }
181 else if (item.Design.RenderType != RenderType.Hide)
182 {
183 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
184
185 if (!item.SkipRenderBlocksList) {
186 if (item.Design.RenderType == RenderType.Row)
187 {
188 <div class="grid grid--align-content-start @cssClass dw-mod" id="Block__@item.Id">
189 @RenderBlock(item)
190 </div>
191 }
192
193 if (item.Design.RenderType == RenderType.Column)
194 {
195 string hidePadding = item.Design.HidePadding ? "u-no-padding" : "";
196 string size = item.Design.Size ?? "12";
197 size = Regex.IsMatch(size, @"\d") ? "md-" + item.Design.Size : item.Design.Size;
198
199 <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">
200 @RenderBlock(item)
201 </div>
202 }
203
204 if (item.Design.RenderType == RenderType.Table)
205 {
206 <table class="table @cssClass dw-mod" id="Block__@item.Id">
207 @RenderBlock(item)
208 </table>
209 }
210
211 if (item.Design.RenderType == RenderType.TableRow)
212 {
213 <tr class="@cssClass dw-mod" id="Block__@item.Id">
214 @RenderBlock(item)
215 </tr>
216 }
217
218 if (item.Design.RenderType == RenderType.TableColumn)
219 {
220 <td class="@cssClass dw-mod" id="Block__@item.Id">
221 @RenderBlock(item)
222 </td>
223 }
224
225 if (item.Design.RenderType == RenderType.CardHeader)
226 {
227 <div class="card-header @cssClass dw-mod">
228 @RenderBlock(item)
229 </div>
230 }
231
232 if (item.Design.RenderType == RenderType.CardBody)
233 {
234 <div class="card @cssClass dw-mod">
235 @RenderBlock(item)
236 </div>
237 }
238
239 if (item.Design.RenderType == RenderType.CardFooter)
240 {
241 <div class="card-footer @cssClass dw-mod">
242 @RenderBlock(item)
243 </div>
244 }
245 }
246 else
247 {
248 @RenderBlock(item)
249 }
250 }
251
252 if (debug) {
253 <!-- Block END: @item.Id -->
254 }
255 }
256 }
257
258 @helper RenderBlock(Block item)
259 {
260 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false;
261
262 if (item.Template != null)
263 {
264 @BlocksPage.RenderTemplate(item.Template)
265 }
266
267 if (item.Component != null)
268 {
269 string customSufix = "Custom";
270 string methodName = item.Component.HelperName;
271
272 ComponentBase[] methodParameters = new ComponentBase[1];
273 methodParameters[0] = item.Component;
274 Type methodType = this.GetType();
275
276 MethodInfo customMethod = methodType.GetMethod(methodName + customSufix);
277 MethodInfo generalMethod = methodType.GetMethod(methodName);
278
279 try {
280 if (debug) {
281 <!-- Component: @methodName.Replace("Render", "") -->
282 }
283 @customMethod.Invoke(this, methodParameters).ToString();
284 } catch {
285 try {
286 @generalMethod.Invoke(this, methodParameters).ToString();
287 } catch(Exception ex) {
288 throw new Exception(item.Component.GetType().Name + " method '" + methodName +"' could not be invoked", ex);
289 }
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 @using System.IO
307
308 @* Required *@
309 @using Dynamicweb.Rapido.Blocks.Components
310 @using Dynamicweb.Rapido.Blocks.Components.General
311 @using Dynamicweb.Rapido.Blocks
312
313
314 @helper Render(ComponentBase component)
315 {
316 if (component != null)
317 {
318 @component.Render(this)
319 }
320 }
321
322 @* Components *@
323 @using System.Reflection
324 @using Dynamicweb.Rapido.Blocks.Components.General
325
326
327 @* Component *@
328
329 @helper RenderIcon(Icon settings)
330 {
331 if (settings != null)
332 {
333 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
334
335 if (settings.Name != null)
336 {
337 if (string.IsNullOrEmpty(settings.Label))
338 {
339 <i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i>
340 }
341 else
342 {
343 if (settings.LabelPosition == IconLabelPosition.Before)
344 {
345 <div class="u-flex u-flex--align-items-center @settings.CssClass">@settings.Label <i class="@settings.Prefix @settings.Name u-margin-left" @color></i></div>
346 }
347 else
348 {
349 <div class="u-flex u-flex--align-items-center @settings.CssClass"><i class="@settings.Prefix @settings.Name u-margin-right--lg u-w20px" @color></i>@settings.Label</div>
350 }
351 }
352 }
353 else if (!string.IsNullOrEmpty(settings.Label))
354 {
355 @settings.Label
356 }
357 }
358 }
359 @using System.Reflection
360 @using Dynamicweb.Rapido.Blocks.Components.General
361 @using Dynamicweb.Rapido.Blocks.Components
362 @using Dynamicweb.Core
363
364 @* Component *@
365
366 @helper RenderButton(Button settings)
367 {
368 if (settings != null && (!string.IsNullOrEmpty(settings.Title) || settings.Icon != null))
369 {
370 Dictionary<string, string> attributes = new Dictionary<string, string>();
371 List<string> classList = settings.CssClass != null ? settings.CssClass.Split(' ').ToList() : new List<string>();
372 if (settings.Disabled) {
373 attributes.Add("disabled", "true");
374 classList.Add("disabled");
375 }
376
377 if (!string.IsNullOrEmpty(settings.ConfirmText) || !string.IsNullOrEmpty(settings.ConfirmTitle))
378 {
379 settings.Id = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N");
380 @RenderConfirmDialog(settings);
381 settings.OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = true";
382 }
383
384 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
385 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
386 if (!string.IsNullOrEmpty(settings.AltText))
387 {
388 attributes.Add("title", settings.AltText);
389 }
390 else if (!string.IsNullOrEmpty(settings.Title))
391 {
392 string cleanTitle = Regex.Replace(settings.Title, "<.*?>", String.Empty);
393 cleanTitle = cleanTitle.Replace(" ", " ");
394 attributes.Add("title", cleanTitle);
395 }
396
397 var onClickEvents = new List<string>();
398 if (!string.IsNullOrEmpty(settings.OnClick))
399 {
400 onClickEvents.Add(settings.OnClick);
401 }
402 if (!string.IsNullOrEmpty(settings.Href))
403 {
404 onClickEvents.Add("location.href='" + settings.Href + "'");
405 }
406 if (onClickEvents.Count > 0)
407 {
408 attributes.Add("onClick", string.Join(";", onClickEvents));
409 }
410
411 if (settings.ButtonLayout != ButtonLayout.None)
412 {
413 classList.Add("btn");
414 string btnLayout = Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower();
415 if (btnLayout == "linkclean")
416 {
417 btnLayout = "link-clean"; //fix
418 }
419 classList.Add("btn--" + btnLayout);
420 }
421
422 if (settings.Icon == null)
423 {
424 settings.Icon = new Icon();
425 }
426
427 settings.Icon.CssClass += Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower() != "linkclean" ? " u-flex--align-center" : "";
428 settings.Icon.Label = settings.Title;
429
430 attributes.Add("type", Enum.GetName(typeof(ButtonType), settings.ButtonType).ToLower());
431
432 <button class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</button>
433 }
434 }
435
436 @helper RenderConfirmDialog(Button settings)
437 {
438 Modal confirmDialog = new Modal {
439 Id = settings.Id,
440 Width = ModalWidth.Sm,
441 Heading = new Heading
442 {
443 Level = 2,
444 Title = settings.ConfirmTitle
445 },
446 BodyText = settings.ConfirmText
447 };
448
449 confirmDialog.AddAction(new Button { Title = Translate("Cancel"), ButtonLayout = ButtonLayout.Secondary, OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = false"});
450 confirmDialog.AddAction(new Button { Title = Translate("OK"), ButtonLayout = ButtonLayout.Primary, OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = false;" + settings.OnClick });
451
452 @Render(confirmDialog)
453 }
454 @using Dynamicweb.Rapido.Blocks.Components.General
455 @using Dynamicweb.Rapido.Blocks.Components
456 @using Dynamicweb.Core
457
458 @helper RenderDashboard(Dashboard settings)
459 {
460 var widgets = settings.GetWidgets();
461
462 if (!string.IsNullOrEmpty(settings.WidgetsBaseBackgroundColor))
463 {
464 //set bg color for them
465
466 System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml(settings.WidgetsBaseBackgroundColor);
467 int r = Convert.ToInt16(color.R);
468 int g = Convert.ToInt16(color.G);
469 int b = Convert.ToInt16(color.B);
470
471 var count = widgets.Length;
472 var max = Math.Max(r, Math.Max(g, b));
473 double step = 255.0 / (max * count);
474 var i = 0;
475 foreach (var widget in widgets)
476 {
477 i++;
478
479 var shade = "rgb(" + Converter.ToString(r * step * i).Replace(",", ".") + ", " + Converter.ToString(g * step * i).Replace(",", ".") + ", " + Converter.ToString(b * step * i).Replace(",", ".") + ")";
480 widget.BackgroundColor = shade;
481 }
482 }
483
484 <div class="dashboard @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
485 @foreach (var widget in widgets)
486 {
487 <div class="dashboard__widget">
488 @Render(widget)
489 </div>
490 }
491 </div>
492 }
493 @using Dynamicweb.Rapido.Blocks.Components.General
494 @using Dynamicweb.Rapido.Blocks.Components
495
496 @helper RenderDashboardWidgetLink(DashboardWidgetLink settings)
497 {
498 if (!string.IsNullOrEmpty(settings.Link))
499 {
500 var backgroundStyles = "";
501 if (!string.IsNullOrEmpty(settings.BackgroundColor))
502 {
503 backgroundStyles = "style=\"background-color:" + settings.BackgroundColor + "\"";
504 }
505
506 <a href="@settings.Link" class="widget widget--link @settings.CssClass dw-mod" @backgroundStyles title="@settings.Title" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
507 <div class="u-center-middle u-color-light">
508 @if (settings.Icon != null)
509 {
510 settings.Icon.CssClass += "widget__icon";
511 @Render(settings.Icon)
512 }
513 <div class="widget__title">@settings.Title</div>
514 </div>
515 </a>
516 }
517 }
518 @using Dynamicweb.Rapido.Blocks.Components.General
519 @using Dynamicweb.Rapido.Blocks.Components
520
521 @helper RenderDashboardWidgetCounter(DashboardWidgetCounter settings)
522 {
523 var backgroundStyles = "";
524 if (!string.IsNullOrEmpty(settings.BackgroundColor))
525 {
526 backgroundStyles = "style='background-color:" + settings.BackgroundColor + "'";
527 }
528
529 <div class="widget @settings.CssClass dw-mod" @backgroundStyles @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
530 <div class="u-center-middle u-color-light">
531 @if (settings.Icon != null)
532 {
533 settings.Icon.CssClass += "widget__icon";
534 @Render(settings.Icon)
535 }
536 <div class="widget__counter">@settings.Count</div>
537 <div class="widget__title">@settings.Title</div>
538 </div>
539 </div>
540 }
541 @using System.Reflection
542 @using Dynamicweb.Rapido.Blocks.Components.General
543 @using Dynamicweb.Rapido.Blocks.Components
544 @using Dynamicweb.Core
545
546 @* Component *@
547
548 @helper RenderLink(Link settings)
549 {
550 if (settings != null && !string.IsNullOrEmpty(settings.Href) && (!string.IsNullOrEmpty(settings.Title) || settings.Icon != null))
551 {
552 Dictionary<string, string> attributes = new Dictionary<string, string>();
553 List<string> classList = settings.CssClass != null ? settings.CssClass.Split(' ').ToList() : new List<string>();
554 if (settings.Disabled)
555 {
556 attributes.Add("disabled", "true");
557 classList.Add("disabled");
558 }
559
560 if (!string.IsNullOrEmpty(settings.AltText))
561 {
562 attributes.Add("title", settings.AltText);
563 }
564 else if (!string.IsNullOrEmpty(settings.Title))
565 {
566 attributes.Add("title", settings.Title);
567 }
568
569 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
570 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
571 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onClick", settings.OnClick); }
572 attributes.Add("href", settings.Href);
573
574 if (settings.ButtonLayout != ButtonLayout.None)
575 {
576 classList.Add("btn");
577 string btnLayout = Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower();
578 if (btnLayout == "linkclean")
579 {
580 btnLayout = "link-clean"; //fix
581 }
582 classList.Add("btn--" + btnLayout);
583 }
584
585 if (settings.Icon == null)
586 {
587 settings.Icon = new Icon();
588 }
589 settings.Icon.Label = settings.Title;
590
591 if (settings.Target == LinkTargetType.Blank && settings.Rel == LinkRelType.None)
592 {
593 settings.Rel = LinkRelType.Noopener;
594 }
595 if (settings.Target != LinkTargetType.None)
596 {
597 attributes.Add("target", "_" + Enum.GetName(typeof(LinkTargetType), settings.Target).ToLower());
598 }
599 if (settings.Download)
600 {
601 attributes.Add("download", "true");
602 }
603 if (settings.Rel != LinkRelType.None)
604 {
605 attributes.Add("rel", Enum.GetName(typeof(LinkRelType), settings.Rel).ToLower());
606 }
607
608 <a class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</a>
609 }
610 }
611 @using System.Reflection
612 @using Dynamicweb.Rapido.Blocks.Components
613 @using Dynamicweb.Rapido.Blocks.Components.General
614 @using Dynamicweb.Rapido.Blocks
615
616
617 @* Component *@
618
619 @helper RenderRating(Rating settings)
620 {
621 if (settings.Score > 0)
622 {
623 int rating = settings.Score;
624 string iconType = "fa-star";
625
626 switch (settings.Type.ToString()) {
627 case "Stars":
628 iconType = "fa-star";
629 break;
630 case "Hearts":
631 iconType = "fa-heart";
632 break;
633 case "Lemons":
634 iconType = "fa-lemon";
635 break;
636 case "Bombs":
637 iconType = "fa-bomb";
638 break;
639 }
640
641 <div class="u-ta-right">
642 @for (int i = 0; i < settings.OutOf; i++)
643 {
644 <i class="@(rating > i ? "fas" : "far") @iconType"></i>
645 }
646 </div>
647 }
648 }
649 @using System.Reflection
650 @using Dynamicweb.Rapido.Blocks.Components.General
651 @using Dynamicweb.Rapido.Blocks.Components
652
653
654 @* Component *@
655
656 @helper RenderSelectFieldOption(SelectFieldOption settings)
657 {
658 Dictionary<string, string> attributes = new Dictionary<string, string>();
659 if (settings.Checked) { attributes.Add("selected", "true"); }
660 if (settings.Disabled) { attributes.Add("disabled", "true"); }
661 if (settings.Value != null) { attributes.Add("value", settings.Value); }
662 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
663
664 <option @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Label</option>
665 }
666 @using System.Reflection
667 @using Dynamicweb.Rapido.Blocks.Components.General
668 @using Dynamicweb.Rapido.Blocks.Components
669
670
671 @* Component *@
672
673 @helper RenderNavigation(Navigation settings) {
674 @RenderNavigation(new
675 {
676 id = settings.Id,
677 cssclass = settings.CssClass,
678 startLevel = settings.StartLevel,
679 endlevel = settings.EndLevel,
680 expandmode = settings.Expandmode,
681 sitemapmode = settings.SitemapMode,
682 template = settings.Template
683 })
684 }
685 @using Dynamicweb.Rapido.Blocks.Components.General
686 @using Dynamicweb.Rapido.Blocks.Components
687
688
689 @* Component *@
690
691 @helper RenderBreadcrumbNavigation(BreadcrumbNavigation settings) {
692 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
693 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
694 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
695 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
696 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
697 settings.SitemapMode = false;
698
699 @RenderNavigation(settings)
700 }
701 @using Dynamicweb.Rapido.Blocks.Components.General
702 @using Dynamicweb.Rapido.Blocks.Components
703
704
705 @* Component *@
706
707 @helper RenderLeftNavigation(LeftNavigation settings) {
708 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
709 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
710 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
711 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
712 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
713
714 <div class="grid__cell">
715 @RenderNavigation(settings)
716 </div>
717 }
718 @using System.Reflection
719 @using Dynamicweb.Rapido.Blocks.Components.General
720 @using Dynamicweb.Core
721
722 @* Component *@
723
724 @helper RenderHeading(Heading settings)
725 {
726 if (settings != null && !string.IsNullOrEmpty(settings.Title))
727 {
728 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
729 string tagName = settings.Level != 0 ? "h" + settings.Level.ToString() : "div";
730
731 @("<" + tagName + " class=\"" + settings.CssClass + " dw-mod\" " + color + ">")
732 if (!string.IsNullOrEmpty(settings.Link))
733 {
734 @Render(new Link { Href = settings.Link, Icon = settings.Icon, Title = settings.Title, ButtonLayout = ButtonLayout.None })
735 }
736 else
737 {
738 if (settings.Icon == null)
739 {
740 settings.Icon = new Icon();
741 }
742 settings.Icon.Label = settings.Title;
743 @Render(settings.Icon)
744 }
745 @("</" + tagName + ">");
746 }
747 }
748 @using Dynamicweb.Rapido.Blocks.Components
749 @using Dynamicweb.Rapido.Blocks.Components.General
750 @using Dynamicweb.Rapido.Blocks
751
752
753 @* Component *@
754
755 @helper RenderImage(Image settings)
756 {
757 if (settings.FilterPrimary != ImageFilter.None || settings.FilterSecondary != ImageFilter.None)
758 {
759 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
760 if (!string.IsNullOrEmpty(settings.FilterColor)) { optionalAttributes.Add("style", "background-color: " + settings.FilterColor); }
761
762 if (settings.Caption != null)
763 {
764 @:<div>
765 }
766
767 var primaryFilterClass = settings.FilterPrimary.ToString().ToLower();
768 var secondaryFilterClass = settings.FilterSecondary.ToString().ToLower();
769
770 <div class="image-filter image-filter--@primaryFilterClass u-position-relative dw-mod" @ComponentMethods.AddAttributes(optionalAttributes)>
771 <div class="image-filter image-filter--@secondaryFilterClass dw-mod">
772 @if (settings.Link != null)
773 {
774 <a href="@settings.Link">
775 @RenderTheImage(settings)
776 </a>
777 }
778 else
779 {
780 @RenderTheImage(settings)
781 }
782 </div>
783 </div>
784
785 if (settings.Caption != null)
786 {
787 <span class="image-caption dw-mod">@settings.Caption</span>
788 @:</div>
789 }
790 }
791 else
792 {
793 if (settings.Caption != null)
794 {
795 @:<div>
796 }
797 if (!string.IsNullOrEmpty(settings.Link))
798 {
799 <a href="@settings.Link">
800 @RenderTheImage(settings)
801 </a>
802 }
803 else
804 {
805 @RenderTheImage(settings)
806 }
807
808 if (settings.Caption != null)
809 {
810 <span class="image-caption dw-mod">@settings.Caption</span>
811 @:</div>
812 }
813 }
814 }
815
816 @helper RenderTheImage(Image settings)
817 {
818 if (settings != null)
819 {
820 string alternativeImage = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("AlternativeImage")) ? Pageview.AreaSettings.GetItem("Settings").GetFile("AlternativeImage").PathUrlEncoded : "/Images/missing_image.jpg";
821 string placeholderImage = "/Files/Images/placeholder.gif";
822 string imageEngine = "/Admin/Public/GetImage.ashx?";
823
824 string imageStyle = "";
825
826 switch (settings.Style)
827 {
828 case ImageStyle.Ball:
829 imageStyle = "grid__cell-img--ball";
830 break;
831
832 case ImageStyle.Triangle:
833 imageStyle = "grid__cell-img--triangle";
834 break;
835 }
836
837 if (settings.Style == ImageStyle.Ball || settings.Style == ImageStyle.Circle || settings.Style == ImageStyle.Triangle)
838 {
839 settings.ImageDefault.Crop = settings.ImageDefault.Crop == 5 ? settings.ImageDefault.Crop = 0 : settings.ImageDefault.Crop;
840
841 if (settings.ImageDefault != null)
842 {
843 settings.ImageDefault.Height = settings.ImageDefault.Width;
844 }
845 if (settings.ImageMedium != null)
846 {
847 settings.ImageMedium.Height = settings.ImageMedium.Width;
848 }
849 if (settings.ImageSmall != null)
850 {
851 settings.ImageSmall.Height = settings.ImageSmall.Width;
852 }
853 }
854
855 string defaultImage = imageEngine;
856 string imageSmall = "";
857 string imageMedium = "";
858
859 if (settings.DisableImageEngine)
860 {
861 defaultImage = settings.Path;
862 }
863 else
864 {
865 if (settings.ImageDefault != null)
866 {
867 defaultImage += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageDefault);
868
869 if (settings.Path.GetType() != typeof(string))
870 {
871 defaultImage += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
872 defaultImage += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
873 }
874 else
875 {
876 defaultImage += settings.Path != null ? "Image=" + settings.Path : "";
877 }
878
879 defaultImage += "&AlternativeImage=" + alternativeImage;
880 }
881
882 if (settings.ImageSmall != null)
883 {
884 imageSmall = "data-src-small=\"" + imageEngine;
885 imageSmall += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageSmall);
886
887 if (settings.Path.GetType() != typeof(string))
888 {
889 imageSmall += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
890 imageSmall += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
891 }
892 else
893 {
894 imageSmall += settings.Path != null ? "Image=" + settings.Path : "";
895 }
896
897 imageSmall += "&alternativeImage=" + alternativeImage;
898
899 imageSmall += "\"";
900 }
901
902 if (settings.ImageMedium != null)
903 {
904 imageMedium = "data-src-medium=\"" + imageEngine;
905 imageMedium += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageMedium);
906
907 if (settings.Path.GetType() != typeof(string))
908 {
909 imageMedium += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
910 imageMedium += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
911 }
912 else
913 {
914 imageMedium += settings.Path != null ? "Image=" + settings.Path : "";
915 }
916
917 imageMedium += "&alternativeImage=" + alternativeImage;
918
919 imageMedium += "\"";
920 }
921 }
922
923 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
924 if (!string.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick); }
925 if (!string.IsNullOrEmpty(settings.Title))
926 {
927 optionalAttributes.Add("alt", settings.Title);
928 optionalAttributes.Add("title", settings.Title);
929 }
930
931 if (settings.DisableLazyLoad)
932 {
933 <img id="@settings.Id" class="@imageStyle @settings.CssClass dw-mod" src="@defaultImage" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
934 }
935 else
936 {
937 <img id="@settings.Id" loading="lazy" class=" @imageStyle @settings.CssClass dw-mod" src="@defaultImage" @imageSmall @imageMedium @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
938 }
939 }
940 }
941 @using System.Reflection
942 @using Dynamicweb.Rapido.Blocks.Components.General
943 @using Dynamicweb.Rapido.Blocks.Components
944
945 @* Component *@
946
947 @helper RenderFileField(FileField settings)
948 {
949 var attributes = new Dictionary<string, string>();
950 if (string.IsNullOrEmpty(settings.Id))
951 {
952 settings.Id = Guid.NewGuid().ToString("N");
953 }
954
955 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
956 if (settings.Disabled) { attributes.Add("disabled", "true"); }
957 if (settings.Required) { attributes.Add("required", "true"); }
958 if (settings.Multiple) { attributes.Add("multiple", "true"); }
959 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
960 if (string.IsNullOrEmpty(settings.ChooseFileText))
961 {
962 settings.ChooseFileText = Translate("Choose file");
963 }
964 if (string.IsNullOrEmpty(settings.NoFilesChosenText))
965 {
966 settings.NoFilesChosenText = Translate("No files chosen...");
967 }
968 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
969
970 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
971
972 string setValueToFakeInput = "FileUpload.setValueToFakeInput(this)";
973 attributes.Add("onchange", setValueToFakeInput + (!string.IsNullOrEmpty(settings.OnChange) ? settings.OnChange : ""));
974
975 attributes.Add("type", "file");
976 if (settings.Value != null) { attributes.Add("value", settings.Value); }
977 settings.CssClass = "u-full-width " + settings.CssClass;
978
979 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
980
981 <div class="form__field-group full-width-input u-full-width @settings.WrapperCssClass dw-mod">
982 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
983 {
984 <div class="u-full-width">
985 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
986 @if (settings.Link != null) {
987 <div class="u-pull--right">
988 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
989 @Render(settings.Link)
990 </div>
991 }
992 </div>
993
994 }
995
996 @if (!string.IsNullOrEmpty(settings.HelpText))
997 {
998 <small class="form__help-text">@settings.HelpText</small>
999 }
1000
1001 <div class="form__field-combi file-input u-no-margin dw-mod">
1002 <input @ComponentMethods.AddAttributes(resultAttributes) class="file-input__real-input" data-no-files-text="@settings.NoFilesChosenText" data-many-files-text="@Translate("files")" />
1003 <label for="@settings.Id" class="file-input__btn btn--secondary btn dw-mod">@settings.ChooseFileText</label>
1004 <label for="@settings.Id" class="@settings.CssClass file-input__fake-input js-fake-input dw-mod">@settings.NoFilesChosenText</label>
1005 @if (settings.UploadButton != null)
1006 {
1007 settings.UploadButton.CssClass += " btn--condensed u-no-margin";
1008 @Render(settings.UploadButton)
1009 }
1010 </div>
1011 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1012 </div>
1013 }
1014 @using System.Reflection
1015 @using Dynamicweb.Rapido.Blocks.Components.General
1016 @using Dynamicweb.Rapido.Blocks.Components
1017 @using Dynamicweb.Core
1018 @using System.Linq
1019
1020 @* Component *@
1021
1022 @helper RenderDateTimeField(DateTimeField settings)
1023 {
1024 if (string.IsNullOrEmpty(settings.Id))
1025 {
1026 settings.Id = Guid.NewGuid().ToString("N");
1027 }
1028
1029 var textField = new TextField {
1030 Name = settings.Name,
1031 Id = settings.Id,
1032 Label = settings.Label,
1033 HelpText = settings.HelpText,
1034 Value = settings.Value,
1035 Disabled = settings.Disabled,
1036 Required = settings.Required,
1037 ErrorMessage = settings.ErrorMessage,
1038 CssClass = settings.CssClass,
1039 WrapperCssClass = settings.WrapperCssClass,
1040 OnChange = settings.OnChange,
1041 OnClick = settings.OnClick,
1042 Link = settings.Link,
1043 ExtraAttributes = settings.ExtraAttributes,
1044 //
1045 Placeholder = settings.Placeholder
1046 };
1047
1048 @Render(textField)
1049
1050 List<string> jsAttributes = new List<string>();
1051
1052 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'");
1053
1054 if (!string.IsNullOrEmpty(settings.DateFormat))
1055 {
1056 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'");
1057 }
1058 if (!string.IsNullOrEmpty(settings.MinDate))
1059 {
1060 jsAttributes.Add("minDate: '" + settings.MinDate + "'");
1061 }
1062 if (!string.IsNullOrEmpty(settings.MaxDate))
1063 {
1064 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'");
1065 }
1066 if (settings.IsInline)
1067 {
1068 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower());
1069 }
1070 if (settings.EnableTime)
1071 {
1072 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower());
1073 }
1074 if (settings.EnableWeekNumbers)
1075 {
1076 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower());
1077 }
1078
1079 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value));
1080
1081 <script>
1082 document.addEventListener("DOMContentLoaded", function () {
1083 flatpickr("#@textField.Id", {
1084 @string.Join(",", jsAttributes)
1085 });
1086 });
1087 </script>
1088 }
1089 @using System.Reflection
1090 @using Dynamicweb.Rapido.Blocks.Components.General
1091 @using Dynamicweb.Rapido.Blocks.Components
1092
1093 @* Component *@
1094
1095 @helper RenderTextField(TextField settings)
1096 {
1097 var attributes = new Dictionary<string, string>();
1098 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1099 {
1100 settings.Id = Guid.NewGuid().ToString("N");
1101 }
1102
1103 /*base settings*/
1104 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1105 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1106 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1107 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1108 if (settings.Required) { attributes.Add("required", "true"); }
1109 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1110 /*end*/
1111
1112 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1113 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1114 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1115 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1116 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); }
1117 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); }
1118 attributes.Add("type", Enum.GetName(typeof(TextFieldType), settings.Type).ToLower());
1119 if (settings.Type == TextFieldType.Password) { attributes.Add("autocomplete", "off"); };
1120 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1121
1122 settings.CssClass = "u-full-width " + settings.CssClass;
1123
1124 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1125
1126 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1127
1128 string noMargin = "u-no-margin";
1129 if (!settings.ReadOnly) {
1130 noMargin = "";
1131 }
1132
1133 <div class="form__field-group u-full-width @noMargin @settings.WrapperCssClass dw-mod">
1134 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1135 {
1136 <div class="u-full-width">
1137 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1138 @if (settings.Link != null) {
1139 settings.Link.ButtonLayout = ButtonLayout.LinkClean;
1140
1141 <div class="u-pull--right">
1142 @Render(settings.Link)
1143 </div>
1144 }
1145 </div>
1146
1147 }
1148
1149 @if (!string.IsNullOrEmpty(settings.HelpText))
1150 {
1151 <small class="form__help-text">@settings.HelpText</small>
1152 }
1153
1154 @if (settings.ActionButton != null)
1155 {
1156 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1157 <div class="form__field-combi u-no-margin dw-mod ">
1158 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1159 @Render(settings.ActionButton)
1160 </div>
1161 }
1162 else
1163 {
1164 <input @ComponentMethods.AddAttributes(resultAttributes) class=" @settings.CssClass dw-mod" />
1165 }
1166
1167 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1168 </div>
1169 }
1170 @using System.Reflection
1171 @using Dynamicweb.Rapido.Blocks.Components.General
1172 @using Dynamicweb.Rapido.Blocks.Components
1173
1174 @* Component *@
1175
1176 @helper RenderNumberField(NumberField settings)
1177 {
1178 var attributes = new Dictionary<string, string>();
1179 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1180 {
1181 settings.Id = Guid.NewGuid().ToString("N");
1182 }
1183
1184 /*base settings*/
1185 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1186 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1187 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1188 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1189 if (settings.Required) { attributes.Add("required", "true"); }
1190 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1191 /*end*/
1192
1193 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1194 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1195 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1196 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1197 if (settings.Max != null) { attributes.Add("max", settings.Max.ToString()); }
1198 if (settings.Min != null) { attributes.Add("min", settings.Min.ToString()); }
1199 if (settings.Step != 0) { attributes.Add("step", settings.Step.ToString()); }
1200 if (settings.Value != null && !string.IsNullOrEmpty(settings.Value.ToString())) { attributes.Add("value", settings.Value.ToString()); }
1201 attributes.Add("type", "number");
1202 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1203 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1204
1205 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
1206 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1207 {
1208 <div class="u-full-width">
1209 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1210 @if (settings.Link != null) {
1211 <div class="u-pull--right">
1212 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1213 @Render(settings.Link)
1214 </div>
1215 }
1216 </div>
1217
1218 }
1219
1220 @if (!string.IsNullOrEmpty(settings.HelpText))
1221 {
1222 <small class="form__help-text">@settings.HelpText</small>
1223 }
1224
1225 @if (settings.ActionButton != null)
1226 {
1227 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1228 <div class="form__field-combi u-no-margin dw-mod">
1229 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1230 @Render(settings.ActionButton)
1231 </div>
1232 }
1233 else
1234 {
1235 <div class="form__field-combi u-no-margin dw-mod">
1236 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1237 </div>
1238 }
1239
1240 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1241 </div>
1242 }
1243 @using System.Reflection
1244 @using Dynamicweb.Rapido.Blocks.Components.General
1245 @using Dynamicweb.Rapido.Blocks.Components
1246
1247
1248 @* Component *@
1249
1250 @helper RenderTextareaField(TextareaField settings)
1251 {
1252 Dictionary<string, string> attributes = new Dictionary<string, string>();
1253 string id = settings.Id;
1254 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(id))
1255 {
1256 id = Guid.NewGuid().ToString("N");
1257 }
1258
1259 if (!string.IsNullOrEmpty(id)) { attributes.Add("id", id); }
1260 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1261 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1262 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1263 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1264 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1265 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); }
1266 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1267 if (settings.Required) { attributes.Add("required", "true"); }
1268 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1269 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); }
1270 if (settings.Rows != 0) { attributes.Add("rows", settings.Rows.ToString()); }
1271 attributes.Add("name", settings.Name);
1272
1273 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1274
1275 <div class="form__field-group full-width-input @settings.WrapperCssClass dw-mod">
1276 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1277 {
1278 <div class="u-full-width">
1279 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1280 @if (settings.Link != null) {
1281 <div class="u-pull--right">
1282 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1283 @Render(settings.Link)
1284 </div>
1285 }
1286 </div>
1287 }
1288
1289 @if (!string.IsNullOrEmpty(settings.HelpText))
1290 {
1291 <small class="form__help-text">@settings.HelpText</small>
1292 }
1293
1294 <textarea class="u-full-width @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Value</textarea>
1295
1296 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1297 </div>
1298 }
1299 @using System.Reflection
1300 @using Dynamicweb.Rapido.Blocks.Components.General
1301 @using Dynamicweb.Rapido.Blocks.Components
1302
1303
1304 @* Component *@
1305
1306 @helper RenderHiddenField(HiddenField settings) {
1307 var attributes = new Dictionary<string, string>();
1308 attributes.Add("type", "hidden");
1309 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1310 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1311 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1312
1313 <input @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)/>
1314 }
1315 @using System.Reflection
1316 @using Dynamicweb.Rapido.Blocks.Components.General
1317 @using Dynamicweb.Rapido.Blocks.Components
1318
1319 @* Component *@
1320
1321 @helper RenderCheckboxField(CheckboxField settings)
1322 {
1323 var attributes = new Dictionary<string, string>();
1324 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1325 {
1326 settings.Id = Guid.NewGuid().ToString("N");
1327 }
1328
1329 /*base settings*/
1330 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1331 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1332 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1333 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1334 if (settings.Required) { attributes.Add("required", "true"); }
1335 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1336 /*end*/
1337
1338 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1339
1340 attributes.Add("type", "checkbox");
1341 if (settings.Checked) { attributes.Add("checked", "true"); }
1342 settings.CssClass = "form__control " + settings.CssClass;
1343 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1344
1345 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1346
1347 <div class="form__field-group full-width-input @settings.WrapperCssClass dw-mod">
1348 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1349 @if (!string.IsNullOrEmpty(settings.Label))
1350 {
1351 <label for="@settings.Id" class="dw-mod">@settings.Label</label>
1352 }
1353
1354 @if (settings.Link != null) {
1355 <span>
1356 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1357 @Render(settings.Link)
1358 </span>
1359 }
1360
1361 @if (!string.IsNullOrEmpty(settings.HelpText))
1362 {
1363 <small class="form__help-text checkbox-help dw-mod">@settings.HelpText</small>
1364 }
1365 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1366 </div>
1367 }
1368 @using System.Reflection
1369 @using Dynamicweb.Rapido.Blocks.Components.General
1370 @using Dynamicweb.Rapido.Blocks.Components
1371
1372
1373 @* Component *@
1374
1375 @helper RenderCheckboxListField(CheckboxListField settings)
1376 {
1377 <div class="form__field-group full-width-input @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1378 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1379 {
1380 <div class="u-full-width">
1381 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1382 @if (settings.Link != null) {
1383 <div class="u-pull--right">
1384 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1385 @Render(settings.Link)
1386 </div>
1387 }
1388 </div>
1389
1390 }
1391
1392 <div class="u-pull--left">
1393 @if (!string.IsNullOrEmpty(settings.HelpText))
1394 {
1395 <small class="form__help-text">@settings.HelpText</small>
1396 }
1397
1398 @foreach (var item in settings.Options)
1399 {
1400 if (settings.Required)
1401 {
1402 item.Required = true;
1403 }
1404 if (settings.Disabled)
1405 {
1406 item.Disabled = true;
1407 }
1408 if (!string.IsNullOrEmpty(settings.Name))
1409 {
1410 item.Name = settings.Name;
1411 }
1412 if (!string.IsNullOrEmpty(settings.CssClass))
1413 {
1414 item.CssClass += settings.CssClass;
1415 }
1416
1417 /* value is not supported */
1418
1419 if (!string.IsNullOrEmpty(settings.OnClick))
1420 {
1421 item.OnClick += settings.OnClick;
1422 }
1423 if (!string.IsNullOrEmpty(settings.OnChange))
1424 {
1425 item.OnChange += settings.OnChange;
1426 }
1427 @Render(item)
1428 }
1429
1430 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1431 </div>
1432
1433 </div>
1434 }
1435 @using Dynamicweb.Rapido.Blocks.Components.General
1436
1437 @* Component *@
1438
1439 @helper RenderSearch(Search settings)
1440 {
1441 var searchValue = HttpContext.Current.Request.QueryString.Get(settings.SearchParameter) ?? "";
1442 var groupValue = HttpContext.Current.Request.QueryString.Get(settings.GroupsParameter) ?? "";
1443
1444 if (string.IsNullOrEmpty(settings.Id))
1445 {
1446 settings.Id = Guid.NewGuid().ToString("N");
1447 }
1448
1449 var resultAttributes = new Dictionary<string, string>();
1450
1451 if (settings.PageSize != 0)
1452 {
1453 resultAttributes.Add("data-page-size", settings.PageSize.ToString());
1454 }
1455 if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl))
1456 {
1457 resultAttributes.Add("data-groups-feed-url", settings.GroupItemsFeedUrl);
1458 if (!string.IsNullOrEmpty(groupValue))
1459 {
1460 resultAttributes.Add("data-selected-group", groupValue);
1461 }
1462 if (!string.IsNullOrEmpty(settings.GroupsParameter))
1463 {
1464 resultAttributes.Add("data-groups-parameter", settings.GroupsParameter);
1465 }
1466 }
1467 resultAttributes.Add("data-force-init", "true");
1468 if (settings.GoToFirstSearchResultOnEnter)
1469 {
1470 resultAttributes.Add("data-go-to-first-search-result-on-enter", settings.GoToFirstSearchResultOnEnter.ToString().ToLower());
1471 }
1472 if (!string.IsNullOrEmpty(settings.SearchParameter))
1473 {
1474 resultAttributes.Add("data-search-parameter", settings.SearchParameter);
1475 }
1476 resultAttributes.Add("data-search-feed-url", settings.SearchData.SearchFeedUrl);
1477 resultAttributes.Add("data-results-template-id", settings.SearchData.ResultsTemplateId);
1478
1479 if (settings.SecondSearchData != null)
1480 {
1481 resultAttributes.Add("data-second-search-feed-url", settings.SecondSearchData.SearchFeedUrl);
1482 resultAttributes.Add("data-second-results-template-id", settings.SecondSearchData.ResultsTemplateId);
1483 }
1484 if (!string.IsNullOrEmpty(settings.ResultsPageUrl))
1485 {
1486 resultAttributes.Add("data-results-page-url", settings.ResultsPageUrl);
1487 }
1488
1489 resultAttributes = resultAttributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1490
1491 string searchFieldCss = (settings.SearchButton == null) ? "search--with-icon" : "";
1492
1493 <div class="search @settings.CssClass @searchFieldCss js-search-data-source dw-mod" id="@settings.Id" @ComponentMethods.AddAttributes(resultAttributes)>
1494 @if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl))
1495 {
1496 <button type="button" class="search__groups-btn dw-mod js-search-groups-btn">@Translate("All")</button>
1497 <ul class="dropdown dropdown--absolute-position dw-mod search__groups-results js-search-groups-list"></ul>
1498 }
1499
1500 <input type="text" class="search__field dw-mod js-search-field" placeholder="@settings.Placeholder" value="@searchValue">
1501
1502 <div class="dropdown dropdown--absolute-position search__results dw-mod js-search-results @(settings.SecondSearchData != null ? "search__results--combined" : "")">
1503 @if (settings.SecondSearchData != null)
1504 {
1505 <div class="search__column search__column--products dw-mod">
1506 <div class="search__column-header dw-mod">@Translate("Products")</div>
1507 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul>
1508 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl))
1509 {
1510 @Render(new Link {
1511 Title = Translate("View all"),
1512 CssClass = "js-view-all-button u-margin",
1513 Href = settings.SearchData.ResultsPageUrl
1514 });
1515 }
1516 </div>
1517 <div class="search__column search__column--pages dw-mod">
1518 <div class="search__column-header">@Translate("Pages")</div>
1519 <ul class="search__results-list dw-mod js-search-results-second-list" id="@(settings.Id)_SecondResultsList"></ul>
1520 @if (!string.IsNullOrEmpty(settings.SecondSearchData.ResultsPageUrl))
1521 {
1522 @Render(new Link
1523 {
1524 Title = Translate("View all"),
1525 CssClass = "js-view-all-button u-margin",
1526 Href = settings.SecondSearchData.ResultsPageUrl
1527 });
1528 }
1529 </div>
1530 }
1531 else
1532 {
1533 <div class="search__column search__column--only dw-mod">
1534 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul>
1535 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl))
1536 {
1537 @Render(new Link {
1538 Title = Translate("View all"),
1539 CssClass = "js-view-all-button u-margin",
1540 Href = settings.SearchData.ResultsPageUrl
1541 });
1542 }
1543 </div>
1544 }
1545 </div>
1546
1547 @if (settings.SearchButton != null)
1548 {
1549 settings.SearchButton.CssClass += " search__btn js-search-btn";
1550 if (settings.RenderDefaultSearchIcon)
1551 {
1552 settings.SearchButton.Icon = new Icon { Name = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue };
1553 }
1554 @Render(settings.SearchButton);
1555 }
1556 </div>
1557 }
1558 @using System.Reflection
1559 @using Dynamicweb.Rapido.Blocks.Components.General
1560 @using Dynamicweb.Rapido.Blocks.Components
1561
1562
1563 @* Component *@
1564
1565 @helper RenderSelectField(SelectField settings)
1566 {
1567 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1568 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1569 {
1570 settings.Id = Guid.NewGuid().ToString("N");
1571 }
1572
1573 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
1574 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1575 {
1576 <div class="u-full-width">
1577 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1578 @if (settings.Link != null) {
1579 <div class="u-pull--right">
1580 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1581 @Render(settings.Link)
1582 </div>
1583 }
1584 </div>
1585 }
1586
1587 @if (!string.IsNullOrEmpty(settings.HelpText))
1588 {
1589 <small class="form__help-text">@settings.HelpText</small>
1590 }
1591
1592 @if (settings.ActionButton != null)
1593 {
1594 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1595 <div class="form__field-combi u-no-margin dw-mod">
1596 @RenderSelectBase(settings)
1597 @Render(settings.ActionButton)
1598 </div>
1599 }
1600 else
1601 {
1602 @RenderSelectBase(settings)
1603 }
1604
1605 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1606 </div>
1607 }
1608
1609 @helper RenderSelectBase(SelectField settings)
1610 {
1611 var attributes = new Dictionary<string, string>();
1612
1613 /*base settings*/
1614 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1615 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1616 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1617 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1618 if (settings.Required) { attributes.Add("required", "true"); }
1619 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1620 /*end*/
1621
1622 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1623
1624 <select @ComponentMethods.AddAttributes(resultAttributes) class="u-full-width @settings.CssClass dw-mod">
1625 @if (settings.Default != null)
1626 {
1627 @Render(settings.Default)
1628 }
1629
1630 @foreach (var item in settings.Options)
1631 {
1632 if (settings.Value != null) {
1633 item.Checked = item.Value == settings.Value;
1634 }
1635 @Render(item)
1636 }
1637 </select>
1638 }
1639 @using System.Reflection
1640 @using Dynamicweb.Rapido.Blocks.Components.General
1641 @using Dynamicweb.Rapido.Blocks.Components
1642
1643 @* Component *@
1644
1645 @helper RenderRadioButtonField(RadioButtonField settings)
1646 {
1647 var attributes = new Dictionary<string, string>();
1648 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1649 {
1650 settings.Id = Guid.NewGuid().ToString("N");
1651 }
1652
1653 /*base settings*/
1654 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1655 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1656 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1657 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1658 if (settings.Required) { attributes.Add("required", "true"); }
1659 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1660 /*end*/
1661
1662 attributes.Add("type", "radio");
1663 if (settings.Checked) { attributes.Add("checked", "true"); }
1664 settings.CssClass = "form__control " + settings.CssClass;
1665 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1666
1667 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1668
1669 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1670 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1671 @if (!string.IsNullOrEmpty(settings.Label))
1672 {
1673 <label for="@settings.Id" class="dw-mod">@settings.Label</label>
1674 }
1675 @if (!string.IsNullOrEmpty(settings.HelpText))
1676 {
1677 <small class="form__help-text">@settings.HelpText</small>
1678 }
1679 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1680 </div>
1681 }
1682 @using System.Reflection
1683 @using Dynamicweb.Rapido.Blocks.Components.General
1684 @using Dynamicweb.Rapido.Blocks.Components
1685
1686
1687 @* Component *@
1688
1689 @helper RenderRadioButtonListField(RadioButtonListField settings)
1690 {
1691 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1692
1693 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1694 @if (!string.IsNullOrEmpty(settings.Label))
1695 {
1696 <label>@settings.Label</label>
1697 }
1698 @if (!string.IsNullOrEmpty(settings.HelpText))
1699 {
1700 <small class="form__help-text">@settings.HelpText</small>
1701 }
1702
1703 @foreach (var item in settings.Options)
1704 {
1705 if (settings.Required)
1706 {
1707 item.Required = true;
1708 }
1709 if (settings.Disabled)
1710 {
1711 item.Disabled = true;
1712 }
1713 if (!string.IsNullOrEmpty(settings.Name))
1714 {
1715 item.Name = settings.Name;
1716 }
1717 if (settings.Value != null && settings.Value == item.Value)
1718 {
1719 item.Checked = true;
1720 }
1721 if (!string.IsNullOrEmpty(settings.OnClick))
1722 {
1723 item.OnClick += settings.OnClick;
1724 }
1725 if (!string.IsNullOrEmpty(settings.OnChange))
1726 {
1727 item.OnChange += settings.OnChange;
1728 }
1729 if (!string.IsNullOrEmpty(settings.CssClass))
1730 {
1731 item.CssClass += settings.CssClass;
1732 }
1733 @Render(item)
1734 }
1735
1736 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1737 </div>
1738 }
1739 @using System.Reflection
1740 @using Dynamicweb.Rapido.Blocks.Components.General
1741 @using Dynamicweb.Rapido.Blocks.Components
1742
1743
1744 @* Component *@
1745
1746 @helper RenderNotificationMessage(NotificationMessage settings)
1747 {
1748 if (!string.IsNullOrEmpty(settings.Message))
1749 {
1750 var attributes = new Dictionary<string, string>();
1751 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1752
1753 string messageTypeClass = Enum.GetName(typeof(NotificationMessageType), settings.MessageType).ToLower();
1754 string messageLayoutClass = Enum.GetName(typeof(NotificationMessageLayout), settings.MessageLayout).ToLower();
1755 string minHeightClass = settings.Icon != null ? "u-min-h70px" : "";
1756
1757 <div class="notification-message-@messageTypeClass notification-message-@messageLayoutClass @messageLayoutClass @minHeightClass @settings.CssClass u-full-width dw-mod" @ComponentMethods.AddAttributes(attributes)>
1758 @if (settings.Icon != null) {
1759 settings.Icon.Label = !string.IsNullOrEmpty(settings.Icon.Label) ? settings.Message + settings.Icon.Label : settings.Message;
1760 @Render(settings.Icon)
1761 } else {
1762 @settings.Message
1763 }
1764 </div>
1765 }
1766 }
1767 @using Dynamicweb.Rapido.Blocks.Components.General
1768
1769
1770 @* Component *@
1771
1772 @helper RenderHandlebarsRoot(HandlebarsRoot settings) {
1773 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : "";
1774
1775 <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>
1776 @if (settings.SubBlocks != null) {
1777 @RenderBlockList(settings.SubBlocks)
1778 }
1779 </div>
1780 }
1781 @using System.Reflection
1782 @using Dynamicweb.Rapido.Blocks.Components.General
1783 @using Dynamicweb.Rapido.Blocks.Components
1784 @using System.Text.RegularExpressions
1785
1786
1787 @* Component *@
1788
1789 @helper RenderSticker(Sticker settings) {
1790 if (!String.IsNullOrEmpty(settings.Title)) {
1791 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : "";
1792 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : "";
1793
1794 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
1795 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) {
1796 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : "";
1797 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : "";
1798 optionalAttributes.Add("style", styleTag);
1799 }
1800
1801 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div>
1802 }
1803 }
1804
1805 @using System.Reflection
1806 @using Dynamicweb.Rapido.Blocks.Components.General
1807 @using Dynamicweb.Rapido.Blocks.Components
1808
1809
1810 @* Component *@
1811
1812 @helper RenderStickersCollection(StickersCollection settings)
1813 {
1814 if (settings.Stickers.Count > 0)
1815 {
1816 string position = "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
1817
1818 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1819 @foreach (Sticker sticker in settings.Stickers)
1820 {
1821 @Render(sticker)
1822 }
1823 </div>
1824 }
1825 }
1826
1827 @using Dynamicweb.Rapido.Blocks.Components.General
1828
1829
1830 @* Component *@
1831
1832 @helper RenderForm(Form settings) {
1833 if (settings != null)
1834 {
1835 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
1836 if (!string.IsNullOrEmpty(settings.Action)) { optionalAttributes.Add("action", settings.Action); };
1837 if (!string.IsNullOrEmpty(settings.Name)) { optionalAttributes.Add("name", settings.Name); };
1838 if (!string.IsNullOrEmpty(settings.OnSubmit)) { optionalAttributes.Add("onsubmit", settings.OnSubmit); };
1839 var enctypes = new Dictionary<string, string>
1840 {
1841 { "multipart", "multipart/form-data" },
1842 { "text", "text/plain" },
1843 { "application", "application/x-www-form-urlencoded" }
1844 };
1845 if (settings.Enctype != FormEnctype.none) { optionalAttributes.Add("enctype", enctypes[Enum.GetName(typeof(FormEnctype), settings.Enctype).ToLower()]); };
1846 optionalAttributes.Add("method", settings.Method.ToString());
1847
1848 if (!string.IsNullOrEmpty(settings.FormStartMarkup))
1849 {
1850 @settings.FormStartMarkup
1851 }
1852 else
1853 {
1854 @:<form class="@settings.CssClass u-no-margin dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1855 }
1856
1857 foreach (var field in settings.GetFields())
1858 {
1859 <div class="hidden">
1860
1861 </div>
1862 @Render(field)
1863 }
1864
1865 @:</form>
1866 }
1867 }
1868 @using System.Reflection
1869 @using Dynamicweb.Rapido.Blocks.Components.General
1870 @using Dynamicweb.Rapido.Blocks.Components
1871
1872
1873 @* Component *@
1874
1875 @helper RenderText(Text settings)
1876 {
1877 @settings.Content
1878 }
1879 @using System.Reflection
1880 @using Dynamicweb.Rapido.Blocks.Components.General
1881 @using Dynamicweb.Rapido.Blocks.Components
1882
1883
1884 @* Component *@
1885
1886 @helper RenderContentModule(ContentModule settings) {
1887 if (!string.IsNullOrEmpty(settings.Content))
1888 {
1889 @settings.Content
1890 }
1891 }
1892 @using System.Reflection
1893 @using Dynamicweb.Rapido.Blocks.Components.General
1894 @using Dynamicweb.Rapido.Blocks.Components
1895
1896
1897 @* Component *@
1898
1899 @helper RenderModal(Modal settings) {
1900 if (settings != null)
1901 {
1902 string modalId = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N");
1903
1904 string onchange = !string.IsNullOrEmpty(settings.OnClose) ? "onchange=\"if(!this.checked){" + settings.OnClose + "}\"" : "";
1905
1906 <input type="checkbox" id="@(modalId)ModalTrigger" class="modal-trigger" @onchange />
1907
1908 <div class="modal-container">
1909 @if (!settings.DisableDarkOverlay)
1910 {
1911 <label for="@(modalId)ModalTrigger" id="@(modalId)ModalOverlay" class="modal-overlay"></label>
1912 }
1913 <div class="modal modal--@settings.Width.ToString().ToLower() modal-height--@settings.Height.ToString().ToLower()" id="@(modalId)Modal">
1914 @if (settings.Heading != null)
1915 {
1916 if (!string.IsNullOrEmpty(settings.Heading.Title))
1917 {
1918 <div class="modal__header">
1919 @Render(settings.Heading)
1920 </div>
1921 }
1922 }
1923 <div class="modal__body @(settings.Width.ToString().ToLower() == "full" ? "modal__body--full" : "")">
1924 @if (!string.IsNullOrEmpty(settings.BodyText))
1925 {
1926 @settings.BodyText
1927 }
1928 @if (settings.BodyTemplate != null)
1929 {
1930 @settings.BodyTemplate
1931 }
1932 @{
1933 var actions = settings.GetActions();
1934 }
1935 </div>
1936 @if (actions.Length > 0)
1937 {
1938 <div class="modal__footer">
1939 @foreach (var action in actions)
1940 {
1941 if (Pageview.Device.ToString() != "Mobile") {
1942 action.CssClass += " u-no-margin";
1943 } else {
1944 action.CssClass += " u-full-width u-margin-bottom";
1945 }
1946
1947 @Render(action)
1948 }
1949 </div>
1950 }
1951 <label class="modal__close-btn" for="@(modalId)ModalTrigger"></label>
1952 </div>
1953 </div>
1954 }
1955 }
1956 @using Dynamicweb.Rapido.Blocks.Components.General
1957
1958 @* Component *@
1959
1960 @helper RenderMediaListItem(MediaListItem settings)
1961 {
1962 <div class="media-list-item @settings.CssClass dw-mod" @(!string.IsNullOrEmpty(settings.Id) ? "id=\"" + settings.Id + "\"" : "")>
1963 @if (!string.IsNullOrEmpty(settings.Label))
1964 {
1965 if (!string.IsNullOrEmpty(settings.Link))
1966 {
1967 @Render(new Link
1968 {
1969 Href = settings.Link,
1970 CssClass = "media-list-item__sticker dw-mod",
1971 ButtonLayout = ButtonLayout.None,
1972 Title = settings.Label,
1973 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : ""
1974 })
1975 }
1976 else if (!string.IsNullOrEmpty(settings.OnClick))
1977 {
1978 <span class="media-list-item__sticker dw-mod" onclick="@(settings.OnClick)">
1979 <span class="u-uppercase">@settings.Label</span>
1980 </span>
1981 }
1982 else
1983 {
1984 <span class="media-list-item__sticker media-list-item__sticker--no-link dw-mod">
1985 <span class="u-uppercase">@settings.Label</span>
1986 </span>
1987 }
1988 }
1989 <div class="media-list-item__wrap">
1990 <div class="media-list-item__info dw-mod">
1991 <div class="media-list-item__header dw-mod">
1992 @if (!string.IsNullOrEmpty(settings.Title))
1993 {
1994 if (!string.IsNullOrEmpty(settings.Link))
1995 {
1996 @Render(new Link
1997 {
1998 Href = settings.Link,
1999 CssClass = "media-list-item__name dw-mod",
2000 ButtonLayout = ButtonLayout.None,
2001 Title = settings.Title,
2002 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : ""
2003 })
2004 }
2005 else if (!string.IsNullOrEmpty(settings.OnClick))
2006 {
2007 <span class="media-list-item__name dw-mod" onclick="@(settings.OnClick)">@settings.Title</span>
2008 }
2009 else
2010 {
2011 <span class="media-list-item__name media-list-item__name--no-link dw-mod">@settings.Title</span>
2012 }
2013 }
2014
2015 @if (!string.IsNullOrEmpty(settings.Status))
2016 {
2017 <div class="media-list-item__state dw-mod">@settings.Status</div>
2018 }
2019 </div>
2020 @{
2021 settings.InfoTable.CssClass += " media-list-item__parameters-table";
2022 }
2023
2024 @Render(settings.InfoTable)
2025 </div>
2026 <div class="media-list-item__actions dw-mod">
2027 <div class="media-list-item__actions-list dw-mod">
2028 @{
2029 var actions = settings.GetActions();
2030
2031 foreach (ButtonBase action in actions)
2032 {
2033 action.ButtonLayout = ButtonLayout.None;
2034 action.CssClass += " media-list-item__action link";
2035
2036 @Render(action)
2037 }
2038 }
2039 </div>
2040
2041 @if (settings.SelectButton != null && !string.IsNullOrEmpty(settings.SelectButton.Title))
2042 {
2043 settings.SelectButton.CssClass += " u-no-margin";
2044
2045 <div class="media-list-item__action-button">
2046 @Render(settings.SelectButton)
2047 </div>
2048 }
2049 </div>
2050 </div>
2051 </div>
2052 }
2053 @using Dynamicweb.Rapido.Blocks.Components.General
2054 @using Dynamicweb.Rapido.Blocks.Components
2055
2056 @helper RenderTable(Table settings)
2057 {
2058 Dictionary<string, string> attributes = new Dictionary<string, string>();
2059 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2060
2061 var enumToClasses = new Dictionary<TableDesign, string>
2062 {
2063 { TableDesign.Clean, "table--clean" },
2064 { TableDesign.Bordered, "table--bordered" },
2065 { TableDesign.Striped, "table--striped" },
2066 { TableDesign.Hover, "table--hover" },
2067 { TableDesign.Compact, "table--compact" },
2068 { TableDesign.Condensed, "table--condensed" },
2069 { TableDesign.NoTopBorder, "table--no-top-border" }
2070 };
2071 string tableDesignClass = "";
2072 if (settings.Design != TableDesign.None)
2073 {
2074 tableDesignClass = enumToClasses[settings.Design];
2075 }
2076
2077 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableDesign.None) { attributes.Add("class", "table " + tableDesignClass + " " + settings.CssClass + " dw-mod"); }
2078
2079 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2080
2081 <table @ComponentMethods.AddAttributes(resultAttributes)>
2082 @if (settings.Header != null)
2083 {
2084 <thead>
2085 @Render(settings.Header)
2086 </thead>
2087 }
2088 <tbody>
2089 @foreach (var row in settings.Rows)
2090 {
2091 @Render(row)
2092 }
2093 </tbody>
2094 @if (settings.Footer != null)
2095 {
2096 <tfoot>
2097 @Render(settings.Footer)
2098 </tfoot>
2099 }
2100 </table>
2101 }
2102 @using Dynamicweb.Rapido.Blocks.Components.General
2103 @using Dynamicweb.Rapido.Blocks.Components
2104
2105 @helper RenderTableRow(TableRow settings)
2106 {
2107 Dictionary<string, string> attributes = new Dictionary<string, string>();
2108 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2109
2110 var enumToClasses = new Dictionary<TableRowDesign, string>
2111 {
2112 { TableRowDesign.NoBorder, "table__row--no-border" },
2113 { TableRowDesign.Border, "table__row--border" },
2114 { TableRowDesign.TopBorder, "table__row--top-line" },
2115 { TableRowDesign.BottomBorder, "table__row--bottom-line" },
2116 { TableRowDesign.Solid, "table__row--solid" }
2117 };
2118
2119 string tableRowDesignClass = "";
2120 if (settings.Design != TableRowDesign.None)
2121 {
2122 tableRowDesignClass = enumToClasses[settings.Design];
2123 }
2124
2125 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableRowDesign.None) { attributes.Add("class", "table__row " + tableRowDesignClass + " " + settings.CssClass + " dw-mod"); }
2126
2127 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2128
2129 <tr @ComponentMethods.AddAttributes(resultAttributes)>
2130 @foreach (var cell in settings.Cells)
2131 {
2132 if (settings.IsHeaderRow)
2133 {
2134 cell.IsHeader = true;
2135 }
2136 @Render(cell)
2137 }
2138 </tr>
2139 }
2140 @using Dynamicweb.Rapido.Blocks.Components.General
2141 @using Dynamicweb.Rapido.Blocks.Components
2142 @using Dynamicweb.Core
2143
2144 @helper RenderTableCell(TableCell settings)
2145 {
2146 Dictionary<string, string> attributes = new Dictionary<string, string>();
2147 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2148 if (settings.Colspan != 0) { attributes.Add("colspan", Converter.ToString(settings.Colspan)); }
2149 if (settings.Rowspan != 0) { attributes.Add("rowspan", Converter.ToString(settings.Rowspan)); }
2150 if (!string.IsNullOrEmpty(settings.CssClass)) { attributes.Add("class", settings.CssClass + " dw-mod"); }
2151
2152 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2153
2154 string tagName = settings.IsHeader ? "th" : "td";
2155
2156 @("<" + tagName + " " + ComponentMethods.AddAttributes(resultAttributes) + ">")
2157 @settings.Content
2158 @("</" + tagName + ">");
2159 }
2160 @using System.Linq
2161 @using Dynamicweb.Rapido.Blocks.Components.General
2162
2163 @* Component *@
2164
2165 @helper RenderPagination(Dynamicweb.Rapido.Blocks.Components.General.Pagination settings)
2166 {
2167 var pageNumberQueryStringName = Dynamicweb.Rapido.Services.Pagination.GetPageNumberQueryStringName(settings); // Get the proper 'page number' query string parameter
2168 var queryParameters = Dynamicweb.Rapido.Services.Url.GetQueryParameters(pageNumberQueryStringName); // Get the NameValueCollection from the querystring
2169
2170 if (settings.NumberOfPages > 1)
2171 {
2172 string url = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + "/Default.aspx";
2173 string ariaLabel = !string.IsNullOrWhiteSpace(settings.AriaLabel) ? settings.AriaLabel : Translate("Page navigation");
2174 Dictionary<string, int> startAndEndPageNumber = Dynamicweb.Rapido.Services.Pagination.GetStartAndEndPageNumber(settings);
2175
2176 <div class="pager u-margin-top dw-mod @settings.CssClass" aria-label="@ariaLabel">
2177 @if (settings.ShowPagingInfo)
2178 {
2179 <div class="pager__info dw-mod">
2180 @Translate("Page") @settings.CurrentPageNumber @Translate("of") @settings.NumberOfPages
2181 </div>
2182 }
2183 <ul class="pager__list dw-mod">
2184 @if (!string.IsNullOrWhiteSpace(settings.FirstPageUrl) && settings.ShowFirstAndLastControls)
2185 {
2186 @Render(new PaginationItem { Link = settings.FirstPageUrl, Icon = settings.FirstIcon })
2187 }
2188 @if (!string.IsNullOrWhiteSpace(settings.PreviousPageUrl) && settings.ShowNextAndPrevControls)
2189 {
2190 @Render(new PaginationItem { Link = settings.PreviousPageUrl, Icon = settings.PrevIcon })
2191 }
2192 @if (settings.GetPages().Any())
2193 {
2194 foreach (var page in settings.GetPages())
2195 {
2196 @Render(page)
2197 }
2198 }
2199 else
2200 {
2201 for (var page = startAndEndPageNumber["StartPage"]; page <= startAndEndPageNumber["EndPage"]; page++)
2202 {
2203 queryParameters = Dynamicweb.Rapido.Services.Url.UpdateQueryStringParameter(queryParameters, pageNumberQueryStringName, page.ToString());
2204 @Render(new PaginationItem { Label = page.ToString(), Link = Dynamicweb.Rapido.Services.Url.BuildUri(url, queryParameters).PathAndQuery, IsActive = (settings.CurrentPageNumber == page) });
2205 }
2206 }
2207 @if (!string.IsNullOrWhiteSpace(settings.NextPageUrl) && settings.ShowNextAndPrevControls)
2208 {
2209 @Render(new PaginationItem { Link = settings.NextPageUrl, Icon = settings.NextIcon })
2210 }
2211 @if (!string.IsNullOrWhiteSpace(settings.LastPageUrl) && settings.ShowFirstAndLastControls)
2212 {
2213 @Render(new PaginationItem { Link = settings.LastPageUrl, Icon = settings.LastIcon })
2214 }
2215 </ul>
2216 </div>
2217 }
2218 }
2219
2220 @helper RenderPaginationItem(PaginationItem settings)
2221 {
2222 if (settings.Icon == null)
2223 {
2224 settings.Icon = new Icon();
2225 }
2226
2227 settings.Icon.Label = settings.Label;
2228 <li class="pager__btn dw-mod">
2229 @if (settings.IsActive)
2230 {
2231 <span class="pager__num pager__num--current dw-mod">
2232 @Render(settings.Icon)
2233 </span>
2234 }
2235 else
2236 {
2237 <a href="@settings.Link" class="pager__num dw-mod">
2238 @Render(settings.Icon)
2239 </a>
2240 }
2241 </li>
2242 }
2243
2244
2245 @using Dynamicweb.Rapido.Blocks.Components.General
2246 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
2247
2248
2249 @functions {
2250
2251 public class ArticleListPopularItems : ComponentBase
2252 {
2253 public string Category { get; set; }
2254
2255 }
2256
2257
2258 }
2259
2260
2261
2262 @using Dynamicweb.Frontend
2263 @using System.Reflection
2264 @using Dynamicweb.Content.Items
2265 @using System.Web.UI.HtmlControls
2266 @using Dynamicweb.Rapido.Blocks.Components
2267 @using Dynamicweb.Rapido.Blocks
2268 @using Dynamicweb.Rapido.Blocks.Components.Articles
2269
2270 @* Components for the articles *@
2271 @using System.Reflection
2272 @using Dynamicweb.Rapido.Blocks.Components.Articles
2273
2274
2275 @* Component for the articles *@
2276
2277 @helper RenderArticleBanner(dynamic settings) {
2278 string filterClasses = "image-filter image-filter--darken";
2279 settings.Layout = ArticleHeaderLayout.Banner;
2280
2281 if (settings.Image != null)
2282 {
2283 if (settings.Image.Path != null)
2284 {
2285 <section class="multiple-paragraphs-container u-color-light paragraph-container--full-width">
2286 <div class="background-image @filterClasses dw-mod">
2287 <div class="background-image__wrapper @filterClasses dw-mod">
2288 @{
2289 settings.Image.CssClass += "background-image__cover dw-mod";
2290 }
2291 @Render(settings.Image)
2292 </div>
2293 </div>
2294 <div class="center-container dw-mod">
2295 <div class="grid">
2296 <div class="grid__col-md-8 grid__col-xs-12 paragraph-container paragraph-container--height-lg">
2297 <div class="u-left-middle">
2298 <div>
2299 @if (!String.IsNullOrEmpty(settings.Heading))
2300 {
2301 <h1 class="article__header article__header--giant dw-mod" style="color: @settings.TextColor">@settings.Heading</h1>
2302 }
2303 @if (!String.IsNullOrEmpty(settings.Subheading))
2304 {
2305 <div class="article__leadtext dw-mod" style="color: @settings.TextColor">@settings.Subheading</div>
2306 }
2307 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
2308 {
2309 <small class="article__post-info u-margin-bottom--lg dw-mod" style="color: @settings.TextColor">@settings.Author @settings.Date</small>
2310 }
2311 @if (!String.IsNullOrEmpty(settings.Link)) {
2312 <div class="grid__cell">
2313 @Render(new Link { Href = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout })
2314 </div>
2315 }
2316 </div>
2317 </div>
2318 </div>
2319 @if (settings.ExternalParagraphId != 0)
2320 {
2321 <div class="grid__col-md-4 grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-auto dw-mod">
2322 <div class="u-color-light-gray--bg u-color-dark dw-mod">
2323 @RenderParagraphContent(settings.ExternalParagraphId)
2324 </div>
2325 </div>
2326 }
2327
2328 </div>
2329 </div>
2330 </section>
2331 if (!String.IsNullOrEmpty(settings.Image.Caption)) {
2332 <div class="image-caption dw-mod">@settings.Image.Caption</div>
2333 }
2334 }
2335 else
2336 {
2337 settings.Layout = ArticleHeaderLayout.Clean;
2338 @RenderArticleCleanHeader(settings);
2339 }
2340 }
2341 else
2342 {
2343 settings.Layout = ArticleHeaderLayout.Clean;
2344 @RenderArticleCleanHeader(settings);
2345 }
2346 }
2347 @using System.Reflection
2348 @using Dynamicweb.Rapido.Blocks.Components
2349 @using Dynamicweb.Rapido.Blocks.Components.General
2350 @using Dynamicweb.Rapido.Blocks.Components.Articles
2351 @using Dynamicweb.Rapido.Blocks
2352
2353
2354 @* Component for the articles *@
2355
2356 @helper RenderArticleHeader(ArticleHeader settings) {
2357 dynamic[] methodParameters = new dynamic[1];
2358 methodParameters[0] = settings;
2359 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleHeaderCustom");
2360
2361 if (customMethod != null)
2362 {
2363 @customMethod.Invoke(this, methodParameters).ToString();
2364 } else {
2365 switch (settings.Layout)
2366 {
2367 case ArticleHeaderLayout.Clean:
2368 @RenderArticleCleanHeader(settings);
2369 break;
2370 case ArticleHeaderLayout.Split:
2371 @RenderArticleSplitHeader(settings);
2372 break;
2373 case ArticleHeaderLayout.Banner:
2374 @RenderArticleBannerHeader(settings);
2375 break;
2376 case ArticleHeaderLayout.Overlay:
2377 @RenderArticleOverlayHeader(settings);
2378 break;
2379 default:
2380 @RenderArticleCleanHeader(settings);
2381 break;
2382 }
2383 }
2384 }
2385
2386 @helper RenderArticleCleanHeader(ArticleHeader settings) {
2387 dynamic[] methodParameters = new dynamic[1];
2388 methodParameters[0] = settings;
2389 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleCleanHeaderCustom");
2390
2391 if (customMethod != null)
2392 {
2393 @customMethod.Invoke(this, methodParameters).ToString();
2394 }
2395 else
2396 {
2397 string contentColumns = settings.TextLayout != ArticleHeaderTextLayout.Full ? "8" : "12";
2398
2399 <div class="grid grid--align-content-start grid--justify-start">
2400 <div class="grid__col-md-@contentColumns grid__col-sm-12 u-padding--lg dw-mod">
2401 @if (!String.IsNullOrEmpty(settings.Category) || !String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date) || settings.RatingOutOf != 0)
2402 {
2403 <div class="u-border-bottom u-padding-bottom">
2404 @if (!String.IsNullOrEmpty(settings.Category))
2405 {
2406 <div class="u-pull--left">
2407 <div class="article__category dw-mod" style="color: @settings.CategoryColor">@settings.Category</div>
2408 </div>
2409 }
2410 <div class="u-pull--right">
2411 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
2412 {
2413 <small class="article__post-info dw-mod">@settings.Author @settings.Date</small>
2414 }
2415 @if (settings.RatingOutOf != 0)
2416 {
2417 @Render(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf })
2418 }
2419 </div>
2420 </div>
2421 }
2422
2423 <div class="grid__cell">
2424 @if (!String.IsNullOrEmpty(settings.Heading))
2425 {
2426 <h1 class="article__header test article__header--giant dw-mod">@settings.Heading </h1>
2427
2428 }
2429 @if (settings.Image != null)
2430 {
2431 if (settings.Image.Path != null)
2432 {
2433 <div class="u-padding-bottom--lg">
2434
2435 @Render(settings.Image)
2436
2437 </div>
2438 }
2439 }
2440 @if (!String.IsNullOrEmpty(settings.Subheading))
2441 {
2442 <div class="article__leadtext dw-mod">@settings.Subheading</div>
2443 }
2444 @if (!String.IsNullOrEmpty(settings.Link))
2445 {
2446 <div class="grid__cell">
2447 @Render(new Link { Href = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout })
2448 </div>
2449 }
2450 </div>
2451 </div>
2452 @if (settings.ExternalParagraphId != 0)
2453 {
2454 <div class="grid__col-md-4 grid__col-sm-12 u-padding--lg u-color-light-gray--bg dw-mod">
2455 @RenderParagraphContent(settings.ExternalParagraphId)
2456 </div>
2457 }
2458 </div>
2459 }
2460 }
2461
2462 @helper RenderArticleSplitHeader(ArticleHeader settings) {
2463 dynamic[] methodParameters = new dynamic[1];
2464 methodParameters[0] = settings;
2465 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleSplitHeaderCustom");
2466
2467 if (customMethod != null)
2468 {
2469 @customMethod.Invoke(this, methodParameters).ToString();
2470 }
2471 else
2472 {
2473 string headerColumnWidth = settings.ExternalParagraphId != 0 ? "4" : "6";
2474
2475 if (settings.Image != null)
2476 {
2477 if (settings.Image.Path != null)
2478 {
2479 <section class="multiple-paragraphs-container paragraph-container--full-width">
2480 <div class="grid">
2481 <div class="grid__col-md-@headerColumnWidth grid__col-sm-12 grid__col-xs-12 paragraph-container paragraph-container--height-xl dw-mod">
2482 <div class="u-left-middle u-padding--lg">
2483 <div>
2484 @if (!String.IsNullOrEmpty(settings.Category))
2485 {
2486 <div class="article__category dw-mod" style="color: @settings.CategoryColor">@settings.Category</div>
2487 }
2488 @if (!String.IsNullOrEmpty(settings.Heading))
2489 {
2490 <h1 class="article__header article__header--giant dw-mod">@settings.Heading</h1>
2491 }
2492 @if (!String.IsNullOrEmpty(settings.Subheading))
2493 {
2494 <div class="article__leadtext dw-mod">@settings.Subheading</div>
2495 }
2496 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
2497 {
2498 <small class="article__post-info u-pull--left dw-mod">@settings.Author @settings.Date</small>
2499 }
2500 @if (settings.RatingOutOf != 0)
2501 {
2502 <div class="u-pull--right">
2503 @Render(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf })
2504 </div>
2505 }
2506 @if (!String.IsNullOrEmpty(settings.Link)) {
2507 <div class="u-full-width u-pull--left u-margin-top">
2508 @Render(new Link { Href = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout })
2509 </div>
2510 }
2511 </div>
2512 </div>
2513 </div>
2514 <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&height=1100&crop=0&DoNotUpscale=true&Quality=99&Format=webP&image=@settings.Image.Path); background-position: center center; background-size: cover;"></div>
2515 @if (settings.ExternalParagraphId != 0)
2516 {
2517 <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">
2518 @RenderParagraphContent(settings.ExternalParagraphId)
2519 </div>
2520 }
2521 </div>
2522 </section>
2523 }
2524 }
2525 else
2526 {
2527 @RenderArticleCleanHeader(settings);
2528 }
2529 }
2530 }
2531
2532 @helper RenderArticleOverlayHeader(ArticleHeader settings) {
2533 dynamic[] methodParameters = new dynamic[1];
2534 methodParameters[0] = settings;
2535 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleOverlayHeaderCustom");
2536
2537 if (customMethod != null)
2538 {
2539 @customMethod.Invoke(this, methodParameters).ToString();
2540 }
2541 else
2542 {
2543 string contentColumns = settings.TextLayout != ArticleHeaderTextLayout.Full ? "8" : "12";
2544 string contentAlignment = settings.TextLayout == ArticleHeaderTextLayout.Center ? "grid--justify-center" : "";
2545
2546 if (settings.Image != null)
2547 {
2548 if (settings.Image.Path != null)
2549 {
2550 if (settings.ExternalParagraphId == 0)
2551 {
2552 <section class="multiple-paragraphs-container u-color-light paragraph-container--full-width">
2553 <div class="background-image image-filter image-filter--darken dw-mod">
2554 <div class="background-image__wrapper image-filter image-filter--darken dw-mod">
2555 @{
2556 settings.Image.CssClass += "background-image__cover dw-mod";
2557 }
2558 @Render(settings.Image)
2559 </div>
2560 </div>
2561 <div class="center-container dw-mod">
2562 <div class="grid @contentAlignment">
2563 <div class="grid__col-md-@contentColumns grid__col-xs-12 paragraph-container paragraph-container--height-xl u-no-padding dw-mod">
2564 @if (!String.IsNullOrEmpty(settings.Heading))
2565 {
2566 <h1 class="article__header article__header--giant u-padding-top--lg dw-mod" style="color: @settings.TextColor">@settings.Heading</h1>
2567 }
2568 @if (!String.IsNullOrEmpty(settings.Subheading))
2569 {
2570 <div class="article__leadtext dw-mod" style="color: @settings.TextColor">@settings.Subheading</div>
2571 }
2572 <div class="u-margin-top">
2573 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
2574 {
2575 <small class="article__post-info u-pull--left dw-mod" style="color: @settings.TextColor">@settings.Author @settings.Date</small>
2576 }
2577 @if (settings.RatingOutOf != 0)
2578 {
2579 <div class="u-pull--right">
2580 @Render(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf })
2581 </div>
2582 }
2583 </div>
2584 @if (!String.IsNullOrEmpty(settings.Link))
2585 {
2586 <div class="grid__cell">
2587 @Render(new Link { Href = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout })
2588 </div>
2589 }
2590 </div>
2591 </div>
2592 </div>
2593 </section>
2594 }
2595 else
2596 {
2597 @RenderArticleBanner(settings);
2598 }
2599 }
2600 }
2601 else
2602 {
2603 @RenderArticleCleanHeader(settings);
2604 }
2605 }
2606 }
2607
2608 @helper RenderArticleBannerHeader(dynamic settings) {
2609 dynamic[] methodParameters = new dynamic[1];
2610 methodParameters[0] = settings;
2611 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleBannerHeaderCustom");
2612
2613 if (customMethod != null)
2614 {
2615 @customMethod.Invoke(this, methodParameters).ToString();
2616 }
2617 else
2618 {
2619 @RenderArticleBanner(settings);
2620 }
2621 }
2622 @using System.Reflection
2623 @using System.Text.RegularExpressions;
2624 @using Dynamicweb.Frontend
2625 @using Dynamicweb.Content.Items
2626 @using Dynamicweb.Rapido.Blocks.Components
2627 @using Dynamicweb.Rapido.Blocks.Components.Articles
2628 @using Dynamicweb.Rapido.Blocks
2629
2630 @* Component for the articles *@
2631
2632 @helper RenderArticleBodyRow(ArticleBodyRow settings)
2633 {
2634 string position = settings.TopLayout == "overlay" ? "article__overlay-offset" : "";
2635 string contentAlignment = settings.TextLayout == "center" ? "grid--justify-center" : "";
2636
2637 <div class="grid grid--align-content-start @contentAlignment @position dw-mod">
2638 @RenderBlockList(settings.SubBlocks)
2639 </div>
2640 }
2641 @using System.Reflection
2642 @using Dynamicweb.Rapido.Blocks.Components
2643 @using Dynamicweb.Rapido.Blocks.Components.General
2644 @using Dynamicweb.Rapido.Blocks.Components.Articles
2645 @using Dynamicweb.Rapido.Blocks
2646
2647 @* Component for the articles *@
2648
2649 @helper RenderArticleImage(ArticleImage settings)
2650 {
2651 if (settings.Image != null)
2652 {
2653 if (settings.Image.Path != null)
2654 {
2655 <div class="u-margin-bottom--lg">
2656 @Render(settings.Image)
2657 </div>
2658 }
2659 }
2660 }
2661 @using System.Reflection
2662 @using Dynamicweb.Rapido.Blocks.Components
2663 @using Dynamicweb.Rapido.Blocks.Components.Articles
2664
2665
2666 @* Component for the articles *@
2667
2668 @helper RenderArticleSubHeader(ArticleSubHeader settings)
2669 {
2670 if (!String.IsNullOrEmpty(settings.Title))
2671 {
2672 <h2 class="article__header">@settings.Title</h2>
2673 }
2674 }
2675 @using System.Reflection
2676 @using Dynamicweb.Rapido.Blocks.Components
2677 @using Dynamicweb.Rapido.Blocks.Components.Articles
2678 @using Dynamicweb.Rapido.Blocks
2679
2680
2681 @* Component for the articles *@
2682
2683 @helper RenderArticleText(ArticleText settings)
2684 {
2685 if (!String.IsNullOrEmpty(settings.Text))
2686 {
2687 string greatTextClass = settings.EnableLargeText == true ? "article__paragraph--great-text" : "";
2688
2689 <div class="article__paragraph @greatTextClass dw-mod">
2690 @settings.Text
2691 </div>
2692 }
2693 }
2694 @using System.Reflection
2695 @using Dynamicweb.Rapido.Blocks.Components
2696 @using Dynamicweb.Rapido.Blocks.Components.Articles
2697 @using Dynamicweb.Rapido.Blocks
2698
2699
2700 @* Component for the articles *@
2701
2702 @helper RenderArticleQuote(ArticleQuote settings)
2703 {
2704 string text = Regex.Replace(settings.Text, "<.*?>", String.Empty);
2705
2706 <div class="grid u-padding-bottom--lg">
2707 @if (settings.Image != null)
2708 {
2709 if (settings.Image.Path != null) {
2710 <div class="grid__col-3">
2711 <div class="grid__cell-img">
2712 @{
2713 settings.Image.Title = !String.IsNullOrEmpty(settings.Image.Title) ? settings.Image.Title : settings.Author;
2714 settings.Image.CssClass += " article__image article__image--ball";
2715 settings.Image.ImageDefault.Width = 200;
2716 settings.Image.ImageDefault.Height = 200;
2717 }
2718 @Render(settings.Image)
2719 </div>
2720 </div>
2721 }
2722 }
2723 <div class="grid__col-auto">
2724 @if (!String.IsNullOrEmpty(settings.Text))
2725 {
2726 <div class="article__quote dw-mod">
2727 <i class="fas fa-quote-right u-margin-bottom--lg"></i>
2728 @settings.Text
2729 <i class="fas fa-quote-right"></i>
2730 </div>
2731 }
2732 @if (!String.IsNullOrEmpty(settings.Author))
2733 {
2734 <div class="article__quote-author dw-mod">
2735 - @settings.Author
2736 </div>
2737 }
2738 </div>
2739 </div>
2740 }
2741 @using System.Reflection
2742 @using Dynamicweb.Rapido.Blocks.Components
2743 @using Dynamicweb.Rapido.Blocks.Components.Articles
2744 @using Dynamicweb.Rapido.Blocks
2745
2746 @* Component for the articles *@
2747
2748 @helper RenderArticleInfoTable(ArticleInfoTable settings)
2749 {
2750 <table class="table table--clean">
2751 @foreach (var row in settings.Rows)
2752 {
2753 string iconColor = row.IconColor != null ? row.IconColor : "u-brand-color-two";
2754
2755 <tr>
2756 @if (!String.IsNullOrEmpty(row.Icon))
2757 {
2758 <td class="u-w32px"><i class="@row.Icon fa-2x @row.IconColor"></i></td>
2759 }
2760 <td class="u-no-margin-on-p-elements">
2761 <div class="u-bold">@row.Title</div>
2762 @if (!String.IsNullOrEmpty(row.SubTitle))
2763 {
2764 if (row.Link == null)
2765 {
2766 <div>@row.SubTitle</div>
2767 }
2768 else
2769 {
2770 <a href="@row.Link" class="u-color-inherit">@row.SubTitle</a>
2771 }
2772 }
2773 </td>
2774 </tr>
2775 }
2776 </table>
2777 }
2778 @using System.Reflection
2779 @using Dynamicweb.Rapido.Blocks.Components
2780 @using Dynamicweb.Rapido.Blocks.Components.General
2781 @using Dynamicweb.Rapido.Blocks.Components.Articles
2782 @using Dynamicweb.Rapido.Blocks
2783
2784 @* Component for the articles *@
2785
2786 @helper RenderArticleGalleryModal(ArticleGalleryModal settings)
2787 {
2788 Modal galleryModal = new Modal
2789 {
2790 Id = "ParagraphGallery",
2791 Width = ModalWidth.Full,
2792 BodyTemplate = RenderArticleGalleryModalContent()
2793 };
2794
2795 @Render(galleryModal)
2796 }
2797
2798 @helper RenderArticleGalleryModalContent() {
2799 <div class="modal__image-min-size-wrapper">
2800 @Render(new Image {
2801 Id = "ParagraphGallery",
2802 Path = "#",
2803 CssClass = "modal--full__img",
2804 DisableLazyLoad = true,
2805 DisableImageEngine = true
2806 })
2807 </div>
2808
2809 <div class="modal__images-counter" id="ParagraphGallery_counter"></div>
2810
2811 @Render(new Button {
2812 Id = "ParagraphGallery_prev",
2813 ButtonType = ButtonType.Button,
2814 ButtonLayout = ButtonLayout.None,
2815 CssClass = "modal__prev-btn",
2816 Icon = new Icon { Prefix = "far", Name = "fa-angle-left", LabelPosition = IconLabelPosition.After },
2817 OnClick = "Gallery.prevImage('ParagraphGallery')"
2818 })
2819
2820 @Render(new Button {
2821 Id = "ParagraphGallery_next",
2822 ButtonType = ButtonType.Button,
2823 ButtonLayout = ButtonLayout.None,
2824 CssClass = "modal__next-btn",
2825 Icon = new Icon { Prefix = "far", Name = "fa-angle-right", LabelPosition = IconLabelPosition.After },
2826 OnClick = "Gallery.nextImage('ParagraphGallery')"
2827 })
2828 }
2829 @using System.Reflection
2830 @using Dynamicweb.Rapido.Blocks.Components
2831 @using Dynamicweb.Rapido.Blocks.Components.Articles
2832 @using Dynamicweb.Rapido.Blocks
2833
2834
2835 @* Component for the articles *@
2836
2837 @helper RenderArticleRelated(ArticleRelated settings)
2838 {
2839 string cardClass = Pageview.Device.ToString() != "Tablet" ? "card u-color-light--bg u-full-height" : "";
2840 string cardFooterClass = Pageview.Device.ToString() != "Tablet" ? "card-footer u-color-light--bg" : "";
2841
2842 <section class="multiple-paragraphs-container u-color-light-gray--bg paragraph-container--full-width">
2843 <div class="center-container dw-mod">
2844 <div class="grid u-padding">
2845 <div class="grid__col-md-12 grid__col-xs-12">
2846 <h2 class="article__header u-no-margin u-margin-top">@settings.Title</h2>
2847 </div>
2848 </div>
2849
2850 <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>
2851
2852 <script id="RelatedSimpleTemplate" type="text/x-template">
2853 {{#.}}
2854 <div class="grid u-padding-bottom--lg">
2855 {{#Cases}}
2856 <div class="grid__col-lg-3 grid__col-sm-6 image-hover--zoom dw-mod">
2857 <a href="{{link}}" class="u-full-height u-color-light--bg u-flex u-flex--column">
2858 {{#if image}}
2859 <div class="u-color-light--bg u-no-padding dw-mod">
2860 <div class="flex-img image-hover__wrapper">
2861 <img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=680&height=314&crop=1&DoNotUpscale=True&Compression=75&image={{image}}" alt="{{title}}" />
2862 </div>
2863 </div>
2864 {{/if}}
2865
2866 <div class="card u-color-light--bg u-full-height dw-mod">
2867 <h3 class="article-list__item-header u-truncate-text dw-mod">{{title}}</h3>
2868 <p class="article__short-summary dw-mod">{{summary}}</p>
2869 </div>
2870 </a>
2871 </div>
2872 {{/Cases}}
2873 </div>
2874 {{/.}}
2875 </script>
2876 </div>
2877 </section>
2878 }
2879 @using System.Reflection
2880 @using Dynamicweb.Rapido.Blocks.Components
2881 @using Dynamicweb.Rapido.Blocks.Components.Articles
2882 @using Dynamicweb.Rapido.Blocks
2883
2884
2885 @* Component for the articles *@
2886
2887 @helper RenderArticleMenu(ArticleMenu settings)
2888 {
2889 if (!String.IsNullOrEmpty(settings.Title)) {
2890 <div class="u-margin u-border-bottom">
2891 <h3 class="u-no-margin">@settings.Title</h3>
2892 </div>
2893 }
2894
2895 <ul class="menu-left u-margin-bottom dw-mod">
2896 @foreach (var item in settings.Items)
2897 {
2898 @Render(item)
2899 }
2900 </ul>
2901 }
2902
2903 @helper RenderArticleMenuItem(ArticleMenuItem settings)
2904 {
2905 string link = !String.IsNullOrEmpty(settings.Link) ? settings.Link : "#";
2906
2907 if (!String.IsNullOrEmpty(settings.Title)) {
2908 <li class="menu-left__item dw-mod">
2909 <a href="@link" onclick="@settings.OnClick" class="menu-left__link dw-mod">@settings.Title</a>
2910 </li>
2911 }
2912 }
2913 @using System.Reflection
2914 @using Dynamicweb.Rapido.Blocks.Components
2915 @using Dynamicweb.Rapido.Blocks.Components.Articles
2916 @using Dynamicweb.Rapido.Blocks
2917
2918 @* Component for the articles *@
2919
2920 @helper RenderArticleList(ArticleList settings)
2921 {
2922 if (Pageview != null)
2923 {
2924 bool isParagraph = Pageview.CurrentParagraph != null ? true : false;
2925 string[] sortArticlesListBy = new string[2];
2926
2927 if (isParagraph) {
2928 sortArticlesListBy = Pageview.CurrentParagraph.Item["SortArticlesListBy"] != null && !string.IsNullOrEmpty(Pageview.CurrentParagraph.Item["SortArticlesListBy"].ToString()) ? Pageview.CurrentParagraph.Item["SortArticlesListBy"].ToString().Split('+') : new string[] { "Date", "DESC" };
2929 }
2930 else {
2931 sortArticlesListBy = Pageview.Item["SortArticlesListBy"] != null && !string.IsNullOrEmpty(Pageview.Item["SortArticlesListBy"].ToString()) ? Pageview.Item["SortArticlesListBy"].ToString().Split('+') : new string[] { "Date", "DESC" };
2932 }
2933
2934 string sourcePage = settings.SourcePage != null ? settings.SourcePage : Pageview.ID.ToString();
2935
2936 if (!settings.DisablePagination) {
2937 @RenderItemList(new
2938 {
2939 ItemType = !String.IsNullOrEmpty(settings.ItemType) ? settings.ItemType : "DynamicArticle",
2940 ListSourceType = settings.SourceType,
2941 ListSourcePage = sourcePage,
2942 ItemFieldsList = "*",
2943 Filter = settings.Filter,
2944 ListOrderBy = sortArticlesListBy[0],
2945 ListOrderByDirection = sortArticlesListBy[1],
2946 ListSecondOrderBy = sortArticlesListBy[0] == "Date" ? "InFocusSortId" : "Date",
2947 ListSecondOrderByDirection = "DESC",
2948 IncludeAllChildItems = true,
2949 ListTemplate = settings.Template,
2950 ListPageSize = settings.PageSize.ToString()
2951 });
2952 } else {
2953 @RenderItemList(new
2954 {
2955 ItemType = !String.IsNullOrEmpty(settings.ItemType) ? settings.ItemType : "DynamicArticle",
2956 ListSourceType = settings.SourceType,
2957 ListSourcePage = sourcePage,
2958 ItemFieldsList = "*",
2959 Filter = settings.Filter,
2960 ListOrderBy = sortArticlesListBy[0],
2961 ListOrderByDirection = sortArticlesListBy[1],
2962 ListSecondOrderBy = sortArticlesListBy[0] == "Date" ? "InFocusSortId" : "Date",
2963 ListSecondOrderByDirection = "DESC",
2964 IncludeAllChildItems = true,
2965 ListTemplate = settings.Template,
2966 ListPageSize = settings.PageSize.ToString(),
2967 ListViewMode = "Partial",
2968 ListShowTo = settings.PageSize + 1
2969 });
2970 }
2971 }
2972 }
2973 @using System.Reflection
2974 @using Dynamicweb.Rapido.Blocks.Components.Articles
2975
2976
2977 @* Component for the articles *@
2978
2979 @helper RenderArticleSummary(ArticleSummary settings)
2980 {
2981 if (!String.IsNullOrEmpty(settings.Text))
2982 {
2983 <div class="article__summary dw-mod">@settings.Text</div>
2984 }
2985 }
2986 @using System.Reflection
2987 @using Dynamicweb.Rapido.Blocks.Components
2988 @using Dynamicweb.Rapido.Blocks.Components.Articles
2989 @using Dynamicweb.Rapido.Blocks
2990
2991 @* Component for the articles *@
2992
2993 @helper RenderArticleListCategoryFilter(ArticleListCategoryFilter settings)
2994 {
2995 string pageId = Pageview.ID.ToString();
2996 string selectedFilter = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("sourcePage")) ? HttpContext.Current.Request.QueryString.Get("sourcePage") : Translate("All");
2997 var query = HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString());
2998
2999 foreach (var option in settings.Categories)
3000 {
3001 selectedFilter = selectedFilter == option.Value ? option.Key : selectedFilter;
3002 }
3003
3004 if (selectedFilter == pageId)
3005 {
3006 selectedFilter = Translate("All");
3007 }
3008
3009 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
3010 {
3011 <div class="u-pull--right u-margin-left">
3012 <div class="collection u-no-margin">
3013 <h5>@Translate("Category")</h5>
3014 <input type="checkbox" id="CategorySelector" class="dropdown-trigger" />
3015 <div class="dropdown u-w180px dw-mod">
3016 <label class="dropdown__header dropdown__btn u-padding-top u-padding-bottom u-font-size--sm dw-mod" for="CategorySelector">@Translate(selectedFilter)</label>
3017 <div class="dropdown__content dw-mod">
3018 @foreach (var option in settings.Categories)
3019 {
3020 <div class="dropdown__item" onclick="QueryArray.setParametersInCurrentURL({ sourceType: 'Page', sourcePage: '@(option.Key.ToLower() == "all" ? pageId : option.Value)' })">@Translate(option.Key)</div>
3021 }
3022 </div>
3023 <label class="dropdown-trigger-off" for="CategorySelector"></label>
3024 </div>
3025 </div>
3026 </div>
3027 }
3028 else
3029 {
3030 <div class="u-full-width u-margin-bottom">
3031 <h5 class="u-no-margin">@Translate("Category")</h5>
3032 <input type="checkbox" id="CategorySelector" class="dropdown-trigger" />
3033 <div class="dropdown u-full-width dw-mod">
3034 <label class="dropdown__header dropdown__btn dw-mod" for="CategorySelector">@Translate(selectedFilter)</label>
3035 <div class="dropdown__content dw-mod">
3036 @foreach (var option in settings.Categories)
3037 {
3038 <div class="dropdown__item" onclick="QueryArray.setParametersInCurrentURL({ sourceType: 'Page', sourcePage: '@(option.Key.ToLower() == "all" ? pageId : option.Value)' })">@Translate(option.Key)</div>
3039 }
3040 </div>
3041 <label class="dropdown-trigger-off" for="CategorySelector"></label>
3042 </div>
3043 </div>
3044 }
3045 }
3046 @using System.Reflection
3047 @using Dynamicweb.Rapido.Blocks.Components
3048 @using Dynamicweb.Rapido.Blocks.Components.Articles
3049 @using Dynamicweb.Rapido.Blocks
3050 @using System.Collections.Generic
3051
3052 @* Component for the articles *@
3053
3054 @helper RenderArticleListFilter(ArticleListFilter settings)
3055 {
3056 string selectedFilter = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get(settings.SystemName)) ? HttpContext.Current.Request.QueryString.Get(settings.SystemName) : Translate("All");
3057 var query = HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString());
3058
3059 if (settings.Options != null)
3060 {
3061 if (settings.Options is IEnumerable<dynamic>)
3062 {
3063 var options = (IEnumerable<dynamic>) settings.Options;
3064 settings.Options = options.OrderBy(item => item.Name);
3065 }
3066
3067 foreach (var option in settings.Options)
3068 {
3069 selectedFilter = selectedFilter == option.Value ? option.Name : selectedFilter;
3070 }
3071
3072 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
3073 {
3074 <div class="u-pull--right u-margin-left">
3075 <div class="collection u-no-margin">
3076 <h5>@settings.Label</h5>
3077 <input type="checkbox" id="@(settings.SystemName)Selector" class="dropdown-trigger" />
3078 <div class="dropdown u-w180px dw-mod">
3079 <label class="dropdown__header dropdown__btn dw-mod" for="@(settings.SystemName)Selector">@Translate(selectedFilter)</label>
3080 <div class="dropdown__content dw-mod">
3081 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '')">@Translate("All")</div>
3082 @foreach (var option in settings.Options)
3083 {
3084 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '@option.Value')">@Translate(option.Name)</div>
3085 }
3086 </div>
3087 <label class="dropdown-trigger-off" for="@(settings.SystemName)Selector"></label>
3088 </div>
3089 </div>
3090 </div>
3091 }
3092 else
3093 {
3094 <div class="u-full-width u-margin-bottom">
3095 <h5 class="u-no-margin">@settings.Label</h5>
3096 <input type="checkbox" id="@(settings.SystemName)Selector" class="dropdown-trigger" />
3097 <div class="dropdown u-full-width w-mod">
3098 <label class="dropdown__header dropdown__btn dw-mod" for="@(settings.SystemName)Selector">@Translate(selectedFilter)</label>
3099 <div class="dropdown__content dw-mod">
3100 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '')">@Translate("All")</div>
3101 @foreach (var option in settings.Options)
3102 {
3103 <div class="dropdown__item" onclick="QueryArray.setParameterInCurrentURL('@settings.SystemName', '@option.Value')">@Translate(option.Name)</div>
3104 }
3105 </div>
3106 <label class="dropdown-trigger-off" for="@(settings.SystemName)Selector"></label>
3107 </div>
3108 </div>
3109 }
3110 }
3111 }
3112 @using System.Reflection
3113 @using Dynamicweb.Rapido.Blocks.Components
3114 @using Dynamicweb.Rapido.Blocks.Components.Articles
3115 @using Dynamicweb.Rapido.Blocks
3116
3117 @* Component for the articles *@
3118
3119 @helper RenderArticleListSearch(ArticleListSearch settings)
3120 {
3121 string searchParameter = !string.IsNullOrEmpty(settings.SearchParameter) ? settings.SearchParameter : "Title";
3122 string searchWord = HttpContext.Current.Request.QueryString.Get(searchParameter);
3123 string searchString = !string.IsNullOrEmpty(searchWord) ? searchWord.Trim('*') : "";
3124 string className = "u-w340px u-pull--right u-margin-left";
3125
3126 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet")
3127 {
3128 className = "u-full-width";
3129 }
3130
3131 <div class="typeahead u-color-inherit dw-mod @className">
3132 <input type="text" class="typeahead-search-field u-no-margin u-padding-top--lg u-padding-bottom--lg u-font-size--sm dw-mod" placeholder="@Translate("Search in list")" value="@searchString" id="ArticleListSearchInput" onchange="QueryArray.setParameterInCurrentURL('@searchParameter', '*' + document.getElementById('ArticleListSearchInput').value + '*')">
3133 @*<input type="text" class="typeahead-search-field u-no-margin dw-mod" placeholder="@Translate("Search in list")" value="@searchString" id="ArticleListSearchInput" onchange="QueryArray.setParametersInCurrentURL({'Title' : '*' + document.getElementById('ArticleListSearchInput').value + '*', 'ScientificName' : '*' + document.getElementById('ArticleListSearchInput').value + '*'})">*@
3134 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod"><i class="fas fa-search"></i></button>
3135 </div>
3136 }
3137 @using System.Reflection
3138 @using Dynamicweb.Rapido.Blocks.Components
3139 @using Dynamicweb.Rapido.Blocks.Components.Articles
3140 @using Dynamicweb.Rapido.Blocks
3141
3142 @* Component for the articles *@
3143
3144 @helper RenderArticleListNoResultsInfo(ArticleListNoResultsInfo settings)
3145 {
3146 <div class="u-margin-top--lg u-bold u-ta-center u-bold">@Translate(settings.Message)</div>
3147 }
3148 @using System.Reflection
3149 @using Dynamicweb.Rapido.Blocks.Components
3150 @using Dynamicweb.Rapido.Blocks.Components.General
3151 @using Dynamicweb.Rapido.Blocks.Components.Articles
3152 @using Dynamicweb.Rapido.Blocks
3153 @using System.Text.RegularExpressions
3154
3155 @* Component for the articles *@
3156
3157 @helper RenderArticleListItem(ArticleListItem settings)
3158 {
3159 switch (settings.Type) {
3160 case ArticleListItemType.Card:
3161 @RenderArticleListItemCard(settings);
3162 break;
3163 case ArticleListItemType.List:
3164 @RenderArticleListItemList(settings);
3165 break;
3166 case ArticleListItemType.Simple:
3167 @RenderArticleListItemSimple(settings);
3168 break;
3169 default:
3170 @RenderArticleListItemCard(settings);
3171 break;
3172 }
3173 }
3174
3175 @helper RenderArticleListItemCard(ArticleListItem settings) {
3176 <a href="@settings.Link" class="u-full-height u-color-light--bg u-flex u-flex--column">
3177 <div class="u-color-light--bg u-no-padding dw-mod">
3178 @if (settings.Logo != null)
3179 {
3180 string backgroundImage = settings.Image != null ? "background-image:url(/Admin/Public/GetImage.ashx?width=992&height=760&crop=0&Compression=75&DoNotUpscale=True&image=" + settings.Image.Path + "); background-size: cover;" : "";
3181 settings.Logo.ImageDefault.Crop = 5;
3182 settings.Logo.ImageDefault.Width = settings.Logo.ImageDefault.Width == 1920 ? 240 : settings.Logo.ImageDefault.Width;
3183 settings.Logo.ImageDefault.Height = settings.Logo.ImageDefault.Height == 1080 ? 200 : settings.Logo.ImageDefault.Height;
3184 <div class="image-hover__wrapper layered-image layered-image--tinted dw-mod" style="@backgroundImage">
3185 @if (settings.Stickers != null)
3186 {
3187 if (settings.Stickers.Position != StickersListPosition.Custom && settings.Stickers.Position != StickersListPosition.None)
3188 {
3189 @Render(settings.Stickers);
3190 }
3191 }
3192 @RenderImage(settings.Logo)
3193 </div>
3194 } else if (settings.Image != null)
3195 {
3196 <div class="flex-img image-hover__wrapper u-position-relative dw-mod">
3197 @if (settings.Stickers != null)
3198 {
3199 if (settings.Stickers.Position != StickersListPosition.Custom && settings.Stickers.Position != StickersListPosition.None)
3200 {
3201 @Render(settings.Stickers);
3202 }
3203 }
3204 @Render(settings.Image)
3205 </div>
3206 }
3207 </div>
3208
3209 @if (!String.IsNullOrEmpty(settings.Title) || !String.IsNullOrEmpty(settings.Summary))
3210 {
3211 <div class="card u-color-light--bg u-full-height dw-mod">
3212 @if (settings.Stickers != null)
3213 {
3214 if (settings.Stickers.Position == StickersListPosition.Custom)
3215 {
3216 @Render(settings.Stickers);
3217 }
3218 }
3219 @if (!String.IsNullOrEmpty(settings.Title))
3220 {
3221 <h3 class="article-list__item-header u-truncate-text dw-mod">@settings.Title</h3>
3222 }
3223 @if (!String.IsNullOrEmpty(settings.SubTitle))
3224 {
3225 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div>
3226 }
3227 @if (!String.IsNullOrEmpty(settings.Summary))
3228 {
3229 <p class="article__short-summary dw-mod">@settings.Summary</p>
3230 }
3231
3232 </div>
3233 }
3234 </a>
3235 }
3236
3237 @helper RenderArticleListItemList(ArticleListItem settings) {
3238 <a href="@settings.Link">
3239
3240
3241 <div class="grid u-color-light--bg custom-article-list u-no-padding dw-mod">
3242
3243 <div class="grid__col-md-3">
3244 <div class="u-color-light--bg u-no-padding dw-mod">
3245 @if (settings.Logo != null)
3246 {
3247 string backgroundImage = settings.Image != null ? "background-image:url(/Admin/Public/GetImage.ashx?width=992&height=760&crop=0&Compression=75&DoNotUpscale=True&image=" + settings.Image.Path + "); background-size: cover;" : "";
3248 settings.Logo.ImageDefault.Crop = 5;
3249 settings.Logo.ImageDefault.Width = settings.Logo.ImageDefault.Width == 1920 ? 240 : settings.Logo.ImageDefault.Width;
3250 settings.Logo.ImageDefault.Height = settings.Logo.ImageDefault.Height == 1080 ? 200 : settings.Logo.ImageDefault.Height;
3251 <div class="image-hover__wrapper layered-image layered-image--tinted dw-mod" style="@backgroundImage">
3252 @*
3253 @if (settings.Stickers != null)
3254 {
3255 if (settings.Stickers.Position != StickersListPosition.Custom)
3256 {
3257 @Render(settings.Stickers);
3258 }
3259 }
3260 *@
3261 @RenderImage(settings.Logo)
3262 </div>
3263 }
3264 else if (settings.Image != null)
3265 {
3266 <div class="flex-img image-hover__wrapper dw-mod">
3267 @*
3268 @if (settings.Stickers != null)
3269 {
3270 if (settings.Stickers.Position != StickersListPosition.Custom)
3271 {
3272 @Render(settings.Stickers);
3273 }
3274 }
3275 *@
3276 @Render(settings.Image)
3277 </div>
3278 }
3279 </div>
3280 </div>
3281
3282 @if (!String.IsNullOrEmpty(settings.Title) || !String.IsNullOrEmpty(settings.Summary))
3283 {
3284 <div class="grid__col-md-9">
3285 @Render(settings.Stickers)
3286
3287 @if (!String.IsNullOrEmpty(settings.Title))
3288 {
3289 <h3 class="article-list__item-header u-truncate-text dw-mod">@settings.Title</h3>
3290 }
3291 @if (settings.Stickers != null)
3292 {
3293 if (settings.Stickers.Position == StickersListPosition.Custom)
3294 {
3295 @Render(settings.Stickers)
3296 ;
3297 }
3298 }
3299 @if (!String.IsNullOrEmpty(settings.SubTitle))
3300 {
3301 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div>
3302 }
3303 @if (!String.IsNullOrEmpty(settings.Summary))
3304 {
3305 <p class="article__short-summary dw-mod">@settings.Summary</p>
3306 }
3307 @if (!String.IsNullOrEmpty(settings.Link))
3308 {
3309 <a href="@settings.Link">@Translate("Mai mult >", "Mai mult >")</a>
3310 }
3311 </div>
3312 }
3313 </div>
3314 </a>
3315 }
3316
3317 @helper RenderArticleListItemSimple(ArticleListItem settings) {
3318 <a href="@settings.Link" class="u-color-inherit">
3319 <div class="grid u-color-light--bg u-no-padding dw-mod">
3320 <div class="grid__col-md-12">
3321 @if (!String.IsNullOrEmpty(settings.Title))
3322 {
3323 <div class="article-list-item__header test u-truncate-text u-no-margin dw-mod">@settings.Title</div>
3324
3325 }
3326 @if (!String.IsNullOrEmpty(settings.SubTitle))
3327 {
3328 <div class="article-list__item-micro-info u-truncate-text dw-mod">@settings.SubTitle</div>
3329 }
3330 </div>
3331 </div>
3332 </a>
3333 }
3334 @using System.Reflection
3335 @using Dynamicweb.Rapido.Blocks.Components.Articles
3336
3337
3338 @* Component for the articles *@
3339
3340 @helper RenderArticleAuthorAndDate(ArticleAuthorAndDate settings)
3341 {
3342 <small class="article__subscription">
3343 @if (!(string.IsNullOrWhiteSpace(settings.Author) && string.IsNullOrWhiteSpace(settings.Date)))
3344 {
3345 <text>@Translate("Written")</text>
3346 }
3347 @if (!string.IsNullOrWhiteSpace(settings.Author))
3348 {
3349 <text>@Translate("by") @settings.Author</text>
3350 }
3351 @if (!string.IsNullOrWhiteSpace(settings.Date))
3352 {
3353 <text>@Translate("on") @settings.Date</text>
3354 }
3355 </small>
3356 }
3357 @using System.Reflection
3358 @using Dynamicweb.Rapido.Blocks.Components.Articles
3359 @using Dynamicweb.Rapido.Blocks.Components.General
3360
3361
3362 @* Component for the articles *@
3363
3364 @helper RenderArticleLink(ArticleLink settings)
3365 {
3366 if (!string.IsNullOrEmpty(settings.Title))
3367 {
3368 Button link = new Button {
3369 ConfirmText = settings.ConfirmText,
3370 ConfirmTitle = settings.ConfirmTitle,
3371 ButtonType = settings.ButtonType,
3372 Id = settings.Id,
3373 Title = settings.Title,
3374 AltText = settings.AltText,
3375 OnClick = settings.OnClick,
3376 CssClass = settings.CssClass,
3377 Disabled = settings.Disabled,
3378 Icon = settings.Icon,
3379 Name = settings.Name,
3380 Href = settings.Href,
3381 ButtonLayout = settings.ButtonLayout,
3382 ExtraAttributes = settings.ExtraAttributes
3383 };
3384 <div class="grid__cell">
3385 @Render(link)
3386 </div>
3387 }
3388 }
3389 @using System.Reflection
3390 @using Dynamicweb.Rapido.Blocks
3391 @using Dynamicweb.Rapido.Blocks.Components.Articles
3392 @using Dynamicweb.Rapido.Blocks.Components.General
3393
3394
3395 @* Component for the articles *@
3396
3397 @helper RenderArticleCarousel(ArticleCarousel settings)
3398 {
3399 <div class="grid">
3400 <div class="grid__col-12 u-no-padding u-margin-bottom">
3401 <div class="carousel" id="carousel_@settings.Id">
3402 <div class="carousel__container js-carousel-slides dw-mod">
3403 @RenderBlockList(settings.SubBlocks)
3404 </div>
3405 </div>
3406 </div>
3407 </div>
3408
3409 <script>
3410 document.addEventListener("DOMContentLoaded", function () {
3411 new CarouselModule("#carousel_@settings.Id", {
3412 slideTime: 0,
3413 dots: true
3414 });
3415 });
3416 </script>
3417 }
3418
3419 @helper RenderArticleCarouselSlide(ArticleCarouselSlide settings)
3420 {
3421 string imageEngine = "/Admin/Public/GetImage.ashx?";
3422
3423 string defaultImage = settings.ImageSettings != null ? imageEngine : settings.Image;
3424 if (settings.ImageSettings != null)
3425 {
3426 defaultImage += settings.ImageSettings.Width != 0 ? "Width=" + settings.ImageSettings.Width + "&" : "";
3427 defaultImage += settings.ImageSettings.Height != 0 ? "Height=" + settings.ImageSettings.Height + "&" : "";
3428 defaultImage += "Crop=" + settings.ImageSettings.Crop + "&";
3429 defaultImage += "Compression=" + settings.ImageSettings.Compression + "&";
3430 defaultImage += "DoNotUpscale=" + settings.ImageSettings.DoNotUpscale.ToString() + "&";
3431 defaultImage += "FillCanvas=" + settings.ImageSettings.FillCanvas.ToString() + "&";
3432 }
3433 defaultImage += "&Image=" + settings.Image;
3434
3435 <div class="carousel__slide u-min-h300px u-flex dw-mod" style="background-size:cover; background-image:url('@defaultImage')">
3436 <a class="article-carousel-item__wrap" href="@settings.Link" title="@settings.Title">
3437 <h2 class="article-list__item-header u-truncate-text u-color-light dw-mod">@settings.Title</h2>
3438 <div class="article-list__item-info">
3439 @if (settings.Stickers != null)
3440 {
3441 settings.Stickers.Position = StickersListPosition.Custom;
3442 @Render(settings.Stickers);
3443 }
3444
3445 <small class="u-margin-top--lg u-color-light">
3446 @if (!(string.IsNullOrWhiteSpace(settings.Author) && string.IsNullOrWhiteSpace(settings.Date)))
3447 {
3448 <text>@Translate("Written")</text>
3449 }
3450 @if (!string.IsNullOrWhiteSpace(settings.Author))
3451 {
3452 <text>@Translate("by") @settings.Author</text>
3453 }
3454 @if (!string.IsNullOrWhiteSpace(settings.Date))
3455 {
3456 <text>@Translate("on") @settings.Date</text>
3457 }
3458 </small>
3459 </div>
3460
3461 <h3 class="article__short-summary u-color-light">@settings.Summary</h3>
3462 </a>
3463 @if (settings.UseFilters == true)
3464 {
3465 <div class="background-image image-filter image-filter--darken dw-mod"></div>
3466 }
3467 </div>
3468 }
3469 @using System.Text.RegularExpressions
3470 @using Dynamicweb.Rapido.Blocks.Components
3471 @using Dynamicweb.Rapido.Blocks.Components.General
3472 @using Dynamicweb.Rapido.Blocks.Components.Articles
3473 @using Dynamicweb.Rapido.Blocks
3474
3475 @* Component for the articles *@
3476
3477 @helper RenderArticleVideo(ArticleVideo settings)
3478 {
3479 if (settings.Url != null)
3480 {
3481 //getting video ID from youtube URL
3482 string videoCode = settings.Url;
3483 Regex regex = new Regex(@".be\/(.[^?]*)");
3484 Match match = regex.Match(videoCode);
3485 string videoId = "";
3486 if (match.Success)
3487 {
3488 videoId = match.Groups[1].Value;
3489 }
3490 else
3491 {
3492 regex = new Regex(@"v=([^&]+)");
3493 match = regex.Match(videoCode);
3494 if (match.Success)
3495 {
3496 videoId = match.Groups[1].Value;
3497 }
3498 }
3499
3500 int autoPlay = settings.AutoPlay == "true" ? 1 : 0;
3501
3502 <div class="video-wrapper">
3503 <div class="js-youtube-video" data-video="@videoId" id="ytPlayer@(Guid.NewGuid().ToString("N"))" data-auto-play="@autoPlay" data-enable-controls="1"></div>
3504 </div>
3505 }
3506 }
3507 @using System.Reflection
3508 @using Dynamicweb.Rapido.Blocks.Components
3509 @using Dynamicweb.Rapido.Blocks.Components.Articles
3510 @using Dynamicweb.Rapido.Blocks
3511
3512
3513 @functions{
3514 BlocksPage articlePageComponent = BlocksPage.GetBlockPage("DynamicArticle");
3515 public class DF_ArticleParagraph : ComponentBase
3516 {
3517 public ItemViewModel ParagraphContent {get; set;}
3518 public int counter {get; set;}
3519 public string imageColumns {get; set;}
3520 public string imageLayout {get; set;}
3521 public string contentColumns {get; set;}
3522 }
3523
3524 }
3525
3526 @helper RenderDF_ArticleParagraph(DF_ArticleParagraph settings)
3527 {
3528 ItemViewModel paragraph = settings.ParagraphContent;
3529 int count = settings.counter;
3530 string imageColumns = settings.imageColumns;
3531 string imageLayout = settings.imageLayout;
3532 string contentColumns = settings.contentColumns;
3533
3534
3535
3536 string paragraphListHeading = "12";
3537 var contentPosition = paragraph.GetList("ContentPosition") != null ? paragraph.GetList("ContentPosition").SelectedValue : "";
3538 //content position
3539 // number 5 is a random one to make the first item greater than second one
3540 var contentCountTextDecisionFirst = contentPosition == "left" || contentPosition == "top" ? 1 : 0;
3541 var contentCountImageDecisionFirst = contentPosition == "left" || contentPosition == "top" ? 5 : 0;
3542 var contentCountTextDecisionSecond = contentPosition == "right" || contentPosition == "bottom" ? 5 : 0;
3543 var contentCountImageDecisionSecond = contentPosition == "right" || contentPosition == "bottom" ? 1 : 0;
3544
3545 var paragraphTextColumn = contentPosition == "top" || contentPosition == "bottom" ? "12" : "6";
3546 var paragraphImageColumn = contentPosition == "top" || contentPosition == "bottom" ? "12" : "6";
3547
3548
3549
3550 if (!paragraph.GetBoolean("RenderAsQuote"))
3551 {
3552 //string enableDropCap = Model.Item.GetString("EnableDropCap") != null ? Model.Item.GetList("EnableDropCap").SelectedValue.ToLower() : "default";
3553 //enableDropCap = enableDropCap == "default" && GetParentSettingsItem("EnableDropCap") != null ? GetParentSettingsItem("EnableDropCap").ToString().ToLower() : enableDropCap;
3554 string text = paragraph.GetString("Text") != null ? paragraph.GetString("Text") : "";
3555
3556 //if (!String.IsNullOrEmpty(text) && enableDropCap == "true" && count == 0 && paragraph.GetString("Text").Substring(0, 3) == "<p>")
3557 //{
3558 // string firstLetter = paragraph.GetString("Text").Substring(3, 1);
3559 // text = paragraph.GetString("Text").Remove(3, 1);
3560 // text = text.Insert(3, "<span class=\"article__drop-cap\">" + firstLetter + "</span>");
3561 // }
3562
3563 if (!String.IsNullOrEmpty(paragraph.GetString("Heading")))
3564 {
3565 var hideHeading = paragraph.GetBoolean("HideHeading");
3566 var hideHeadingClass = hideHeading == true ? "u-hidden" : "";
3567
3568 Block articleParagraphHeader = new Block
3569 {
3570 Id = "ArticleParagraph" + count + "Heading",
3571 SortId = (count * 10),
3572 Component = new ArticleSubHeader { Title = paragraph.GetString("Heading") },
3573 Design = new Design
3574 {
3575 RenderType = RenderType.Column,
3576 Size = paragraphListHeading,
3577 CssClass = String.Format("u-color-light--bg u-padding--lg {0}", hideHeadingClass)
3578 }
3579 };
3580 articlePageComponent.Add("ArticleParagraph" + count, articleParagraphHeader);
3581 }
3582
3583 if (paragraph.GetFile("Image") != null)
3584 {
3585 string imageTitle = !string.IsNullOrEmpty(paragraph.GetString("Heading")) ? paragraph.GetString("Heading") : "";
3586
3587 Block articleParagraphImage = new Block
3588 {
3589 Id = "ArticleParagraph" + count + "Image",
3590 SortId = (count * 10) + 2 + contentCountImageDecisionFirst + contentCountImageDecisionSecond,
3591 Design = new Design
3592 {
3593 RenderType = RenderType.Column,
3594 Size = paragraphImageColumn,
3595 CssClass = "u-color-light--bg u-padding--lg"
3596 }
3597 };
3598
3599 if (imageLayout == "banner")
3600 {
3601 ArticleBanner banner = new ArticleBanner
3602 {
3603 Image = new Image { Path = paragraph.GetFile("Image"), ImageDefault = new ImageSettings { Height = 650, Width = 1300 }, Caption = paragraph.GetString("ImageCaption") },
3604 Heading = imageTitle,
3605 UseFilters = false
3606 };
3607 articleParagraphImage.Component = banner;
3608 }
3609 else
3610 {
3611 ArticleImage image = new ArticleImage
3612 {
3613 Image = new Image
3614 {
3615 Path = paragraph.GetFile("Image"),
3616 Title = imageTitle,
3617 ImageDefault = new ImageSettings { Height = 650, Width = 1300 },
3618 Caption = paragraph.GetString("ImageCaption")
3619 }
3620 };
3621 articleParagraphImage.Component = image;
3622 }
3623
3624 articlePageComponent.Add("ArticleParagraph" + count, articleParagraphImage);
3625 }
3626
3627
3628 if (!String.IsNullOrEmpty(text))
3629 {
3630 Block articleParagraphText = new Block
3631 {
3632 Id = "ArticleParagraph" + count + "Text",
3633 SortId = (count * 10) + 3 + contentCountTextDecisionFirst + contentCountTextDecisionSecond,
3634 Component = new ArticleText { Text = text },
3635 Design = new Design
3636 {
3637 RenderType = RenderType.Column,
3638 Size = paragraphTextColumn,
3639 CssClass = "u-color-light--bg u-padding--lg"
3640 }
3641 };
3642
3643 articlePageComponent.Add("ArticleParagraph" + count, articleParagraphText);
3644 }
3645
3646 if (!String.IsNullOrEmpty(paragraph.GetString("VideoURL")))
3647 {
3648 Block articleParagraphVideo = new Block
3649 {
3650 Id = "ArticleParagraph" + count + "Video",
3651 SortId = (count * 10) + 1,
3652 Component = new ArticleVideo { Url = paragraph.GetString("VideoURL"), AutoPlay = "false" },
3653 Design = new Design
3654 {
3655 RenderType = RenderType.Column,
3656 Size = imageColumns,
3657 CssClass = "u-color-light--bg u-padding--lg"
3658 }
3659 };
3660 articlePageComponent.Add("ArticleParagraph" + count, articleParagraphVideo);
3661 }
3662 }
3663 else
3664 {
3665 if (!String.IsNullOrEmpty(paragraph.GetString("Text")))
3666 {
3667 string quoteText = paragraph.GetString("Text") != null ? paragraph.GetString("Text") : "";
3668 string quoteAuthor = paragraph.GetString("Heading") != null ? paragraph.GetString("Heading") : "";
3669
3670 Block articleParagraphQuote = new Block
3671 {
3672 Id = "ArticleParagraph" + count + "Quote",
3673 SortId = (count * 10) + 3,
3674 Component = new ArticleQuote { Image = new Image { Path = paragraph.GetFile("Image") }, Text = quoteText, Author = quoteAuthor },
3675 Design = new Design
3676 {
3677 RenderType = RenderType.Column,
3678 Size = contentColumns,
3679 CssClass = "u-color-light--bg u-padding--lg"
3680 }
3681 };
3682 articlePageComponent.Add("ArticleParagraph" + count, articleParagraphQuote);
3683 }
3684 }
3685
3686
3687 }
3688
3689 @using System.Reflection
3690 @using Dynamicweb.Rapido.Blocks.Components
3691 @using Dynamicweb.Rapido.Blocks.Components.Articles
3692 @using Dynamicweb.Rapido.Blocks
3693
3694 @functions{
3695 //BlocksPage articlePageComponent = BlocksPage.GetBlockPage("DynamicArticle");
3696 public class DF_RelatedProducts : ComponentBase
3697 {
3698 public string Title {get; set;}
3699 public string Id {get; set;}
3700 public string FeedPageId {get; set;}
3701 public string Query {get; set;}
3702 public string CurrentPageId {get; set;}
3703 public string CurrentProductId {get; set;}
3704 public int PageSize {get; set;}
3705 public bool productManual {get; set;}
3706 }
3707 }
3708
3709 @helper RenderDF_RelatedProducts(DF_RelatedProducts settings)
3710 {
3711 <section class="multiple-paragraphs-container paragraph-container--full-width article--related-products">
3712 <div class="center-container dw-mod">
3713 <div class="grid u-padding">
3714 <div class="grid__col-md-12 grid__col-xs-12">
3715 <h2 class="article__header u-no-margin u-margin-top">@settings.Title</h2>
3716 </div>
3717 </div>
3718 @if(settings.productManual == false) {
3719 <div class="js-handlebars-root false u-padding" id="@settings.Id" data-template="ProductContainer" data-json-feed="/Default.aspx?ID=@settings.FeedPageId&@settings.Query&ExcludeItemID=@settings.CurrentPageId&PageSize=@settings.PageSize"></div>
3720 } else {
3721 <div class="js-handlebars-root true u-padding" id="@settings.Id" data-template="ProductContainer" data-json-feed="@settings.FeedPageId"></div>
3722 }
3723
3724 <script id="ProductContainer" type="text/x-template">
3725 {{#.}}
3726 <div class="u-min-h400px u-full-width">
3727 <div class="grid">
3728 {{#ifCond totalPages '>' 1}}
3729 <div class="grid__col-45px grid__col--bleed-x content-promotion__buttons prev">
3730 <div class="grid__cell grid__cell--align-middle-left">
3731 @{
3732 Button prevButton = new Button { Icon = new Icon { Prefix = "fas", Name = "fa-chevron-left fa-2x", LabelPosition = IconLabelPosition.After }, ButtonLayout = ButtonLayout.Clean, CssClass = "btn--condensed {{prevdisabled}} u-position-relative", OnClick = "HandlebarsBolt.UpdateContent('" + settings.Id + "', '{{prevPage}}')" };
3733 prevButton.ExtraAttributes.Add("", "{{prevdisabled}}");
3734 }
3735 @Render(prevButton)
3736 </div>
3737 </div>
3738 {{/ifCond}}
3739 <div class="grid__col-auto grid__col--bleed-x content-promotion__products">
3740 <div id="ProductsContainer" data-template="ProductGridItemContainer" class="grid product-list dw-mod" data-save-cookie="true">
3741 {{#ProductsContainer}}
3742 <div id="Product{{productId}}" class="grid__col-3 product-list__grid-item dw-mod">
3743 {{#Product}}
3744 <div class="grid__col--auto js-product-scroll-trigger u-no-padding u-full-height" data-params="{{googleImpression}}">
3745 <div class="grid__cell product-list__grid-item__image dw-mod {{noImage}}">
3746 <a href="{{link}}"
3747 onclick="{{#if googleImpression}}googleEnchantImpressionClick({{googleImpression}}, event){{/if}}"
3748 class="u-block u-position-relative image-hover__wrapper dw-mod">
3749 @Render(new Image { Path = "{{image}}", ImageDefault = new ImageSettings { Width = 300, Height = 300, Crop = 5, FillCanvas = true, DoNotUpscale = true }, Title = "{{name}}", CssClass = "grid__cell-img grid__cell-img--centered u-min-h180px" })
3750 {{#StickersContainers}}
3751 {{>StickersContainer}}
3752 {{/StickersContainers}}
3753 </a>
3754
3755 <div class="favorites favorites--for-grid-view u-pull--right {{hasVariants}} dw-mod" {{hasVariants}}>
3756 {{#Favorite}}
3757 {{>FavoriteTemplate}}
3758 {{/Favorite}}
3759 </div>
3760
3761 </div>
3762
3763 <div class="grid__cell product-list__grid-item__price-info dw-mod">
3764 <a href="{{link}}" onclick="{{#if googleImpression}}googleEnchantImpressionClick({{googleImpression}}, event){{/if}}" title="{{name}}" class="u-color-inherit">
3765 @Render(new Heading { Title = "{{name}}", Level = 6, CssClass = "u-condensed-text u-bold" })
3766 </a>
3767 @RenderGridViewPriceInfo()
3768 </div>
3769
3770 <div class="product-list__grid-item__footer dw-mod">
3771 @RenderProductGridItemAddToCart()
3772 </div>
3773 </div>
3774 {{/Product}}
3775 </div>
3776 {{/ProductsContainer}}
3777 </div>
3778 </div>
3779 {{#ifCond totalPages '>' 1}}
3780 <div class="grid__col-45px grid__col--bleed-x content-promotion__buttons next">
3781 <div class="grid__cell grid__cell--align-middle-right">
3782 @{
3783 Button nextButton = new Button { Icon = new Icon { Prefix = "fas", Name = "fa-chevron-right fa-2x", LabelPosition = IconLabelPosition.After }, ButtonLayout = ButtonLayout.Clean, CssClass = "btn--condensed {{nextdisabled}} u-position-relative", OnClick = "HandlebarsBolt.UpdateContent('" + settings.Id + "', '{{nextPage}}')" };
3784 nextButton.ExtraAttributes.Add("", "{{nextdisabled}}");
3785 }
3786 @Render(nextButton)
3787 </div>
3788 </div>
3789 {{/ifCond}}
3790 </div>
3791 </div>
3792 {{/.}}
3793 </script>
3794 <script id="StickersContainer" type="text/x-template">
3795 <div class="stickers-container stickers-container--{{{convertStickerPositionToClassName Position}}} dw-mod">
3796 {{#Stickers}}
3797 {{>Sticker}}
3798 {{/Stickers}}
3799 </div>
3800 </script>
3801
3802 <script id="Sticker" type="text/x-template">
3803 @Render(new Sticker { Title = "{{Title}}", CssClass = "{{CssClass}}" })
3804 </script>
3805
3806 <script>
3807 @{
3808 bool relatedUseGoogleTagManager = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("GoogleTagManagerID"));
3809
3810 if (relatedUseGoogleTagManager)
3811 {
3812 <text>
3813 document.addEventListener("DOMContentLoaded", function (event) {
3814 Scroll.AddIsInViewportListener(".js-product-scroll-trigger", function (elem) {
3815 let googleImpression = JSON.parse(elem.getAttribute("data-params"));
3816 googleImpression.list = "Related products";
3817 googleEnchantImpression(googleImpression);
3818 elem.classList.remove("js-product-scroll-trigger");
3819 });
3820 });
3821 </text>
3822 }
3823 }
3824 </script>
3825 </div>
3826 </section>
3827 }
3828
3829 @helper RenderGridViewPriceInfo()
3830 {
3831 bool pointShopOnly = Pageview.AreaSettings.GetItem("Ecommerce").GetBoolean("PointShopOnly");
3832 bool showPrice = !Pageview.AreaSettings.GetItem("ProductList").GetBoolean("HidePrice");
3833 bool showCartButton = Pageview.AreaSettings.GetItem("ProductList").GetItem("GridView").GetBoolean("ShowAddToCartButton");
3834 bool showVATPrice = Pageview.AreaSettings.GetItem("ProductList").GetBoolean("ShowBothPricesWithWithoutVAT");
3835 bool isPricesWithVATEnabled = Dynamicweb.Ecommerce.Common.Context.DisplayPricesWithVat;
3836
3837 if (showPrice && Dynamicweb.Rapido.Services.User.IsPricesAllowed())
3838 {
3839 if (pointShopOnly)
3840 {
3841 <text>
3842 {{#if havePointPrice}}
3843 <div class="price price--product-list dw-mod">{{points}} @Translate("points")</div>
3844 @if (showCartButton)
3845 {
3846 <text>
3847 {{#unless canBePurchasedWithPoints}}
3848 <small class="help-text u-no-margin">@Translate("Not enough points to buy this")</small>
3849 {{/unless}}
3850 </text>
3851 }
3852 {{else}}
3853 @Translate("Not available")
3854 {{/if}}
3855 </text>
3856 }
3857 else
3858 {
3859 <div class="price price--product-list dw-mod">{{price}}</div>
3860 <div class="before-price {{onSale}} dw-mod">{{discount}}</div>
3861 if (showVATPrice)
3862 {
3863 <div class="vat-price vat-price--product-list u-margin-top dw-mod">
3864 @if (isPricesWithVATEnabled)
3865 {
3866 <span>@Translate("excl. VAT")</span><span> ({{priceWithoutVAT}})</span>
3867 }
3868 else
3869 {
3870 <span>@Translate("incl. VAT")</span><span> ({{priceWithVAT}})</span>
3871 }
3872 </div>
3873 }
3874 <text>
3875 {{#if priceRRP}}
3876 <div><small>@Translate("RRP") {{priceRRP}}</small></div>
3877 {{/if}}
3878 </text>
3879 }
3880 }
3881 }
3882
3883 @helper RenderProductGridItemAddToCart() {
3884 var gridViewSettings = Pageview.AreaSettings.GetItem("ProductList").GetItem("GridView");
3885 var ecommerceSettings = Pageview.AreaSettings.GetItem("Ecommerce");
3886
3887 bool pointShopOnly = ecommerceSettings.GetBoolean("PointShopOnly");
3888 bool showCartButton = gridViewSettings.GetBoolean("ShowAddToCartButton");
3889 bool showViewButton = gridViewSettings.GetBoolean("ShowViewButton");
3890 string viewMoreText = gridViewSettings.GetString("ViewMoreText");
3891 viewMoreText = !string.IsNullOrEmpty(viewMoreText) ? viewMoreText : "View";
3892 string wrapperClass = "buttons-collection--center";
3893 int columnsCount = gridViewSettings.GetList("Columns") != null ? Converter.ToInt32(gridViewSettings.GetList("Columns").SelectedValue) : 4;
3894 bool hideButtonText = columnsCount >= 4 || Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet";
3895
3896 if (pointShopOnly && columnsCount <= 4)
3897 {
3898 hideButtonText = false;
3899 }
3900
3901 var viewBtn = new Link
3902 {
3903 Href = "{{link}}",
3904 Id = "CartButton_{{id}}",
3905 Title = Translate(viewMoreText),
3906 OnClick = "{{#if googleImpression}}googleEnchantImpressionClick({{googleImpression}}, event){{/if}}",
3907 ButtonLayout = ButtonLayout.Secondary,
3908 CssClass = "u-no-margin"
3909 };
3910
3911 if (Dynamicweb.Rapido.Services.User.IsBuyingAllowed())
3912 {
3913 var addToCartBtn = new AddToCart
3914 {
3915 WrapperCssClass = wrapperClass,
3916 AddButton = new AddToCartButton
3917 {
3918 ProductId = "{{productId}}",
3919 VariantId = "{{variantid}}",
3920 UnitId = "{{unitId}}",
3921 ProductInfo = "{{productInfo}}",
3922 BuyForPoints = pointShopOnly,
3923 HideTitle = hideButtonText,
3924 OnClick = "{{facebookPixelAction}}",
3925 ExtraAttributes = new Dictionary<string, string>
3926 {
3927 { "{{disabledBuyButton}}", "" }
3928 }
3929 }
3930 };
3931
3932 if (!pointShopOnly)
3933 {
3934 addToCartBtn.QuantitySelector = new QuantitySelector
3935 {
3936 Id = "Quantity{{id}}"
3937 };
3938 }
3939
3940 if (showCartButton && Dynamicweb.Rapido.Services.User.IsBuyingAllowed())
3941 {
3942 if (!showViewButton)
3943 {
3944 @Render(addToCartBtn)
3945 }
3946 else
3947 {
3948 <text>{{#if hideAddToCartButton}}</text>
3949 <div>@Render(viewBtn)</div>
3950 <text>{{else}}</text>
3951 @Render(addToCartBtn)
3952 <text>{{/if}}</text>
3953 }
3954 }
3955 else if (showViewButton)
3956 {
3957 <div>@Render(viewBtn)</div>
3958 }
3959 }
3960 else if (showViewButton)
3961 {
3962 <div>@Render(viewBtn)</div>
3963 }
3964 }
3965
3966 @* Simple helpers *@
3967
3968 @*Requires the Gallery ItemType that comes with Rapido*@
3969 @helper RenderArticleItemGallery(IList<ItemViewModel> gallery) {
3970 if (gallery != null && gallery.Count > 0)
3971 {
3972 int count = 1;
3973
3974 foreach (var item in gallery)
3975 {
3976 if (item.GetFile("ImagePath") != null)
3977 {
3978 string image = item.GetFile("ImagePath").PathUrlEncoded;
3979 string imagePrefix = "/Admin/Public/GetImage.ashx?width=1200&height=820&crop=5&Compression=75&DoNotUpscale=1&image=";
3980 int imagesCount = gallery.Count;
3981
3982 if (count == 1)
3983 {
3984 <label class="gallery" for="ParagraphGalleryModalTrigger" onclick="Gallery.openImage(this.querySelector('.js-gallery'))">
3985 <span class="gallery__main-image">
3986 <img src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=992&height=760&crop=0&Compression=75&DoNotUpscale=1&image=@image" class="b-lazy flex-img js-gallery" alt="" data-for="ParagraphGallery" data-image="@imagePrefix@image" />
3987 </span>
3988 <span class="gallery__image-counter">
3989 <i class="fas fa-camera fa-2x"></i> <span class="gallery__image-counter__number">@imagesCount</span>
3990 <span class="gallery__image-counter__text">@Translate("See all") <i class="fas fa-angle-right"></i></span>
3991 </span>
3992 </label>
3993 }
3994 else
3995 {
3996 <div class="u-hidden js-gallery" data-for="ParagraphGallery" data-image="@imagePrefix@image"></div>
3997 }
3998
3999 count++;
4000 }
4001 }
4002
4003 @Render(new ArticleGalleryModal())
4004 }
4005 }
4006
4007 @helper RenderMobileFilters(List<Block> subBlocks)
4008 {
4009 if (subBlocks.Count > 0)
4010 {
4011 <div class="grid__col-12">
4012 <input type="checkbox" id="CheckFilters" class="js-remember-state u-hidden" data-expand="CheckFilters" />
4013 <div class="grid u-margin-bottom dw-mod" data-trigger="CheckFilters">
4014 @RenderBlockList(subBlocks)
4015 </div>
4016 <label for="CheckFilters" class="btn btn--secondary btn--full dw-mod js-expand-hide" data-trigger="CheckFilters">@Translate("Select filters")</label>
4017 <label for="CheckFilters" class="btn btn--secondary btn--full dw-mod expandable--collapsed" data-trigger="CheckFilters">@Translate("Close filters")</label>
4018 </div>
4019 }
4020 }
4021
4022
4023 @* Include the Blocks for the page *@
4024 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
4025
4026 @using System
4027 @using System.Web
4028 @using System.Collections.Generic
4029 @using Dynamicweb.Rapido.Blocks.Extensibility
4030 @using Dynamicweb.Rapido.Blocks
4031
4032 @functions {
4033 string GoogleTagManagerID = "";
4034 string GoogleAnalyticsID = "";
4035 }
4036
4037 @{
4038 GoogleTagManagerID = Model.Area.Item.GetItem("Settings").GetString("GoogleTagManagerID");
4039 GoogleAnalyticsID = Model.Area.Item.GetItem("Settings").GetString("GoogleAnalyticsTrackingID");
4040
4041 BlocksPage topSnippetsBlocksPage = BlocksPage.GetBlockPage("Master");
4042
4043 if (!string.IsNullOrWhiteSpace(GoogleAnalyticsID))
4044 {
4045 Block tagManager = new Block()
4046 {
4047 Id = "GoogleAnalytics",
4048 SortId = 0,
4049 Template = RenderGoogleAnalyticsSnippet()
4050 };
4051 topSnippetsBlocksPage.Add("Head", tagManager);
4052 }
4053
4054 if (!string.IsNullOrWhiteSpace(GoogleTagManagerID))
4055 {
4056 Block tagManager = new Block()
4057 {
4058 Id = "TagManager",
4059 SortId = 1,
4060 Template = RenderGoogleTagManager()
4061 };
4062 topSnippetsBlocksPage.Add("Head", tagManager);
4063
4064 Block tagManagerBodySnippet = new Block()
4065 {
4066 Id = "TagManagerBodySnippet",
4067 SortId = 1,
4068 Template = RenderGoogleTagManagerBodySnippet()
4069 };
4070 topSnippetsBlocksPage.Add(MasterBlockId.MasterTopSnippets, tagManagerBodySnippet);
4071 }
4072
4073 Block facebookPixel = new Block()
4074 {
4075 Id = "FacebookPixel",
4076 SortId = 2,
4077 Template = RenderFacebookPixel()
4078 };
4079
4080 topSnippetsBlocksPage.Add(MasterBlockId.MasterTopSnippets, facebookPixel);
4081 }
4082
4083 @helper RenderGoogleAnalyticsSnippet()
4084 {
4085 <!-- Global site tag (gtag.js) - Google Analytics -->
4086 <script async src="https://www.googletagmanager.com/gtag/js?id=@GoogleAnalyticsID"></script>
4087 <script>
4088 window.dataLayer = window.dataLayer || [];
4089 function gtag(){dataLayer.push(arguments);}
4090 gtag('js', new Date());
4091
4092 gtag('config', '@GoogleAnalyticsID');
4093 </script>
4094
4095 }
4096
4097 @helper RenderGoogleTagManager()
4098 {
4099 <script>
4100 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
4101 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
4102 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
4103 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
4104 })(window,document,'script','dataLayer','@GoogleTagManagerID');
4105 </script>
4106
4107 @*google consent mode v2*@
4108 <script>
4109 window.dataLayer = window.dataLayer || [];
4110 function gtag(){dataLayer.push(arguments);}
4111
4112 gtag('consent', 'default', {
4113 'ad_storage': 'denied',
4114 'ad_user_data': 'denied',
4115 'ad_personalization': 'denied',
4116 'analytics_storage': 'denied',
4117 'functionality_storage': 'denied',
4118 'personalization_storage': 'denied',
4119 'security_storage': 'denied'
4120 });
4121 </script>
4122 }
4123
4124 @helper RenderGoogleTagManagerBodySnippet()
4125 {
4126 <!-- Google Tag Manager (noscript) -->
4127 <noscript>
4128 <iframe src="https://www.googletagmanager.com/ns.html?id=@GoogleTagManagerID"
4129 height="0" width="0" style="display:none;visibility:hidden"></iframe>
4130 </noscript>
4131 <!-- End Google Tag Manager (noscript) -->
4132 }
4133
4134 @helper RenderFacebookPixel()
4135 {
4136 string FacebookPixelID = Model.Area.Item.GetItem("Settings").GetString("FacebookPixelID");
4137
4138 if (!string.IsNullOrWhiteSpace(FacebookPixelID))
4139 {
4140 <!-- Facebook Pixel Code -->
4141 <script>
4142 !function(f,b,e,v,n,t,s)
4143 {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
4144 n.callMethod.apply(n,arguments):n.queue.push(arguments)};
4145 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
4146 n.queue=[];t=b.createElement(e);t.async=!0;
4147 t.src=v;s=b.getElementsByTagName(e)[0];
4148 s.parentNode.insertBefore(t,s)}(window, document,'script',
4149 'https://connect.facebook.net/en_US/fbevents.js');
4150 fbq('init', '@FacebookPixelID');
4151 fbq('track', 'PageView');
4152 </script>
4153 <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=@FacebookPixelID&ev=PageView&noscript=1" alt="" /></noscript>
4154 }
4155 }
4156 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
4157
4158 @using System
4159 @using System.Web
4160 @using System.Collections.Generic
4161 @using Dynamicweb.Rapido.Blocks
4162 @using Dynamicweb.Rapido.Blocks.Extensibility
4163 @using Dynamicweb.Security.UserManagement
4164 @using Dynamicweb.Security.UserManagement.ExternalAuthentication
4165 @using Dynamicweb.Rapido.Blocks.Components.General
4166
4167 @{
4168 BlocksPage loginBlocksPage = BlocksPage.GetBlockPage("Master");
4169
4170 Block loginModal = new Block()
4171 {
4172 Id = "LoginModal",
4173 SortId = 10,
4174 Component = new Modal
4175 {
4176 Id = "SignIn",
4177 Heading = new Heading
4178 {
4179 Level = 0,
4180 Title = Translate("Sign in")
4181 },
4182 Width = ModalWidth.Sm,
4183 BodyTemplate = RenderLoginForm()
4184 }
4185 };
4186
4187 loginBlocksPage.Add(MasterBlockId.MasterTopSnippets, loginModal);
4188 }
4189
4190 @helper RenderLoginForm()
4191 {
4192 int pageId = Model.TopPage.ID;
4193 string userSignedInErrorText = "";
4194 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
4195 string forgotPasswordPageLink = "/Default.aspx?ID=" + signInProfilePageId + "&LoginAction=Recovery";
4196 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
4197 bool showModalOnStart = pageId != GetPageIdByNavigationTag("CustomerCenter") && Model.LogOnFailed;
4198 bool hideCreateAccountLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideCreateAccount");
4199 bool hideForgotPasswordLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideForgotPasswordLink");
4200
4201 ProviderCollection providers = Provider.GetActiveProviders();
4202
4203 if (Model.LogOnFailed)
4204 {
4205 switch (Model.LogOnFailedReason)
4206 {
4207 case LogOnFailedReason.PasswordLengthInvalid:
4208 userSignedInErrorText = Translate("Password length is invalid");
4209 break;
4210 case LogOnFailedReason.IncorrectLogin:
4211 userSignedInErrorText = Translate("Invalid email or password");
4212 break;
4213 case LogOnFailedReason.ExceededFailedLogOnLimit:
4214 userSignedInErrorText = Translate("You have exceeded the limit of allowed login attempts. The user account is temporarily locked");
4215 break;
4216 case LogOnFailedReason.LoginLocked:
4217 userSignedInErrorText = Translate("The user account is temporarily locked");
4218 break;
4219 case LogOnFailedReason.PasswordExpired:
4220 userSignedInErrorText = Translate("The password has expired and needs to be renewed");
4221 break;
4222 default:
4223 userSignedInErrorText = Translate("An unknown error occured");
4224 break;
4225 }
4226 }
4227
4228 Form form = new Form { Method = FormMethod.Post, Name = "LoginModalForm" };
4229
4230 TextField passwordField = new TextField { Id = "login-password", Type = TextFieldType.Password, Name = "password", Label = Translate("Password"), Required = true };
4231
4232 if (!hideForgotPasswordLink) {
4233 passwordField.Link = new Link { Title = Translate("Forgot password?"), Href = "/Default.aspx?id=" + signInProfilePageId + "&LoginAction=Recovery" };
4234 }
4235
4236 form.Add(new HiddenField { Name = "ID", Value = Converter.ToString(pageId) });
4237 form.Add(new HiddenField { Name = "DWExtranetUsernameRemember", Value = "True" });
4238 form.Add(new HiddenField { Name = "DWExtranetPasswordRemember", Value = "True" });
4239 form.Add(new HiddenField { Name = "LoginAction", Value = "Login" });
4240 form.Add(new TextField { Id = "LoginUsername", Name = "username", Label = Translate("Email"), CssClass = "u-full-width", Required = true });
4241 form.Add(passwordField);
4242 form.Add(new NotificationMessage { Message = userSignedInErrorText, MessageType = NotificationMessageType.Error });
4243 form.Add(new CheckboxField { Id = "LoginRememberMe", Value = "True", Name = "Autologin", Label = Translate("Remember me") });
4244 form.Add(new Button { ButtonType = ButtonType.Submit, Title = Translate("Sign in"), CssClass = "btn--full", OnClick = "Buttons.LockButton(event)" });
4245
4246 foreach (Provider LoginProvider in providers)
4247 {
4248 var ProviderName = LoginProvider.Name.ToLower();
4249 form.Add(new Link {
4250 Href = "/Admin/Public/Social/ExternalLogin.aspx?action=login&providerID=" + LoginProvider.ID,
4251 Icon = new Icon { Prefix = "fab", Name = "fa-" + ProviderName, CssClass = "fa-1_5x", LabelPosition = IconLabelPosition.After },
4252 ButtonLayout = ButtonLayout.LinkClean,
4253 CssClass = "btn--condensed u-margin-bottom u-margin-right u-inline-block u-color-" + ProviderName,
4254 AltText = ProviderName
4255 });
4256 }
4257
4258 if (!hideCreateAccountLink) {
4259 form.Add(new Text { Content = "<div class=\"u-border-top u-full-width u-margin-bottom--lg\"></div>" });
4260 form.Add(new Link
4261 {
4262 Href = "/Default.aspx?id=" + createAccountPageId,
4263 ButtonLayout = ButtonLayout.LinkClean,
4264 Title = Translate("Create account"),
4265 CssClass = "u-full-width u-ta-center"
4266 });
4267 }
4268
4269 @Render(form)
4270
4271 if (showModalOnStart)
4272 {
4273 <script>
4274 document.getElementById("SignInModalTrigger").checked = true;
4275 </script>
4276 }
4277 }
4278
4279 @if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet")
4280 {
4281 <text>@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4282
4283 @using System
4284 @using System.Web
4285 @using System.Collections.Generic
4286 @using Dynamicweb.Rapido.Blocks.Extensibility
4287 @using Dynamicweb.Rapido.Blocks
4288 @using Dynamicweb.Rapido.Services
4289
4290
4291 @functions {
4292 BlocksPage mobileHeaderBlocksPage = BlocksPage.GetBlockPage("Master");
4293 }
4294
4295 @{
4296 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";
4297 bool mobileHideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch");
4298 bool mobileHideCart = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideCart") || !Dynamicweb.Rapido.Services.User.IsBuyingAllowed();
4299
4300 var totalNumberOfProductsForDefault = 0;
4301 using (var contexter = new OrderContexter(Dynamicweb.Ecommerce.Orders.OrderContext.GetOrderContextById("ORDERCONTEXT7")))
4302 {
4303 var cartContext = Dynamicweb.Ecommerce.Common.Context.Cart;
4304 totalNumberOfProductsForDefault = cartContext != null ? Converter.ToInt32(cartContext.ProductOrderLines.Sum(ol => ol.Quantity)) : 0;
4305 }
4306
4307 var totalNumberOfProductsForIngrasaminte = 0;
4308 using (var contexter = new OrderContexter(Dynamicweb.Ecommerce.Orders.OrderContext.GetOrderContextById("ORDERCONTEXT5")))
4309 {
4310 var cartContext = Dynamicweb.Ecommerce.Common.Context.Cart;
4311 totalNumberOfProductsForIngrasaminte = cartContext != null ? Converter.ToInt32(cartContext.ProductOrderLines.Sum(ol => ol.Quantity)) : 0;
4312 }
4313
4314 var totalNumberOfProductsForAllCarts = totalNumberOfProductsForDefault + totalNumberOfProductsForIngrasaminte;
4315
4316 Block mobileHeader = new Block()
4317 {
4318 Id = "MobileTop",
4319 SortId = 10,
4320 Template = RenderMobileTop(),
4321 SkipRenderBlocksList = true
4322 };
4323 mobileHeaderBlocksPage.Add(MasterBlockId.MasterHeader, mobileHeader);
4324
4325 Block mobileHeaderNavigation = new Block()
4326 {
4327 Id = "MobileHeaderNavigation",
4328 SortId = 10,
4329 Template = RenderMobileHeaderNavigation(),
4330 SkipRenderBlocksList = true,
4331 BlocksList = new List<Block> {
4332 new Block {
4333 Id = "MobileHeaderNavigationTrigger",
4334 SortId = 10,
4335 Template = RenderMobileHeaderNavigationTrigger()
4336 }
4337 }
4338 };
4339 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderNavigation);
4340
4341 Block mobileHeaderLogo = new Block()
4342 {
4343 Id = "MobileHeaderLogo",
4344 SortId = 20,
4345 Template = RenderMobileHeaderLogo(),
4346 SkipRenderBlocksList = true
4347 };
4348 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderLogo);
4349
4350 Block mobileHeaderActions = new Block()
4351 {
4352 Id = "MobileHeaderActions",
4353 SortId = 30,
4354 Template = RenderMobileTopActions(),
4355 SkipRenderBlocksList = true
4356 };
4357 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderActions);
4358
4359 Block mobileHeaderSignIn = new Block()
4360 {
4361 Id = "MobileHeaderAccount",
4362 SortId = 70,
4363 Template = RenderMobileHeaderSignIn(),
4364 SkipRenderBlocksList = true
4365 };
4366 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderSignIn);
4367
4368
4369 Block mobileHeaderActions2 = new Block()
4370 {
4371 Id = "MobileHeaderActions2",
4372 SortId = 80,
4373 Template = RenderMobileTopActions2(),
4374 SkipRenderBlocksList = true
4375 };
4376 mobileHeaderBlocksPage.Add("MobileTop", mobileHeaderActions2);
4377
4378 if (!mobileHideSearch)
4379 {
4380 Block mobileHeaderSearch = new Block
4381 {
4382 Id = "MobileHeaderSearch",
4383 SortId = 10,
4384 Template = RenderMobileTopSearch()
4385 };
4386 mobileHeaderBlocksPage.Add("mobileHeaderActions2", mobileHeaderSearch);
4387 }
4388
4389 Block mobileHeaderMiniCart;
4390
4391 if (!mobileHideCart)
4392 {
4393 mobileHeaderMiniCart = new Block
4394 {
4395 Id = "MobileHeaderMiniCart",
4396 SortId = 20,
4397 Template = RenderMobileTopMiniCart(totalNumberOfProductsForDefault, totalNumberOfProductsForIngrasaminte)
4398 };
4399
4400 Block miniCartCounterScriptTemplate = new Block
4401 {
4402 Id = "MiniCartCounterScriptTemplate",
4403 Template = RenderMobileMiniCartCounterContent()
4404 };
4405 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", miniCartCounterScriptTemplate);
4406 }
4407 else
4408 {
4409 mobileHeaderMiniCart = new Block
4410 {
4411 Id = "MobileHeaderMiniCart",
4412 SortId = 20
4413 };
4414 }
4415
4416 if (!mobileHideSearch)
4417 {
4418 Block mobileHeaderSearchBar = new Block()
4419 {
4420 Id = "MobileHeaderSearchBar",
4421 SortId = 30,
4422 Template = RenderMobileTopSearchBar()
4423 };
4424 mobileHeaderBlocksPage.Add(MasterBlockId.MasterHeader, mobileHeaderSearchBar);
4425 }
4426
4427
4428
4429
4430
4431
4432
4433 switch (mobileTopLayout)
4434 {
4435 case "nav-left":
4436 mobileHeaderNavigation.SortId = 10;
4437 mobileHeaderLogo.SortId = 20;
4438 mobileHeaderActions.SortId = 30;
4439 mobileHeaderBlocksPage.Add("MobileHeaderActions", mobileHeaderMiniCart);
4440 break;
4441 case "nav-right":
4442 mobileHeaderLogo.SortId = 10;
4443 mobileHeaderActions.SortId = 20;
4444 mobileHeaderNavigation.SortId = 30;
4445 mobileHeaderBlocksPage.Add("MobileHeaderActions", mobileHeaderMiniCart);
4446 break;
4447 case "nav-search-left":
4448 mobileHeaderNavigation.SortId = 10;
4449 mobileHeaderLogo.SortId = 20;
4450 mobileHeaderActions.SortId = 30;
4451 mobileHeaderBlocksPage.Add("MobileHeaderNavigation", mobileHeaderMiniCart);
4452 break;
4453 case "search-left":
4454 mobileHeaderActions.SortId = 10;
4455 mobileHeaderLogo.SortId = 20;
4456 mobileHeaderNavigation.SortId = 30;
4457 mobileHeaderMiniCart.SortId = 0;
4458 mobileHeaderBlocksPage.Add("MobileHeaderNavigation", mobileHeaderMiniCart);
4459 break;
4460 }
4461 }
4462
4463
4464 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4465
4466 @using System
4467 @using System.Web
4468 @using Dynamicweb.Rapido.Blocks.Extensibility
4469 @using Dynamicweb.Rapido.Blocks
4470
4471 @{
4472 BlocksPage customMobileHeaderBlocksPage = BlocksPage.GetBlockPage("Master");
4473 }
4474
4475
4476
4477
4478 @helper RenderMobileTop() {
4479 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileTop").OrderBy(item => item.SortId).ToList();
4480
4481 <nav class="main-navigation-mobile dw-mod">
4482 <div class="center-container top-container__center-container dw-mod">
4483 <div class="grid grid--align-center mobile__header-items">
4484 @RenderBlockList(subBlocks)
4485 </div>
4486 </div>
4487 </nav>
4488 }
4489
4490 @helper RenderMobileHeaderNavigation() {
4491 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderNavigation").OrderBy(item => item.SortId).ToList();
4492
4493 <div class="grid__col-auto-width grid__col--bleed hamburger__item">
4494 <ul class="menu dw-mod u-flex u-flex--align-items-center">
4495
4496 @RenderBlockList(subBlocks)
4497
4498 </ul>
4499 </div>
4500 }
4501
4502 @helper RenderMobileHeaderNavigationTrigger() {
4503 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod">
4504 <label for="MobileNavTrigger" class="mobile-nav-trigger-button menu__link menu__link--icon menu__link--mobile dw-mod"></label>
4505 </li>
4506 }
4507
4508 @helper RenderMobileHeaderLogo() {
4509 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderLogo").OrderBy(item => item.SortId).ToList();
4510
4511 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";
4512 string centeredLogo = mobileTopLayout != "nav-right" ? "u-ta-center" : "";
4513 string firstPageId = Model.Area.FirstActivePage.ID.ToString();
4514 string businessName = Model.Area.Item.GetItem("Settings").GetString("BusinessName");
4515
4516 string logoLink = Pageview.Area.CultureInfo.TwoLetterISOLanguageName;
4517 logoLink = logoLink == "en" ? "/en" : "/";
4518
4519 string mobileLogo = "/Files/Images/logo-dynamicweb.png";
4520 if (Model.Area.Item.GetItem("Layout").GetItem("MobileTop") != null && Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetFile("Logo") != null)
4521 {
4522 mobileLogo = Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetFile("Logo").PathUrlEncoded;
4523 }
4524
4525 if (Path.GetExtension(mobileLogo).ToLower() != ".svg")
4526 {
4527 mobileLogo = "/Admin/Public/GetImage.ashx?height=40&width=100&crop=5&Compression=75&image=" + mobileLogo;
4528 }
4529 else
4530 {
4531 mobileLogo = HttpUtility.UrlDecode(mobileLogo);
4532 }
4533
4534 <div class="grid__col-auto grid__col--bleed logo__item">
4535 <div class="grid__cell @centeredLogo">
4536 <a href="@logoLink" class="logo logo--mobile u-inline-block u-no-margin dw-mod">
4537 <img class="grid__cell-img logo__img logo__img--mobile dw-mod" src="@mobileLogo" alt="@businessName" />
4538 </a>
4539 </div>
4540
4541 @RenderBlockList(subBlocks)
4542 </div>
4543 }
4544
4545 @helper RenderMobileTopActions() {
4546 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderActions").OrderBy(item => item.SortId).ToList();
4547
4548 <div class="grid__col-auto-width grid__col--bleed cart__item">
4549 @RenderLanguageSelectorMobile()
4550 <ul class="menu dw-mod">
4551 @RenderBlockList(subBlocks)
4552 </ul>
4553 </div>
4554 }
4555
4556 @helper RenderMobileTopActions2() {
4557 List<Block> subBlocks = this.mobileHeaderBlocksPage.GetBlockListById("MobileHeaderActions2").OrderBy(item => item.SortId).ToList();
4558
4559 <div class="grid__col-auto-width grid__col--bleed search__item u-hidden">
4560 <ul class="menu dw-mod">
4561 @RenderBlockList(subBlocks)
4562 </ul>
4563 </div>
4564 }
4565
4566 @helper RenderMobileHeaderSignIn() {
4567 <div class="menu-mobile__item grid__col--bleed account__item">
4568 <label for="SignInModalTrigger" onclick="document.getElementById('MobileNavTrigger').checked = false;" class="menu-mobile__link dw-mod menu-mobile__link--highlighted"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i></label>
4569 </div>
4570 }
4571
4572
4573
4574 @helper RenderMobileTopSearch() {
4575 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod">
4576 <label for="MobileSearchTrigger" class="menu__link menu__link--icon menu__link--mobile dw-mod">
4577 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue fa-1_5x"></i>
4578 </label>
4579 </li>
4580 }
4581
4582 @helper RenderMobileTopMiniCart(int totalNumberOfProductsForDefault = 0, int totalNumberOfProductsForIngrasaminte = 0) {
4583 int miniCartFeedDefaultPageId = GetPageIdByNavigationTag("MiniCartFeed");
4584 int miniCartFeedIngrasamintePageId = GetPageIdByNavigationTag("MiniCartFeedIngrasaminte");
4585 int miniCartFeedSelectedPageId = totalNumberOfProductsForDefault > 0 || totalNumberOfProductsForIngrasaminte == 0 ? miniCartFeedDefaultPageId : miniCartFeedIngrasamintePageId;
4586
4587 string cartProductsCount = (totalNumberOfProductsForDefault + totalNumberOfProductsForIngrasaminte).ToString();
4588
4589 int cartPageId = GetPageIdByNavigationTag("CartPage");
4590 int cartPageIngrasaminteId = GetPageIdByNavigationTag("CartPageIngrasaminte");
4591
4592 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod" id="miniCartWrapper">
4593 <div class="mini-cart dw-mod">
4594 <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" data-cartpage-ingrasaminte="@cartPageIngrasaminteId" data-cartpage-regular="@cartPageId" data-order-context="@cartProductsCount">
4595 <div id="minicart_icon" class="u-inline u-position-relative" data-miniCartFeedId="@miniCartFeedDefaultPageId" data-miniCartFeed-IngrasaminteId="@miniCartFeedIngrasamintePageId" data-miniCart-ContextId="@miniCartFeedSelectedPageId">
4596 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue fa-1_5x"></i>
4597 <div class="mini-cart__counter dw-mod">
4598 <div class="js-handlebars-root js-mini-cart-counter" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedSelectedPageId&feedType=Counter" data-init-onload="false" data-preloader="false">
4599 <div class="js-mini-cart-counter-content" data-count="@cartProductsCount">
4600 @cartProductsCount
4601 </div>
4602 </div>
4603 </div>
4604 </div>
4605 </a>
4606 </div>
4607 </li>
4608 }
4609
4610 @helper RenderMobileTopSearchBar()
4611 {
4612 string searchFeedId = "";
4613 string searchSecondFeedId = "";
4614 int groupsFeedId;
4615 int productsPageId = GetPageIdByNavigationTag("ProductsPage");
4616 // string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID;
4617 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults").ToString();
4618 string resultPageLink;
4619 string searchPlaceholder;
4620 string searchType = "product-search";
4621 string searchTemplate;
4622 string searchContentTemplate = "";
4623 string searchValue = HttpContext.Current.Request.QueryString.Get("q") ?? "";
4624 bool showGroups = true;
4625
4626 if (Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue == "contentSearch")
4627 {
4628 searchFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true";
4629 resultPageLink = contentSearchPageLink;
4630 searchPlaceholder = Translate("Search page");
4631 groupsFeedId = 0;
4632 searchType = "content-search";
4633 searchTemplate = "SearchPagesTemplate";
4634 showGroups = false;
4635 }
4636 else if (Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue == "combinedSearch")
4637 {
4638 searchFeedId = productsPageId + "&feed=true";
4639 searchSecondFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true";
4640 resultPageLink = Converter.ToString(productsPageId);
4641 searchPlaceholder = Translate("Search products or pages");
4642 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed");
4643 searchType = "combined-search";
4644 searchTemplate = "SearchProductsTemplateWrap";
4645 searchContentTemplate = "SearchPagesTemplateWrap";
4646 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector");
4647 }
4648 else
4649 {
4650 resultPageLink = Converter.ToString(productsPageId);
4651 searchFeedId = productsPageId + "&feed=true";
4652 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed");
4653 searchPlaceholder = Translate("Search products");
4654 searchTemplate = "SearchProductsTemplate";
4655 searchType = "product-search";
4656 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector");
4657 }
4658
4659 @*<input type="checkbox" id="MobileSearchTrigger" class="mobile-search-trigger" />*@
4660
4661 <div class="main-navigation-mobile typeahead-mobile dw-mod">
4662 <div class="center-container top-container__center-container dw-mod">
4663 <div class="grid">
4664 <div class="u-full-width u-margin-bottom--lg">
4665 <div class="typeahead-mobile__search-field dw-mod js-typeahead u-border u-padding-x" 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" data-search-parameter-name="q">
4666 <input name="q" type="text" class="js-typeahead-search-field u-w160px u-no-margin u-no-border" placeholder="@searchPlaceholder" value="@searchValue">
4667 @if (string.IsNullOrEmpty(searchSecondFeedId))
4668 {
4669 <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>
4670 }
4671 else
4672 {
4673 <div class="dropdown dropdown--absolute-position dropdown--combined grid dropdown--combined-mobile grid">
4674 <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>
4675 <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>
4676 </div>
4677 }
4678 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn" aria-label="product search"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue"></i></button>
4679 </div>
4680 </div>
4681 <!-- <div class="grid__col-auto-width close__button">
4682 <ul class="menu dw-mod">
4683 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod">
4684 <label for="MobileSearchTrigger" class="menu__link menu__link--icon menu__link--mobile dw-mod">
4685 <i class="fas fa-times fa-1_5x"></i>
4686 </label>
4687 </li>
4688 </ul>
4689 </div> -->
4690 </div>
4691 </div>
4692 </div>
4693 }
4694
4695 @helper RenderMobileMiniCartCounterContent()
4696 {
4697 <script id="MiniCartCounterContent" type="text/x-template">
4698 {{#.}}
4699 <div class="js-mini-cart-counter-content dw-mod" data-count="{{totalnumberofproductsforallcarts}}">
4700 {{totalnumberofproductsforallcarts}}
4701 </div>
4702 {{/.}}
4703 </script>
4704 }
4705
4706
4707 @helper RenderCheckCartModal(int totalNumberOfProductsForDefault = 0, int totalNumberOfProductsForIngrasaminte = 0) {
4708 int cartRegularProductsCount = Converter.ToInt32(Model.Cart.TotalProductsCount);
4709 string cartPageLink = "Default.aspx?ID=" + GetPageIdByNavigationTag("CartPage");
4710 string cartIngrasamintePageLink = "Default.aspx?ID=" + GetPageIdByNavigationTag("CartPageIngrasaminte");
4711 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
4712
4713 <div class="check-cart__wrapper u-hidden">
4714
4715 <label for="Check_Cart" class="dw-mod">
4716 <button class="u-no-margin u-margin-top--lg btn btn--primary dw-mod" style="pointer-events: none;">@Translate("Selecteaza Cosul")</button>
4717 </label>
4718 <!-- Trigger for the login modal -->
4719 <input type="checkbox" id="Check_Cart" class="modal-trigger"/>
4720 </div>
4721 <!-- Add address modal -->
4722 <div class="modal-container">
4723 <label for="Check_Cart" id="CheckCartModalOverlay" class="modal-overlay"></label>
4724 <div class="modal modal--md" id="CheckCartModal">
4725 <div class="modal__header no-border">
4726 <button type="button" class="close btn btn--primary dw-mod u-margin-top--lg" aria-label="select cart"><i class="fas fa-times"></i></button>
4727 <h2 class="u-ta-center">@Translate("Selecteaza Cosul")</h2>
4728 </div>
4729 <div class="modal__body">
4730 <div class="mini-cart-dropdown__body u-flex dw-mod">
4731 <div class="js-handlebars-root u-flex grid--direction-column u-full-width dw-mod" id="MiniCartContentMobile" data-template="MiniCartContentMobileTemplate" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart"></div>
4732 </div>
4733 </div>
4734 </div>
4735 </div>
4736
4737 <script id="MiniCartContentMobileTemplate" type="text/x-template">
4738 {{#.}}
4739 <div class="form__field-group--bordered" style="padding:1rem;">
4740 <div class="container__cart-type">
4741 <div class="radio">
4742 <div>
4743 <input id="cart1" name="radio-2" value="" type="radio" checked>
4744 <label for="cart1" class="radio-label">Cosul Ingrasaminte:</label>
4745 </div>
4746 <div class="radio__item">
4747 <div style="font-size: 1.4rem;">Nr. Produs(e):<span style="color:#073E79; font-weight: bold; margin-left:0.3rem;"> {{totalnumberofproductsforingrasamintecart}}</span></div>
4748 <div><button type="button" title="Goleste cosul" class="u-no-margin" onclick="googleEnchantImpressionEmptyCart(); Cart.EmptyCart(event, 'ORDERCONTEXT5');" aria-label="empty cart"><i class="fas fa-trash-alt" alt="goleste cosul"></i></button></div>
4749 </div>
4750 </div>
4751 <div class="radio">
4752 <div>
4753 <input id="cart2" name="radio-2" value="" type="radio">
4754 <label for="cart2" class="radio-label">Cosul cu restul produselor:</label>
4755 </div>
4756 <div class="radio__item">
4757 <div style="font-size: 1.4rem;">Nr. Produs(e):<span style="color:#073E79; font-weight: bold; margin-left:0.3rem;"> {{totalnumberofproductsfordefaultcart}}</span></div>
4758 <div><button type="button" title="Goleste cosul" class="u-no-margin" onclick="googleEnchantImpressionEmptyCart(); Cart.EmptyCart(event, 'ORDERCONTEXT7');" aria-label="empty cart"><i class="fas fa-trash-alt" alt="goleste cosul"></i></button></div>
4759 </div>
4760 </div>
4761 </div>
4762 <a id="go_to_cart" href="" class="u-full-width u-no-margin u-margin-top--lg btn btn--primary dw-mod">@Translate("Vezi cosul")</a>
4763 </div>
4764 {{/.}}
4765 </script>
4766
4767 }
4768
4769
4770
4771 @helper RenderLanguageSelectorMobile() {
4772 List<Dynamicweb.Content.Page> languages = new List<Dynamicweb.Content.Page>();
4773 Uri url = Dynamicweb.Context.Current.Request.Url;
4774 string hostName = url.Host;
4775
4776
4777 if (Pageview.Area.IsMaster)
4778 {
4779 languages.Add(Pageview.Page);
4780 if (Pageview.Page.Languages != null)
4781 {
4782 foreach (var language in Pageview.Page.Languages)
4783 {
4784 languages.Add(language);
4785 }
4786 }
4787 }
4788 else
4789 {
4790 languages.Add(Pageview.Page.MasterPage);
4791 if (Pageview.Page.MasterPage != null)
4792 {
4793 if (Pageview.Page.MasterPage.Languages != null)
4794 {
4795 foreach (var language in Pageview.Page.MasterPage.Languages)
4796 {
4797 languages.Add(language);
4798 }
4799 }
4800 }
4801 }
4802
4803 foreach (var language in languages)
4804 {
4805 if (language?.Area != null)
4806 {
4807 if (language != null && language.Area.Active && language.Area.ID != Dynamicweb.Frontend.PageView.Current().AreaID)
4808 {
4809 if (!string.IsNullOrEmpty(language.Area.DomainLock))
4810 {
4811 hostName = language.Area.DomainLock; //dk.domain.com or dk-domain.dk
4812 }
4813 string querystring = $"Default.aspx?ID={language.ID}";
4814
4815 string friendlyUrl = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(querystring);
4816 string href = $"{url.Scheme}://{hostName}{friendlyUrl}";
4817 string defaultUrl = $"{url.Scheme}://{hostName}";
4818
4819
4820 <span class="language-selector-header" style="position:relative; top: -2px; right: 3px;">
4821 @if(language.Area.CultureInfo.Name.ToLower() == "en-gb") {
4822 <a href ="@href">EN</a>
4823 }
4824 else if(language.Area.CultureInfo.Name.ToLower() == "ro-ro") {
4825 <a href="@href">RO</a>
4826 }
4827
4828 </span>
4829 }
4830 }
4831 }
4832 }</text>
4833 <text>@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
4834
4835 @using System
4836 @using System.Web
4837 @using System.Collections.Generic
4838 @using Dynamicweb.Rapido.Blocks.Extensibility
4839 @using Dynamicweb.Rapido.Blocks
4840
4841 @functions {
4842 BlocksPage mobileNavigationBlocksPage = BlocksPage.GetBlockPage("Master");
4843 }
4844
4845 @{
4846 bool mobileNavigationItemsHideSignIn = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSignIn");
4847 bool mobileHideCreateAccountLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideCreateAccount");
4848 bool mobileHideMyProfileLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideProfile");
4849 bool mobileHideMyOrdersLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideOrders");
4850 bool mobileHideMySavedCardsLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideSavedCards");
4851 bool mobileHideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideFavorites");
4852
4853 Block mobileNavigation = new Block()
4854 {
4855 Id = "MobileNavigation",
4856 SortId = 10,
4857 Template = MobileNavigation(),
4858 SkipRenderBlocksList = true
4859 };
4860 mobileNavigationBlocksPage.Add(MasterBlockId.MasterTopSnippets, mobileNavigation);
4861
4862 if (Model.CurrentUser.ID > 0 && !mobileHideMyProfileLink)
4863 {
4864 Block mobileNavigationSignIn = new Block
4865 {
4866 Id = "MobileNavigationSignIn",
4867 SortId = 10,
4868 Template = RenderMobileNavigationSignIn()
4869 };
4870 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationSignIn);
4871 }
4872
4873 Block mobileNavigationMenu = new Block
4874 {
4875 Id = "MobileNavigationMenu",
4876 SortId = 20,
4877 Template = RenderMobileNavigationMenu()
4878 };
4879 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationMenu);
4880
4881 Block mobileNavigationActions = new Block
4882 {
4883 Id = "MobileNavigationActions",
4884 SortId = 30,
4885 Template = RenderMobileNavigationActions(),
4886 SkipRenderBlocksList = true
4887 };
4888 mobileNavigationBlocksPage.Add("MobileNavigation", mobileNavigationActions);
4889
4890 if (!mobileNavigationItemsHideSignIn)
4891 {
4892 if (Model.CurrentUser.ID <= 0)
4893 {
4894 Block mobileNavigationSignInAction = new Block
4895 {
4896 Id = "MobileNavigationSignInAction",
4897 SortId = 10,
4898 Template = RenderMobileNavigationSignInAction()
4899 };
4900 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSignInAction);
4901
4902 if (!mobileHideCreateAccountLink)
4903 {
4904 Block mobileNavigationCreateAccountAction = new Block
4905 {
4906 Id = "MobileNavigationCreateAccountAction",
4907 SortId = 20,
4908 Template = RenderMobileNavigationCreateAccountAction()
4909 };
4910 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationCreateAccountAction);
4911 }
4912 }
4913 else
4914 {
4915 if (!mobileHideMyOrdersLink)
4916 {
4917 Block mobileNavigationOrdersAction = new Block
4918 {
4919 Id = "MobileNavigationOrdersAction",
4920 SortId = 20,
4921 Template = RenderMobileNavigationOrdersAction()
4922 };
4923 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationOrdersAction);
4924 }
4925 if (!mobileHideMyFavoritesLink)
4926 {
4927 Block mobileNavigationFavoritesAction = new Block
4928 {
4929 Id = "MobileNavigationFavoritesAction",
4930 SortId = 30,
4931 Template = RenderMobileNavigationFavoritesAction()
4932 };
4933 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationFavoritesAction);
4934 }
4935 if (!mobileHideMySavedCardsLink)
4936 {
4937 Block mobileNavigationSavedCardsAction = new Block
4938 {
4939 Id = "MobileNavigationFavoritesAction",
4940 SortId = 30,
4941 Template = RenderMobileNavigationSavedCardsAction()
4942 };
4943 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSavedCardsAction);
4944 }
4945
4946 Block mobileNavigationSignOutAction = new Block
4947 {
4948 Id = "MobileNavigationSignOutAction",
4949 SortId = 40,
4950 Template = RenderMobileNavigationSignOutAction()
4951 };
4952 mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationSignOutAction);
4953 }
4954 }
4955
4956 if (Model.Languages.Count > 1)
4957 {
4958 Block mobileNavigationLanguagesAction = new Block
4959 {
4960 Id = "MobileNavigationLanguagesAction",
4961 SortId = 50,
4962 Template = RenderMobileNavigationLanguagesAction()
4963 };
4964 //mobileNavigationBlocksPage.Add("MobileNavigationActions", mobileNavigationLanguagesAction);
4965 }
4966 }
4967
4968
4969 @helper MobileNavigation()
4970 {
4971 List<Block> subBlocks = this.mobileNavigationBlocksPage.GetBlockListById("MobileNavigation").OrderBy(item => item.SortId).ToList();
4972 string mobileTopDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design") != null ? Model.Area.Item.GetItem("Layout").GetItem("MobileTop").GetList("Design").SelectedValue : "nav-left";
4973 string position = mobileTopDesign == "nav-left" || mobileTopDesign == "nav-search-left" ? "left" : "right";
4974 int toolsPage = GetPageIdByNavigationTag("ToolsNavigationTag");
4975
4976 var navigationSettings = new NavigationSettings();
4977 navigationSettings.StartLevel = 1;
4978 navigationSettings.StopLevel = 3;
4979 navigationSettings.ExpandMode = ExpandMode.All;
4980 navigationSettings.RootPageId = toolsPage;
4981
4982 bool isHomepage = GetPageIdByNavigationTag("homepage") == Pageview.ID ? true : false;
4983
4984 <!-- Trigger for mobile navigation -->
4985 <input type="checkbox" id="MobileNavTrigger" class="mobile-nav-trigger mobile-nav-trigger--@position" autocomplete="off" />
4986
4987 <!-- Mobile navigation -->
4988 <nav class="mobile-navigation mobile-navigation--@position dw-mod">
4989 <div class="mobile-navigation__wrapper" id="mobileNavigationWrapper">
4990 <div class="agricover-corporate-mobile-navigation">
4991 <ul class="u-no-margin dw-mod">
4992 <li class="menu-left__item dw-mod">
4993 <a class="menu-left__link @(isHomepage ? "active" : "") dw-mod" href="/" title="@Translate("Homepage")">@Translate("Homepage")</a>
4994 </li>
4995 </ul>
4996 @Navigation.RenderNavigation("../Navigation/LeftNavigationExpandableMobile.cshtml", navigationSettings)
4997 @* <div class="mobile-search-tools-bar">@RenderMobileTopSearchBar()</div> *@
4998 </div>
4999 @RenderBlockList(subBlocks)
5000 </div>
5001 </nav>
5002
5003 <label class="mobile-nav-trigger-off" for="MobileNavTrigger"></label>
5004 }
5005
5006 @helper RenderMobileNavigationSignIn()
5007 {
5008 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
5009 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile");
5010 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
5011 string myProfilePageLink = linkStart + myProfilePageId;
5012 string userName = Model.CurrentUser.FirstName ?? "";
5013 userName += " " + (Model.CurrentUser.LastName ?? "");
5014 userName += userName == "" && Model.CurrentUser.UserName != null ? Model.CurrentUser.UserName : "";
5015
5016 <ul class="menu menu-mobile">
5017 <li class="menu-mobile__item">
5018 <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>
5019 </li>
5020 </ul>
5021 }
5022
5023 @helper RenderMobileNavigationMenu()
5024 {
5025 bool isSlidesDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetList("Design").SelectedValue == "Slides";
5026 string menuTemplate = isSlidesDesign ? "BaseMenuForMobileSlides.xslt" : "BaseMenuForMobileExpandable.xslt";
5027 string levels = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetString("Levels")) ? Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetString("Levels") : "3";
5028 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar");
5029 int startLevel = 0; //renderPagesInToolBar ? 1 : 0;
5030
5031 @RenderNavigation(new
5032 {
5033 id = "mobilenavigation",
5034 cssclass = "menu menu-mobile dwnavigation",
5035 startLevel = @startLevel,
5036 ecomStartLevel = @startLevel + 1,
5037 endlevel = @levels,
5038 expandmode = "all",
5039 template = @menuTemplate
5040 })
5041
5042 if (isSlidesDesign)
5043 {
5044 <script>
5045 function goToLevel(level) {
5046 document.getElementById('mobileNavigationWrapper').style.left = -(level * 100) + "%";
5047 }
5048
5049 document.addEventListener('DOMContentLoaded', function () {
5050 goToLevel(document.getElementById('mobileNavigationWrapper').querySelectorAll('input[type=radio]:checked').length);
5051 });
5052 </script>
5053 }
5054
5055 @* if (renderPagesInToolBar)
5056 {
5057 @RenderNavigation(new
5058 {
5059 id = "topToolsMobileNavigation",
5060 cssclass = "menu menu-mobile dwnavigation",
5061 template = "ToolsMenuForMobile.xslt"
5062 })
5063 } *@
5064 }
5065
5066 @helper RenderMobileNavigationActions()
5067 {
5068 List<Block> subBlocks = this.mobileNavigationBlocksPage.GetBlockListById("MobileNavigationActions").OrderBy(item => item.SortId).ToList(); ;
5069
5070 <ul class="menu menu-mobile">
5071 @RenderBlockList(subBlocks)
5072 </ul>
5073 }
5074
5075 @helper RenderMobileNavigationSignInAction()
5076 {
5077 <li class="menu-mobile__item">
5078 <label for="SignInModalTrigger" onclick="document.getElementById('MobileNavTrigger').checked = false;" class="menu-mobile__link dw-mod menu-mobile__link--highlighted"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue menu-mobile__link-icon"></i> @Translate("Sign in")</label>
5079 </li>
5080 }
5081
5082 @helper RenderMobileNavigationCreateAccountAction()
5083 {
5084 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
5085
5086 <li class="menu-mobile__item">
5087 <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>
5088 </li>
5089 }
5090
5091 @helper RenderMobileNavigationProfileAction()
5092 {
5093 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
5094 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
5095 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile");
5096 string myProfilePageLink = linkStart + myProfilePageId;
5097
5098 <li class="menu-mobile__item">
5099 <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>
5100 </li>
5101 }
5102
5103 @helper RenderMobileNavigationOrdersAction()
5104 {
5105 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
5106 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
5107 int myOrdersPageId = GetPageIdByNavigationTag("CustomerOrders");
5108 string myOrdersPageLink = linkStart + myOrdersPageId;
5109 string ordersIcon = "fas fa-list";
5110
5111 <li class="menu-mobile__item">
5112 <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>
5113 </li>
5114 }
5115
5116 @helper RenderMobileNavigationFavoritesAction()
5117 {
5118 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
5119 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
5120 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites");
5121 string myFavoritesPageLink = linkStart + myFavoritesPageId;
5122 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";
5123
5124
5125 <li class="menu-mobile__item">
5126 <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>
5127 </li>
5128 }
5129
5130 @helper RenderMobileNavigationSavedCardsAction()
5131 {
5132 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
5133 string linkStart = Model.CurrentUser.ID <= 0 ? "/Default.aspx?ID=" + signInProfilePageId + "&RedirectPageId=" : "/Default.aspx?ID=";
5134 int mySavedCardsPageId = GetPageIdByNavigationTag("SavedCards");
5135 string mySavedCardsPageLink = linkStart + mySavedCardsPageId;
5136 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";
5137
5138 <li class="menu-mobile__item">
5139 <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>
5140 </li>
5141 }
5142
5143 @helper RenderMobileNavigationSignOutAction()
5144 {
5145 int pageId = Model.TopPage.ID;
5146 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";
5147
5148 <li class="menu-mobile__item">
5149 <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>
5150 </li>
5151 }
5152
5153 @helper RenderMobileNavigationLanguagesAction()
5154 {
5155 bool isSlidesDesign = Model.Area.Item.GetItem("Layout").GetItem("MobileNavigation").GetList("Design").SelectedValue == "Slides";
5156
5157 string selectedLanguage = "";
5158 foreach (var lang in Model.Languages)
5159 {
5160 if (lang.IsCurrent)
5161 {
5162 selectedLanguage = lang.Name;
5163 }
5164 }
5165
5166 <li class="menu-mobile__item dw-mod">
5167 @if (isSlidesDesign)
5168 {
5169 <input id="MobileMenuCheck_Language" type="radio" class="expand-trigger" name="mobile-menu-level-1" onclick="goToLevel(1);">
5170 }
5171 else
5172 {
5173 <input id="MobileMenuCheck_Language" type="checkbox" class="expand-trigger">
5174 }
5175 <div class="menu-mobile__link__wrap">
5176 <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>
5177 <label for="MobileMenuCheck_Language" class="menu-mobile__trigger"></label>
5178 </div>
5179 <ul class="menu-mobile menu-mobile__submenu expand-menu">
5180 @if (isSlidesDesign)
5181 {
5182 <li class="menu-mobile__item dw-mod">
5183 <div class="menu-mobile__link__wrap">
5184 <input id="MobileMenuCheck_Language_back" type="radio" class="expand-trigger" name="mobile-menu-level-1" onclick="goToLevel(0);" />
5185 <label for="MobileMenuCheck_Language_back" class="menu-mobile__trigger menu-mobile__trigger--back"></label>
5186 <label for="MobileMenuCheck_Language_back" class="menu-mobile__link dw-mod ">@Translate("Back")</label>
5187 </div>
5188 </li>
5189 }
5190 @foreach (var lang in Model.Languages)
5191 {
5192 <li class="menu-mobile__item dw-mod">
5193 <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>
5194 </li>
5195 }
5196 </ul>
5197 </li>
5198 }</text>
5199 }
5200 else
5201 {
5202 <text>@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5203
5204 @using System
5205 @using System.Web
5206 @using System.Collections.Generic
5207 @using Dynamicweb.Rapido.Blocks.Extensibility
5208 @using Dynamicweb.Rapido.Blocks
5209
5210 @functions {
5211 BlocksPage headerBlocksPage = BlocksPage.GetBlockPage("Master");
5212 }
5213
5214 @{
5215 Block masterTools = new Block()
5216 {
5217 Id = "MasterDesktopTools",
5218 SortId = 10,
5219 Template = RenderDesktopTools(),
5220 SkipRenderBlocksList = true,
5221 BlocksList = new List<Block>
5222 {
5223 new Block {
5224 Id = "MasterDesktopToolsText",
5225 SortId = 10,
5226 Template = RenderDesktopToolsText(),
5227 Design = new Design
5228 {
5229 Size = "auto",
5230 HidePadding = true,
5231 RenderType = RenderType.Column
5232 }
5233 },
5234 new Block {
5235 Id = "MasterDesktopToolsNavigation",
5236 SortId = 20,
5237 Template = RenderDesktopToolsNavigation(),
5238 Design = new Design
5239 {
5240 Size = "auto-width",
5241 HidePadding = true,
5242 RenderType = RenderType.Column
5243 }
5244 }
5245 }
5246 };
5247 headerBlocksPage.Add("MasterHeader", masterTools);
5248
5249 Block masterDesktopExtra = new Block()
5250 {
5251 Id = "MasterDesktopExtra",
5252 SortId = 10,
5253 Template = RenderDesktopExtra(),
5254 SkipRenderBlocksList = true
5255 };
5256 headerBlocksPage.Add("MasterHeader", masterDesktopExtra);
5257
5258 Block masterDesktopNavigation = new Block()
5259 {
5260 Id = "MasterDesktopNavigation",
5261 SortId = 20,
5262 Template = RenderDesktopNavigation(),
5263 SkipRenderBlocksList = true
5264 };
5265 headerBlocksPage.Add("MasterHeader", masterDesktopNavigation);
5266 }
5267
5268 @* Include the Blocks for the page *@
5269 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5270
5271 @using System
5272 @using System.Web
5273 @using Dynamicweb.Rapido.Blocks.Extensibility
5274 @using Dynamicweb.Rapido.Blocks
5275
5276 @{
5277 Block masterDesktopLogo = new Block
5278 {
5279 Id = "MasterDesktopLogo",
5280 SortId = 10,
5281 Template = RenderDesktopLogo(),
5282 Design = new Design
5283 {
5284 Size = "auto-width",
5285 HidePadding = true,
5286 RenderType = RenderType.Column,
5287 CssClass = "grid--align-self-center"
5288 }
5289 };
5290
5291 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopLogo);
5292 }
5293
5294
5295 @helper RenderDesktopLogo()
5296 {
5297 string firstPageId = Model.Area.FirstActivePage.ID.ToString();
5298 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
5299 string alignClass = topLayout == "two-lines-centered" || topLayout == "two-lines" ? "grid--align-self-center" : "";
5300 alignClass = topLayout == "splitted-center" ? "u-middle" : alignClass;
5301 string logo = Model.Area.Item.GetItem("Layout").GetFile("LogoImage") != null ? Model.Area.Item.GetItem("Layout").GetFile("LogoImage").PathUrlEncoded : "/Files/Images/logo-dynamicweb.png";
5302 string logoLink = Pageview.Area.CultureInfo.TwoLetterISOLanguageName;
5303 logoLink = logoLink == "en" ? "/en" : "/";
5304
5305 if (Path.GetExtension(logo).ToLower() != ".svg")
5306 {
5307 int logoHeight = Model.Area.Item.GetItem("Layout").GetInt32("LogoHeight");
5308 logoHeight = logoHeight > 0 && Pageview.Device.ToString() != "Mobile" ? logoHeight : 40;
5309 logo = "/Admin/Public/GetImage.ashx?height=" + Converter.ToString(logoHeight) + "&crop=5&Compression=75&image=" + logo;
5310 }
5311 else
5312 {
5313 logo = HttpUtility.UrlDecode(logo);
5314 }
5315
5316 <div class="logo @alignClass dw-mod">
5317 <a href="@logoLink" class="logo__img dw-mod u-block">
5318 <img class="grid__cell-img logo__img dw-mod" src="@logo" alt="@Translate("Logo")" />
5319 </a>
5320 </div>
5321 }
5322 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5323
5324 @using Dynamicweb.Frontend.Navigation
5325 @using System
5326 @using System.Web
5327 @using Dynamicweb.Rapido.Blocks.Extensibility
5328 @using Dynamicweb.Rapido.Blocks
5329
5330 @functions {
5331 bool isMegaMenu;
5332 }
5333
5334 @{
5335 isMegaMenu = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("NavigationMegaMenu") != null ? Converter.ToBoolean(Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("NavigationMegaMenu").SelectedValue) : false;
5336 Block masterDesktopMenu = new Block
5337 {
5338 Id = "MasterDesktopMenu",
5339 SortId = 10,
5340 Template = RenderDesktopMenu(),
5341 Design = new Design
5342 {
5343 Size = "auto",
5344 HidePadding = true,
5345 RenderType = RenderType.Column
5346 }
5347 };
5348
5349 if (isMegaMenu)
5350 {
5351 masterDesktopMenu.Design.CssClass = "u-reset-position";
5352 }
5353
5354 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopMenu);
5355 }
5356
5357 @helper RenderDesktopMenu()
5358 {
5359 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
5360 string menuAlignment = topLayout == "minimal-right" ? "grid--align-self-end" : "";
5361 menuAlignment = topLayout == "minimal-center" ? "grid--align-self-center" : topLayout;
5362 string megamenuPromotionImage = Model.Area.Item.GetItem("Layout").GetItem("Header").GetFile("MegamenuPromotionImage") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetFile("MegamenuPromotionImage").PathUrlEncoded : "";
5363 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar");
5364 bool showOnlyHeaders = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowOnlyHeaders");
5365 int startLevel = renderPagesInToolBar ? 1 : 0;
5366 string promotionLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("MegamenuPromotionLink");
5367 string isHomepage = Model.Area.FirstPage.ID == Model.ID ? "true" : "false";
5368 int productPage = GetPageIdByNavigationTag("ProductsPage");
5369 int toolsPage = GetPageIdByNavigationTag("ToolsNavigationTag");
5370
5371 <div class="grid__cell u-flex @(isMegaMenu ? "u-reset-position" : "") @menuAlignment">
5372 @if (!isMegaMenu)
5373 {
5374
5375 var navigationSettings = new NavigationSettings();
5376 navigationSettings.StartLevel = 1;
5377 navigationSettings.StopLevel = 3;
5378 navigationSettings.ExpandMode = ExpandMode.All;
5379 navigationSettings.RootPageId = toolsPage;
5380 navigationSettings.ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All;
5381
5382 <div>
5383 @Navigation.RenderNavigation("../Navigation/LeftNavigationExpandable.cshtml", navigationSettings)
5384
5385 </div>
5386 int navigationCustomMenuId = GetPageIdByNavigationTag("MainCustomMenu");
5387
5388 }
5389 else
5390 {
5391 @RenderNavigation(new
5392 {
5393 id = "topnavigation",
5394 cssclass = "menu dw-mod dwnavigation u-full-max-width u-flex grid--wrap",
5395 startLevel = startLevel,
5396 ecomStartLevel = startLevel + 1,
5397 endlevel = 5,
5398 promotionImage = megamenuPromotionImage,
5399 promotionLink = promotionLink,
5400 expandmode = "all",
5401 showOnlyHeaders = showOnlyHeaders.ToString().ToLower(),
5402 template = "BaseMegaMenu.xslt",
5403 isHomepage = isHomepage,
5404 productsPage = productPage,
5405 parenttag = "toolsMenu"
5406 });
5407 }
5408 </div>
5409 }
5410 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5411
5412 @using System
5413 @using System.Web
5414 @using Dynamicweb.Rapido.Blocks.Extensibility
5415 @using Dynamicweb.Rapido.Blocks
5416
5417 @{
5418 Block masterDesktopActionsMenu = new Block
5419 {
5420 Id = "MasterDesktopActionsMenu",
5421 SortId = 10,
5422 Template = RenderDesktopActionsMenu(),
5423 Design = new Design
5424 {
5425 CssClass = "u-flex"
5426 },
5427 SkipRenderBlocksList = true
5428
5429 };
5430 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterDesktopActionsMenu);
5431
5432 if (!string.IsNullOrWhiteSpace(Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonLink")))
5433 {
5434 Block masterDesktopActionsHeaderButton = new Block
5435 {
5436 Id = "MasterDesktopActionsHeaderButton",
5437 SortId = 10,
5438 Template = RenderHeaderButton()
5439 };
5440 masterDesktopActionsMenu.Add(masterDesktopActionsHeaderButton);
5441 }
5442 }
5443
5444 @helper RenderDesktopActionsMenu()
5445 {
5446 List<Block> subBlocks = this.headerBlocksPage.GetBlockListById("MasterDesktopActionsMenu").OrderBy(item => item.SortId).ToList();
5447
5448 <ul class="menu u-flex dw-mod">
5449 @RenderBlockList(subBlocks)
5450 </ul>
5451 }
5452
5453 @helper RenderHeaderButton()
5454 {
5455 string headerButtonText = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonText");
5456 string headerButtonLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("HeaderButtonLink");
5457 string headerButtonType = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType") != null ? "btn--" + Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("HeaderButtonType").SelectedName.ToLower() : "";
5458
5459 <li class="menu__item menu__item--horizontal menu--clean dw-mod">
5460 <a class="btn @headerButtonType dw-mod u-no-margin u-margin-left header__buton" href="@headerButtonLink"><span class="header__buton-icon"><i class="fas fa-envelope-open"></i></span>@headerButtonText</a>
5461 </li>
5462 }
5463 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5464
5465 @using System
5466 @using System.Web
5467 @using Dynamicweb.Core;
5468 @using System.Text.RegularExpressions
5469 @using Dynamicweb.Rapido.Blocks.Extensibility
5470 @using Dynamicweb.Rapido.Blocks
5471
5472 @{
5473 Block masterDesktopActionsMenuLanguageSelector = new Block
5474 {
5475 Id = "MasterDesktopActionsMenuLanguageSelector",
5476 SortId = 40,
5477 Template = RenderLanguageSelector()
5478 };
5479
5480 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuLanguageSelector);
5481 }
5482
5483 @helper RenderLanguageSelector()
5484 {
5485 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
5486 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean";
5487 string menuLinkClass = topLayout != "normal" && topLayout != "splitted-center" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
5488 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() : "";
5489
5490 if (Model.Languages.Count > 1)
5491 {
5492 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon is-dropdown is-dropdown--no-icon dw-mod">
5493 <div class="@menuLinkClass dw-mod" title="@Translate("Language")">
5494 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("LanguageIcon").SelectedValue fa-1_5x"></i>
5495 </div>
5496 <div class="menu menu--dropdown menu--dropdown-right languages-dropdown dw-mod grid__cell">
5497 @foreach (var lang in Model.Languages)
5498 {
5499 string widthClass = "menu__item--fixed-width";
5500 string langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " u-margin-right\"></span>" + lang.Name;
5501 string cultureName = Regex.Replace(Dynamicweb.Services.Areas.GetArea(lang.ID).CultureInfo.NativeName, @" ?\(.*?\)", string.Empty);
5502 cultureName = char.ToUpper(cultureName[0]) + cultureName.Substring(1);
5503
5504 if (languageViewType == "flag-culture")
5505 {
5506 langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " \"></span> " + cultureName;
5507 }
5508
5509 if (languageViewType == "flag")
5510 {
5511 langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " \"></span>";
5512 widthClass = "";
5513 }
5514
5515 if (languageViewType == "name")
5516 {
5517 langInfo = lang.Name;
5518 }
5519
5520 if (languageViewType == "culture")
5521 {
5522 langInfo = cultureName;
5523 widthClass = "";
5524 }
5525
5526 <div class="menu__item dw-mod @widthClass">
5527 <a href="/Default.aspx?AreaID=@Dynamicweb.Services.Pages.GetPage(lang.Page.ID).Area.ID" class="menu-dropdown__link dw-mod">@langInfo</a>
5528 </div>
5529 }
5530 </div>
5531 </li>
5532 }
5533 }
5534 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5535
5536 @using System
5537 @using System.Web
5538 @using Dynamicweb.Rapido.Blocks.Extensibility
5539 @using Dynamicweb.Rapido.Blocks
5540
5541 @{
5542 Block masterDesktopActionsMenuSignIn = new Block
5543 {
5544 Id = "MasterDesktopActionsMenuSignIn",
5545 SortId = 20,
5546 Template = RenderSignIn()
5547 };
5548
5549 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuSignIn);
5550 }
5551
5552 @helper RenderSignIn()
5553 {
5554 bool navigationItemsHideSignIn = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSignIn");
5555 string userInitials = "";
5556 int pageId = Model.TopPage.ID;
5557 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
5558 int myDashboardPageId = GetPageIdByNavigationTag("CustomerDashboard");
5559 int myProfilePageId = GetPageIdByNavigationTag("CustomerProfile");
5560 int myOrdersPageId = GetPageIdByNavigationTag("CustomerOrders");
5561 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites");
5562 int mySavedCardsPageId = GetPageIdByNavigationTag("SavedCards");
5563 int myOrderDraftsPageId = GetPageIdByNavigationTag("OrderDraft");
5564 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
5565 bool hideCreateAccountLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideCreateAccount");
5566 bool hideMyProfileLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideProfile");
5567 bool hideMyOrdersLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideOrders");
5568 bool hideMySavedCardsLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideSavedCards");
5569 bool hideMyOrderDraftsLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideOrderDrafts");
5570 bool hideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideFavorites");
5571 bool hideForgotPasswordLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("SignInHideForgotPasswordLink");
5572
5573 string linkStart = "/Default.aspx?ID=";
5574 if (Model.CurrentUser.ID <= 0)
5575 {
5576 linkStart += signInProfilePageId + "&RedirectPageId=";
5577 }
5578
5579 string forgotPasswordPageLink = "/Default.aspx?ID=" + signInProfilePageId + "&LoginAction=Recovery";
5580 string myProfilePageLink = linkStart + myProfilePageId;
5581 string myOrdersPageLink = linkStart + myOrdersPageId;
5582 string myFavoritesPageLink = linkStart + myFavoritesPageId;
5583 string mySavedCardsPageLink = linkStart + mySavedCardsPageId;
5584 string myOrderDraftsLink = linkStart + myOrderDraftsPageId;
5585
5586 string profileIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue : "fa fa-user";
5587 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";
5588 string orderDraftsIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("DraftIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("DraftIcon").SelectedValue : "fa fa-clipboard";
5589
5590 if (Model.CurrentUser.ID != 0)
5591 {
5592 userInitials = Dynamicweb.Rapido.Services.User.GetInitials(Model.CurrentUser.Name, Model.CurrentUser.FirstName, Model.CurrentUser.LastName, Model.CurrentUser.Email, Model.CurrentUser.UserName);
5593 }
5594
5595 if (!navigationItemsHideSignIn)
5596 {
5597 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
5598 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu__item--clean";
5599 string menuLinkClass = topLayout != "normal" && topLayout != "splitted-center" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
5600
5601 <li class="menu__item menu__item--horizontal menu__item menu__item--icon @liClasses is-dropdown is-dropdown--no-icon dw-mod sign_in_element">
5602 <div class="@menuLinkClass dw-mod">
5603 @if (Model.CurrentUser.ID <= 0)
5604 {
5605 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SignInProfileIcon").SelectedValue fa-1_5x" title="@Translate("Sign in")"></i>
5606 }
5607 else
5608 {
5609 <a href="/default.aspx?ID=@myDashboardPageId" class="u-color-inherit" title="@Translate("Customer center")"><div class="circle-icon-btn">@userInitials.ToUpper()</div></a>
5610 }
5611 </div>
5612 <div class="menu menu--dropdown menu--dropdown-right menu--sign-in grid__cell dw-mod">
5613 <ul class="list list--clean dw-mod">
5614 @if (Model.CurrentUser.ID <= 0)
5615 {
5616 <li>
5617 <label for="SignInModalTrigger" class="btn btn--primary btn--full u-no-margin sign-in-modal-trigger-button dw-mod" onclick="setTimeout(function () { document.getElementById('LoginUsername').focus() }, 10)">@Translate("Sign in")</label>
5618 </li>
5619
5620 if (!hideCreateAccountLink)
5621 {
5622 @RenderListItem("/default.aspx?ID=" + createAccountPageId, Translate("Create account"));
5623 }
5624 if (!hideForgotPasswordLink)
5625 {
5626 @RenderListItem(forgotPasswordPageLink, Translate("Forgot your password?"))
5627 }
5628 if (!hideMyProfileLink || !hideMyOrdersLink || !hideMyFavoritesLink || !hideMySavedCardsLink)
5629 {
5630 @RenderSeparator()
5631 }
5632 }
5633 @if (!hideMyProfileLink)
5634 {
5635 @RenderListItem(myProfilePageLink, Translate("My Profile"), profileIcon)
5636 }
5637 @if (!hideMyOrdersLink)
5638 {
5639 @RenderListItem(myOrdersPageLink, Translate("My Orders"), "fas fa-list")
5640 }
5641 @if (!hideMyFavoritesLink)
5642 {
5643 @RenderListItem(myFavoritesPageLink, Translate("My Favorites"), favoritesIcon)
5644 }
5645 @if (!hideMySavedCardsLink)
5646 {
5647 @RenderListItem(mySavedCardsPageLink, Translate("My Saved cards"), "fas fa-credit-card")
5648 }
5649 @if (!hideMyOrderDraftsLink)
5650 {
5651 @RenderListItem(myOrderDraftsLink, Translate("My Order drafts"), orderDraftsIcon)
5652 }
5653 @if (Model.CurrentUser.ID > 0)
5654 {
5655 if (!hideMyProfileLink || !hideMyOrdersLink || !hideMyFavoritesLink || !hideMySavedCardsLink)
5656 {
5657 @RenderSeparator()
5658 }
5659
5660 //Check if impersonation is on
5661 if (Model.CurrentSecondaryUser != null && Model.CurrentSecondaryUser.ID > 0)
5662 {
5663 <li>
5664 <div class="list__link dw-mod" onclick="document.getElementById('StopImpersonationModalTrigger').checked = true;">
5665 @Translate("Sign out")
5666 </div>
5667 </li>
5668 } else {
5669 @RenderListItem("/Admin/Public/ExtranetLogoff.aspx?ID=" + pageId, Translate("Sign out"))
5670 }
5671 }
5672 </ul>
5673 </div>
5674 </li>
5675 }
5676 }
5677
5678 @helper RenderListItem(string link, string text, string icon = null) {
5679 <li>
5680 <a href="@link" class="list__link dw-mod" onclick="RememberState.SetCookie('useAnotherAddress', false)">
5681 @if (!string.IsNullOrEmpty(icon)){<i class="@icon u-margin-right"></i>}@text
5682 </a>
5683 </li>
5684 }
5685
5686 @helper RenderSeparator()
5687 {
5688 <li class="list__seperator dw-mod"></li>
5689 }
5690 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5691
5692 @using System
5693 @using System.Web
5694 @using Dynamicweb.Rapido.Blocks.Extensibility
5695 @using Dynamicweb.Rapido.Blocks
5696
5697 @{
5698 bool hideMyFavoritesLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideFavorites");
5699
5700 Block masterDesktopActionsMenuFavorites = new Block
5701 {
5702 Id = "MasterDesktopActionsMenuFavorites",
5703 SortId = 30,
5704 Template = RenderFavorites()
5705 };
5706
5707 if (!hideMyFavoritesLink && Model.CurrentUser.ID > 0)
5708 {
5709 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuFavorites);
5710 }
5711 }
5712
5713 @helper RenderFavorites()
5714 {
5715 int myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites");
5716 string myFavoritesPageLink = "/Default.aspx?ID=" + myFavoritesPageId;
5717
5718 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
5719 string liClasses = topLayout != "normal" && topLayout != "splitted-center" ? "menu__item--top-level u-hidden-xxs" : "menu--clean";
5720 string menuLinkClass = topLayout != "normal" && topLayout != "splitted-center" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
5721
5722 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon dw-mod">
5723 <a href="@myFavoritesPageLink" class="@menuLinkClass dw-mod" title="@Translate("Favorites")">
5724 <i class="fas fa-@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("FavoriteIcon").SelectedValue fa-1_5x"></i>
5725 </a>
5726 </li>
5727 }
5728 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5729
5730 @using System
5731 @using System.Web
5732 @using Dynamicweb.Rapido.Blocks.Extensibility
5733 @using Dynamicweb.Rapido.Blocks
5734 @using Dynamicweb.Rapido.Services
5735 @using Dynamicweb.Ecommerce
5736 @using Dynamicweb.Ecommerce.Orders
5737 @using Df.Dw
5738
5739 @{
5740 bool hideCart = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideCart");
5741 string miniCartLayout = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("Layout") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("Layout").SelectedValue : "dropdown";
5742
5743 var totalNumberOfProductsForDefault = 0;
5744 using (var contexter = new OrderContexter(Dynamicweb.Ecommerce.Orders.OrderContext.GetOrderContextById("ORDERCONTEXT7")))
5745 {
5746 var cartContext = Dynamicweb.Ecommerce.Common.Context.Cart;
5747 totalNumberOfProductsForDefault = cartContext != null ? Converter.ToInt32(cartContext.ProductOrderLines.Sum(ol => ol.Quantity)) : 0;
5748 }
5749
5750 var totalNumberOfProductsForIngrasaminte = 0;
5751 using (var contexter = new OrderContexter(Dynamicweb.Ecommerce.Orders.OrderContext.GetOrderContextById("ORDERCONTEXT5")))
5752 {
5753 var cartContext = Dynamicweb.Ecommerce.Common.Context.Cart;
5754 totalNumberOfProductsForIngrasaminte = cartContext != null ? Converter.ToInt32(cartContext.ProductOrderLines.Sum(ol => ol.Quantity)) : 0;
5755 }
5756
5757 var totalNumberOfProductsForAllCarts = totalNumberOfProductsForDefault + totalNumberOfProductsForIngrasaminte;
5758
5759 if (Dynamicweb.Rapido.Services.User.IsBuyingAllowed() && !hideCart)
5760 {
5761 Block masterDesktopActionsMenuMiniCart = new Block
5762 {
5763 Id = "MasterDesktopActionsMenuMiniCart",
5764 SortId = 60,
5765 Template = RenderMiniCart(miniCartLayout == "dropdown"),
5766 SkipRenderBlocksList = true,
5767 BlocksList = new List<Block>()
5768 };
5769
5770 Block miniCartCounterScriptTemplate = new Block
5771 {
5772 Id = "MiniCartCounterScriptTemplate",
5773 Template = RenderMiniCartCounterContent()
5774 };
5775
5776 //dropdown layout is default
5777 RazorEngine.Templating.TemplateWriter layoutTemplate;
5778 RazorEngine.Templating.TemplateWriter miniCartTriggerTemplate;
5779
5780 switch (miniCartLayout)
5781 {
5782 case "dropdown":
5783 layoutTemplate = RenderMiniCartDropdownLayout();
5784 miniCartTriggerTemplate = RenderMiniCartTriggerLink(totalNumberOfProductsForDefault, totalNumberOfProductsForIngrasaminte);
5785 break;
5786 case "panel":
5787 layoutTemplate = RenderMiniCartPanelLayout();
5788 //miniCartTriggerTemplate = RenderMiniCartTriggerLabel();
5789 miniCartTriggerTemplate = RenderMiniCartTriggerLabel(totalNumberOfProductsForDefault, totalNumberOfProductsForIngrasaminte);
5790 break;
5791 case "modal":
5792 layoutTemplate = RenderMiniCartModalLayout();
5793 miniCartTriggerTemplate = RenderMiniCartTriggerLabel(totalNumberOfProductsForDefault, totalNumberOfProductsForIngrasaminte);
5794 break;
5795 case "none":
5796 default:
5797 layoutTemplate = RenderMiniCartDropdownLayout();
5798 miniCartTriggerTemplate = RenderMiniCartTriggerLink(totalNumberOfProductsForDefault, totalNumberOfProductsForIngrasaminte);
5799 break;
5800 }
5801
5802 masterDesktopActionsMenuMiniCart.BlocksList.Add(new Block
5803 {
5804 Id = "MiniCartTrigger",
5805 Template = miniCartTriggerTemplate
5806 });
5807
5808 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
5809 {
5810 masterDesktopActionsMenuMiniCart.BlocksList.Add(new Block
5811 {
5812 Id = "MiniCartLayout",
5813 Template = layoutTemplate
5814 });
5815 }
5816
5817 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuMiniCart);
5818 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", miniCartCounterScriptTemplate);
5819 }
5820
5821 if (hideCart && Dynamicweb.Rapido.Services.User.IsBuyingAllowed())
5822 {
5823 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", new Block {
5824 Id = "CartInitialization"
5825 });
5826 }
5827 }
5828
5829 @helper RenderMiniCart(bool hasMouseEnterEvent)
5830 {
5831 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterDesktopActionsMenuMiniCart").OrderBy(item => item.SortId).ToList();
5832 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
5833 string liClasses = topLayout != "normal" ? "menu__item--top-level" : "menu--clean";
5834 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
5835 string mouseEvent = "";
5836 string id = "MiniCart";
5837 if (hasMouseEnterEvent)
5838 {
5839 mouseEvent = "onmouseenter=\"Cart.UpdateMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '/Default.aspx?ID=" + miniCartFeedPageId + "&feedType=MiniCart')\"";
5840 id = "miniCartTrigger";
5841 }
5842 <li class="menu__item menu__item--horizontal menu__item--icon @liClasses dw-mod" id="@id" @mouseEvent>
5843 @RenderBlockList(subBlocks)
5844 </li>
5845 }
5846
5847 @helper RenderMiniCartTriggerLabel(int totalNumberOfProductsForDefault = 0, int totalNumberOfProductsForIngrasaminte = 0)
5848 {
5849 int cartPageId = GetPageIdByNavigationTag("CartPage");
5850 string cartIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue : "fa fa-cart";
5851 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
5852 string menuLinkClass = topLayout != "normal" && topLayout != "splitted-center" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
5853 int miniCartFeedDefaultPageId = GetPageIdByNavigationTag("MiniCartFeed");
5854 int miniCartFeedIngrasamintePageId = GetPageIdByNavigationTag("MiniCartFeedIngrasaminte");
5855 int miniCartFeedSelectedPageId = totalNumberOfProductsForDefault > 0 || totalNumberOfProductsForIngrasaminte == 0 ? miniCartFeedDefaultPageId : miniCartFeedIngrasamintePageId;
5856
5857 <div id="minicart_icon" data-miniCartFeedId="@miniCartFeedDefaultPageId" data-miniCartFeed-IngrasaminteId="@miniCartFeedIngrasamintePageId" data-miniCart-ContextId="@miniCartFeedSelectedPageId" class="@menuLinkClass dw-mod js-mini-cart-button" onclick="Cart.UpdateMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '/Default.aspx?ID=@miniCartFeedSelectedPageId&feedType=MiniCart')" title="@Translate("Cart")">
5858 <div class="u-inline u-position-relative">
5859 <i class="@cartIcon fa-1_5x"></i>
5860 @RenderMiniCartCounter(totalNumberOfProductsForDefault, totalNumberOfProductsForIngrasaminte)
5861 </div>
5862 </div>
5863 }
5864
5865 @helper RenderMiniCartTriggerLink(int totalNumberOfProductsForDefault = 0, int totalNumberOfProductsForIngrasaminte = 0)
5866 {
5867 int cartPageId = GetPageIdByNavigationTag("CartPage");
5868 string cartIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue : "fa fa-cart";
5869 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
5870 string menuLinkClass = topLayout != "normal" && topLayout != "splitted-center" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
5871
5872 <a href="/Default.aspx?ID=@cartPageId&Purge=True" class="@menuLinkClass menu__item--icon dw-mod js-mini-cart-button" title="@Translate("Cart")">
5873 <span class="u-inline u-position-relative">
5874 <i class="@cartIcon fa-1_5x"></i>
5875 @RenderMiniCartCounter(totalNumberOfProductsForDefault, totalNumberOfProductsForIngrasaminte)
5876 </span>
5877 </a>
5878 }
5879
5880 @helper RenderMiniCartCounter(int totalNumberOfProductsForDefault = 0, int totalNumberOfProductsForIngrasaminte = 0)
5881 {
5882 int miniCartFeedDefaultPageId = GetPageIdByNavigationTag("MiniCartFeed");
5883 int miniCartFeedIngrasamintePageId = GetPageIdByNavigationTag("MiniCartFeedIngrasaminte");
5884 int miniCartFeedSelectedPageId = totalNumberOfProductsForDefault > 0 || totalNumberOfProductsForIngrasaminte == 0 ? miniCartFeedDefaultPageId : miniCartFeedIngrasamintePageId;
5885
5886 string cartProductsCount = (totalNumberOfProductsForDefault + totalNumberOfProductsForIngrasaminte).ToString();
5887 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right";
5888 bool showPrice = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetBoolean("ShowPrice");
5889 string cartProductsTotalPrice = showPrice && Model.Cart.TotalPrice != null ? Model.Cart.TotalPrice.Price.Formatted : "";
5890 cartProductsTotalPrice = counterPosition == "right" ? cartProductsTotalPrice : "";
5891
5892 if (showPrice && counterPosition == "right")
5893 {
5894 cartProductsCount = Translate("Cart") + " (" + cartProductsCount + ")";
5895 }
5896 <span class="mini-cart__counter @(counterPosition == "right" ? "mini-cart__counter--inline" : "") dw-mod">
5897 <span class="js-handlebars-root js-mini-cart-counter" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedSelectedPageId&feedType=Counter" data-init-onload="false" data-preloader="false">
5898 <span class="js-mini-cart-counter-content" data-count="@cartProductsCount">
5899 @cartProductsCount @cartProductsTotalPrice
5900 </span>
5901 </span>
5902 </span>
5903 }
5904
5905 @helper RenderMiniCartCounterContent()
5906 {
5907 bool showPrice = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetBoolean("ShowPrice");
5908 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right";
5909 bool showPriceInMiniCartCounter = Pageview.Device.ToString() != "Mobile" && counterPosition == "right" && showPrice;
5910
5911 <script id="MiniCartCounterContent" type="text/x-template">
5912 {{#.}}
5913 <span class="js-mini-cart-counter-content dw-mod" data-count="{{totalnumberofproductsforallcarts}}">
5914 @if (showPriceInMiniCartCounter)
5915 {
5916 @Translate("Cart")<text>({{totalnumberofproductsforallcarts}}) {{totalprice}}</text>
5917 }
5918 else
5919 {
5920 <text>{{totalnumberofproductsforallcarts}}</text>
5921 }
5922 </span>
5923 {{/.}}
5924 </script>
5925 }
5926
5927
5928
5929 @helper RenderMiniCartDropdownLayout()
5930 {
5931 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
5932 string cartPageLink = "Default.aspx?ID=" + GetPageIdByNavigationTag("CartPage");
5933
5934 <div class="mini-cart mini-cart-dropdown js-mini-cart grid__cell dw-mod" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="dropdown" data-cart-page-link="@cartPageLink">
5935 <div class="mini-cart-dropdown__inner dw-mod">
5936 <h3 class="u-ta-center dw-mod">@Translate("Shopping cart")</h3>
5937 <div class="mini-cart-dropdown__body u-flex dw-mod">
5938 <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>
5939 </div>
5940 </div>
5941 </div>
5942 }
5943
5944 @helper RenderMiniCartPanelLayout()
5945 {
5946 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
5947 int minicartIngrasaminteFeedPageId = GetPageIdByNavigationTag("MiniCartFeedIngrasaminte");
5948 string cartPageLink = "Default.aspx?ID=" + GetPageIdByNavigationTag("CartPage");
5949 string cartIngrasamintePageLink = "Default.aspx?ID=" + GetPageIdByNavigationTag("CartPageIngrasaminte");
5950
5951
5952 <div class="mini-cart grid__cell dw-mod">
5953 <input type="checkbox" id="miniCartTrigger" class="panel-trigger" />
5954 <div class="panel panel--right panel--with-close-btn dw-mod js-mini-cart" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="block" data-cart-page-link="@cartPageLink">
5955 <label for="miniCartTrigger" class="panel__close-btn" title="@Translate("Close panel")"><i class="fas fa-times"></i></label>
5956 <div class="panel__content u-full-width dw-mod">
5957 <h3 class="panel__header dw-mod u-margin-bottom u-ta-center">@Translate("Shopping cart")</h3>
5958 <div class="panel__content-body panel__content-body--cart dw-mod">
5959 <div class="select__carts-wrapper">
5960 <select id="CartSelect" data-json-feed="/Default.aspx?feedType=MiniCart&ID=">
5961 <option value="@minicartIngrasaminteFeedPageId">Cosul Ingrasaminte</option>
5962 <option value="@miniCartFeedPageId">Cosul cu restul produselor</option>
5963 </select>
5964 </div>
5965 <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>
5966 </div>
5967 </div>
5968 </div>
5969 </div>
5970 }
5971
5972 @helper RenderMiniCartModalLayout()
5973 {
5974 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
5975 string cartPageLink = "Default.aspx?ID=" + GetPageIdByNavigationTag("CartPage");
5976
5977 <div class="mini-cart grid__cell dw-mod">
5978 <input type="checkbox" id="miniCartTrigger" class="modal-trigger" autocomplete="off" />
5979 <div class="modal-container dw-mod js-mini-cart" id="miniCart" data-cart-id="@miniCartFeedPageId" data-show-type="block" data-cart-page-link="@cartPageLink">
5980 <label for="miniCartTrigger" class="modal-overlay"></label>
5981 <div class="modal modal--md modal--top-right dw-mod">
5982 <div class="modal__body u-flex grid--direction-column dw-mod">
5983 <h3 class="dw-mod u-ta-center">@Translate("Shopping cart")</h3>
5984 <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>
5985 </div>
5986 <label class="modal__close-btn modal__close-btn--clean dw-mod" for="miniCartTrigger" title="@Translate("Close modal")"></label>
5987 </div>
5988 </div>
5989 </div>
5990 }
5991
5992 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
5993
5994 @using System
5995 @using System.Web
5996 @using Dynamicweb.Rapido.Blocks.Extensibility
5997 @using Dynamicweb.Rapido.Blocks
5998
5999 @{
6000 bool showOrderDraftLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowOrderDraftIcon");
6001
6002 Block masterDesktopActionsMenuOrderDraft = new Block
6003 {
6004 Id = "MasterDesktopActionsMenuOrderDraft",
6005 SortId = 40,
6006 Template = RenderOrderDraft()
6007 };
6008
6009 if (showOrderDraftLink && Model.CurrentUser.ID > 0)
6010 {
6011 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuOrderDraft);
6012 }
6013 }
6014
6015 @helper RenderOrderDraft()
6016 {
6017 int OrderDraftPageId = GetPageIdByNavigationTag("OrderDraft");
6018 string OrderDraftPageLink = "/Default.aspx?ID=" + OrderDraftPageId;
6019 string draftIcon = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("DraftIcon") != null ? Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("DraftIcon").SelectedValue : "fa fa-clipboard";
6020
6021
6022 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
6023 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean";
6024 string menuLinkClass = topLayout != "normal" && topLayout != "splitted-center" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
6025
6026 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon dw-mod">
6027 <a href="@OrderDraftPageLink" class="@menuLinkClass dw-mod" title="@Translate("My order drafts")">
6028 <span class="u-inline u-position-relative">
6029 <i class="@draftIcon fa-1_5x"></i>
6030 </span>
6031 </a>
6032 </li>
6033 }
6034 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
6035
6036 @using System
6037 @using System.Web
6038 @using Dynamicweb.Rapido.Blocks.Extensibility
6039 @using Dynamicweb.Rapido.Blocks
6040
6041 @{
6042 bool showDownloadCartLink = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowDownloadCart");
6043
6044 Block masterDesktopActionsMenuDownloadCart = new Block
6045 {
6046 Id = "MasterDesktopActionsMenuDownloadCart",
6047 SortId = 50,
6048 Template = RenderDownloadCart()
6049 };
6050
6051 if (showDownloadCartLink && Model.CurrentUser.ID > 0)
6052 {
6053 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterDesktopActionsMenuDownloadCart);
6054 }
6055 }
6056
6057 @helper RenderDownloadCart()
6058 {
6059 int downloadCartPageId = GetPageIdByNavigationTag("DownloadCart");
6060 string downloadCartPageLink = "/Default.aspx?ID=" + downloadCartPageId;
6061
6062 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
6063 string liClasses = topLayout != "normal" ? "menu__item--top-level u-hidden-xxs" : "menu--clean";
6064 string menuLinkClass = topLayout != "normal" && topLayout != "splitted-center" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
6065 string counterPosition = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("CounterPosition").SelectedValue : "right";
6066
6067 <li class="menu__item menu__item--horizontal @liClasses menu__item--icon dw-mod">
6068 <a href="@downloadCartPageLink" class="@menuLinkClass dw-mod" title="@Translate("Download cart")">
6069 <span class="u-inline u-position-relative">
6070 <i class="fas fa-cart-arrow-down fa-1_5x"></i>
6071 <span class="mini-cart__counter u-hidden @(counterPosition == "right" ? "mini-cart__counter--inline" : "") dw-mod js-download-cart-counter"></span>
6072 </span>
6073 </a>
6074 </li>
6075 }
6076 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
6077
6078 @using System
6079 @using System.Web
6080 @using Dynamicweb.Rapido.Blocks.Extensibility
6081 @using Dynamicweb.Rapido.Blocks
6082
6083 @functions {
6084 public class SearchConfiguration
6085 {
6086 public string searchFeedId { get; set; }
6087 public string searchSecondFeedId { get; set; }
6088 public int groupsFeedId { get; set; }
6089 public string resultPageLink { get; set; }
6090 public string searchPlaceholder { get; set; }
6091 public string searchType { get; set; }
6092 public string searchTemplate { get; set; }
6093 public string searchContentTemplate { get; set; }
6094 public string searchValue { get; set; }
6095 public bool showGroups { get; set; }
6096
6097 public SearchConfiguration()
6098 {
6099 searchFeedId = "";
6100 searchSecondFeedId = "";
6101 searchType = "product-search";
6102 searchContentTemplate = "";
6103 showGroups = true;
6104 }
6105 }
6106 }
6107 @{
6108 Block masterSearchBar = new Block
6109 {
6110 Id = "MasterSearchBar",
6111 SortId = 40,
6112 Template = RenderSearch("bar"),
6113 Design = new Design
6114 {
6115 Size = "auto",
6116 HidePadding = true,
6117 RenderType = RenderType.Column
6118 }
6119 };
6120
6121 Block masterSearchAction = new Block
6122 {
6123 Id = "MasterDesktopActionsMenuSearch",
6124 SortId = 10,
6125 Template = RenderSearch()
6126 };
6127
6128 BlocksPage.GetBlockPage("Master").Add("MasterHeader", masterSearchBar);
6129 BlocksPage.GetBlockPage("Master").Add("MasterDesktopActionsMenu", masterSearchAction);
6130 }
6131
6132 @helper RenderSearch(string type = "mini-search")
6133 {
6134 string productsPageId = Converter.ToString(GetPageIdByNavigationTag("ProductsPage"));
6135 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID;
6136 string searchType = Model.Area.Item.GetItem("Layout").GetList("TopSearch") != null ? Model.Area.Item.GetItem("Layout").GetList("TopSearch").SelectedValue : "productSearch";
6137
6138 SearchConfiguration searchConfiguration = null;
6139
6140 switch (searchType) {
6141 case "contentSearch":
6142 searchConfiguration = new SearchConfiguration() {
6143 searchFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true",
6144 resultPageLink = contentSearchPageLink,
6145 searchPlaceholder = Translate("Search page"),
6146 groupsFeedId = 0,
6147 searchType = "content-search",
6148 searchTemplate = "SearchPagesTemplate",
6149 showGroups = false
6150 };
6151 break;
6152 case "combinedSearch":
6153 searchConfiguration = new SearchConfiguration() {
6154 searchFeedId = productsPageId + "&feed=true",
6155 searchSecondFeedId = GetPageIdByNavigationTag("ContentSearchFeed") + "&Areaid=" + Model.Area.ID + "&pagesOnly=true",
6156 resultPageLink = Converter.ToString(productsPageId),
6157 searchPlaceholder = Translate("Search products or pages"),
6158 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed"),
6159 searchType = "combined-search",
6160 searchTemplate = "SearchProductsTemplateWrap",
6161 searchContentTemplate = "SearchPagesTemplateWrap",
6162 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector")
6163 };
6164 break;
6165 default: //productSearch
6166 searchConfiguration = new SearchConfiguration() {
6167 resultPageLink = Converter.ToString(productsPageId),
6168 searchFeedId = productsPageId + "&feed=true",
6169 groupsFeedId = GetPageIdByNavigationTag("ProductGroupsFeed"),
6170 searchPlaceholder = Translate("Search products"),
6171 searchTemplate = "SearchProductsTemplate",
6172 searchType = "product-search",
6173 showGroups = Model.Area.Item.GetItem("Layout").GetBoolean("ShowGroupsSelector")
6174 };
6175 break;
6176 }
6177 searchConfiguration.searchValue = HttpContext.Current.Request.QueryString.Get("Search") ?? "";
6178
6179 if (type == "mini-search") {
6180 @RenderMiniSearch(searchConfiguration)
6181 } else {
6182 @RenderSearchBar(searchConfiguration)
6183 }
6184 }
6185
6186 @helper RenderSearchBar(SearchConfiguration options)
6187 {
6188 <div class="typeahead typeahead--centered u-color-inherit js-typeahead dw-mod" id="ProductSearchBar"
6189 data-page-size="7"
6190 data-search-feed-id="@options.searchFeedId"
6191 data-search-second-feed-id="@options.searchSecondFeedId"
6192 data-result-page-id="@options.resultPageLink"
6193 data-groups-page-id="@options.groupsFeedId"
6194 data-search-type="@options.searchType">
6195 @if (options.showGroups)
6196 {
6197 <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>
6198 <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>
6199 }
6200 <div class="typeahead-search-field">
6201 <input type="text" class="u-no-margin u-full-width u-full-height js-typeahead-search-field" placeholder="@options.searchPlaceholder" value="@options.searchValue">
6202 @if (string.IsNullOrEmpty(options.searchSecondFeedId))
6203 {
6204 <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>
6205 }
6206 else
6207 {
6208 <div class="dropdown dropdown--absolute-position dropdown--combined grid">
6209 <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>
6210 <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>
6211 </div>
6212 }
6213 </div>
6214 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn" title="@Translate("Search")"><i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue"></i></button>
6215 </div>
6216 }
6217
6218 @helper RenderMiniSearch(SearchConfiguration options)
6219 {
6220 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
6221 string menuLinkClass = topLayout != "normal" && topLayout != "splitted-center" ? "menu__link menu__link--icon" : "header-menu__link header-menu__link--icon";
6222
6223 <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" id="miniSearchIcon">
6224 <div class="@menuLinkClass dw-mod" title="@Translate("Search")">
6225 <i class="@Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue fa-1_5x"></i>
6226 </div>
6227 <div class="menu menu--dropdown menu--dropdown-right u-no-padding u-w380px grid__cell dw-mod">
6228 <div class="typeahead js-typeahead" id="ProductSearchBar"
6229 data-page-size="7"
6230 data-search-feed-id="@options.searchFeedId"
6231 data-search-second-feed-id="@options.searchSecondFeedId"
6232 data-result-page-id="@options.resultPageLink"
6233 data-search-type="@options.searchType">
6234 <div class="typeahead-search-field">
6235 <input type="text" class="u-no-margin u-full-width js-typeahead-search-field" id="headerSearch" placeholder="@options.searchPlaceholder" value="@options.searchValue">
6236 @if (string.IsNullOrEmpty(options.searchSecondFeedId))
6237 {
6238 <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>
6239 }
6240 else
6241 {
6242 <div class="dropdown dropdown--absolute-position dropdown--combined grid dropdown--right-aligned">
6243 <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>
6244 <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>
6245 </div>
6246 }
6247 </div>
6248 </div>
6249 </div>
6250 </li>
6251 }
6252 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
6253
6254 @using System
6255 @using System.Web
6256 @using Dynamicweb.Rapido.Blocks.Extensibility
6257 @using Dynamicweb.Rapido.Blocks
6258
6259 @{
6260 string headerConfigurationTopLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
6261 bool headerConfigurationHideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch");
6262
6263 BlocksPage headerConfigurationPage = BlocksPage.GetBlockPage("Master");
6264
6265 Block configDesktopLogo = headerConfigurationPage.GetBlockById("MasterDesktopLogo");
6266 headerConfigurationPage.RemoveBlock(configDesktopLogo);
6267
6268 Block configDesktopMenu = headerConfigurationPage.GetBlockById("MasterDesktopMenu");
6269 headerConfigurationPage.RemoveBlock(configDesktopMenu);
6270
6271 Block configSearchBar = headerConfigurationPage.GetBlockById("MasterSearchBar");
6272 headerConfigurationPage.RemoveBlock(configSearchBar);
6273
6274 Block configSearchAction = headerConfigurationPage.GetBlockById("MasterDesktopActionsMenuSearch");
6275 headerConfigurationPage.RemoveBlock(configSearchAction);
6276
6277 Block configDesktopActionsMenu = headerConfigurationPage.GetBlockById("MasterDesktopActionsMenu");
6278 headerConfigurationPage.RemoveBlock(configDesktopActionsMenu);
6279
6280 Block configDesktopExtra = headerConfigurationPage.GetBlockById("MasterDesktopExtra");
6281
6282 switch (headerConfigurationTopLayout)
6283 {
6284 case "condensed": //2
6285 configDesktopLogo.Design.Size = "auto-width";
6286 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo);
6287
6288 configDesktopMenu.SortId = 20;
6289 configDesktopMenu.Design.Size = "auto";
6290 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6291
6292 configDesktopActionsMenu.SortId = 30;
6293 configDesktopActionsMenu.Design.Size = "auto-width";
6294 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
6295
6296 if (!headerConfigurationHideSearch)
6297 {
6298 configSearchBar.SortId = 40;
6299 configSearchBar.Design.Size = "12";
6300 configDesktopExtra.SortId = 50;
6301 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar);
6302 }
6303 break;
6304 case "splitted": //3
6305 configDesktopLogo.Design.Size = "auto";
6306 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
6307
6308 if (!headerConfigurationHideSearch)
6309 {
6310 configSearchBar.SortId = 20;
6311 configSearchBar.Design.Size = "auto";
6312 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar);
6313 }
6314
6315 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6316
6317 configDesktopActionsMenu.SortId = 20;
6318 configDesktopActionsMenu.Design.Size = "auto-width";
6319 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
6320 break;
6321 case "splitted-center": //4
6322 configDesktopLogo.Design.Size = "auto";
6323 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
6324 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6325
6326 configDesktopActionsMenu.SortId = 30;
6327 configDesktopActionsMenu.Design.Size = "auto-width";
6328 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopActionsMenu);
6329
6330 if (!headerConfigurationHideSearch)
6331 {
6332 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
6333 }
6334 break;
6335 case "minimal": //5
6336 configDesktopLogo.Design.Size = "auto-width";
6337 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo);
6338
6339 configDesktopMenu.Design.Size = "auto";
6340 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6341
6342 configDesktopActionsMenu.SortId = 20;
6343 configDesktopActionsMenu.Design.Size = "auto-width";
6344 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
6345
6346 if (!headerConfigurationHideSearch)
6347 {
6348 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
6349 }
6350 break;
6351 case "minimal-center": //6
6352 configDesktopLogo.Design.Size = "auto-width";
6353 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo);
6354
6355 configDesktopMenu.Design.Size = "auto";
6356 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6357
6358 configDesktopActionsMenu.SortId = 20;
6359 configDesktopActionsMenu.Design.Size = "auto-width";
6360 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
6361
6362 if (!headerConfigurationHideSearch)
6363 {
6364 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
6365 }
6366 break;
6367 case "minimal-right": //7
6368 configDesktopLogo.Design.Size = "auto-width";
6369 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopLogo);
6370
6371 configDesktopMenu.Design.Size = "auto";
6372 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6373
6374 configDesktopActionsMenu.SortId = 20;
6375 configDesktopActionsMenu.Design.Size = "auto-width";
6376 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
6377
6378 if (!headerConfigurationHideSearch)
6379 {
6380 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
6381 }
6382 break;
6383 case "two-lines": //8
6384 configDesktopLogo.Design.Size = "auto";
6385 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
6386
6387 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6388
6389 configDesktopActionsMenu.SortId = 20;
6390 configDesktopActionsMenu.Design.Size = "auto-width";
6391 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
6392
6393 if (!headerConfigurationHideSearch)
6394 {
6395 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
6396 }
6397 break;
6398 case "two-lines-centered": //9
6399 configDesktopLogo.Design.Size = "auto";
6400 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
6401
6402 configDesktopMenu.Design.Size = "auto-width";
6403 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6404
6405 configDesktopActionsMenu.SortId = 20;
6406 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopActionsMenu);
6407
6408 if (!headerConfigurationHideSearch)
6409 {
6410 headerConfigurationPage.Add("MasterDesktopActionsMenu", configSearchAction);
6411 }
6412 break;
6413 case "normal": //1
6414 default:
6415 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopLogo);
6416
6417 if (!headerConfigurationHideSearch)
6418 {
6419 configSearchBar.SortId = 20;
6420 headerConfigurationPage.Add("MasterDesktopExtra", configSearchBar);
6421 }
6422
6423 configDesktopActionsMenu.SortId = 30;
6424 headerConfigurationPage.Add("MasterDesktopExtra", configDesktopActionsMenu);
6425
6426 configDesktopActionsMenu.Design.Size = "auto-width";
6427 headerConfigurationPage.Add("MasterDesktopNavigation", configDesktopMenu);
6428 break;
6429 }
6430 }
6431 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
6432
6433 @using System
6434 @using System.Web
6435 @using Dynamicweb.Rapido.Blocks.Extensibility
6436 @using Dynamicweb.Rapido.Blocks
6437
6438 @{
6439
6440 }
6441
6442
6443 @helper RenderDesktopTools()
6444 {
6445 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopTools").OrderBy(item => item.SortId).ToList();
6446
6447 <div class="tools-navigation dw-mod">
6448 <div class="center-container grid top-container__center-container dw-mod">
6449 @RenderBlockList(subBlocks)
6450 </div>
6451 </div>
6452 }
6453
6454 @helper RenderDesktopToolsText()
6455 {
6456 string toolsText = Model.Area.Item.GetItem("Layout").GetItem("Header").GetString("ToolsText");
6457 if (!string.IsNullOrEmpty(toolsText))
6458 {
6459 <div class="u-margin-top u-margin-bottom">@toolsText</div>
6460 }
6461 }
6462
6463 @helper RenderDesktopToolsNavigation()
6464 {
6465 bool renderPagesInToolBar = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("RenderPagesInToolBar");
6466
6467 if (renderPagesInToolBar)
6468 {
6469 @RenderNavigation(new
6470 {
6471 id = "topToolsNavigation",
6472 cssclass = "menu menu-tools dw-mod dwnavigation",
6473 template = "TopMenu.xslt",
6474 endlevel = 1,
6475 startlevel = 1
6476 })
6477 }
6478 <div class = "desktop-search">
6479 <span class="search-desktop-header"><i class="fas fa-search"></i></span>
6480 @RenderMobileTopSearchBar()
6481
6482
6483 @{
6484 List<Dynamicweb.Content.Page> languages = new List<Dynamicweb.Content.Page>();
6485 Uri url = Dynamicweb.Context.Current.Request.Url;
6486 string hostName = url.Host;
6487
6488
6489 if (Pageview.Area.IsMaster)
6490 {
6491 languages.Add(Pageview.Page);
6492 if (Pageview.Page.Languages != null)
6493 {
6494 foreach (var language in Pageview.Page.Languages)
6495 {
6496 languages.Add(language);
6497 }
6498 }
6499 }
6500 else
6501 {
6502 languages.Add(Pageview.Page.MasterPage);
6503 if (Pageview.Page.MasterPage != null)
6504 {
6505 if (Pageview.Page.MasterPage.Languages != null)
6506 {
6507 foreach (var language in Pageview.Page.MasterPage.Languages)
6508 {
6509 languages.Add(language);
6510 }
6511 }
6512 }
6513 }
6514
6515 foreach (var language in languages)
6516 {
6517 if (language?.Area != null)
6518 {
6519 if (language != null && language.Area.Active && language.Area.ID != Dynamicweb.Frontend.PageView.Current().AreaID)
6520 {
6521 if (!string.IsNullOrEmpty(language.Area.DomainLock))
6522 {
6523 hostName = language.Area.DomainLock; //dk.domain.com or dk-domain.dk
6524 }
6525 string querystring = $"Default.aspx?ID={language.ID}";
6526
6527 string friendlyUrl = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(querystring);
6528 string href = $"{url.Scheme}://{hostName}{friendlyUrl}";
6529 string defaultUrl = $"{url.Scheme}://{hostName}";
6530
6531
6532 <span class="language-selector-header">
6533 @if(language.Area.CultureInfo.Name.ToLower() == "en-gb") {
6534 <a href ="@href">EN</a>
6535 }
6536 else if(language.Area.CultureInfo.Name.ToLower() == "ro-ro") {
6537 <a href="@href">RO</a>
6538 }
6539
6540 </span>
6541 }
6542 }
6543 }
6544 }
6545
6546
6547
6548
6549
6550 @*<span class="language-selector-header"><a href ="/en/home">EN </a>/<a href="/"> RO</a></span>*@
6551
6552
6553
6554
6555 </div>
6556 }
6557
6558 @helper RenderDesktopNavigation()
6559 {
6560 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopNavigation").OrderBy(item => item.SortId).ToList();
6561 string topLayout = Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout") != null ? Model.Area.Item.GetItem("Layout").GetItem("Header").GetList("TopLayout").SelectedValue : "normal";
6562 string alignClass = topLayout == "two-lines-centered" ? "grid--justify-center" : "";
6563 <nav class="main-navigation dw-mod">
6564 <div class="center-container top-container__center-container grid @alignClass dw-mod">
6565 @RenderBlockList(subBlocks)
6566
6567 </div>
6568 <div class = "navigation-overlay"></div>
6569 </nav>
6570 }
6571
6572 @helper RenderDesktopExtra()
6573 {
6574 List<Block> subBlocks = headerBlocksPage.GetBlockListById("MasterDesktopExtra").OrderBy(item => item.SortId).ToList();
6575
6576 if (subBlocks.Count > 0)
6577 {
6578 <div class="header header-top dw-mod">
6579 <div class="center-container top-container__center-container grid--justify-space-between grid grid--align-center dw-mod">
6580 <div class="menu-bars__wrapper">
6581 <i class="fas fa-bars"></i>
6582 </div>
6583 @RenderBlockList(subBlocks)
6584 </div>
6585 </div>
6586 }
6587 }</text>
6588 }
6589
6590 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
6591
6592 @using System
6593 @using System.Web
6594 @using Dynamicweb.Rapido.Blocks.Extensibility
6595 @using Dynamicweb.Rapido.Blocks
6596 @using Dynamicweb.Rapido.Blocks.Components.General
6597 @using Dynamicweb.Frontend
6598
6599 @functions {
6600 int impersonationPageId;
6601 string impersonationLayout;
6602 int impersonationFeed;
6603 Block impersonationBar;
6604
6605 string getUserNameFromParams(string firstName, string middleName, string lastName, string name, string email, string userName)
6606 {
6607 string username = "";
6608
6609 if (!string.IsNullOrEmpty(firstName) && !string.IsNullOrEmpty(lastName))
6610 {
6611 username = firstName + " " + (!string.IsNullOrEmpty(middleName) ? middleName + " " : "") + lastName;
6612 }
6613 else if (!string.IsNullOrEmpty(name))
6614 {
6615 username = name;
6616 }
6617 else if (!string.IsNullOrEmpty(email))
6618 {
6619 username = email;
6620 }
6621 else
6622 {
6623 username = userName;
6624 }
6625 return username;
6626 }
6627
6628 string getUserName(UserViewModel user)
6629 {
6630 return getUserNameFromParams(user.FirstName, user.MiddleName, user.LastName, user.Name, user.Email, user.UserName);
6631 }
6632
6633 string getUserName(Dynamicweb.Security.UserManagement.User user)
6634 {
6635 return getUserNameFromParams(user.FirstName, user.MiddleName, user.LastName, user.Name, user.Email, user.UserName);
6636 }
6637 }
6638
6639 @{
6640 impersonationPageId = GetPageIdByNavigationTag("Impersonation");
6641 impersonationLayout = Model.Area.Item.GetItem("Ecommerce").GetList("ImpersonationLayout") != null ? Model.Area.Item.GetItem("Ecommerce").GetList("ImpersonationLayout").SelectedValue : "bar";
6642 impersonationFeed = GetPageIdByNavigationTag("UsersFeed");
6643
6644 if (Model.CurrentUser.ID > 0 && Model.SecondaryUsers.Count > 0)
6645 {
6646 impersonationBar = new Block
6647 {
6648 Id = "ImpersonationBar",
6649 SortId = 50,
6650 Template = RenderImpersonation(),
6651 SkipRenderBlocksList = true,
6652 Design = new Design
6653 {
6654 Size = "auto-width",
6655 HidePadding = true,
6656 RenderType = RenderType.Column
6657 }
6658 };
6659
6660 if (impersonationLayout == "top-bar") {
6661 impersonationBar.SortId = 9;
6662 }
6663
6664 Block impersonationContent = new Block
6665 {
6666 Id = "ImpersonationContent",
6667 SortId = 20
6668 };
6669
6670 if (Model.CurrentSecondaryUser != null && Model.CurrentSecondaryUser.ID > 0)
6671 {
6672 //Render stop impersonation view
6673 impersonationContent.Template = RenderStopImpersonationView();
6674
6675
6676 Modal stopImpersonation = new Modal
6677 {
6678 Id = "StopImpersonation",
6679 Heading = new Heading {
6680 Level = 2,
6681 Title = Translate("Sign out"),
6682 Icon = new Icon {
6683 Name = "fa-sign-out",
6684 Prefix = "fas",
6685 LabelPosition = IconLabelPosition.After
6686 }
6687 },
6688 Width = ModalWidth.Sm,
6689 BodyTemplate = RenderStopImpersonationForm()
6690 };
6691
6692 Block stopImpersonationBlock = new Block
6693 {
6694 Id = "StopImpersonationBlock",
6695 SortId = 10,
6696 Component = stopImpersonation
6697 };
6698 impersonationBar.BlocksList.Add(stopImpersonationBlock);
6699 }
6700 else
6701 {
6702 //Render main view
6703 switch (impersonationLayout)
6704 {
6705 case "right-lower-box":
6706 impersonationContent.BlocksList.Add(
6707 new Block {
6708 Id = "RightLowerBoxHeader",
6709 SortId = 10,
6710 Component = new Heading {
6711 Level = 5,
6712 Title = Translate("View the list of users you can sign in as"),
6713 CssClass = "impersonation-text"
6714 }
6715 }
6716 );
6717 impersonationContent.BlocksList.Add(
6718 new Block {
6719 Id = "RightLowerBoxContent",
6720 SortId = 20,
6721 Template = RenderImpersonationControls()
6722 }
6723 );
6724 break;
6725 case "right-lower-bar":
6726 impersonationContent.BlocksList.Add(
6727 new Block {
6728 Id = "RightLowerBarContent",
6729 SortId = 10,
6730 Template = RenderImpersonationControls()
6731 }
6732 );
6733 break;
6734 case "bar":
6735 default:
6736 impersonationContent.BlocksList.Add(
6737 new Block {
6738 Id = "ViewListLink",
6739 SortId = 20,
6740 Template = RenderViewListLink()
6741 }
6742 );
6743 impersonationContent.BlocksList.Add(
6744 new Block {
6745 Id = "BarTypeaheadSearch",
6746 SortId = 30,
6747 Template = RenderTypeaheadSearch()
6748 }
6749 );
6750 break;
6751 }
6752 }
6753 impersonationBar.BlocksList.Add(impersonationContent);
6754
6755 impersonationBar.BlocksList.Add(
6756 new Block
6757 {
6758 Id = "ImpersonationSearchTemplates",
6759 SortId = 30,
6760 Template = RenderSearchResultTemplate()
6761 }
6762 );
6763 if (impersonationLayout != "bar" && impersonationLayout != "top-bar")
6764 {
6765 impersonationBar.BlocksList.Add(
6766 new Block
6767 {
6768 Id = "ImpersonationSearchScripts",
6769 SortId = 40,
6770 Template = RenderSearchScripts()
6771 }
6772 );
6773 }
6774 BlocksPage.GetBlockPage("Master").Add("MasterHeader", impersonationBar);
6775 }
6776 }
6777
6778 @helper RenderImpersonation()
6779 {
6780 List<Block> subBlocks = impersonationBar.BlocksList.OrderBy(item => item.SortId).ToList();
6781 <input type="checkbox" class="impersonation-trigger js-remember-state" id="ImpersonationMinimizeTrigger" />
6782 <div class="impersonation impersonation--@(impersonationLayout)-layout dw-mod" id="Impersonation">
6783 @if (impersonationLayout == "right-lower-box")
6784 {
6785 @RenderRightLowerBoxHeader()
6786 }
6787 <div class="center-container top-container__center-container impersonation__container @(impersonationLayout != "bar" && impersonationLayout != "top-bar" ? "impersonation__container--box" : "") dw-mod">
6788 @*Impersonation*@
6789 @RenderBlockList(subBlocks)
6790 </div>
6791 </div>
6792 }
6793
6794 @helper RenderRightLowerBoxHeader()
6795 {
6796 <div class="impersonation__header dw-mod">
6797 <div class="impersonation__title">@Translate("Impersonation")</div>
6798 <label for="ImpersonationMinimizeTrigger" class="btn btn--impersonation impersonation__minimize-btn dw-mod" onclick="this.blur();">
6799 @Render(new Icon
6800 {
6801 Prefix = "fas",
6802 Name = "fa-window-minimize"
6803 })
6804 </label>
6805 </div>
6806 }
6807
6808 @helper RenderStopImpersonationView()
6809 {
6810 string secondaryUserName = getUserName(Model.CurrentSecondaryUser);
6811 string userName = getUserName(Pageview.User);
6812 string impersonationText = "<span class=\"impersonation-light-text dw-mod\">" + Translate("Logged in as") + "</span> <b>" + secondaryUserName + "</b> <span class=\"impersonation-light-text dw-mod\">" + Translate("by") + "</span> <b>" + userName + "</b> ";
6813 impersonationText = Dynamicweb.Security.UserManagement.User.ImpersonationMode == Dynamicweb.Security.UserManagement.UserImpersonation.Full ? "<span class=\"impersonation-light-text dw-mod\">" + Translate("Logged in as") + "</span> <b>" + userName + "</b> <span class=\"impersonation-light-text dw-mod\">" + Translate("by") + "</span> <b>" + secondaryUserName + "</b> " : impersonationText;
6814
6815 if (impersonationLayout == "right-lower-box")
6816 {
6817 <div class="u-margin-bottom--lg u-ta-center">
6818 @impersonationText
6819 </div>
6820 <div class="u-margin-bottom--lg u-ta-center">
6821 @RenderSwitchAccountButton()
6822 </div>
6823 @RenderStopImpersonationButton()
6824 }
6825 else
6826 {
6827 <div class="grid grid--align-center impersonation__stop-wrap">
6828 <div class="impersonation-bar-item dw-mod">
6829 @impersonationText
6830 </div>
6831 <div class="impersonation-bar-item dw-mod">
6832 @RenderSwitchAccountButton()
6833 </div>
6834 <div class="impersonation-bar-item dw-mod">
6835 @RenderStopImpersonationButton()
6836 </div>
6837 </div>
6838 }
6839 }
6840
6841 @helper RenderSwitchAccountButton() {
6842 @Render(new Button
6843 {
6844 Href = "/Default.aspx?ID=" + impersonationPageId,
6845 ButtonType = ButtonType.Button,
6846 ButtonLayout = ButtonLayout.Clean,
6847 Title = Translate("Switch account"),
6848 Icon = new Icon {
6849 Name = "fa-users",
6850 Prefix = "fal",
6851 LabelPosition = IconLabelPosition.After
6852 },
6853 CssClass = "u-no-margin u-color-inherit"
6854 })
6855 }
6856
6857 @helper RenderStopImpersonationForm()
6858 {
6859 string secondaryUserName = getUserName(Model.CurrentSecondaryUser);
6860 string userName = getUserName(Pageview.User);
6861 int pageId = Model.TopPage.ID;
6862
6863 <form method="post" class="u-no-margin">
6864 @Render(new Button
6865 {
6866 ButtonType = ButtonType.Submit,
6867 ButtonLayout = ButtonLayout.Secondary,
6868 Title = Translate("Sign out as") + " " + userName,
6869 Href = "/Default.aspx?ID=" + impersonationPageId,
6870 CssClass = "btn--full",
6871 Name = "DwExtranetRemoveSecondaryUser"
6872 })
6873
6874 @Render(new Button
6875 {
6876 ButtonType = ButtonType.Submit,
6877 ButtonLayout = ButtonLayout.Secondary,
6878 Title = Translate("Sign out as") + " " + secondaryUserName,
6879 Href = "/Admin/Public/ExtranetLogoff.aspx?ID=" + pageId,
6880 CssClass = "btn--full",
6881 Name = "DwExtranetRemoveSecondaryUser"
6882 })
6883 </form>
6884 }
6885
6886 @helper RenderStopImpersonationButton() {
6887 @Render(new Button
6888 {
6889 ButtonType = ButtonType.Button,
6890 ButtonLayout = ButtonLayout.Clean,
6891 Title = Translate("Sign out"),
6892 Icon = new Icon {
6893 Name = "fa-sign-out",
6894 Prefix = "fal",
6895 LabelPosition = IconLabelPosition.After
6896 },
6897 OnClick = "document.getElementById('StopImpersonationModalTrigger').checked = true",
6898 CssClass = "u-no-margin"
6899 })
6900 }
6901
6902 @helper RenderImpersonationControls()
6903 {
6904 <div class="impersonation__controls">
6905 @RenderViewListLink()
6906 @RenderSearchBox()
6907 </div>
6908 @RenderResultsList()
6909 }
6910
6911 @helper RenderViewListLink()
6912 {
6913 string title = impersonationLayout == "right-lower-box" ? Translate("View the list") : Translate("View the list of users you can sign in as");
6914 string buttonClasses = impersonationLayout == "right-lower-box" ? "impersonation__button btn btn--impersonation" : "impersonation__link impersonation__link";
6915
6916 @Render(new Link {
6917 ButtonLayout = ButtonLayout.None,
6918 Title = title,
6919 Href = "/Default.aspx?ID=" + impersonationPageId,
6920 CssClass = buttonClasses
6921 })
6922 }
6923
6924 @helper RenderSearchBox()
6925 {
6926 <div class="impersonation__search-wrap">
6927 <input placeholder="@Translate("Search users")" type="text" class="impersonation__search-field dw-mod" onkeyup="searchKeyUpHandler(event)" id="ImpersonationBoxSearchField">
6928 <div id="ImpersonationBoxSearchFind" class="impersonation__search-icon dw-mod" onclick="updateResults(document.getElementById('ImpersonationBoxSearchField').value)">
6929 <i class="fal fa-search"></i>
6930 </div>
6931 <div id="ImpersonationBoxSearchClear" class="impersonation__search-icon u-hidden dw-mod" onclick="clearResults();">
6932 <i class="fal fa-times"></i>
6933 </div>
6934 </div>
6935 }
6936
6937 @helper RenderTypeaheadSearch()
6938 {
6939 <div class="typeahead u-ta-right impersonation__typeahead js-typeahead dw-mod" id="ImpersonationSearchBar"
6940 data-page-size="5"
6941 data-search-feed-id="@impersonationFeed"
6942 data-result-page-id="@impersonationPageId"
6943 data-search-type="user-search"
6944 data-search-parameter-name="q">
6945
6946 <div class="typeahead-search-field">
6947 <input type="text" class="u-no-margin u-full-width js-typeahead-search-field" placeholder="@Translate("Search users")">
6948 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="ImpersonationSearchBarContent" data-template="ImpersonationSearchResult" data-json-feed="/Default.aspx?ID=@impersonationFeed" data-init-onload="false"></ul>
6949 </div>
6950 </div>
6951 }
6952
6953 @helper RenderResultsList()
6954 {
6955 <ul id="ImpersonationBoxSearchResults" class="impersonation__search-results js-handlebars-root dw-mod" data-template="ImpersonationSearchResult" data-json-feed="/Default.aspx?ID=@impersonationFeed" data-init-onload="false" data-preloader="minimal"></ul>
6956 }
6957
6958 @helper RenderSearchResultTemplate()
6959 {
6960 <script id="ImpersonationSearchResult" type="text/x-template">
6961 {{#.}}
6962 {{#Users}}
6963 <li class="impersonation__search-results-item impersonation-user">
6964 <form method="post" class="impersonation-user__form" name="account{{id}}">
6965 <input type="hidden" id="DWExtranetSecondaryUserSelector" name="DWExtranetSecondaryUserSelector" value="{{id}}">
6966 <div class="impersonation-user__info">
6967 <div class="impersonation-user__name">{{userName}}</div>
6968 <div class="impersonation-user__number">{{customerNumber}}</div>
6969 </div>
6970 @Render(new Button
6971 {
6972 ButtonType = ButtonType.Submit,
6973 ButtonLayout = ButtonLayout.Secondary,
6974 Title = Translate("Sign in as"),
6975 CssClass = "impersonation-user__sign-in-btn" + (impersonationLayout != "bar" ? " btn--impersonation" : "")
6976 })
6977 </form>
6978 </li>
6979 {{/Users}}
6980 {{#unless Users}}
6981 <li class="impersonation__search-results-item impersonation__search-results-item--not-found">
6982 @Translate("Your search gave 0 results")
6983 </li>
6984 {{/unless}}
6985 {{/.}}
6986 </script>
6987 }
6988
6989 @helper RenderSearchScripts()
6990 {
6991 <script>
6992 let inputDelayTimer;
6993 function searchKeyUpHandler(e) {
6994 clearTimeout(inputDelayTimer);
6995 let value = e.target.value;
6996 if (value != "") {
6997 inputDelayTimer = setTimeout(function () {
6998 updateResults(value);
6999 }, 500);
7000 } else {
7001 clearResults();
7002 }
7003 };
7004
7005 function updateResults(value) {
7006 if (value == "") {
7007 return null;
7008 }
7009 HandlebarsBolt.UpdateContent("ImpersonationBoxSearchResults", "/Default.aspx?ID=@impersonationFeed&q=" + value);
7010 document.getElementById("ImpersonationBoxSearchFind").classList.add("u-hidden");
7011 document.getElementById("ImpersonationBoxSearchClear").classList.remove("u-hidden");
7012 }
7013
7014 function clearResults() {
7015 document.getElementById("ImpersonationBoxSearchField").value = "";
7016 HandlebarsBolt.CleanContainer("ImpersonationBoxSearchResults");
7017 document.getElementById("ImpersonationBoxSearchFind").classList.remove("u-hidden");
7018 document.getElementById("ImpersonationBoxSearchClear").classList.add("u-hidden");
7019 }
7020 </script>
7021 }
7022 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
7023
7024 @using System
7025 @using System.Web
7026 @using System.Collections.Generic
7027 @using Dynamicweb.Rapido.Blocks.Extensibility
7028 @using Dynamicweb.Rapido.Blocks
7029
7030 @{
7031 BlocksPage miniCartBlocksPage = BlocksPage.GetBlockPage("Master");
7032 string orderlinesView = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("OrderlinesView") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("OrderlinesView").SelectedValue : "table";
7033
7034 Block orderLines = new Block
7035 {
7036 Id = "MiniCartOrderLines",
7037 SkipRenderBlocksList = true,
7038 BlocksList = new List<Block>
7039 {
7040 new Block {
7041 Id = "MiniCartOrderLinesList",
7042 SortId = 20,
7043 Template = RenderMiniCartOrderLinesList()
7044 }
7045 }
7046 };
7047
7048 Block orderlinesScriptTemplates = new Block
7049 {
7050 Id = "OrderlinesScriptTemplates"
7051 };
7052
7053 if (orderlinesView == "table")
7054 {
7055 orderLines.Template = RenderMiniCartOrderLinesTable();
7056 orderLines.BlocksList.Add(
7057 new Block
7058 {
7059 Id = "MiniCartOrderlinesTableHeader",
7060 SortId = 10,
7061 Template = RenderMiniCartOrderLinesHeader()
7062 }
7063 );
7064
7065 orderlinesScriptTemplates.Template = RenderMiniCartScriptsTableTemplates();
7066 }
7067 else
7068 {
7069 orderLines.Template = RenderMiniCartOrderLinesBlocks();
7070 orderlinesScriptTemplates.Template = RenderMiniCartScriptsListTemplates();
7071 }
7072
7073 miniCartBlocksPage.Add("MasterBottomSnippets", orderlinesScriptTemplates);
7074
7075 Block miniCartScriptTemplates = new Block()
7076 {
7077 Id = "MasterMiniCartTemplates",
7078 SortId = 1,
7079 Template = RenderMiniCartScriptTemplates(),
7080 SkipRenderBlocksList = true,
7081 BlocksList = new List<Block>
7082 {
7083 orderLines,
7084 new Block {
7085 Id = "MiniCartFooter",
7086 Template = RenderMiniCartFooter(),
7087 SortId = 50,
7088 SkipRenderBlocksList = true,
7089 BlocksList = new List<Block>
7090 {
7091 new Block {
7092 Id = "MiniCartSubTotal",
7093 Template = RenderMiniCartSubTotal(),
7094 SortId = 30
7095 },
7096 new Block {
7097 Id = "MiniCartFees",
7098 Template = RenderMiniCartFees(),
7099 SortId = 40
7100 },
7101 new Block {
7102 Id = "MiniCartPoints",
7103 Template = RenderMiniCartPoints(),
7104 SortId = 50
7105 },
7106 new Block {
7107 Id = "MiniCartTotal",
7108 Template = RenderMiniCartTotal(),
7109 SortId = 60
7110 },
7111 new Block {
7112 Id = "MiniCartDisclaimer",
7113 Template = RenderMiniCartDisclaimer(),
7114 SortId = 70
7115 },
7116 new Block {
7117 Id = "MiniCartActions",
7118 Template = RenderMiniCartActions(),
7119 SortId = 80
7120 }
7121 }
7122 }
7123 }
7124 };
7125
7126 miniCartBlocksPage.Add("MasterBottomSnippets", miniCartScriptTemplates);
7127 }
7128
7129 @helper RenderMiniCartScriptsTableTemplates()
7130 {
7131 <script id="MiniCartOrderline" type="text/x-template">
7132 {{#unless isEmpty}}
7133 <tr>
7134 <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}}" title="{{name}}"></a></td>
7135 <td class="u-va-middle">
7136 <a href="{{link}}" class="mini-cart-orderline__name" title="{{name}}">{{name}}</a>
7137 {{#if variantname}}
7138 <a href="{{link}}" class="mini-cart-orderline__name mini-cart-orderline__name--sm">{{variantname}}</a>
7139 {{/if}}
7140 {{#if unitname}}
7141 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm">{{unitname}}</div>
7142 {{/if}}
7143 </td>
7144 <td class="u-ta-right u-va-middle">{{quantity}}</td>
7145 <td class="u-ta-right u-va-middle">
7146 {{#if pointsTotal}}
7147 <span class="u-color--loyalty-points">{{pointsTotal}}</span> @Translate("points")
7148 {{else}}
7149 {{totalprice}}
7150 {{/if}}
7151 </td>
7152 </tr>
7153 {{/unless}}
7154 </script>
7155
7156 <script id="MiniCartOrderlineDiscount" type="text/x-template">
7157 {{#unless isEmpty}}
7158 <tr class="table__row--no-border">
7159 <td class="u-w60px"> </td>
7160 <td><div class="mini-cart-orderline__name dw-mod">{{name}}</div></td>
7161 <td class="u-ta-right"> </td>
7162 <td class="u-ta-right">{{totalprice}}</td>
7163 </tr>
7164 {{/unless}}
7165 </script>
7166 }
7167
7168 @helper RenderMiniCartScriptsListTemplates()
7169 {
7170
7171 <script id="MiniCartOrderline" type="text/x-template">
7172 {{#unless isEmpty}}
7173 <div class="mini-cart-orderline grid dw-mod">
7174 <div class="grid__col-4">
7175 <a href="{{link}}" class="{{hideimage}}">
7176 <img class="" src="/Admin/Public/GetImage.ashx?width=100&height=100&crop=5&Compression=75&image={{image}}" alt="{{name}}" title="{{name}}">
7177 </a>
7178 </div>
7179 <div class="grid__col-8">
7180 <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>
7181 {{#if variantname}}
7182 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Variant"): {{variantname}}</div>
7183 {{/if}}
7184 {{#if unitname}}
7185 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Unit"): {{unitname}}</div>
7186 {{/if}}
7187 <div class="mini-cart-orderline__name mini-cart-orderline__name--sm dw-mod">@Translate("Qty"): {{quantity}}</div>
7188
7189 <div class="grid__cell-footer">
7190 <div class="grid__cell">
7191 <div class="u-pull--left mini-cart-orderline__price dw-mod">
7192 {{#if pointsTotal}}
7193 <span class="u-color--loyalty-points">{{pointsTotal}}</span> @Translate("points")
7194 {{else}}
7195 {{totalprice}}
7196 {{/if}}
7197 </div>
7198 <button type="button"
7199 title="@Translate("Remove orderline")"
7200 class="btn btn--clean btn--condensed u-pull--right mini-cart-orderline__remove-btn dw-mod"
7201 onclick="{{#if googleImpression}}googleImpressionRemoveFromCart({{googleImpression}});{{/if}}Cart.UpdateCart('miniCartContent', '/Default.aspx?ID={{cartFeedPageId}}', '{{removeLink}}', true);">@Translate("Remove")</button>
7202 </div>
7203 </div>
7204 </div>
7205 </div>
7206 {{/unless}}
7207 </script>
7208
7209 <script id="MiniCartOrderlineDiscount" type="text/x-template">
7210 {{#unless isEmpty}}
7211 <div class="mini-cart-orderline mini-cart-orderline--discount grid dw-mod">
7212 <div class="grid__col-8">
7213 <div class="mini-cart-orderline__name mini-cart-orderline__name dw-mod">{{name}}</div>
7214 </div>
7215 <div class="grid__col-4 u-align-right">{{totalprice}}</div>
7216 </div>
7217 {{/unless}}
7218 </script>
7219 }
7220
7221 @helper RenderMiniCartScriptTemplates()
7222 {
7223 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterMiniCartTemplates").OrderBy(item => item.SortId).ToList();
7224 bool useGoogleTagManager = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("GoogleTagManagerID"));
7225 string cartPageLink = string.Concat("/Default.aspx?ID=", GetPageIdByNavigationTag("CartPage"));
7226 bool miniCartUseGoogleTagManager = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("GoogleTagManagerID"));
7227
7228 <script id="MiniCartContent" type="text/x-template">
7229 {{#.}}
7230 {{#unless isEmpty}}
7231 @if (miniCartUseGoogleTagManager)
7232 {
7233 <text>{{{googleEnchantImpressionEmptyCart OrderLines}}}</text>
7234 }
7235 @RenderBlockList(subBlocks)
7236 {{/unless}}
7237
7238 {{#if isEmpty}}
7239 {{cartIsEmptyMessage}}
7240 {{/if}}
7241 {{/.}}
7242 </script>
7243 }
7244
7245 @helper RenderMiniCartOrderLinesTable()
7246 {
7247 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartOrderLines").OrderBy(item => item.SortId).ToList();
7248
7249 <div class="u-overflow-auto">
7250 <table class="table mini-cart-table dw-mod">
7251 @RenderBlockList(subBlocks)
7252 </table>
7253 </div>
7254 }
7255
7256 @helper RenderMiniCartOrderLinesBlocks()
7257 {
7258 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartOrderLines").OrderBy(item => item.SortId).ToList();
7259
7260 <div class="u-overflow-hidden">
7261 @RenderBlockList(subBlocks)
7262 </div>
7263 }
7264
7265 @helper RenderMiniCartOrderLinesHeader()
7266 {
7267 <thead>
7268 <tr>
7269 <td> </td>
7270 <td>@Translate("Product")</td>
7271 <td class="u-ta-right">@Translate("Qty")</td>
7272 <td class="u-ta-right" width="120">@Translate("Price")</td>
7273 </tr>
7274 </thead>
7275 }
7276
7277 @helper RenderMiniCartOrderLinesList()
7278 {
7279 <text>
7280 {{#OrderLines}}
7281 {{#ifCond template "===" "CartOrderline"}}
7282 {{>MiniCartOrderline}}
7283 {{/ifCond}}
7284 {{#ifCond template "===" "CartOrderlineMobile"}}
7285 {{>MiniCartOrderline}}
7286 {{/ifCond}}
7287 {{#ifCond template "===" "CartOrderlineDiscount"}}
7288 {{>MiniCartOrderlineDiscount}}
7289 {{/ifCond}}
7290 {{/OrderLines}}
7291 </text>
7292 }
7293
7294 @helper RenderMiniCartFees()
7295 {
7296 bool pointShop = Pageview.AreaSettings.GetItem("Ecommerce").GetBoolean("PointShopOnly");
7297 if (!pointShop)
7298 {
7299 <text>
7300 {{#unless hidePaymentfee}}
7301 <div class="grid">
7302 <div class="grid__col-6 grid__col--bleed-y">
7303 {{paymentmethod}}
7304 </div>
7305 <div class="grid__col-6 grid__col--bleed-y grid--align-end">{{paymentfee}}</div>
7306 </div>
7307 {{/unless}}
7308 </text>
7309 }
7310 <text>
7311 {{#unless hideShippingfee}}
7312 <div class="grid">
7313 <div class="grid__col-6 grid__col--bleed-y">
7314 {{shippingmethod}}
7315 </div>
7316 <div class="grid__col-6 grid__col--bleed-y grid--align-end">{{shippingfee}}</div>
7317 </div>
7318 {{/unless}}
7319 </text>
7320 <text>
7321 {{#if hasTaxSettings}}
7322 <div class="grid">
7323 <div class="grid__col-6 grid__col--bleed-y">@Translate("Sales Tax")</div>
7324 <div class="grid__col-6 grid__col--bleed-y grid--align-end">{{totaltaxes}}</div>
7325 </div>
7326 {{/if}}
7327 </text>
7328 }
7329
7330 @helper RenderMiniCartFooter()
7331 {
7332 List<Block> subBlocks = this.masterPage.GetBlockListById("MiniCartFooter").OrderBy(item => item.SortId).ToList();
7333
7334 <div class="mini-cart__footer u-border-top u-padding-top dw-mod">
7335 @RenderBlockList(subBlocks)
7336 </div>
7337 }
7338
7339 @helper RenderMiniCartActions()
7340 {
7341 int cartPageId = GetPageIdByNavigationTag("CartPage");
7342
7343 <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, '{{orderContext}}');">@Translate("Empty cart")</button>
7344 <a href="/Default.aspx?ID={{cartPageId}}" title="@Translate("Go to cart")" class="btn btn--primary u-full-width u-no-margin dw-mod">@Translate("Go to cart")</a>
7345 }
7346
7347 @helper RenderMiniCartPoints()
7348 {
7349 <text>
7350 {{#if earnings}}
7351 <div class="grid">
7352 <div class="grid__col-6 grid__col--bleed-y">@Translate("Earnings")</div>
7353 <div class="grid__col-6 grid__col--bleed-y grid--align-end">
7354 <div>
7355 <span class="u-color--loyalty-points">{{earnings}}</span> @Translate("points")
7356 </div>
7357 </div>
7358 </div>
7359 {{/if}}
7360 </text>
7361 }
7362
7363 @helper RenderMiniCartSubTotal()
7364 {
7365 bool hasTaxSettings = Dynamicweb.Rapido.Services.Countries.HasTaxSettings(Model.Cart.ID);
7366 bool pointShop = Pageview.AreaSettings.GetItem("Ecommerce").GetBoolean("PointShopOnly");
7367 if (!pointShop)
7368 {
7369 <text>
7370 {{#unless hideSubTotal}}
7371 <div class="grid dw-mod u-bold">
7372 <div class="grid__col-6 grid__col--bleed-y">@Translate("Subtotal")</div>
7373 <div class="grid__col-6 grid__col--bleed-y grid--align-end">
7374 @if (hasTaxSettings)
7375 {
7376 <text>{{subtotalpricewithouttaxes}}</text>
7377 }
7378 else
7379 {
7380 <text>{{subtotalprice}}</text>
7381 }
7382 </div>
7383 </div>
7384 {{/unless}}
7385 </text>
7386 }
7387 }
7388
7389 @helper RenderMiniCartTotal()
7390 {
7391 bool pointShop = Pageview.AreaSettings.GetItem("Ecommerce").GetBoolean("PointShopOnly");
7392
7393 <div class="mini-cart-totals grid u-border-top u-margin-top dw-mod">
7394 <div class="grid__col-6">@Translate("Total")</div>
7395 <div class="grid__col-6 grid--align-end">
7396 <div>
7397 @if (pointShop)
7398 {
7399 <span class="u-color--loyalty-points">{{pointsUsedInCart}}</span> @Translate("points")
7400 }
7401 else
7402 {
7403 <text>{{totalprice}}</text>
7404 }
7405 </div>
7406 </div>
7407 </div>
7408 }
7409
7410 @helper RenderMiniCartDisclaimer()
7411 {
7412 <text>
7413 {{#if showCheckoutDisclaimer}}
7414 <div class="grid u-margin-bottom u-ta-right">
7415 <small class="grid__col-12">{{checkoutDisclaimer}}</small>
7416 </div>
7417 {{/if}}
7418 </text>
7419 }
7420 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
7421
7422 @using Dynamicweb.Rapido.Blocks.Extensibility
7423 @using Dynamicweb.Rapido.Blocks
7424 @using Dynamicweb.Rapido.Blocks.Components.General
7425 @using Dynamicweb.Rapido.Blocks.Components
7426 @using Dynamicweb.Rapido.Services
7427
7428 @{
7429 string addToCartNotificationType = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("AddToCartNotificationType") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("AddToCartNotificationType").SelectedValue : "";
7430 string addToCartNotificationMiniCartLayout = Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("Layout") != null ? Model.Area.Item.GetItem("Ecommerce").GetItem("MiniCart").GetList("Layout").SelectedValue : "dropdown";
7431 bool addToCartHideCartIcon = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideCart");
7432
7433 if (Dynamicweb.Rapido.Services.User.IsBuyingAllowed() && !string.IsNullOrEmpty(addToCartNotificationType))
7434 {
7435 if (addToCartNotificationType == "modal")
7436 {
7437 Block addToCartNotificationModal = new Block
7438 {
7439 Id = "AddToCartNotificationModal",
7440 Template = RenderAddToCartNotificationModal()
7441 };
7442
7443 Block addToCartNotificationScript = new Block
7444 {
7445 Id = "AddToCartNotificationScript",
7446 Template = RenderAddToCartNotificationModalScript()
7447 };
7448 BlocksPage.GetBlockPage("Master").Add("MasterTopSnippets", addToCartNotificationModal);
7449 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", addToCartNotificationScript);
7450 }
7451 else if (addToCartNotificationType == "toggle" && addToCartNotificationMiniCartLayout != "none" && !addToCartHideCartIcon && Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet")
7452 {
7453 Block addToCartNotificationScript = new Block
7454 {
7455 Id = "AddToCartNotificationScript",
7456 Template = RenderAddToCartNotificationToggleScript()
7457 };
7458 BlocksPage.GetBlockPage("Master").Add("MasterBottomSnippets", addToCartNotificationScript);
7459 }
7460 }
7461 }
7462
7463 @helper RenderAddToCartNotificationModal()
7464 {
7465 <div id="LastAddedProductModal" data-template="LastAddedProductTemplate"></div>
7466 }
7467
7468 @helper RenderAddToCartNotificationModalScript()
7469 {
7470 int cartPageId = GetPageIdByNavigationTag("CartPage");
7471
7472 <script id="LastAddedProductTemplate" type="text/x-template">
7473 @{
7474
7475 Modal lastAddedProduct = new Modal
7476 {
7477 Id = "LastAddedProduct",
7478 Heading = new Heading
7479 {
7480 Level = 2,
7481 Title = Translate("Product is added to the cart")
7482 },
7483 Width = ModalWidth.Md,
7484 BodyTemplate = RenderModalContent()
7485 };
7486
7487 lastAddedProduct.AddActions(
7488 new Button
7489 {
7490 ButtonType = ButtonType.Button,
7491 ButtonLayout = ButtonLayout.Secondary,
7492 Title = Translate("Continue shopping"),
7493 CssClass = "u-pull--left u-no-margin btn--sm",
7494 OnClick = "document.getElementById('LastAddedProductModalTrigger').checked = false"
7495 },
7496 new Link
7497 {
7498 Href = "/Default.aspx?ID=" + cartPageId,
7499 ButtonLayout = ButtonLayout.Secondary,
7500 CssClass = "u-pull--right u-no-margin btn--sm",
7501 Title = Translate("Proceed to checkout"),
7502 OnClick = "document.getElementById('LastAddedProductModalTrigger').checked = false"
7503 }
7504 );
7505
7506 @Render(lastAddedProduct)
7507 }
7508 </script>
7509 <script>
7510 document.addEventListener('addToCart', function (event) {
7511 Cart.ShowLastAddedProductModal(event.detail);
7512 });
7513 </script>
7514 }
7515
7516 @helper RenderModalContent()
7517 {
7518 <div class="grid">
7519 <div class="grid__col-2">
7520 @Render(new Image { Path = "{{ productInfo.image }}", Link = "{{ productInfo.link }}", Title = "{{ productInfo.name }}", DisableImageEngine = true })
7521 </div>
7522 <div class="u-padding grid--align-self-center">
7523 <span>{{quantity}}</span> x
7524 </div>
7525 <div class="grid__col-auto grid--align-self-center">
7526 <div>{{productInfo.name}}</div>
7527 {{#if productInfo.variantName}}
7528 <small class="u-margin-bottom-5px">{{productInfo.variantName}}</small>
7529 {{/if}}
7530 {{#if productInfo.unitName}}
7531 <small class="u-margin-bottom-5px">{{productInfo.unitName}}</small>
7532 {{/if}}
7533 </div>
7534 </div>
7535 }
7536
7537 @helper RenderAddToCartNotificationToggleScript()
7538 {
7539 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
7540
7541 <script>
7542 document.addEventListener('addToCart', function () {
7543 Cart.ToggleMiniCart('miniCartTrigger', 'miniCart', 'cartCounter', '@miniCartFeedPageId');
7544 });
7545 </script>
7546 }
7547 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
7548
7549 @using System
7550 @using System.Web
7551 @using System.Collections.Generic
7552 @using Dynamicweb.Rapido.Blocks.Extensibility
7553 @using Dynamicweb.Rapido.Blocks
7554 @using Dynamicweb.Rapido.Blocks.Components.General
7555
7556 @functions {
7557 BlocksPage footerBlocksPage = BlocksPage.GetBlockPage("Master");
7558 }
7559
7560 @{
7561 string footerColumnOneContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetString("Content");
7562 string footerColumnTwoContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetString("Content");
7563 string footerColumnThreeContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetString("Content");
7564 string footerColumnFourContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour") != null ? Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour").GetString("Content") : "";
7565 string footerColumnOneHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetString("Header");
7566 string footerColumnTwoHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetString("Header");
7567 string footerColumnThreeHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetString("Header");
7568 string footerColumnFourHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour") != null ? Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour").GetString("Header") : "";
7569
7570 Block masterFooterContent = new Block()
7571 {
7572 Id = "MasterFooterContent",
7573 SortId = 10,
7574 Template = RenderFooter(),
7575 SkipRenderBlocksList = true
7576 };
7577 footerBlocksPage.Add(MasterBlockId.MasterFooter, masterFooterContent);
7578
7579 if (!string.IsNullOrEmpty(footerColumnOneContent) || !string.IsNullOrEmpty(footerColumnOneHeader))
7580 {
7581 Block masterFooterColumnOne = new Block
7582 {
7583 Id = "MasterFooterColumnOne",
7584 SortId = 10,
7585 Template = RenderFooterColumn(footerColumnOneHeader, footerColumnOneContent),
7586 Design = new Design
7587 {
7588 Size = "auto",
7589 RenderType = RenderType.Column
7590 }
7591 };
7592 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnOne);
7593 }
7594
7595 if (!string.IsNullOrEmpty(footerColumnTwoContent) || !string.IsNullOrEmpty(footerColumnTwoHeader))
7596 {
7597 Block masterFooterColumnTwo = new Block
7598 {
7599 Id = "MasterFooterColumnTwo",
7600 SortId = 20,
7601 Template = RenderFooterColumn(footerColumnTwoHeader, footerColumnTwoContent),
7602 Design = new Design
7603 {
7604 Size = "auto",
7605 RenderType = RenderType.Column
7606 }
7607 };
7608 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnTwo);
7609 }
7610
7611 if (!string.IsNullOrEmpty(footerColumnThreeContent) || !string.IsNullOrEmpty(footerColumnThreeHeader))
7612 {
7613 Block masterFooterColumnThree = new Block
7614 {
7615 Id = "MasterFooterColumnThree",
7616 SortId = 30,
7617 Template = RenderFooterColumn(footerColumnThreeHeader, footerColumnThreeContent),
7618 Design = new Design
7619 {
7620 Size = "auto",
7621 RenderType = RenderType.Column
7622 }
7623 };
7624 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnThree);
7625 }
7626
7627 if (!string.IsNullOrEmpty(footerColumnFourContent) || !string.IsNullOrEmpty(footerColumnFourHeader))
7628 {
7629 Block masterFooterColumnFour = new Block
7630 {
7631 Id = "MasterFooterColumnFour",
7632 SortId = 40,
7633 Template = RenderFooterColumn(footerColumnFourHeader, footerColumnFourContent),
7634 Design = new Design
7635 {
7636 Size = "auto",
7637 RenderType = RenderType.Column
7638 }
7639 };
7640 footerBlocksPage.Add("MasterFooterContent", masterFooterColumnFour);
7641 }
7642
7643 if (Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks").Count > 0)
7644 {
7645 Block masterFooterSocialLinks = new Block
7646 {
7647 Id = "MasterFooterSocialLinks",
7648 SortId = 40,
7649 Template = RenderFooterSocialLinks(),
7650 Design = new Design
7651 {
7652 Size = "auto",
7653 RenderType = RenderType.Column,
7654 CssClass = "footer__column-wrapper"
7655 }
7656 };
7657 footerBlocksPage.Add("MasterFooterContent", masterFooterSocialLinks);
7658 }
7659
7660 if (Model.Area.Item.GetItem("Layout").GetBoolean("FooterNewsletterSignUp"))
7661 {
7662 Block masterFooterNewsletterSignUp = new Block
7663 {
7664 Id = "MasterFooterNewsletterSignUp",
7665 SortId = 50,
7666 Template = RenderFooterNewsletterSignUp(),
7667 Design = new Design
7668 {
7669 Size = "auto",
7670 RenderType = RenderType.Column,
7671 CssClass = "footer__column-wrapper open"
7672 }
7673 };
7674 footerBlocksPage.Add("MasterFooterContent", masterFooterNewsletterSignUp);
7675 }
7676
7677 @*if (Model.Area.Item.GetItem("Layout").GetItems("FooterPayments") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterPayments").Count > 0)
7678 {
7679 Block masterFooterPayments = new Block
7680 {
7681 Id = "MasterFooterPayments",
7682 SortId = 60,
7683 Template = RenderFooterPayments(),
7684 Design = new Design
7685 {
7686 Size = "12",
7687 RenderType = RenderType.Column
7688 }
7689 };
7690 footerBlocksPage.Add("MasterFooterContent", masterFooterPayments);
7691 }
7692
7693 Block masterFooterCopyright = new Block
7694 {
7695 Id = "MasterFooterCopyright",
7696 SortId = 70,
7697 Template = RenderFooterCopyright(),
7698 Design = new Design
7699 {
7700 Size = "12",
7701 RenderType = RenderType.Column
7702 }
7703 };
7704 footerBlocksPage.Add("MasterFooterContent", masterFooterCopyright);*@
7705 }
7706
7707 @helper RenderFooter()
7708 {
7709 List<Block> subBlocks = this.footerBlocksPage.GetBlockListById("MasterFooterContent").OrderBy(item => item.SortId).ToList();
7710
7711 var premiumArea = Model.Area.ID.ToString() == "32" ? "agricover-premium-footer" : "";
7712 var isPremiumArea = Model.Area.ID.ToString() == "32" ? "True" : "";
7713 <footer class="footer no-print dw-mod">
7714
7715 <div class="center-container top-container__center-container dw-mod">
7716 @if (isPremiumArea != "True")
7717 {
7718 @RenderLogoColumn()
7719 }
7720 <div class="grid grid--external-bleed-x footer__wrapper agricover-footer @premiumArea">
7721 @if (isPremiumArea == "True")
7722 {
7723 @RenderLogoColumn()
7724 }
7725 @RenderBlockList(subBlocks)
7726 </div>
7727 </div>
7728 <div class="footer__bottom agricover-footer-bottom">
7729 <div class="center-container top-container__center-container dw-mod">
7730 <div class="grid grid--external-bleed-x footer__wrapper">
7731 @if (Model.Area.Item.GetItem("Layout").GetItems("FooterPayments") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterPayments").Count > 0)
7732 {
7733 <div class="footer__bottom-payments">@RenderFooterPayments()</div>
7734 }
7735 <div class="footer__bottom-copyright">@RenderFooterCopyright()</div>
7736 </div>
7737 </div>
7738 </div>
7739 </footer>
7740 }
7741
7742 @helper RenderLogoColumn()
7743 {
7744
7745 <div class="footer__logo agricover-footer__logo dw-mod">
7746 <img src='@Model.Area.Item.GetItem("Layout").GetString("Footer_Logo")' alt="" />
7747 </div>
7748 }
7749 @helper RenderFooterColumn(string header, string content)
7750 {
7751 <h3 class="footer__heading dw-mod">@header</h3>
7752 <div class="footer__content dw-mod">
7753 @content
7754 </div>
7755 }
7756
7757 @helper RenderFooterNewsletterSignUp()
7758 {
7759 string newsletterSignUpPageId = GetPageIdByNavigationTag("NewsletterSignUp").ToString();
7760 Form form = new Form { Action = "/Default.aspx", Method = FormMethod.Get, Enctype = FormEnctype.multipart };
7761
7762 form.Add(new HiddenField { Name = "ID", Value = newsletterSignUpPageId });
7763 form.Add(new Text { Content = "<p>" + Translate("Sign up if you would like to receive occasional treats from us") + "</p>" });
7764 form.Add(new TextField {
7765 Id = "NewsletterEmail", Name = "NewsletterEmail", Placeholder = Translate("Your email address"),
7766 Type = TextFieldType.Email,
7767 CssClass = "newsletter-email",
7768 ActionButton = new Button {
7769 ButtonType = ButtonType.Submit, Id="Submitter", Title = Translate("Go"), OnClick = "Buttons.LockButton(event)", CssClass = "newsletter-btn"
7770 }
7771 });
7772
7773 <h3 class="footer__heading dw-mod">@Translate("Mailing list")<i class="icon--accordion fas fa-chevron-down"></i></h3>
7774 <div class="footer__content dw-mod">
7775 @Render(form)
7776 </div>
7777
7778 @RenderANPCIcons()
7779 }
7780
7781 @helper RenderFooterSocialLinks()
7782 {
7783 string currentYear = DateTime.Now.Year.ToString();
7784 <h3 class="footer__heading dw-mod">@Translate("Social links")<i class="icon--accordion fas fa-chevron-down"></i></h3>
7785 <div class="footer__content dw-mod">
7786 <div class="collection dw-mod">
7787 @foreach (var socialitem in Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks"))
7788 {
7789 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel;
7790 string socialIconClass = socialIcon.SelectedValue;
7791 string socialIconTitle = socialIcon.SelectedName;
7792 string socialLink = socialitem.GetString("Link");
7793 if (socialIconTitle == "Facebook")
7794 {
7795 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px" rel="noopener"><i class="fab fa-facebook-f fa-2x"></i></a>
7796 }
7797 else
7798 {
7799 if (socialIconTitle == "LinkedIn")
7800 {
7801 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px" rel="noopener"><i class="fab fa-linkedin-in fa-2x"></i></a>
7802 }
7803 else
7804 {
7805 if (socialIconTitle == "Twitter")
7806 {
7807 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px" rel="noopener"><i class="fab fa-twitter fa-2x"></i></a>
7808 }
7809 else
7810 {
7811 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px" rel="noopener"><i class="@socialIconClass fa-2x"></i></a>
7812 }
7813 }
7814
7815 }
7816
7817 }
7818 <p>© @currentYear @Model.Area.Item.GetItem("Layout").GetString("FooterCopyrightText")</p>
7819 </div>
7820 </div>
7821 }
7822
7823 @helper RenderFooterPayments()
7824 {
7825 <div class="footer__content dw-mod">
7826 <div class="collection dw-mod">
7827 @foreach (var payment in Model.Area.Item.GetItem("Layout").GetItems("FooterPayments"))
7828 {
7829 var paymentItem = payment.GetValue("CardTypeOrVerifiedPayment") as Dynamicweb.Frontend.ListViewModel;
7830 string paymentImage = null;
7831 string paymentTitle = paymentItem.SelectedName;
7832 ListOptionViewModel selected = paymentItem.SelectedOptions.FirstOrDefault();
7833 if (selected != null)
7834 {
7835 paymentImage = selected.Icon;
7836 }
7837
7838 <div class="footer__card-type">
7839 <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" />
7840 </div>
7841 }
7842 </div>
7843 </div>
7844 }
7845
7846 @helper RenderFooterCopyright()
7847 {
7848 <div class="grid__col-12 footer__copyright dw-mod">
7849
7850 </div>
7851
7852 }
7853
7854 @helper RenderANPCIcons()
7855 {
7856 <div class="u-margin-top--lg u-margin-bottom--lg">
7857 <a href="https://anpc.ro/ce-este-sal/" target="_blank"><img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=250&Compression=95&image=/Files/Images/pictograma1-ANPC.png" alt="ANPC" title="ANPC" /></a>
7858
7859 <a href="https://ec.europa.eu/consumers/odr" target="_blank"><img class="b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=250&Compression=95&image=/Files/Images/pictograma2-ANPC.png" alt="Solutionarea online a litigiilor" title="Solutionarea online a litigiilor" /></a>
7860 </div>
7861 }
7862 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
7863
7864 @using System
7865 @using System.Web
7866 @using System.Collections.Generic
7867 @using Dynamicweb.Rapido.Blocks.Extensibility
7868 @using Dynamicweb.Rapido.Blocks
7869 @using Dynamicweb.Ecommerce.Common
7870
7871 @{
7872 BlocksPage referencesBlocksPage = BlocksPage.GetBlockPage("Master");
7873
7874 Block masterScriptReferences = new Block()
7875 {
7876 Id = "MasterScriptReferences",
7877 SortId = 1,
7878 Template = RenderMasterScriptReferences()
7879 };
7880 referencesBlocksPage.Add(MasterBlockId.MasterReferences, masterScriptReferences);
7881 }
7882
7883 @helper RenderMasterScriptReferences() {
7884 @*
7885 <script src="/Files/Templates/Designs/Rapido/js/handlebars-v4.0.12.min.js"></script>
7886 $1$<script src="/Files/Templates/Designs/Rapido/js/comments.js"></script>
7887 <script src="/Files/Templates/Designs/Rapido/css/comments-rating.css"></script>#1#
7888 <script src="/Files/Templates/Designs/Rapido/js/custom-productList.js"></script>$1$
7889 <script src="/Files/Templates/Designs/Rapido/js/custom-typeahead.js"></script>#1#
7890
7891 if (Model.Area.Item.GetItem("Custom").GetBoolean("UseCustomJavascript"))
7892 {
7893 <script src="/Files/Templates/Designs/Rapido/js/custom.min.js?v=52"></script>
7894 PushPromise("/Files/Templates/Designs/Rapido/js/custom.min.js");
7895 }
7896
7897 PushPromise("/Files/Templates/Designs/Rapido/js/handlebars-v4.0.12.min.js");
7898 <script src="/Files/Templates/Designs/Rapido/js/master.min.js?v=2"></script>
7899
7900 PushPromise("/Files/Templates/Designs/Rapido/js/master.min.js");
7901 *@
7902
7903
7904 <script src="/Files/Templates/Designs/AgricoverCorporate/dist/vendor.min.js?v=5"></script>
7905 <script src="/Files/Templates/Designs/AgricoverCorporate/js/custom.min.js?v=4"></script>
7906 <script src="/Files/Templates/Designs/AgricoverCorporate/js/master.js?v=5"></script>
7907 <script src="/Files/Templates/Designs/AgricoverCorporate/dist/app.bundle.js?v=152"></script>
7908
7909 PushPromise("/Files/Templates/Designs/AgricoverCorporate/dist/vendor.min.js?v=5");
7910 PushPromise("/Files/Templates/Designs/AgricoverCorporate/js/custom.min.js?v=4");
7911 PushPromise("/Files/Templates/Designs/AgricoverCorporate/js/master.js?v=5");
7912 PushPromise("/Files/Templates/Designs/AgricoverCorporate/dist/app.bundle.js?v=150");
7913 }
7914 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
7915
7916 @using System
7917 @using System.Web
7918 @using System.Collections.Generic
7919 @using Dynamicweb.Rapido.Blocks.Extensibility
7920 @using Dynamicweb.Rapido.Blocks
7921 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
7922 @using Dynamicweb.Rapido.Services
7923
7924 @{
7925 BlocksPage searchBlocksPage = BlocksPage.GetBlockPage("Master");
7926 bool navigationItemsHideSearch = Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("HideSearch");
7927 bool isFavoriteList = !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("ListID"));
7928
7929 if (!navigationItemsHideSearch || isFavoriteList)
7930 {
7931 Block masterSearchScriptTemplates = new Block()
7932 {
7933 Id = "MasterSearchScriptTemplates",
7934 SortId = 1,
7935 Template = RenderSearchScriptTemplates()
7936 };
7937
7938 searchBlocksPage.Add(MasterBlockId.MasterBottomSnippets, masterSearchScriptTemplates);
7939 }
7940 }
7941
7942 @helper RenderSearchScriptTemplates()
7943 {
7944 int productsPageId = GetPageIdByNavigationTag("ProductsPage");
7945 string contentSearchPageLink = GetPageIdByNavigationTag("ContentSearchResults") + "&Areaid=" + Model.Area.ID;
7946 bool useFacebookPixel = !string.IsNullOrWhiteSpace(Pageview.AreaSettings.GetItem("Settings").GetString("FacebookPixelID"));
7947 bool useGoogleTagManager = !string.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("GoogleTagManagerID"));
7948 bool showPrice = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HidePriceInSearchResults");
7949 bool showAddToCartButton = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HideAddToCartButton");
7950 bool showViewButton = !Pageview.AreaSettings.GetItem("Layout").GetBoolean("HideViewButton");
7951 bool showAddToDownloadButton = Pageview.AreaSettings.GetItem("Layout").GetBoolean("ShowAddToDownloadButton");
7952 bool pointShopOnly = Pageview.AreaSettings.GetItem("Ecommerce").GetBoolean("PointShopOnly");
7953
7954 <script id="SearchGroupsTemplate" type="text/x-template">
7955 {{#.}}
7956 <li class="dropdown__item dw-mod" onclick="Search.UpdateGroupSelection(this)" data-group-id="{{id}}">{{name}}</li>
7957 {{/.}}
7958 </script>
7959
7960 <script id="SearchProductsTemplate" type="text/x-template">
7961 {{#each .}}
7962 {{#Product}}
7963 {{#ifCond template "!==" "SearchMore"}}
7964 <li class="dropdown__item dropdown__item--seperator dw-mod">
7965 @if (useFacebookPixel)
7966 {
7967 <text>{{{facebookPixelSearch name number priceDouble currency searchParameter}}}</text>
7968 }
7969 @if (useGoogleTagManager)
7970 {
7971 <text>{{{googleEnchantImpression googleImpression}}}</text>
7972 }
7973 <div>
7974 <a href="{{link}}"
7975 class="js-typeahead-link u-color-inherit u-pull--left"
7976 onclick="{{#if googleImpression}}googleEnchantImpressionClick({{googleImpression}}, event){{/if}}"
7977 title="{{name}}{{#if variantName}}, {{variantName}}{{/if}}">
7978 <div class="u-margin-right u-pull--left {{noimage}}"><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}}{{#if variantName}}, {{variantName}}{{/if}}"></div>
7979 <div class="u-pull--left">
7980 <div class="u-bold u-truncate-text js-typeahead-name">{{name}}{{#if variantName}}, {{variantName}}{{/if}}</div>
7981 @if (showPrice && Dynamicweb.Rapido.Services.User.IsPricesAllowed())
7982 {
7983 if (pointShopOnly)
7984 {
7985 <text>
7986 {{#if havePointPrice}}
7987 <div>
7988 <span class="u-color--loyalty-points">{{points}}</span> @Translate("points")
7989 </div>
7990 {{else}}
7991 <small class="help-text u-no-margin">@Translate("Not available")</small>
7992 {{/if}}
7993 {{#unless canBePurchasedWithPoints}}
7994 {{#if havePointPrice}}
7995 <small class="help-text u-no-margin">@Translate("Not enough points to buy this")</small>
7996 {{/if}}
7997 {{/unless}}
7998 </text>
7999 }
8000 else
8001 {
8002 <div>{{#ifCond priceDouble '>' 0}}{{price}}{{/ifCond}}</div>
8003 }
8004 }
8005 </div>
8006 </a>
8007 @*<div class="u-margin-left u-pull--right">
8008 @{
8009 var viewBtn = new Link
8010 {
8011 Href = "{{link}}",
8012 OnClick = "{{#if googleImpression}}googleEnchantImpressionClick({{googleImpression}}, event){{/if}}",
8013 ButtonLayout = ButtonLayout.Secondary,
8014 CssClass = "btn--condensed u-no-margin u-w80px js-ignore-click-outside",
8015 Title = Translate("View")
8016 };
8017 }
8018 @if (showAddToCartButton && Dynamicweb.Rapido.Services.User.IsBuyingAllowed())
8019 {
8020 <text>{{#if hideAddToCartButton}}</text>
8021 @Render(viewBtn)
8022 <text>{{else}}</text>
8023 @Render(new AddToCartButton
8024 {
8025 HideTitle = true,
8026 ProductId = "{{productId}}",
8027 ProductInfo = "{{productInfo}}",
8028 BuyForPoints = pointShopOnly,
8029 OnClick = "{{facebookPixelAction}}",
8030 CssClass = "u-w80px u-no-margin js-ignore-click-outside",
8031 Icon = new Icon {
8032 CssClass = "js-ignore-click-outside"
8033 },
8034 ExtraAttributes = new Dictionary<string, string>
8035 {
8036 { "{{disabledBuyButton}}", "" }
8037 }
8038 })
8039 <text>{{/if}}</text>
8040 }
8041 else if (showViewButton)
8042 {
8043 @Render(viewBtn)
8044 }
8045 @if (showAddToDownloadButton)
8046 {
8047 <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}}">
8048 <i class="fas fa-plus js-button-icon"></i>
8049 </button>
8050 }
8051 </div>*@
8052 </div>
8053 </li>
8054 {{/ifCond}}
8055 {{#ifCond template "===" "SearchMore"}}
8056 {{>SearchMoreProducts}}
8057 {{/ifCond}}
8058 {{/Product}}
8059 {{else}}
8060 <li class="dropdown__item dropdown__item--seperator dropdown__item--not-selectable js-no-result dw-mod">
8061 @Translate("Your search gave 0 results")
8062 </li>
8063 {{/each}}
8064 </script>
8065
8066 <script id="SearchMoreProducts" type="text/x-template">
8067 <li class="dropdown__item dropdown__item--not-selectable {{stickToBottom}} dw-mod">
8068 <a href="/Default.aspx?ID=@productsPageId&Search={{searchParameter}}&GroupID={{groupId}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link">
8069 @Translate("View all")
8070 </a>
8071 </li>
8072 </script>
8073
8074 <script id="SearchMorePages" type="text/x-template">
8075 <li class="dropdown__item dropdown__item--not-selectable {{stickToBottom}} dw-mod">
8076 <a href="/Default.aspx?ID=@contentSearchPageLink&Search={{searchParameter}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link">
8077 @Translate("View all")
8078 </a>
8079 </li>
8080 </script>
8081
8082 <script id="SearchPagesTemplate" type="text/x-template">
8083 {{#each .}}
8084 {{#ifCond template "!==" "SearchMore"}}
8085 <li class="dropdown__item dropdown__item--seperator dropdown__item--no-padding dw-mod">
8086 <a href="/Default.aspx?ID={{id}}" class="js-typeahead-link dropdown__link u-color-inherit u-flex">
8087 {{#ifCond icon "!==" null}}
8088 <div class="u-margin-right u-flex grid--align-center"><i class="fa {{icon}} u-w20px u-ta-center"></i></div>
8089 {{/ifCond}}
8090
8091 {{#ifCond image "!==" null}}
8092 <div class="seach__image-wrapper dropdown" style='background:url("{{image}}");'></div>
8093 {{/ifCond}}
8094
8095 <div class="u-flex grid--align-center"><div class='u-bold u-truncate-text u-inline-block js-typeahead-name'>{{name}}</div></div>
8096
8097 </a>
8098 </li>
8099 {{/ifCond}}
8100 {{#ifCond template "===" "SearchMore"}}
8101 {{>SearchMorePages}}
8102 {{/ifCond}}
8103 {{else}}
8104 <li class="dropdown__item dropdown__item--seperator dropdown__item--not-selectable js-no-result dw-mod">
8105 @Translate("Your search gave 0 results")
8106 </li>
8107 {{/each}}
8108 </script>
8109
8110 <script id="SearchPagesTemplateWrap" type="text/x-template">
8111 <div class="dropdown__column-header">@Translate("Pages")</div>
8112 <ul class="dropdown__list u-min-w220px u-full-width u-margin-bottom u-height--auto u-flex-grow--1 dw-mod">
8113 {{>SearchPagesTemplate}}
8114 </ul>
8115 </script>
8116
8117 <script id="SearchProductsTemplateWrap" type="text/x-template">
8118 <div class="dropdown__column-header">@Translate("Products")</div>
8119 <ul class="dropdown__list u-min-w220px u-full-width u-margin-bottom u-height--auto u-flex-grow--1 dw-mod">
8120 {{>SearchProductsTemplate}}
8121 </ul>
8122 </script>
8123 }
8124
8125 @using Dynamicweb.Rapido.Blocks.Components
8126 @using Dynamicweb.Rapido.Blocks.Components.General
8127 @using Dynamicweb.Rapido.Blocks
8128 @using System.IO
8129
8130
8131 @using Dynamicweb.Rapido.Blocks.Components.General
8132 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
8133
8134
8135 @* Component *@
8136
8137 @helper RenderVariantMatrix(VariantMatrix settings) {
8138 if (settings != null)
8139 {
8140 int productLoopCounter = 0;
8141 int groupCount = 0;
8142 List<VariantOption> firstDimension = new List<VariantOption>();
8143 List<VariantOption> secondDimension = new List<VariantOption>();
8144 List<VariantOption> thirdDimension = new List<VariantOption>();
8145
8146 foreach (VariantGroup variantGroup in settings.GetVariantGroups())
8147 {
8148 foreach (VariantOption variantOptions in variantGroup.GetVariantOptions())
8149 {
8150 if (groupCount == 0) {
8151 firstDimension.Add(variantOptions);
8152 }
8153 if (groupCount == 1)
8154 {
8155 secondDimension.Add(variantOptions);
8156 }
8157 if (groupCount == 2)
8158 {
8159 thirdDimension.Add(variantOptions);
8160 }
8161 }
8162 groupCount++;
8163 }
8164
8165 int rowCount = 0;
8166 int columnCount = 0;
8167
8168 <script>
8169 var variantsCollection = [];
8170 </script>
8171
8172 <table class="table table--compact js-variants-matrix dw-mod" id="VariantMatrixTable_@settings.ProductId">
8173 @if (groupCount == 1)
8174 {
8175 <tbody>
8176 @foreach (VariantOption firstVariantOption in firstDimension)
8177 {
8178 var variantId = firstVariantOption.Id;
8179 <tr>
8180 <td class="u-bold">
8181 @firstVariantOption.Name
8182 </td>
8183 <td>
8184 @RenderVariantMatrixQuantityField(variantId, settings, productLoopCounter, rowCount, columnCount)
8185 </td>
8186 </tr>
8187 productLoopCounter++;
8188 }
8189
8190 <tr>
8191 <td> </td>
8192 <td>
8193 <div class="qty-field js-total-qty-column-@columnCount dw-mod">0</div>
8194 </td>
8195 </tr>
8196 </tbody>
8197 }
8198 @if (groupCount == 2)
8199 {
8200 <thead>
8201 <tr>
8202 <td> </td>
8203 @foreach (VariantOption variant in secondDimension)
8204 {
8205 <td>@variant.Name</td>
8206 }
8207 </tr>
8208 </thead>
8209 <tbody>
8210 @foreach (VariantOption firstVariantOption in firstDimension)
8211 {
8212 string variantId = "";
8213 columnCount = 0;
8214
8215 <tr>
8216 <td class="u-min-w120px">@firstVariantOption.Name</td>
8217
8218 @foreach (VariantOption secondVariantOption in secondDimension)
8219 {
8220 variantId = firstVariantOption.Id + "." + secondVariantOption.Id;
8221 <td>
8222 @RenderVariantMatrixQuantityField(variantId, settings, productLoopCounter, rowCount, columnCount)
8223 </td>
8224
8225 columnCount++;
8226
8227 productLoopCounter++;
8228 }
8229
8230 <td>
8231 <div class="qty-field js-total-qty-row-@rowCount dw-mod">0</div>
8232 </td>
8233 </tr>
8234
8235 rowCount++;
8236 }
8237
8238 @{
8239 columnCount = 0;
8240 }
8241
8242 <tr>
8243 <td> </td>
8244 @foreach (VariantOption secondVariantOption in secondDimension)
8245 {
8246 <td>
8247 <div class="qty-field js-total-qty-column-@columnCount dw-mod">0</div>
8248 </td>
8249
8250 columnCount++;
8251 }
8252 <td> </td>
8253 </tr>
8254 </tbody>
8255 }
8256 @if (groupCount == 3)
8257 {
8258 <thead>
8259 <tr>
8260 <td> </td>
8261 @foreach (VariantOption thirdVariantOption in thirdDimension)
8262 {
8263 <td>@thirdVariantOption.Name</td>
8264 }
8265 </tr>
8266 </thead>
8267 <tbody>
8268 @foreach (VariantOption firstVariantOption in firstDimension)
8269 {
8270 int colspan = (thirdDimension.Count + 1);
8271
8272 <tr>
8273 <td colspan="@colspan" class="u-color-light-gray--bg u-bold">@firstVariantOption.Name</td>
8274 </tr>
8275
8276 foreach (VariantOption secondVariantOption in secondDimension)
8277 {
8278 string variantId = "";
8279 columnCount = 0;
8280
8281 <tr>
8282 <td class="u-min-w120px">@secondVariantOption.Name</td>
8283
8284 @foreach (VariantOption thirdVariantOption in thirdDimension)
8285 {
8286 variantId = firstVariantOption.Id + "." + secondVariantOption.Id + "." + thirdVariantOption.Id;
8287
8288 <td>
8289 @RenderVariantMatrixQuantityField(variantId, settings, productLoopCounter, rowCount, columnCount)
8290 </td>
8291
8292 columnCount++;
8293 productLoopCounter++;
8294 }
8295
8296 <td>
8297 <div class="qty-field js-total-qty-row-@rowCount dw-mod">0</div>
8298 </td>
8299 </tr>
8300 rowCount++;
8301 }
8302 }
8303
8304 @{
8305 columnCount = 0;
8306 }
8307
8308 <tr>
8309 <td> </td>
8310 @foreach (VariantOption thirdVariantOption in thirdDimension)
8311 {
8312 <td>
8313 <div class="qty-field js-total-qty-column-@columnCount dw-mod">0</div>
8314 </td>
8315
8316 columnCount++;
8317 }
8318 <td> </td>
8319 </tr>
8320 </tbody>
8321 }
8322 </table>
8323
8324 <script>
8325 document.addEventListener("DOMContentLoaded", function (event) {
8326 MatrixUpdateQuantity("@settings.ProductId");
8327 });
8328
8329 MatrixUpdateQuantity = function (productId) {
8330 var currentMatrix = document.getElementById("VariantMatrixTable_" + productId);
8331 var allQtyFields = currentMatrix.getElementsByClassName("js-qty");
8332
8333 var qtyRowArr = [];
8334 var qtyColumnArr = [];
8335
8336 var totalQty = 0;
8337
8338 for (var i = 0; i < allQtyFields.length; i++) {
8339 qtyRowArr[allQtyFields[i].getAttribute("data-qty-row-group")] = 0;
8340 qtyColumnArr[allQtyFields[i].getAttribute("data-qty-column-group")] = 0;
8341 }
8342
8343 for (var i = 0; i < allQtyFields.length; i++) {
8344 qtyRowArr[allQtyFields[i].getAttribute("data-qty-row-group")] += parseFloat(allQtyFields[i].value);
8345 qtyColumnArr[allQtyFields[i].getAttribute("data-qty-column-group")] += parseFloat(allQtyFields[i].value);
8346 totalQty += parseFloat(allQtyFields[i].value);
8347 }
8348
8349 //Update row counters
8350 for (var i = 0; i < qtyRowArr.length; i++) {
8351 var qtyCounter = currentMatrix.getElementsByClassName("js-total-qty-row-" + i)[0];
8352
8353 if (qtyRowArr[i] != undefined && qtyCounter != null) {
8354 var currentCount = qtyCounter.innerHTML;
8355 qtyCounter.innerHTML = qtyRowArr[i];
8356
8357 if (currentCount != qtyCounter.innerHTML) {
8358 qtyCounter.classList.add("qty-field--active");
8359 }
8360 }
8361
8362 }
8363
8364 //Update column counters
8365 for (var i = 0; i < qtyColumnArr.length; i++) {
8366 var qtyCounter = currentMatrix.getElementsByClassName("js-total-qty-column-" + i)[0];
8367
8368 if (qtyColumnArr[i] != undefined && qtyCounter != null) {
8369 var currentCount = qtyCounter.innerHTML;
8370 qtyCounter.innerHTML = qtyColumnArr[i];
8371
8372 if (currentCount != qtyCounter.innerHTML) {
8373 qtyCounter.classList.add("qty-field--active");
8374 }
8375 }
8376 }
8377
8378 if (document.getElementById("TotalQtyCount_" + productId)) {
8379 document.getElementById("TotalQtyCount_" + productId).innerHTML = totalQty;
8380 }
8381
8382 //Clean up animations
8383 setTimeout(function () {
8384 for (var i = 0; i < qtyRowArr.length; i++) {
8385 var qtyCounter = currentMatrix.getElementsByClassName("js-total-qty-row-" + i)[0];
8386 if (qtyCounter != null) {
8387 qtyCounter.classList.remove("qty-field--active");
8388 }
8389 }
8390 for (var i = 0; i < qtyColumnArr.length; i++) {
8391 var qtyCounter = currentMatrix.getElementsByClassName("js-total-qty-column-" + i)[0];
8392 if (qtyCounter != null) {
8393 qtyCounter.classList.remove("qty-field--active");
8394 }
8395 }
8396 }, 1000);
8397 }
8398 </script>
8399 }
8400 }
8401
8402 @helper RenderVariantMatrixQuantityField(string variantId, VariantMatrix settings, int productLoopCounter, int rowCount, int columnCount)
8403 {
8404 string loopCount = productLoopCounter.ToString();
8405
8406 bool combinationFound = false;
8407 double stock = 0;
8408 double quantityValue = 0;
8409 string note = "";
8410
8411 VariantProduct variantProduct = null;
8412
8413 if (settings.GetVariantProducts().TryGetValue(variantId, out variantProduct))
8414 {
8415 stock = variantProduct.Stock;
8416 quantityValue = variantProduct.Quantity;
8417 combinationFound = true;
8418 }
8419
8420 if (combinationFound)
8421 {
8422 <input type="hidden" name="ProductLoopCounter@(loopCount)" value="@loopCount" />
8423 <input type="hidden" name="ProductID@(loopCount)" value="@settings.ProductId" />
8424 <input type="hidden" name="VariantID@(loopCount)" value="@variantId" />
8425 <input type="hidden" name="CurrentNote@(loopCount)" id="CurrentNote_@(settings.ProductId)_@variantId" value="@note" />
8426 <input type="number" name="Quantity@(loopCount)" id="Quantity_@(settings.ProductId)_@variantId" value="@quantityValue" min="0" class="js-qty u-no-margin u-full-max-width" style="width: 100%; max-width: 100%" onkeyup="MatrixUpdateQuantity('@settings.ProductId')" onmouseup="MatrixUpdateQuantity('@settings.ProductId')" data-qty-row-group="@rowCount" data-qty-column-group="@columnCount">
8427
8428 if (stock != 0)
8429 {
8430 <small>@Translate("Stock") @stock</small>
8431 }
8432
8433 <script>
8434 var variants = '{ "ProductId" :' + '"@settings.ProductId"' + ', "VariantId": ' + '"@variantId"' +'}';
8435 variantsCollection.push(variants);
8436 document.getElementById("Quantity_@(settings.ProductId)_@variantId").closest(".js-variants-matrix").setAttribute("data-variants-collection", "[" + variantsCollection + "]" );
8437 </script>
8438 }
8439 else
8440 {
8441 <div class="use-btn-height" style="background-color: #a8a8a8"></div>
8442 }
8443 }
8444 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
8445
8446 @* Component *@
8447
8448 @helper RenderAddToCart(AddToCart settings)
8449 {
8450 //set Id for quantity selector to get it's value from button
8451 if (settings.QuantitySelector != null)
8452 {
8453 if (string.IsNullOrEmpty(settings.QuantitySelector.Id))
8454 {
8455 settings.QuantitySelector.Id = Guid.NewGuid().ToString("N");
8456 }
8457
8458 settings.AddButton.QuantitySelectorId = settings.QuantitySelector.Id;
8459
8460 if (settings.Disabled)
8461 {
8462 settings.QuantitySelector.Disabled = true;
8463 }
8464
8465 if (string.IsNullOrEmpty(settings.QuantitySelector.Name))
8466 {
8467 settings.QuantitySelector.Name = settings.QuantitySelector.Id;
8468 }
8469 }
8470
8471 if (settings.Disabled)
8472 {
8473 settings.AddButton.Disabled = true;
8474 }
8475
8476 settings.AddButton.CssClass += " btn--condensed";
8477
8478 //unitsSelector
8479 if (settings.UnitSelector != null)
8480 {
8481 if (settings.Disabled)
8482 {
8483 settings.QuantitySelector.Disabled = true;
8484 }
8485 }
8486
8487 <div class="buttons-collection @settings.WrapperCssClass" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
8488 @if (settings.UnitSelector != null)
8489 {
8490 @Render(settings.UnitSelector)
8491 }
8492 @if (settings.QuantitySelector != null)
8493 {
8494 @Render(settings.QuantitySelector)
8495 }
8496 @Render(settings.AddButton)
8497 </div>
8498 }
8499 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
8500
8501 @* Component *@
8502
8503 @helper RenderAddToCartButton(AddToCartButton settings)
8504 {
8505 if (!settings.HideTitle)
8506 {
8507 if (string.IsNullOrEmpty(settings.Title))
8508 {
8509 if (settings.BuyForPoints)
8510 {
8511 settings.Title = Translate("Buy with points");
8512 }
8513 else
8514 {
8515 settings.Title = Translate("Add to cart");
8516 }
8517 }
8518 }
8519 else
8520 {
8521 settings.Title = "";
8522 }
8523
8524 if (settings.Icon == null)
8525 {
8526 settings.Icon = new Icon();
8527 settings.Icon.LabelPosition = Dynamicweb.Rapido.Blocks.Components.General.IconLabelPosition.After;
8528 }
8529
8530 if (string.IsNullOrEmpty(settings.Icon.Name))
8531 {
8532 settings.Icon.Name = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("CartIcon").SelectedValue;
8533 }
8534
8535 settings.OnClick = "Cart.AddToCart(event, { " +
8536 "id: '" + settings.ProductId + "'," +
8537 (!string.IsNullOrEmpty(settings.VariantId) ? "variantId: '" + settings.VariantId + "'," : "") +
8538 (!string.IsNullOrEmpty(settings.UnitId) ? "unitId: '" + settings.UnitId + "'," : "") +
8539 (settings.BuyForPoints ? "buyForPoints: true," : "") +
8540 (!string.IsNullOrEmpty(settings.ProductInfo) ? "productInfo: " + settings.ProductInfo + "," : "") +
8541 "quantity: " + (string.IsNullOrEmpty(settings.QuantitySelectorId) ? "1" : "parseFloat(document.getElementById('" + settings.QuantitySelectorId + "').value)") +
8542 "});" + settings.OnClick;
8543
8544 @RenderButton(settings)
8545 }
8546 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
8547
8548 @* Component *@
8549
8550 @helper RenderUnitSelector(UnitSelector settings)
8551 {
8552 if (string.IsNullOrEmpty(settings.Id))
8553 {
8554 settings.Id = Guid.NewGuid().ToString("N");
8555 }
8556 var disabledClass = settings.Disabled ? "disabled" : "";
8557
8558 <input type="checkbox" id="@settings.Id" class="dropdown-trigger" />
8559 <div class="dropdown unit-selector @settings.CssClass @disabledClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
8560 <label class="dropdown__header dropdown__btn dropdown__btn--unit-selector dw-mod" for="@settings.Id">@settings.SelectedOption</label>
8561 <div class="dropdown__content dw-mod">
8562 @settings.OptionsContent
8563 </div>
8564 <label class="dropdown-trigger-off" for="@settings.Id"></label>
8565 </div>
8566 }
8567 @using System.Reflection
8568 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
8569
8570 @* Component *@
8571
8572 @helper RenderQuantitySelector(QuantitySelector settings)
8573 {
8574 var attributes = new Dictionary<string, string>();
8575
8576 /*base settings*/
8577 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
8578 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
8579 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
8580 if (settings.Disabled) { attributes.Add("disabled", "true"); }
8581 if (settings.Required) { attributes.Add("required", "true"); }
8582 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
8583 /*end*/
8584
8585 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
8586 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
8587 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
8588 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
8589 if (settings.Max != null) { attributes.Add("max", settings.Max.ToString()); }
8590 if (settings.Min == null) { settings.Min = 1; }
8591 attributes.Add("min", settings.Min.ToString());
8592 if (settings.Step != null && !string.IsNullOrEmpty(settings.Step.ToString())) { attributes.Add("step", settings.Step.ToString()); }
8593 if (settings.Value == null) { settings.Value = 1; }
8594 attributes.Add("value", settings.Value.ToString());
8595 attributes.Add("type", "number");
8596
8597 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
8598
8599 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
8600 }
8601 @using Dynamicweb.Rapido.Blocks.Components
8602
8603 @using Dynamicweb.Frontend
8604 @using Dynamicweb.Frontend.Devices
8605 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
8606 @using Dynamicweb.Rapido.Blocks.Components.General
8607 @using System.Collections.Generic;
8608
8609 @* Component *@
8610
8611 @helper RenderCustomerCenterList(CustomerCenterList settings)
8612 {
8613 bool isTouchDevice = Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet" ? true : false;
8614 string hideActions = isTouchDevice ? "u-block" : "";
8615
8616 <table class="table data-list dw-mod">
8617 @if (settings.GetHeaders().Length > 0) {
8618 <thead>
8619 <tr class="u-bold">
8620 @foreach (CustomerCenterListHeaderItem header in settings.GetHeaders())
8621 {
8622 var attributes = new Dictionary<string, string>();
8623 if (!string.IsNullOrEmpty(header.Id)) { attributes.Add("id", header.Id); }
8624 if (!string.IsNullOrEmpty(header.CssClass)) { attributes.Add("class", header.CssClass); }
8625 attributes.Add("align", header.Align.ToString());
8626 attributes = attributes.Concat(header.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
8627
8628 <td @ComponentMethods.AddAttributes(attributes)>@header.Title</td>
8629 }
8630 </tr>
8631 </thead>
8632 }
8633 @foreach (CustomerCenterListItem listItem in settings.GetItems())
8634 {
8635 int columnCount = 0;
8636 int totalColumns = listItem.GetInfoItems().Length;
8637 string rowHasActions = listItem.GetActions().Length > 0 ? "data-list__item--has-actions" : "";
8638 listItem.Id = !string.IsNullOrEmpty(listItem.Id) ? listItem.Id : Guid.NewGuid().ToString("N");
8639
8640 var attributes = new Dictionary<string, string>();
8641 if (!string.IsNullOrEmpty(listItem.Title)) { attributes.Add("title", listItem.Title); };
8642
8643 attributes = attributes.Concat(listItem.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
8644 <tbody class="data-list__item @rowHasActions @listItem.CssClass dw-mod" @ComponentMethods.AddAttributes(attributes)>
8645 <tr>
8646 @if (!string.IsNullOrEmpty(listItem.Title) || !string.IsNullOrEmpty(listItem.Description)) {
8647 string onClick = !string.IsNullOrEmpty(listItem.OnClick) ? "onclick=\"" + listItem.OnClick + "\"" : "";
8648
8649 <td rowspan="2" @onClick class="data-list__main-item dw-mod">
8650 @if (!string.IsNullOrEmpty(listItem.Title)) {
8651 <div class="u-bold">@listItem.Title</div>
8652 }
8653 @if (!string.IsNullOrEmpty(listItem.Description)) {
8654 <div>@listItem.Description</div>
8655 }
8656 </td>
8657 }
8658
8659 @foreach (CustomerCenterListInfoItem infoItem in listItem.GetInfoItems())
8660 {
8661 var infoAttributes = new Dictionary<string, string>();
8662 if (!string.IsNullOrEmpty(infoItem.Id)) { infoAttributes.Add("id", infoItem.Id); };
8663 if (!string.IsNullOrEmpty(infoItem.OnClick)) { infoAttributes.Add("onclick", infoItem.OnClick); };
8664 infoAttributes.Add("align", infoItem.Align.ToString());
8665
8666 infoAttributes = infoAttributes.Concat(infoItem.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
8667 string columnClick = columnCount < (totalColumns-1) && !string.IsNullOrEmpty(listItem.OnClick) ? "onclick=\"" + listItem.OnClick + "\"" : "";
8668
8669 <td @ComponentMethods.AddAttributes(infoAttributes) @columnClick class="data-list__info-item dw-mod">
8670 @if (!string.IsNullOrEmpty(infoItem.Title)) {
8671 <div>@infoItem.Title</div>
8672 }
8673 @if (!string.IsNullOrEmpty(infoItem.Subtitle)) {
8674 <div><small>@infoItem.Subtitle</small></div>
8675 }
8676 </td>
8677
8678 columnCount++;
8679 }
8680 </tr>
8681 <tr>
8682 <td colspan="@columnCount" align="right" class="u-va-bottom u-no-border">
8683 <div class="data-list__actions @hideActions dw-mod" id="ActionsMenu_@listItem.Id">
8684 @foreach (ButtonBase action in listItem.GetActions())
8685 {
8686 action.ButtonLayout = ButtonLayout.LinkClean;
8687 action.Icon.CssClass += " u-full-height";
8688 action.CssClass += " data-list__action-button link";
8689
8690 @Render(action)
8691 }
8692 </div>
8693 </td>
8694 </tr>
8695 </tbody>
8696 }
8697 </table>
8698 }
8699 @using System.Reflection
8700 @using Dynamicweb.Rapido.Blocks.Components
8701 @using Dynamicweb.Rapido.Blocks.Components.Articles
8702 @using Dynamicweb.Rapido.Blocks
8703
8704
8705 @functions{
8706
8707 public class DF_ItemListField : ComponentBase
8708 {
8709 public int[] itemList {get; set;}
8710 public string itemListDisplay {get; set;}
8711 public string itemLabel {get; set;}
8712 }
8713
8714 }
8715
8716 @helper RenderDF_ItemListField(DF_ItemListField settings)
8717 {
8718 if(settings.itemList != null)
8719 {
8720 int[] itemList = settings.itemList;
8721 string itemLabel = settings.itemLabel;
8722 string itemListDisplay = settings.itemListDisplay != null ? settings.itemListDisplay: "linkList";
8723 var pageService = Dynamicweb.Extensibility.ServiceLocator.Current.GetInstance<Dynamicweb.Content.IPageService>();
8724 var pages = pageService.GetPages(itemList);
8725
8726 if(pages.Any())
8727 {
8728 <div class="grid__col-md-4 grid__col-sm-12 u-margin-bottom">
8729 <div class="u-bold">@itemLabel</div>
8730 <ul>
8731 @foreach(var page in pages)
8732 {
8733 if(page != null)
8734 {
8735 <li><a href="/Default.aspx?ID=@page.ID">@page.MenuText</a></li>
8736 }
8737 }
8738 </ul>
8739 </div>
8740
8741 }
8742 }
8743 }
8744
8745 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
8746
8747 @using System
8748 @using System.Web
8749 @using System.Collections.Generic
8750 @using Dynamicweb.Rapido.Blocks.Extensibility
8751 @using Dynamicweb.Rapido.Blocks
8752
8753 @{
8754 BlocksPage bottomSnippetsBlocksPage = BlocksPage.GetBlockPage("Master");
8755
8756 Block primaryBottomSnippets = new Block()
8757 {
8758 Id = "MasterJavascriptInitializers",
8759 SortId = 100,
8760 Template = RenderPrimaryBottomSnippets()
8761 };
8762 bottomSnippetsBlocksPage.Add(MasterBlockId.MasterReferences, primaryBottomSnippets);
8763
8764 if (Dynamicweb.Rapido.Services.User.IsBuyingAllowed())
8765 {
8766 Block miniCartPageId = new Block
8767 {
8768 Id = "MiniCartPageId",
8769 Template = RenderMiniCartPageId()
8770 };
8771 bottomSnippetsBlocksPage.Add(MasterBlockId.MasterReferences, miniCartPageId);
8772 }
8773 }
8774
8775 @helper RenderPrimaryBottomSnippets()
8776 {
8777 bool isWireframeMode = Model.Area.Item.GetItem("Settings").GetBoolean("WireframeMode");
8778 bool useGoogleTagManager = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("GoogleTagManagerID"));
8779
8780 //if (isWireframeMode)
8781 //{
8782 //<script>
8783 //Wireframe.Init(true);
8784 //</script>
8785 //}
8786
8787
8788 if (useGoogleTagManager)
8789 {
8790 <script>
8791 document.addEventListener('addToCart', function(event) {
8792 var googleImpression = JSON.parse(event.detail.productInfo.googleImpression);
8793 if (typeof googleImpression == "string") {
8794 googleImpression = JSON.parse(event.detail.productInfo.googleImpression);
8795 }
8796 dataLayer.push({
8797 'event': 'addToCart',
8798 'ecommerce': {
8799 'currencyCode': googleImpression.currency,
8800 'add': {
8801 'products': [{
8802 'name': googleImpression.name,
8803 'id': googleImpression.id,
8804 'price': googleImpression.price,
8805 'brand': googleImpression.brand,
8806 'category': googleImpression.category,
8807 'variant': googleImpression.variant,
8808 'quantity': event.detail.quantity
8809 }]
8810 }
8811 }
8812 });
8813 });
8814 </script>
8815 }
8816
8817 //if digitalwarehouse
8818 if (Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("ShowDownloadCart"))
8819 {
8820 string cartContextId = Converter.ToString(HttpContext.Current.Application["DownloadCartContext"]);
8821
8822 if (string.IsNullOrEmpty(cartContextId))
8823 {
8824 var moduleProps = Dynamicweb.Modules.Properties.GetParagraphModuleSettings(GetPageIdByNavigationTag("DownloadCart"), "eCom_CartV2");
8825 var cartSettings = new Dynamicweb.Ecommerce.Cart.ModuleSettings(moduleProps);
8826 cartContextId = cartSettings.OrderContextID;
8827 HttpContext.Current.Application["DownloadCartContext"] = cartContextId;
8828 }
8829
8830 <script>
8831 let downloadCart = new DownloadCart({
8832 cartPageId: @GetPageIdByNavigationTag("MiniCartFeed"),
8833 contextId: "@cartContextId",
8834 addButtonText: "@Translate("Add")",
8835 removeButtonText: "@Translate("Remove")"
8836 });
8837 </script>
8838 }
8839
8840 <!--$$Javascripts-->
8841 }
8842
8843 @helper RenderMiniCartPageId()
8844 {
8845
8846 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed");
8847 <script>
8848 window.cartId = "@miniCartFeedPageId";
8849 </script>
8850
8851 }
8852 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
8853
8854 @using System
8855 @using System.Web
8856 @using System.Collections.Generic
8857 @using Dynamicweb.Rapido.Blocks
8858
8859 @{
8860 BlocksPage masterCustomBlocksPage = BlocksPage.GetBlockPage("Master");
8861
8862 }
8863
8864 @* Include Replacement blocks *@
8865 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
8866
8867 @using System
8868 @using System.Web
8869 @using System.Collections.Generic
8870 @using Dynamicweb.Rapido.Blocks
8871 @using Dynamicweb.Rapido.Blocks.Extensibility
8872
8873 @{
8874
8875
8876 BlocksPage masterBlocksBlocksPage = BlocksPage.GetBlockPage("Master");
8877
8878
8879 //string footerColumnOneContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetString("Content");
8880 //string footerColumnTwoContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetString("Content");
8881 //string footerColumnThreeContent = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetString("Content");
8882 //string footerColumnOneHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetString("Header");
8883 //string footerColumnTwoHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetString("Header");
8884 //string footerColumnThreeHeader = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetString("Header");
8885 IList<ItemViewModel> footerColumnOneLinks = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnOne").GetItems("Pages");
8886 IList<ItemViewModel> footerColumnTwoLinks = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnTwo").GetItems("Pages");
8887 IList<ItemViewModel> footerColumnThreeLinks = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnThree").GetItems("Pages");
8888 IList<ItemViewModel> footerColumnFourLinks = new List<ItemViewModel>();
8889 if(Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour") != null) {
8890 footerColumnFourLinks = Model.Area.Item.GetItem("Layout").GetItem("FooterColumnFour").GetItems("Pages");
8891 }
8892
8893
8894 bool footerColumnOneHasLinks = footerColumnOneLinks != null && footerColumnOneLinks.Count > 0 ? true : false;
8895 bool footerColumnTwoHasLinks = footerColumnTwoLinks != null && footerColumnTwoLinks.Count > 0 ? true : false;
8896 bool footerColumnThreeHasLinks = footerColumnThreeLinks != null && footerColumnThreeLinks.Count > 0 ? true : false;
8897 bool footerColumnFourHasLinks = footerColumnFourLinks != null && footerColumnFourLinks.Count > 0 ? true : false;
8898
8899
8900 if (!string.IsNullOrEmpty(footerColumnOneContent) || !string.IsNullOrEmpty(footerColumnOneHeader) || footerColumnOneHasLinks)
8901 {
8902
8903 Block masterFooterColumnOne = new Block
8904 {
8905 Id = "MasterFooterColumnOne",
8906 SortId = 10,
8907 Template = RenderFooterColumnCustom(footerColumnOneHeader, footerColumnOneContent, footerColumnOneLinks),
8908 Design = new Design {
8909 Size = "auto",
8910 RenderType = RenderType.Column,
8911 CssClass = "footer__column-wrapper"
8912 }
8913 };
8914 masterBlocksBlocksPage.ReplaceBlock(masterFooterColumnOne);
8915 }
8916
8917 if (!string.IsNullOrEmpty(footerColumnTwoContent) || !string.IsNullOrEmpty(footerColumnTwoHeader) )
8918 {
8919 Block masterFooterColumnTwo = new Block
8920 {
8921 Id = "MasterFooterColumnTwo",
8922 SortId = 20,
8923 Template = RenderFooterColumnCustom(footerColumnTwoHeader, footerColumnTwoContent, footerColumnTwoLinks),
8924 Design = new Design
8925 {
8926 Size = "auto",
8927 RenderType = RenderType.Column,
8928 CssClass = "footer__column-wrapper"
8929 }
8930 };
8931 masterBlocksBlocksPage.ReplaceBlock(masterFooterColumnTwo);
8932 }
8933
8934 if (!string.IsNullOrEmpty(footerColumnThreeContent) || !string.IsNullOrEmpty(footerColumnThreeHeader))
8935 {
8936 Block masterFooterColumnThree = new Block
8937 {
8938 Id = "MasterFooterColumnThree",
8939 SortId = 30,
8940 Template = RenderFooterColumnCustom(footerColumnThreeHeader, footerColumnThreeContent, footerColumnThreeLinks),
8941 Design = new Design
8942 {
8943 Size = "auto",
8944 RenderType = RenderType.Column,
8945 CssClass = "footer__column-wrapper"
8946 }
8947 };
8948 masterBlocksBlocksPage.ReplaceBlock(masterFooterColumnThree);
8949 }
8950
8951 if (!string.IsNullOrEmpty(footerColumnFourContent) || !string.IsNullOrEmpty(footerColumnFourHeader))
8952 {
8953 Block masterFooterColumnFour = new Block
8954 {
8955 Id = "MasterFooterColumnFour",
8956 SortId = 40,
8957 Template = RenderFooterColumnCustom(footerColumnFourHeader, footerColumnFourContent, footerColumnFourLinks),
8958 Design = new Design
8959 {
8960 Size = "auto",
8961 RenderType = RenderType.Column,
8962 CssClass = "footer__column-wrapper"
8963 }
8964 };
8965 masterBlocksBlocksPage.ReplaceBlock(masterFooterColumnFour);
8966 }
8967
8968 if (Model.Area.Item.GetItem("Layout").GetBoolean("FooterNewsletterSignUp"))
8969 {
8970 Block masterFooterNewsletterSignUp = new Block
8971 {
8972 Id = "MasterFooterNewsletterSignUp",
8973 SortId = 2,
8974 Template = RenderFooterNewsletterSignUpCustom(),
8975 Design = new Design
8976 {
8977 Size = "auto",
8978 RenderType = RenderType.Column,
8979 CssClass = "footer__column-wrapper open"
8980 }
8981 };
8982 // masterBlocksBlocksPage.ReplaceBlock(masterFooterNewsletterSignUp);
8983 }
8984
8985 if (Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks").Count > 0)
8986 {
8987 Block masterFooterSocialLinks = new Block
8988 {
8989 Id = "MasterFooterSocialLinks",
8990 SortId = 1,
8991 Template = RenderFooterSocialLinksCustom(),
8992 Design = new Design
8993 {
8994 Size = "auto",
8995 RenderType = RenderType.Column,
8996 CssClass = "footer__column-wrapper"
8997 }
8998 };
8999 //masterBlocksBlocksPage.ReplaceBlock(masterFooterSocialLinks);
9000 }
9001
9002 // edit payments
9003 //if (Model.Area.Item.GetItem("Layout").GetItems("FooterPayments") != null && Model.Area.Item.GetItem("Layout").GetItems("FooterPayments").Count > 0)
9004 //{
9005 //Block masterFooterPaymentsCustom = new Block
9006 //{
9007 //Id = "MasterFooterPayments",
9008 //SortId = 60,
9009 //Design = new Design
9010 //{
9011 //Size = "12",
9012 //RenderType = RenderType.Column
9013 //}
9014 //};
9015 //masterBlocksBlocksPage.ReplaceBlock(masterFooterPaymentsCustom);
9016 //}
9017
9018
9019 Block masterFooterCopyrightCustom = new Block
9020 {
9021 Id = "MasterFooterCopyright",
9022 SortId = 70,
9023 Template = RenderFooterCopyrightCustom(),
9024 Design = new Design
9025 {
9026 Size = "12",
9027 RenderType = RenderType.Column
9028 }
9029 };
9030 masterBlocksBlocksPage.ReplaceBlock(masterFooterCopyrightCustom);
9031 }
9032
9033 @helper RenderFooterColumnCustom(string header, string content, IList<ItemViewModel> links) {
9034 <h3 class="footer__heading dw-mod">@header<i class="icon--accordion fas fa-chevron-down"></i></h3>
9035 <div class="footer__content dw-mod">
9036 @if(links.Any()){
9037 <ul class="footer-links u-margin-bottom dw-mod">
9038 @foreach(var pageLink in links){
9039 string link = pageLink.GetString("Link");
9040 string title = pageLink.GetString("Title");
9041 string icon = pageLink.GetString("Icon");
9042 string newWindow = pageLink.GetBoolean("NewWindow") ? " target=\"_blank\"" : "";
9043 <li class="footer-links__item dw-mod">
9044 <a href="@link" @newWindow class="footer-links__link dw-mod">@icon @title</a>
9045 </li>
9046 }
9047 </ul>
9048 }else{
9049 @content
9050 }
9051 </div>
9052 }
9053 @helper RenderFooterNewsletterSignUpCustom() {
9054 string newsletterSignUpPageId = GetPageIdByNavigationTag("NewsletterSignUp").ToString();
9055
9056 <h3 class="footer__heading dw-mod">@Translate("Mailing list")</h3>
9057 <div class="footer__content dw-mod">
9058 <form class="form dw-mod" name="NewsletterRedirect" action='/Default.aspx' method="get" enctype="multipart/form-data">
9059 <input name="ID" value="@newsletterSignUpPageId" type="hidden" />
9060 <label for="NewsletterEmail" class="u-margin-bottom">@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")</label>
9061 <div class="form__field-combi">
9062 <input name="NewsletterEmail" id="NewsletterEmail" type="text" placeholder='@Translate("Your email address", "Your email address")' class="u-full-width use-btn-primary-height" />
9063 <input class="btn btn--primary btn--condensed dw-mod" type="submit" id="Submitter" value='@Translate("Go", "Go")' />
9064 </div>
9065 </form>
9066 </div>
9067
9068
9069 }
9070
9071 @helper RenderFooterSocialLinksCustom() {
9072 string logoFooter = Model.Area.Item.GetItem("Custom").GetFile("WhiteLogoImage") != null ? Model.Area.Item.GetItem("Custom").GetFile("WhiteLogoImage").PathUrlEncoded : "/Files/Images/logo-dynamicweb.png";
9073
9074 if (Path.GetExtension(logoFooter).ToLower() != ".svg")
9075 {
9076 int logoHeight = Model.Area.Item.GetItem("Layout").GetInt32("LogoHeight");
9077 logoHeight = logoHeight > 0 && Pageview.Device.ToString() != "Mobile" ? logoHeight : 40;
9078 logoFooter = "/Admin/Public/GetImage.ashx?height=" + Converter.ToString(logoHeight) + "&crop=5&Compression=75&image=" + logoFooter;
9079 }
9080 else
9081 {
9082 logoFooter = HttpUtility.UrlDecode(logoFooter);
9083 }
9084
9085 <div class="footer_logo__wrapper">
9086 <img src="@logoFooter" alt='@Translate("Logo")' />
9087 </div>
9088 <div class="footer__content dw-mod">
9089 <div class="collection dw-mod">
9090 @foreach (var socialitem in Model.Area.Item.GetItem("Layout").GetItems("FooterSocialLinks"))
9091 {
9092 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel;
9093 string socialIconClass = socialIcon.SelectedValue;
9094 string socialIconTitle = socialIcon.SelectedName;
9095 string socialLink = socialitem.GetString("Link");
9096
9097 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px" rel="noopener"><i class="@socialIconClass fa-2x"></i></a>
9098 }
9099 </div>
9100 </div>
9101 }
9102
9103 @helper RenderFooterCopyrightCustom() {
9104 <div class="grid__col-12 footer__copyright dw-mod">
9105 <p class="u--heading-sans u-ta-center">@Model.Area.Item.GetItem("Layout").GetString("FooterCopyrightText")</p>
9106 </div>
9107 }
9108 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
9109
9110 @using System
9111 @using System.Web
9112 @using System.Collections.Generic
9113 @using Dynamicweb.Rapido.Blocks
9114 @using Dynamicweb.Rapido.Blocks.Extensibility
9115 @using Dynamicweb.Security.UserManagement
9116 @using Dynamicweb.Security.UserManagement.ExternalAuthentication
9117 @{
9118 Block loginModalCustom = new Block()
9119 {
9120 Id = "LoginModal",
9121 SortId = 10,
9122 Template = LoginModalCustom()
9123 };
9124
9125 loginBlocksPage.RemoveBlock(loginModalCustom);
9126 }
9127
9128 @helper LoginModalCustom() {
9129 int pageId = Model.TopPage.ID;
9130 string userSignedInError = !Model.LogOnFailed ? "" : "checked";
9131 string userSignedInErrorText = "";
9132 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage");
9133 string forgotPasswordPageLink = "/Default.aspx?ID=" + signInProfilePageId + "&LoginAction=Recovery";
9134 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount");
9135 bool isCartPage = GetPageIdByNavigationTag("CartPage") == pageId ? true : false;
9136 string redirectToDashboard = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl("Default.aspx?ID=" + GetPageIdByNavigationTag("CustomerDashboard"));
9137 string redirectDecision = !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("ProductID")) || !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("GroupID")) || isCartPage ? "" : redirectToDashboard;
9138
9139 if (Model.LogOnFailed) {
9140 switch (Model.LogOnFailedReason)
9141 {
9142 case LogOnFailedReason.PasswordLengthInvalid:
9143 userSignedInErrorText = Translate("Password length is invalid");
9144 break;
9145 case LogOnFailedReason.IncorrectLogin:
9146 userSignedInErrorText = Translate("Invalid email or password");
9147 break;
9148 case LogOnFailedReason.ExceededFailedLogOnLimit:
9149 userSignedInErrorText = Translate("You have exceeded the limit of allowed login attempts. The user account is temporarily locked");
9150 break;
9151 case LogOnFailedReason.LoginLocked:
9152 userSignedInErrorText = Translate("The user account is temporarily locked");
9153 break;
9154 case LogOnFailedReason.PasswordExpired:
9155 userSignedInErrorText = Translate("The password has expired and needs to be renewed");
9156 break;
9157 default:
9158 userSignedInErrorText = Translate("An unknown error occured");
9159 break;
9160 }
9161 }
9162
9163 <!-- Trigger for the login modal -->
9164 <input type="checkbox" id="SignInModalTrigger" class="modal-trigger" @userSignedInError />
9165
9166 <!-- Login modal -->
9167 <div class="modal-container">
9168 <label for="SignInModalTrigger" id="SignInModalOverlay" class="modal-overlay"></label>
9169 <div class="modal modal--md" id="SignInModal">
9170 <div class="modal__header no-border">
9171 <button type="button" class="close btn btn--primary dw-mod u-margin-top--lg"><i class="fas fa-times"></i></button>
9172 <h2 class="u-ta-center">@Translate("Sign in")</h2>
9173 </div>
9174 <div class="modal__body">
9175 <form method="post" id="LoginForm" class="u-no-margin">
9176 <input type="hidden" name="ID" value="@pageId" />
9177 <input type="hidden" name="DWExtranetUsernameRemember" value="True" />
9178 <input type="hidden" name="DWExtranetPasswordRemember" value="True" />
9179 @if(redirectDecision!=""){
9180 <input type="hidden" name="redirect" value="@redirectDecision">
9181 }
9182 @* <label for="username">@Translate("Email")</label> *@
9183 <input type="text" class="u-full-width" id="LoginUsername" name="username" placeholder="@Translate("Email")" />
9184
9185 @* <label for="password">@Translate("Password")</label> *@
9186 <input type="password" class="u-full-width" id="LoginPassword" name="password" placeholder="@Translate("Password")" />
9187 <div class="field-error dw-mod">@userSignedInErrorText</div>
9188
9189 <div class="form__field-group dw-mod">
9190 <input type="checkbox" id="LoginRememberMe" name="Autologin" checked="checked" value="True" class="form__control">
9191 <label for="LoginRememberMe">
9192 @Translate("Remember me", "Remember me")
9193 </label>
9194 </div>
9195
9196 <a class="btn btn--link-clean dw-mod" href="@forgotPasswordPageLink">@Translate("Forgot your password?")</a>
9197
9198 <button type="submit" class="btn btn--primary btn--full dw-mod u-margin-top--lg" name="LoginAction" value="Login" onclick="Buttons.LockButton(event)">@Translate("Sign in")</button>
9199 @{
9200 ProviderCollection providers = Provider.GetActiveProviders();
9201 }
9202
9203 @foreach(Provider LoginProvider in providers)
9204 {
9205 var ProviderName = LoginProvider.Name.ToLower();
9206 <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>
9207 }
9208
9209
9210 <div class="dw-mod u-margin-top--lg">
9211 <div class="u-ta-center u-margin-bottom--lg">
9212 <h5 class="u-no-margin">@Translate("No Idera account?")</h5>
9213 <p class="u-no-margin" style="font-size: 13px;">@Translate("Follow the steps and become a member today")</p>
9214 </div>
9215 <a class="btn btn--primary btn--full dw-mod" href="/default.aspx?ID=@createAccountPageId">@Translate("Create account")</a>
9216 </div>
9217 </form>
9218 </div>
9219 </div>
9220 </div>
9221 }
9222
9223 @* Include New blocks *@
9224 @*Include("NewBlocks/Promotion.cshtml")*@
9225 @using Dynamicweb.Content
9226
9227
9228 @{
9229 //BlocksPage masterBlocksBlocksPage = BlocksPage.GetBlockPage("Master");
9230
9231 Block megaMenu = new Block
9232 {
9233 Id = "MegaMenu",
9234 SortId = 100,
9235 Template = RenderMegaMenu()
9236 };
9237 masterBlocksBlocksPage.Add(MasterBlockId.MasterFooter, megaMenu);
9238 }
9239
9240 @helper RenderMegaMenu(){
9241 int megaMenuPage = GetPageIdByNavigationTag("MenuConfiguration");
9242 if(megaMenuPage > 0){
9243 <div class="hidden">
9244 @RenderPageContent(@megaMenuPage)
9245 </div>
9246 }
9247 }
9248
9249 @*Include("NewBlocks/FooterPayments.cshtml")*@
9250
9251 @functions {
9252 public class ManifestIcon
9253 {
9254 public string src { get; set; }
9255 public string type { get; set; }
9256 public string sizes { get; set; }
9257 }
9258
9259 public class Manifest
9260 {
9261 public string name { get; set; }
9262 public string short_name { get; set; }
9263 public string start_url { get; set; }
9264 public string display { get; set; }
9265 public string background_color { get; set; }
9266 public string theme_color { get; set; }
9267 public List<ManifestIcon> icons { get; set; }
9268 }
9269 }
9270
9271 <!DOCTYPE html>
9272
9273 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName">
9274
9275
9276
9277 @* The @RenderBlockList base helper is included in Components/GridBuilder.cshtml *@
9278 @RenderBlockList(masterPage.BlocksRoot.BlocksList)
9279
9280
9281
9282 @helper RenderMasterHead() {
9283 List<Block> subBlocks = this.masterPage.GetBlockListById("Head").OrderBy(item => item.SortId).ToList();
9284
9285 <head>
9286 <!-- AgricoverCorporate version 3.4.2 -->
9287
9288 @RenderBlockList(subBlocks)
9289
9290
9291 @{
9292 List<Dynamicweb.Content.Page> languages = new List<Dynamicweb.Content.Page>();
9293 Uri url = Dynamicweb.Context.Current.Request.Url;
9294 string hostName = url.Host;
9295 string alternateDefaultUrl = "";
9296
9297 if (Pageview.Area.IsMaster)
9298 {
9299 languages.Add(Pageview.Page);
9300 if (Pageview.Page.Languages != null)
9301 {
9302 foreach (var language in Pageview.Page.Languages)
9303 {
9304 languages.Add(language);
9305 }
9306 }
9307 }
9308 else
9309 {
9310 languages.Add(Pageview.Page.MasterPage);
9311 if (Pageview.Page.MasterPage != null)
9312 {
9313 if (Pageview.Page.MasterPage.Languages != null)
9314 {
9315 foreach (var language in Pageview.Page.MasterPage.Languages)
9316 {
9317 languages.Add(language);
9318 }
9319 }
9320 }
9321 }
9322
9323 foreach (var language in languages)
9324 {
9325 if (language?.Area != null)
9326 {
9327 @*if (language != null && language.Published && language.Active && language.Area.Active && language.Area.Published)*@
9328 if (language.Published && language.Area.Published)
9329 {
9330 if (!string.IsNullOrEmpty(language.Area.DomainLock))
9331 {
9332 hostName = language.Area.DomainLock; //dk.domain.com or dk-domain.dk
9333 }
9334 string querystring = $"Default.aspx?ID={language.ID}";
9335 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["GroupID"]))
9336 {
9337 querystring += $"&GroupID={Dynamicweb.Context.Current.Request.QueryString["GroupID"]}";
9338 }
9339 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["ProductID"]))
9340 {
9341 querystring += $"&ProductID={Dynamicweb.Context.Current.Request.QueryString["ProductID"]}";
9342 }
9343 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["VariantID"]))
9344 {
9345 querystring += $"&VariantID={Dynamicweb.Context.Current.Request.QueryString["VariantID"]}";
9346 }
9347
9348 string friendlyUrl = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(querystring);
9349 string href = $"{url.Scheme}://{hostName}{friendlyUrl}";
9350 string defaultUrl = $"{url.Scheme}://{hostName}";
9351 alternateDefaultUrl = defaultUrl;
9352
9353 <link rel="alternate" hreflang="@language.Area.CultureInfo.Name.ToLower()" href="@href">
9354
9355 }
9356 }
9357 }
9358
9359 <link rel="alternate" hreflang="x-default" href="@alternateDefaultUrl">
9360 }
9361 </head>
9362 }
9363
9364 @helper RenderMasterMetadata() {
9365 var swatches = new Dynamicweb.Content.Items.ColorSwatchService();
9366 var brandColors = swatches.GetColorSwatch(1);
9367 string brandColorOne = brandColors.Palette["BrandColor1"];
9368
9369 if (!String.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("AppName")) && Model.Area.Item.GetItem("Settings").GetFile("AppIcon") != null) {
9370 Manifest manifest = new Manifest
9371 {
9372 name = Model.Area.Item.GetItem("Settings").GetString("AppName"),
9373 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"),
9374 start_url = "/",
9375 display = "standalone",
9376 background_color = Model.Area.Item.GetItem("Settings").GetString("AppBackgroundColor"),
9377 theme_color = Model.Area.Item.GetItem("Settings").GetString("AppThemeColor")
9378 };
9379
9380 manifest.icons = new List<ManifestIcon> {
9381 new ManifestIcon {
9382 src = "/Admin/Public/GetImage.ashx?width=192&height=192&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded,
9383 sizes = "192x192",
9384 type = "image/png"
9385 },
9386 new ManifestIcon {
9387 src = "/Admin/Public/GetImage.ashx?width=512&height=512&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded,
9388 sizes = "512x512",
9389 type = "image/png"
9390 },
9391 new ManifestIcon {
9392 src = "/Admin/Public/GetImage.ashx?width=1024&height=1024&crop=5&image=" + Model.Area.Item.GetItem("Settings").GetFile("AppIcon").PathUrlEncoded,
9393 sizes = "1024x1024",
9394 type = "image/png"
9395 }
9396 };
9397
9398 string manifestFilePath = HttpContext.Current.Request.MapPath("/Files/Templates/Designs/AgricoverCorporate/manifest.json");
9399 string manifestJSON = Newtonsoft.Json.JsonConvert.SerializeObject(manifest);
9400 string currentManifest = File.ReadAllText(manifestFilePath);
9401
9402 if (manifestJSON != currentManifest)
9403 {
9404 File.WriteAllText(manifestFilePath, manifestJSON);
9405 }
9406 }
9407
9408 var titlePrefix = Translate("Agricover");
9409 string titleTag = Model.Title + " | " + titlePrefix;
9410
9411 string index = "index";
9412 string follow = "follow";
9413 if(!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("q")) || !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("sourceType")))
9414 {
9415 index = "noindex";
9416 follow = "nofollow";
9417 }
9418
9419 <meta charset="utf-8" />
9420 <title>@titleTag</title>
9421 <meta name="viewport" content="width=device-width, initial-scale=1.0">
9422 <meta name="robots" content="@index, @follow">
9423 <meta name="theme-color" content="@brandColorOne" />
9424
9425 if (Model.MetaTags != null && !Model.MetaTags.Contains("og:image") && Model.PropertyItem != null && Model.PropertyItem.GetFile("OpenGraphImage") != null)
9426 {
9427 Pageview.Meta.AddTag("og:image", string.Format("{0}://{1}{2}", Dynamicweb.Context.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, Model.PropertyItem.GetFile("OpenGraphImage")));
9428 }
9429
9430 if (!Model.MetaTags.Contains("og:description") && !string.IsNullOrEmpty(Model.Description))
9431 {
9432 Pageview.Meta.AddTag("og:description", Model.Description);
9433 }
9434
9435 @*Pageview.Meta.AddTag("og:title", Model.Title);*@
9436 Pageview.Meta.AddTag("og:title", titleTag);
9437 Pageview.Meta.AddTag("og:site_name", Model.Name);
9438 Pageview.Meta.AddTag("og:url", HttpContext.Current.Request.Url.ToString());
9439 Pageview.Meta.AddTag("og:type", "Website");
9440
9441 if (!string.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("FacebookAppID"))) {
9442 Pageview.Meta.AddTag("fb:app_id", Model.Area.Item.GetItem("Settings").GetString("FacebookAppID"));
9443 }
9444 if (GetPageIdByNavigationTag("contactPage") == Model.ID)
9445 {
9446 <script type="application/ld+json">
9447 {
9448 "@@context": "https://schema.org",
9449 "@@type": "ProfessionalService",
9450 "address": {
9451 "@@type": "PostalAddress",
9452 "addressLocality": "Ilfov",
9453 "addressRegion": "Voluntari",
9454 "postalCode": "77190",
9455 "streetAddress": "Bulevardul Pipera 1B, Cubic Center etaj 6"
9456 },
9457 "name": "Agricover",
9458 "telephone": "021 336 4645",
9459 "url": "https://agricover.ro"
9460 }
9461 </script>
9462 }
9463
9464
9465 @Model.MetaTags
9466 }
9467 @helper RenderMasterCss() {
9468 var fonts = new string[] {
9469 getFontFamily("Layout", "HeaderFont"),
9470 getFontFamily("Layout", "SubheaderFont"),
9471 getFontFamily("Layout", "TertiaryHeaderFont"),
9472 getFontFamily("Layout", "BodyText"),
9473 getFontFamily("Layout", "Header", "ToolsFont"),
9474 getFontFamily("Layout", "Header", "NavigationFont"),
9475 getFontFamily("Layout", "MobileNavigation", "Font"),
9476 getFontFamily("ProductList", "Facets", "HeaderFont"),
9477 getFontFamily("ProductPage", "PriceFontDesign"),
9478 getFontFamily("Ecommerce", "SaleSticker", "Font"),
9479 getFontFamily("Ecommerce", "NewSticker", "Font"),
9480 getFontFamily("Ecommerce", "CustomSticker", "Font")
9481 };
9482
9483 var DesignFolder = Pageview.Layout.Design.Name;
9484 string autoCssLink = "/Files/Templates/Designs/AgricoverCorporate/css/rapido/agricovercorporate_31.min.css?ticks=" + Model.Area.UpdatedDate.Ticks;
9485 string ApplicationCssLink = "/Files/Templates/Designs/"+DesignFolder+"/dist/app.bundle.css?v=142&ticks=" + Model.Area.UpdatedDate.Ticks;
9486 string favicon = Model.Area.Item.GetItem("Layout").GetFile("LogoFavicon") != null ? Model.Area.Item.GetItem("Layout").GetFile("LogoFavicon").Path : "/Files/Images/favicon.png";
9487 bool useFontAwesomePro = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetBoolean("UseFontAwesomePro");
9488 string fontAwesomeCssLink = "/Files/Templates/Designs/AgricoverCorporate/css/fonts/FontAwesomeFree/css/fontawesome-all.min.css";
9489 if (useFontAwesomePro)
9490 {
9491 fontAwesomeCssLink = "/Files/Templates/Designs/AgricoverCorporate/css/fonts/FontAwesomePro/css/fontawesome-all.min.css";
9492 }
9493
9494 //Favicon
9495 <link href="@favicon" rel="icon" type="image/png">
9496
9497 //Base (Default, wireframe) styles
9498 <link rel="stylesheet" href="/Files/Templates/Designs/AgricoverCorporate/css/base/base.min.css" type="text/css">
9499
9500 //AgricoverCorporate Css from Website Settings
9501 <link rel="stylesheet" id="rapidoCss" href="@autoCssLink" type="text/css">
9502
9503 //Ignite Css (Custom site specific styles)
9504 //<link rel="stylesheet" id="igniteCss" type="text/css" href="/Files/Templates/Designs/AgricoverCorporate/css/ignite/ignite.min.css?v=8">
9505
9506 //Adi Css (Custom site specific styles)
9507 //<link rel="stylesheet" id="igniteCss" type="text/css" href="/Files/Templates/Designs/AgricoverCorporate/css/ignite/adi.css?v=7">
9508
9509 //Bundle Css
9510 @*<link rel="stylesheet" id="igniteCss" type="text/css" href="/Files/Templates/Designs/AgricoverCorporate/dist/app.bundle.css">*@
9511 <link rel="stylesheet" type="text/css" href="@ApplicationCssLink">
9512
9513 //Font awesome
9514 <link rel="stylesheet" href="@fontAwesomeCssLink" type="text/css">
9515
9516 //Flag icon
9517 <link rel="stylesheet" href="/Files/Templates/Designs/AgricoverCorporate/css/fonts/flag-icon.min.css" type="text/css">
9518
9519 //Google fonts
9520 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)));
9521
9522 <link href="https://fonts.googleapis.com/css?family=@family" rel="stylesheet">
9523
9524 PushPromise(favicon);
9525 PushPromise(fontAwesomeCssLink);
9526 PushPromise("/Files/Templates/Designs/AgricoverCorporate/css/base/base.min.css");
9527 PushPromise(autoCssLink);
9528 PushPromise("/Files/Templates/Designs/AgricoverCorporate/css/ignite/ignite.min.css");
9529 PushPromise("/Files/Images/placeholder.gif");
9530 PushPromise("/Files/Templates/Designs/AgricoverCorporate/css/fonts/flag-icon.min.css");
9531
9532 }
9533
9534 @helper RenderMasterManifest() {
9535 if (!String.IsNullOrEmpty(Model.Area.Item.GetItem("Settings").GetString("AppName")))
9536 {
9537 <link rel="manifest" href="/Files/Templates/Designs/AgricoverCorporate/manifest.json">
9538 PushPromise("/Files/Templates/Designs/AgricoverCorporate/manifest.json");
9539 }
9540 }
9541
9542 @helper RenderMasterBody() {
9543 List<Block> subBlocks = this.masterPage.GetBlockListById("Body").OrderBy(item => item.SortId).ToList();
9544 string designLayout = Model.PropertyItem.GetItem("CustomSettings") != null ? Model.PropertyItem.GetItem("CustomSettings").GetString("DesignLayout") != null ? Model.PropertyItem.GetItem("CustomSettings").GetList("DesignLayout").SelectedValue : "" : "";
9545 if (!String.IsNullOrEmpty(designLayout)) {
9546 designLayout = "class=\"" + designLayout + "\"";
9547 }
9548
9549 <body @designLayout>
9550 @RenderBlockList(subBlocks)
9551 </body>
9552 }
9553
9554 @helper RenderMasterHeader()
9555 {
9556 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterHeader").OrderBy(item => item.SortId).ToList();
9557 bool isNavigationStickyMenu = Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("StickyTop");
9558 string stickyTop = isNavigationStickyMenu ? "top-container--sticky" : "";
9559 string isStiky = Model.PropertyItem != null & Model.PropertyItem.GetList("MoveThisPageBehindTheHeader") != null ? Model.PropertyItem.GetList("MoveThisPageBehindTheHeader").SelectedValue : "False";
9560
9561 <header class="top-container agricover-corporate-header sticky-top @isStiky @stickyTop no-print dw-mod" id="Top">
9562 @RenderBlockList(subBlocks)
9563 </header>
9564 }
9565
9566 @helper RenderMain()
9567 {
9568 List<Block> subBlocks = this.masterPage.GetBlockListById("MasterMain").OrderBy(item => item.SortId).ToList();
9569
9570 <main class="site dw-mod agricover-corporate-site">
9571 @RenderBlockList(subBlocks)
9572 </main>
9573 }
9574
9575 @helper RenderPageContent()
9576 {
9577 bool isNavigationStickyMenu = Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetItem("Layout").GetItem("Header").GetBoolean("StickyTop");
9578 string pagePos = isNavigationStickyMenu ? "js-page-pos" : "";
9579
9580 <div id="Page" class="page @pagePos">
9581 @RenderSnippet("Content")
9582 </div>
9583 }
9584
9585 @* Hack to support nested helpers *@
9586 @SnippetStart("Content")
9587 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
9588
9589
9590 @using Dynamicweb.Extensibility
9591 @using Dynamicweb.Core
9592 @using Dynamicweb.Rapido.Blocks.Components
9593 @using Dynamicweb.Rapido.Blocks.Components.Articles
9594 @using Dynamicweb.Rapido.Blocks.Components.General
9595 @using Dynamicweb.Rapido.Blocks
9596 @using Dynamicweb.Content.Items
9597 @using Dynamicweb.Frontend
9598 @{
9599 var siteLogo = Model.Area.Item.GetString("LogoImage");
9600 var image = Model.Item?.GetFile("image")?.Path;
9601 var urlScheme = Dynamicweb.Context.Current.Request.Url.Scheme;
9602 var ulrHost = HttpContext.Current.Request.Url.Host;
9603 var fullPathImage = urlScheme + "://" + ulrHost + image;
9604 var articleText = Model.Item.GetString("Summary");
9605 var author = Model.Item.GetString("Author");
9606 }
9607 @functions {
9608 BlocksPage articlePage = BlocksPage.GetBlockPage("DynamicArticle");
9609
9610 public string GetParentSettingsItem(string systemName) {
9611 string item = null;
9612
9613 Dynamicweb.Content.Page current = Dynamicweb.Services.Pages.GetPage(Model.ID);
9614 while (current != null && current.Parent != current) {
9615 var temp = current.Item != null ? current.Item[systemName] : "";
9616
9617 if (temp != null) {
9618 item = temp.ToString();
9619
9620 if (!String.IsNullOrEmpty(item) && !String.Equals("default", item, StringComparison.OrdinalIgnoreCase)) {
9621 break;
9622 }
9623 }
9624
9625 current = current.Parent;
9626 }
9627
9628 return item;
9629 }
9630
9631 public string GetArticleCategory(int pageId)
9632 {
9633 string categoryName = null;
9634
9635 //Secure that the article is not in the root folder = Actual has a category
9636 if (Dynamicweb.Services.Pages.GetPage(pageId).Parent != null) {
9637 if (Dynamicweb.Services.Pages.GetPage(pageId).Parent.Parent != null) {
9638 if (!String.IsNullOrEmpty(Dynamicweb.Services.Pages.GetPage(pageId).Parent.Parent.ItemType))
9639 {
9640 categoryName = Dynamicweb.Services.Pages.GetPage(pageId).Parent.GetDisplayName();
9641 }
9642 }
9643 }
9644
9645 return categoryName;
9646 }
9647
9648 public string GetArticleCategoryColor(int pageId)
9649 {
9650 string categoryColor = "";
9651
9652 //Secure that the article is not in the root folder = Actual has a category
9653 if (Dynamicweb.Services.Pages.GetPage(pageId).Parent != null) {
9654 if (Dynamicweb.Services.Pages.GetPage(pageId).Parent.Parent != null) {
9655 if (!String.IsNullOrEmpty(Dynamicweb.Services.Pages.GetPage(pageId).Parent.Parent.ItemType))
9656 {
9657 if (Dynamicweb.Services.Pages.GetPage(pageId).Parent.Item["CategoryColor"] != null)
9658 {
9659 var service = new ColorSwatchService();
9660 categoryColor = Dynamicweb.Services.Pages.GetPage(pageId).Parent.Item["CategoryColor"].ToString();
9661
9662 if (!categoryColor.Contains("#")) {
9663 categoryColor = service.GetHexColor(Converter.ToInt32(Model.Area.ID), categoryColor);
9664 }
9665 }
9666 }
9667 }
9668 }
9669
9670 return categoryColor;
9671 }
9672 }
9673
9674 @{
9675 string listPageId = Converter.ToString(GetPageIdByNavigationTag("DynamicListFeed"));
9676 string parentPageId = Dynamicweb.Services.Pages.GetPage(Model.ID).Parent.ID.ToString();
9677 string topLayout = Model.Item.GetList("TopLayout") != null ? Model.Item.GetList("TopLayout").SelectedValue : "default";
9678 topLayout = topLayout == "default" && GetParentSettingsItem("ArticleTopLayout") != null ? GetParentSettingsItem("ArticleTopLayout").ToString().ToLower() : topLayout;
9679 string textLayout = Model.Item.GetList("TextLayout") != null ? Model.Item.GetList("TextLayout").SelectedValue : "default";
9680 textLayout = textLayout == "default" && GetParentSettingsItem("ArticleTextLayout") != null ? GetParentSettingsItem("ArticleTextLayout").ToString().ToLower() : textLayout;
9681 string imageLayout = Model.Item.GetList("ImageLayout") != null ? Model.Item.GetList("ImageLayout").SelectedValue : "default";
9682 imageLayout = imageLayout == "default" && GetParentSettingsItem("ArticleImageLayout") != null ? GetParentSettingsItem("ArticleImageLayout").ToString().ToLower() : imageLayout;
9683
9684 string imageColumns = imageLayout == "straight" && textLayout != "full" ? "8" : "12";
9685 string contentColumns = textLayout != "full" ? "8" : "12";
9686
9687 int externalParagraphId = Model.Item.GetItem("CTAParagraphLink") != null ? Model.Item.GetItem("CTAParagraphLink").ParagraphID : 0;
9688
9689 var paragraphs = Model.Item.GetItems("Paragraphs");
9690 bool isVisualEditor = !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("VisualEdit")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("VisualEdit")) : false;
9691 var gridRows = Dynamicweb.Services.Grids.GetGridRowsByPageId(Model.ID);
9692 bool hasGridContent = gridRows != null? gridRows.Any() : false;
9693
9694 ArticleHeaderLayout headerLayout;
9695
9696 switch (topLayout)
9697 {
9698 case "default":
9699 headerLayout = ArticleHeaderLayout.Clean;
9700 break;
9701 case "split":
9702 headerLayout = ArticleHeaderLayout.Split;
9703 break;
9704 case "banner":
9705 headerLayout = ArticleHeaderLayout.Banner;
9706 break;
9707 case "overlay":
9708 headerLayout = ArticleHeaderLayout.Overlay;
9709 break;
9710 default:
9711 headerLayout = ArticleHeaderLayout.Clean;
9712 break;
9713 }
9714
9715
9716 Block articleContainer = new Block
9717 {
9718 Id = "ArticleContainer",
9719 SortId = 10,
9720 Design = new Design
9721 {
9722 RenderType = RenderType.Row
9723 },
9724 BlocksList = new List<Block> {
9725 new Block {
9726 Id = "ArticleBody",
9727 SortId = 30,
9728 Design = new Design {
9729 RenderType = RenderType.Column,
9730 Size = "12",
9731 HidePadding = true
9732 }
9733 }
9734 }
9735 };
9736 articlePage.Add(articleContainer);
9737
9738 ButtonLayout topBannerButtonLayout = ButtonLayout.Primary;
9739
9740 switch (Model.Item.GetString("ButtonDesign")) {
9741 case "primary":
9742 topBannerButtonLayout = ButtonLayout.Primary;
9743 break;
9744 case "secondary":
9745 topBannerButtonLayout = ButtonLayout.Secondary;
9746 break;
9747 case "teritary":
9748 topBannerButtonLayout = ButtonLayout.Tertiary;
9749 break;
9750 case "link":
9751 topBannerButtonLayout = ButtonLayout.Link;
9752 break;
9753 }
9754
9755 ArticleHeader topBanner = new ArticleHeader
9756 {
9757 Layout = headerLayout,
9758 Image = new Image { Path = Model.Item.GetFile("Image"), ImageDefault = new ImageSettings { Width = 1920, Height = 640 } },
9759 Heading = Model.Item.GetString("Title"),
9760
9761 Subheading = Model.Item.GetString("Summary"),
9762 TextColor = "#fff",
9763 Author = Model.Item.GetString("Author"),
9764 Date = Model.Item.GetString("Date"),
9765 Category = GetArticleCategory(Model.ID),
9766 CategoryColor = GetArticleCategoryColor(Model.ID),
9767 Link = Model.Item.GetString("Link"),
9768 LinkText = Model.Item.GetString("LinkText"),
9769 ButtonLayout = topBannerButtonLayout,
9770 RatingScore = Model.Item.GetString("Rating") != null ? Converter.ToInt32(Model.Item.GetList("Rating").SelectedValue) : 0,
9771 RatingOutOf = Model.Item.GetString("Rating") != null ? Model.Item.GetList("Rating").Options.Count : 0,
9772 ExternalParagraphId = externalParagraphId
9773 };
9774
9775
9776 Block articleTop = new Block
9777 {
9778 Id = "ArticleHead",
9779 SortId = 20,
9780 Component = topBanner,
9781 Design = new Design
9782 {
9783 RenderType = RenderType.Column,
9784 Size = "12",
9785 HidePadding = true,
9786 CssClass = "article-head"
9787 }
9788 };
9789
9790 Block articleTopWithVIdeo = new Block
9791 {
9792 Id = "ArticleHeadVideo",
9793 SortId = 20,
9794 Template = RenderHeaderWithVideo(topBanner),
9795 Design = new Design
9796 {
9797 RenderType = RenderType.Column,
9798 Size = "12",
9799 HidePadding = true,
9800 CssClass = "article-head"
9801 }
9802
9803 };
9804 Block articleTopWithDownload = new Block
9805 {
9806 Id = "ArticleHeadDownload",
9807 SortId = 20,
9808 Template = RenderHeaderWithDownload(topBanner),
9809 Design = new Design
9810 {
9811 RenderType = RenderType.Column,
9812 Size = "12",
9813 HidePadding = true,
9814 CssClass = "article-head"
9815 }
9816 };
9817
9818 if (String.IsNullOrEmpty(Model.Item.GetString("Video")))
9819 {
9820
9821 if (!String.IsNullOrEmpty(Model.Item.GetString("Is_Press_Release")))
9822 {
9823 articlePage.Add("ArticleContainer", articleTopWithDownload);
9824 }else{
9825 articlePage.Add("ArticleContainer", articleTop);
9826 }
9827 } else {
9828 articlePage.Add("ArticleContainer", articleTopWithVIdeo);
9829 }
9830
9831
9832
9833 Block articleBodyRow = new Block
9834 {
9835 Id = "ArticleBodyRow",
9836 SortId = 10,
9837 SkipRenderBlocksList = true
9838 };
9839
9840
9841 articlePage.Add("ArticleBody", articleBodyRow);
9842
9843 if (Model.Item.GetString("Paragraphs") != null && Model.Item.GetItems("Paragraphs") != null)
9844 {
9845 int count = 0;
9846 foreach (var paragraph in Model.Item.GetItems("Paragraphs"))
9847 {
9848 Block articleContent = new Block{
9849 Id = "ArticleParagraph" + count,
9850 SortId = (count * 10),
9851 Design = new Design
9852 {
9853 RenderType = RenderType.Column,
9854 Size = imageColumns,
9855 CssClass = "u-color-light--bg u-padding--lg"
9856 },
9857
9858 };
9859
9860 articleContent.Component = new DF_ArticleParagraph {ParagraphContent = paragraph, counter = count, imageColumns = imageColumns, imageLayout = imageLayout, contentColumns = contentColumns};
9861 articlePage.Add("ArticleBodyRow", articleContent);
9862
9863
9864 count++;
9865 }
9866 }
9867
9868 articleBodyRow.Component = new ArticleBodyRow { SubBlocks = articleBodyRow.BlocksList, TopLayout = topLayout, TextLayout = textLayout };
9869
9870
9871 //Related
9872 string showRelatedArtices = Model.Item.GetString("ShowRelatedArticles") != null ? Model.Item.GetList("ShowRelatedArticles").SelectedValue.ToLower() : "default";
9873 showRelatedArtices = showRelatedArtices == "default" && GetParentSettingsItem("ShowRelatedArticles") != null ? GetParentSettingsItem("ShowRelatedArticles").ToString().ToLower() : showRelatedArtices;
9874
9875 if (showRelatedArtices == "true")
9876 {
9877 Block articleRelated = new Block
9878 {
9879 Id = "ArticleRelated",
9880 SortId = 30,
9881 Component = new ArticleRelated { Title = Translate("Related articles"), FeedPageId = listPageId, Query = "sourceType=Page&sourcePage=" + parentPageId, PageSize = 4, CurrentPageId = Model.ID.ToString() },
9882 Design = new Design
9883 {
9884 RenderType = RenderType.Column,
9885 Size = "12"
9886 }
9887 };
9888 articlePage.Add("ArticleContainer", articleRelated);
9889 }
9890 }
9891 @if (hasGridContent || isVisualEditor)
9892 {
9893 @* grid *@
9894 @Model.Grid("Grid", "Grid", "default:true;sort:1", "Corporate")
9895 }
9896 else
9897 {
9898 @* The @RenderBlockList base helper is included in Components/GridBuilder.cshtml *@
9899 <div id="Page" class="page">
9900 <section class="center-container dw-mod" id="content">
9901 @{
9902 string startLevel = "2";
9903 }
9904 <div class="u-full-width">
9905 @Render(new BreadcrumbNavigation { Id = "breadcrumb", Template = "Breadcrumb.xslt", SitemapMode = true, StartLevel = Int32.Parse(startLevel) })
9906 </div>
9907
9908 @RenderBlockList(articlePage.BlocksRoot.BlocksList)
9909 </section>
9910 </div>
9911 }
9912 @using System
9913 @using System.Web
9914 @using System.Collections.Generic
9915 @using Dynamicweb.Rapido.Blocks
9916
9917 @{
9918 BlocksPage dynamicArticleCustomBlocksPage = BlocksPage.GetBlockPage("DynamicArticle");
9919
9920 }
9921
9922 @helper RenderHeaderWithVideo(ArticleHeader settings)
9923 {
9924 dynamic[] methodParameters = new dynamic[1];
9925 methodParameters[0] = settings;
9926 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleCleanHeaderCustom");
9927
9928 if (customMethod != null)
9929 {
9930 @customMethod.Invoke(this, methodParameters).ToString();
9931 }
9932 else
9933 {
9934 string contentColumns = settings.TextLayout != ArticleHeaderTextLayout.Full ? "8" : "12";
9935
9936 <div class="grid grid--align-content-start grid--justify-start">
9937 <div class="grid__col-md-@contentColumns grid__col-sm-12 u-padding--lg dw-mod">
9938 @if (!String.IsNullOrEmpty(settings.Category) || !String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date) || settings.RatingOutOf != 0)
9939 {
9940 <div class="u-border-bottom u-padding-bottom">
9941 @if (!String.IsNullOrEmpty(settings.Category))
9942 {
9943 <div class="u-pull--left">
9944 <div class="article__category dw-mod" style="color: @settings.CategoryColor">@settings.Category</div>
9945 </div>
9946 }
9947 <div class="u-pull--right">
9948 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
9949 {
9950 <small class="article__post-info dw-mod">@settings.Author @settings.Date</small>
9951 }
9952 @if (settings.RatingOutOf != 0)
9953 {
9954 @Render(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf })
9955 }
9956 </div>
9957 </div>
9958 }
9959
9960 <div class="grid__cell">
9961 @if (!String.IsNullOrEmpty(settings.Heading))
9962 {
9963 <h1 class="article__header article__header--giant dw-mod">@settings.Heading </h1>
9964
9965 }
9966 @if (settings.Image != null)
9967 {
9968 if (settings.Image.Path != null)
9969 {
9970 <div class="u-padding-bottom--lg ">
9971 @if (String.IsNullOrEmpty(Model.Item.GetString("Video")))
9972 {
9973 @Render(settings.Image)
9974
9975 }
9976 else
9977 {
9978 <div class="video-wrapper">
9979 @Model.Item.GetString("Video")
9980 </div>
9981 }
9982 </div>
9983 }
9984 }
9985 @if (!String.IsNullOrEmpty(settings.Subheading))
9986 {
9987 <div class="article__leadtext dw-mod">@settings.Subheading</div>
9988 }
9989 @if (!String.IsNullOrEmpty(settings.Link))
9990 {
9991 <div class="grid__cell">
9992 @Render(new Link { Href = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout })
9993 </div>
9994 }
9995 </div>
9996 </div>
9997 @if (settings.ExternalParagraphId != 0)
9998 {
9999 <div class="grid__col-md-4 grid__col-sm-12 u-padding--lg u-color-light-gray--bg dw-mod">
10000 @RenderParagraphContent(settings.ExternalParagraphId)
10001 </div>
10002 }
10003 </div>
10004 }
10005 }
10006 @helper RenderHeaderWithDownload(ArticleHeader settings)
10007 {
10008 dynamic[] methodParameters = new dynamic[1];
10009 methodParameters[0] = settings;
10010 MethodInfo customMethod = this.GetType().GetMethod("RenderArticleCleanHeaderCustom");
10011
10012 if (customMethod != null)
10013 {
10014 @customMethod.Invoke(this, methodParameters).ToString();
10015 }
10016 else
10017 {
10018 string contentColumns = settings.TextLayout != ArticleHeaderTextLayout.Full ? "8" : "12";
10019
10020 <div class="grid grid--align-content-start grid--justify-start">
10021 <div class="grid__col-md-@contentColumns grid__col-sm-12 u-padding--lg dw-mod">
10022 @if (!String.IsNullOrEmpty(settings.Category) || !String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date) || settings.RatingOutOf != 0)
10023 {
10024 <div class="u-border-bottom u-padding-bottom">
10025 @if (!String.IsNullOrEmpty(settings.Category))
10026 {
10027 <div class="u-pull--left">
10028 <div class="article__category dw-mod" style="color: @settings.CategoryColor">@settings.Category</div>
10029 </div>
10030 }
10031 <div class="u-pull--right">
10032 @if (!String.IsNullOrEmpty(settings.Author) || !String.IsNullOrEmpty(settings.Date))
10033 {
10034 <small class="article__post-info dw-mod">@settings.Author @settings.Date</small>
10035 }
10036 @if (settings.RatingOutOf != 0)
10037 {
10038 @Render(new Rating { Score = settings.RatingScore, OutOf = settings.RatingOutOf })
10039 }
10040 </div>
10041 </div>
10042 }
10043
10044 <div class="grid__cell">
10045 @if (!String.IsNullOrEmpty(settings.Heading))
10046 {
10047 <h1 class="article__header article__header--giant dw-mod">@settings.Heading </h1>
10048
10049 }
10050 @if (settings.Image != null)
10051 {
10052 if (settings.Image.Path != null)
10053 {
10054 <div class="u-padding-bottom--lg">
10055
10056 @Render(settings.Image)
10057 <a href="@Model.Item.GetString("Image") " class="download-press-relese" target="_blank" download >@Translate("Descarcă imaginea", "Descarcă imaginea") <i class="fas fa-download"></i></a>
10058 </div>
10059 }
10060 }
10061 @if (!String.IsNullOrEmpty(settings.Subheading))
10062 {
10063 <div class="article__leadtext dw-mod">@settings.Subheading</div>
10064 }
10065 @if (!String.IsNullOrEmpty(settings.Link))
10066 {
10067 <div class="grid__cell">
10068 @Render(new Link { Href = settings.Link, Title = settings.LinkText, ButtonLayout = settings.ButtonLayout })
10069 </div>
10070 }
10071 </div>
10072 </div>
10073 @if (settings.ExternalParagraphId != 0)
10074 {
10075 <div class="grid__col-md-4 grid__col-sm-12 u-padding--lg u-color-light-gray--bg dw-mod">
10076 @RenderParagraphContent(settings.ExternalParagraphId)
10077 </div>
10078 }
10079 </div>
10080 }
10081 }
10082 @SnippetStart("SchemaOrg")
10083 <script type="application/ld+json">
10084 {
10085 "@@context": "https://schema.org",
10086 "@@type": "NewsArticle",
10087 "url": "@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(Model.ID)",
10088 "publisher":{
10089 "@@type":"ProfessionalService",
10090 "name":"Agricover",
10091 "logo":"@siteLogo"
10092 },
10093 "author":{
10094 "@@type": "Person",
10095 "name": "@author",
10096 "sameAs" :""
10097 },
10098 "headline": "@Model.Name.Replace("\"", "\\\"")",
10099 "mainEntityOfPage": "@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(Model.TopPage.ID)",
10100 "articleBody": "@HttpUtility.JavaScriptStringEncode(articleText)",
10101 "image":[
10102 "@fullPathImage"
10103 ],
10104 "datePublished":"@Model.CreatedDate"
10105 }
10106 </script>
10107 @SnippetEnd("SchemaOrg")
10108 @SnippetEnd("Content")
10109 <script type="text/javascript">
10110
10111 _linkedin_partner_id = "3552330";
10112
10113 window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
10114
10115 window._linkedin_data_partner_ids.push(_linkedin_partner_id);
10116
10117 </script><script type="text/javascript">
10118
10119 (function(l) {
10120
10121 if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])};
10122
10123 window.lintrk.q=[]}
10124
10125 var s = document.getElementsByTagName("script")[0];
10126
10127 var b = document.createElement("script");
10128
10129 b.type = "text/javascript";b.async = true;
10130
10131 b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
10132
10133 s.parentNode.insertBefore(b, s);})(window.lintrk);
10134
10135 </script>
10136
10137 <noscript>
10138
10139 <img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=3552330&fmt=gif" />
10140
10141 </noscript>
10142 @helper RenderIosTabletFix() {
10143 if (Pageview.Device != Dynamicweb.Frontend.Devices.DeviceType.Tablet && Pageview.Platform != Dynamicweb.Frontend.Devices.PlatformType.Ios)
10144 {
10145 <script>
10146 let isIpadIOS = (/iPad/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) && !window.MSStream;
10147 if (isIpadIOS) {
10148 var separator = (window.location.href.indexOf("?") === -1) ? "?" : "&";
10149 window.location.href = window.location.href + separator + "DeviceType=Tablet&PlatformType=Ios";
10150 }
10151 </script>
10152 }
10153 }
10154 @RenderSnippet("ScriptCataloage")
10155 @RenderSnippet("DisqusScript")
10156 </html>
10157
10158