Error executing template "Designs/IPG_generated/Paragraph/CTAParagraph.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at Bluedesk.DynamicWeb.ItemTypes.CTAButton.GetLink(PageView pv, String navigationtag)
at CompiledRazorTemplates.Dynamic.RazorEngine_dce082d7ca154bac9b86278944c52e31.Execute() in D:\dynamicweb.net\Solutions\IPG\Production\files\Templates\Designs\IPG_generated\Paragraph\CTAParagraph.cshtml:line 19
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.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2 @using Dynamicweb;
3 @using Dynamicweb.Content.Items;
4 @using Bluedesk.DynamicWeb.ItemTypes;
5
6
7 @{
8 var paragraphID = Pageview.CurrentParagraph.ID;
9 CTAParagraph _data = Dynamicweb.Services.Items.GetItem("CTAParagraph", Pageview.CurrentParagraph.ItemId).ToCodeFirstItem<CTAParagraph>() ?? new CTAParagraph();
10
11 List<string> BackgroundConfigIdList = ((List<string>)Dynamicweb.Context.Current.Items["BackgroundConfigIdList"]) ?? new List<string>();
12 BackgroundConfigIdList.Add(_data.BackgroundConfigurationID);
13 Dynamicweb.Context.Current.Items["BackgroundConfigIdList"] = BackgroundConfigIdList;
14
15 string contentRightClass = _data.ImagePosition.Equals("right") ? "image-right" : "image-left";
16
17 string newWindow = _data.Button.NewWindow ? "target='_blank'" : "";
18 string ariaLabel = !string.IsNullOrWhiteSpace(_data.Button.ButtonAriaLabel) ? "aria-label='" + _data.Button.ButtonAriaLabel + "'" : "";
19 bool clickableBlock = !string.IsNullOrWhiteSpace(_data.Button.GetLink(Pageview)) && _data.Clickable;
20 string clickableClass = clickableBlock ? "cta-paragraph__container--clickable" : "";
21 string ctaHasBackgroundImageClass = _data.ImageAsBackground ? "cta-paragraph--hasbackgroundimg" : "";
22
23 bool hasContent = !string.IsNullOrWhiteSpace(_data.Button.ButtonText) || !string.IsNullOrWhiteSpace(_data.Content.Text) || !string.IsNullOrWhiteSpace(_data.Header.HeaderFormatted());
24 double ColumnWidthSize = hasContent ? 0.5 : 1;
25
26 // string backgroundClass = getbackgroundclass(_data.BackgroundConfiguration.BackgroundClass);
27
28 string AnimateDirection = !string.IsNullOrWhiteSpace(_data.AnimateDirection) ? _data.AnimateDirection : "";
29 bool AnimateHalfBlock = false;
30 int AnimationDuration = _data.AnimateDuration;
31 string DataAosValue = "";
32
33 switch (AnimateDirection)
34 {
35 case "left":
36 DataAosValue = "fade-left";
37 break;
38
39 case "right":
40 DataAosValue = "fade-right";
41 break;
42
43 case "up":
44 DataAosValue = "fade-up";
45 break;
46
47 case "down":
48 DataAosValue = "fade-down";
49 break;
50
51 case "center":
52 AnimateHalfBlock = true;
53 break;
54
55 case "":
56 case "none":
57 // No action //
58 break;
59 }
60
61 string ParagraphHeight = _data.Height == 0 ? "auto" : _data.Height + "px";
62
63 }
64
65 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
66 @using Dynamicweb;
67 @using Dynamicweb.Content.Items;
68 @using Bluedesk.DynamicWeb.ItemTypes;
69
70 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
71 @using Dynamicweb;
72 @using Dynamicweb.Content.Items;
73 @using Bluedesk.DynamicWeb.ItemTypes;
74
75 @functions {
76
77 Dictionary<string, string> GetFontConfiguration(string TextColor, FontConfigurationItemTab FontConfiguration)
78 {
79 var colorService = new ColorSwatchService();
80 TextColor = !string.IsNullOrWhiteSpace(TextColor) ? TextColor : "" ;
81 TextColor = !TextColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, TextColor) : TextColor;
82 Dictionary<string, string> FontConfig = new Dictionary<string, string>() {
83 { "textColor" , TextColor },
84 { "fontSize" , FontConfiguration.FontSize },
85 { "lineHeight", FontConfiguration.LineHeight},
86 { "fontFamily" , FontConfiguration.FontConfiguration.FontFamily },
87 { "fontWeight" , FontConfiguration.FontWeight },
88 { "fontStyle" , FontConfiguration.FontStyle }
89 };
90 return FontConfig;
91 }
92
93 public string GenerateButtonConfigVariables(ButtonConfiguration BC, MasterConfig mc, int areaId)
94 {
95 string ButtonLabelAlignment = BC.ButtonLabelAlignment;
96 switch (ButtonLabelAlignment)
97 {
98 case "align-left":
99 ButtonLabelAlignment = "flex-start";
100 break;
101 case "align-center":
102 ButtonLabelAlignment = "center";
103 break;
104 case "align-right":
105 ButtonLabelAlignment = "flex-end";
106 break;
107 case "align-full":
108 ButtonLabelAlignment = "space-between";
109 break;
110 default:
111 ButtonLabelAlignment = "flex-start";
112 break;
113 }
114
115 var btnStyleBlock = new System.Text.StringBuilder();
116
117 // General Config
118 btnStyleBlock.Append(GenerateCssVar("btn-min-height", $"{mc.GeneralConfiguration.ButtonHeight}px"));
119 btnStyleBlock.Append(GenerateCssVar("btn-border-radius", $"{mc.GeneralConfiguration.RoundedCornerValue}px"));
120
121 // Button Config
122 btnStyleBlock.Append(GenerateCssVar("btn-border-width", $"{BC.BorderSize.ToString()}px"));
123 btnStyleBlock.Append(GenerateCssVar("btn-label-alignment", ButtonLabelAlignment));
124
125 // Button Config Tab
126 btnStyleBlock.Append(GenerateCssVar("btn-bg-color", BC.ButtonColorConfiguration.BackgroundColor.GetColorCode(areaId)));
127 btnStyleBlock.Append(GenerateCssVar("btn-font-color", BC.ButtonColorConfiguration.FontColor.GetColorCode(areaId)));
128 btnStyleBlock.Append(GenerateCssVar("btn-border-color", BC.ButtonColorConfiguration.BorderColor.GetColorCode(areaId)));
129
130 // Button Config Hover tab
131 btnStyleBlock.Append(GenerateCssVar("btn-bg-color-hover", BC.ButtonHoverColorConfiguration.BackgroundColor.GetColorCode(areaId)));
132 btnStyleBlock.Append(GenerateCssVar("btn-font-color-hover", BC.ButtonHoverColorConfiguration.FontColor.GetColorCode(areaId)));
133 btnStyleBlock.Append(GenerateCssVar("btn-border-color-hover", BC.ButtonHoverColorConfiguration.BorderColor.GetColorCode(areaId)));
134
135 // Button Config Font Config
136 btnStyleBlock.Append(GenerateCssVar("btn-font-size", BC.FontConfiguration.FontSize));
137 btnStyleBlock.Append(GenerateCssVar("btn-font-config-color", BC.FontConfiguration.Color.GetColorCode(areaId)));
138 btnStyleBlock.Append(GenerateCssVar("btn-font-line-height", BC.FontConfiguration.LineHeight));
139 btnStyleBlock.Append(GenerateCssVar("btn-font-family", BC.FontConfiguration.FontConfiguration.FontFamily));
140 btnStyleBlock.Append(GenerateCssVar("btn-font-weight", BC.FontConfiguration.FontWeight));
141 btnStyleBlock.Append(GenerateCssVar("btn-font-transform", BC.FontConfiguration.FontStyle));
142
143 return btnStyleBlock.ToString();
144 }
145
146 public string GenerateCssVar(string name, string value)
147 {
148 if (!string.IsNullOrWhiteSpace(value)) {
149 return $"--{name}: {value};";
150 } else {
151 return "";
152 }
153 }
154 }
155
156
157 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
158 @using Dynamicweb;
159 @using Dynamicweb.Content.Items;
160 @using Bluedesk.DynamicWeb.ItemTypes;
161 @using Bluedesk.DynamicWeb.ItemTypes.Configuration;
162
163
164 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
165 @using Dynamicweb;
166 @using Dynamicweb.Content.Items;
167 @using Bluedesk.DynamicWeb.ItemTypes;
168 @using Bluedesk.DynamicWeb.ItemTypes.Extensions;
169 @using Bluedesk.DynamicWeb.ItemTypes.Configuration;
170 @using Bluedesk.DynamicWeb.ItemTypes.Settings.Configuration;
171 @using Dynamicweb;
172 @using Dynamicweb.Frontend
173 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution;
174
175 @helper RenderButton(CTAButton button, PageView Pageview)
176 {
177
178 if (!string.IsNullOrWhiteSpace(button.GetLink(Pageview)))
179 {
180 string Template = button.GetButtonTemplate().Replace("{{ ButtonLink }}", button.GetLink(Pageview));
181 @Template;
182 }
183 }
184
185
186 @{
187
188 var colorService = new ColorSwatchService();
189
190 string fullWidthContainerClass = _data.Fullwidth ? "" : "container";
191
192 string backgroundClass = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundClass) ? string.Format("bg-{0}", _data.BackgroundConfiguration.BackgroundClass) : "";
193 string backgroundStyle = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundColor) ? $"background-color: {_data.BackgroundConfiguration.BackgroundColor}; " : "";
194 backgroundStyle += !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundImage) ? $"background-image: url({_data.BackgroundConfiguration.BackgroundImage}); " : "";
195
196 // string backgroundClass = "null";
197 // string backgroundStyle = "";
198 }
199
200
201 @functions {
202 //string getbackgroundclass(string backgroundClass)
203 //{
204 // return !string.IsNullOrWhiteSpace(backgroundClass) ? string.Format("bg-{0}", backgroundClass) : "";
205 //}
206 }
207
208 @helper CTAParagraphImage(
209 ParagraphImageResizable Image,
210 bool hasContent,
211 bool ImageAsBackground,
212 string ImagePosition,
213 bool ParallaxImage,
214 bool Fullwidth,
215 string imagesHeight,
216 double ColumnWidthSize,
217 int AnimationDuration = 300,
218 bool AnimateHalfBlock = false
219 )
220 {
221 if (!string.IsNullOrWhiteSpace(Image.Image))
222 {
223
224 string image = !string.IsNullOrWhiteSpace(Image.Image) ? Image.Image : null;
225 imagesHeight = hasContent ? imagesHeight : "100%";
226 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : "";
227
228 string imageParrallax = ParallaxImage ? "rellax" : "";
229 string imageAsBackground = ImageAsBackground ? "cta-paragraph__image--is-background" : "";
230 double imageWidth = 2000;
231
232 imageWidth = Fullwidth ? imageWidth : 1200;
233 imageWidth = !ImageAsBackground ? imageWidth * ColumnWidthSize : imageWidth;
234
235 string strImageWidth = imageWidth + "px";
236 string strImageWidthSize = imageWidth + "w";
237
238 string ImageUrl;
239 if (image.EndsWith(".gif"))
240 {
241 ImageUrl = image;
242 }
243 else
244 {
245 ImageUrl = "/Admin/Public/GetImage.ashx?Image=" + image + "&Crop=7&Format=webp&Quality=90&Compression=80";
246 ImageUrl = ImageUrl.Replace("?x", "&x");
247 }
248
249 string animationDirection = AnimateHalfBlock ? ImagePosition.Equals("right") ? "fade-left" : "fade-right" : "";
250
251 if (!string.IsNullOrWhiteSpace(Image.Image))
252 {
253
254 <figure class="cta-paragraph__image-container @imageAsBackground @Image.PositionY @Image.PositionX" style="@imagesHeight" data-aos="@animationDirection" data-aos-duration="@AnimationDuration">
255
256 <picture class="cta-paragraph__image @Image.BackgroundSize @imageParrallax">
257 @if (ImageUrl.EndsWith(".gif"))
258 {
259 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400">
260 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994">
261 <img src="@ImageUrl" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500">
262 }
263 else
264 {
265 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400">
266 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994">
267 <img src="@ImageUrl&Width=@imageWidth" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500">
268 }
269 </picture>
270
271 </figure>
272 }
273 }
274 }
275
276 @helper CTAParagraphContent(
277 int paragraphID,
278 ParagraphHeader Header,
279 ParagraphHeader SubHeader,
280 ParagraphContent Content,
281 CTAButton Button,
282 CTAButton ExtraButton,
283 ParagraphImage Image,
284 bool strCenterVertical,
285 string ImagePosition = "",
286 int AnimationDuration = 300,
287 bool AnimateHalfBlock = false
288 )
289 {
290
291 bool hasImage = !string.IsNullOrWhiteSpace(Image.Image) ? true : false;
292 string noImageClass = hasImage ? "" : "no-image";
293
294 string centerTextClass = strCenterVertical ? "text-center" : "";
295 string centerContent = !string.IsNullOrWhiteSpace(Image.Image) ? "" : "cta-paragraph__content--center";
296
297 string paragraphInstanceClass = "cta-paragraph__content--" + paragraphID;
298
299 string animationDirection = (AnimateHalfBlock && hasImage) ? ImagePosition.Equals("right") ? "fade-right" : "fade-left" : "";
300
301 if (!string.IsNullOrWhiteSpace(Button.ButtonText) || !string.IsNullOrWhiteSpace(Content.Text) || !string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header")))
302 {
303
304 <section class="cta-paragraph__content @paragraphInstanceClass @centerContent @noImageClass" data-aos="@animationDirection" data-aos-duration="@AnimationDuration">
305
306 <article class="cta-paragraph__content-container @noImageClass">
307
308 @if (!string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header")))
309 {
310 <header class="cta-paragraph__header @centerTextClass">
311 @if (SubHeader != null)
312 {
313 @SubHeader.HeaderFormatted("cta-paragraph__subheader")
314 }
315 @Header.HeaderFormatted("cta-paragraph__header")
316 </header>
317 }
318
319 @if (!string.IsNullOrWhiteSpace(Content.Text))
320 {
321 <div class="cta-paragraph__text @centerTextClass">@Content.Text</div>
322 }
323
324 @if (!string.IsNullOrWhiteSpace(Button.GetLink(Pageview)) && !string.IsNullOrWhiteSpace(Button.ButtonText))
325 {
326 <nav class="cta-paragraph__btn-navigation @centerTextClass">
327 @RenderButton(Button, Pageview)
328 @RenderButton(ExtraButton, Pageview)
329 </nav>
330 }
331
332 </article>
333 </section>
334
335 }
336
337 }
338
339 @helper CTAParagraphVideo(ParagraphVideo Video, string imagesHeight)
340 {
341 if (!string.IsNullOrWhiteSpace(Video.YoutubeLink) || !string.IsNullOrWhiteSpace(Video.VimeoLink))
342 {
343 string YoutubeID = Video.YoutubeId;
344 string YoutubeLink = Video.YoutubeLink;
345
346 string VimeoID = Video.VimeoId;
347 string VimeoLink = Video.VimeoLink;
348
349 int CleanVideo = Video.Clean ? 1 : 0;
350 int ShowControls = Video.ShowControls ? 1 : 0;
351 int AutoPlay = Video.AutoPlay ? 1 : 0;
352 int LoopVideo = Video.LoopVideo ? 1 : 0;
353 int MuteAudio = Video.MuteAudio ? 1 : 0;
354 string hideControlsClass = Video.ShowControls ? "video-player-wrapper--hidecontrols" : "";
355 string origin = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain();
356 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : "";
357
358 if (!string.IsNullOrWhiteSpace(YoutubeLink))
359 {
360 if(AutoPlay == 1)
361 {
362 <section class="cta-paragraph__video-container" style="@imagesHeight">
363 <div class="">
364 <div class="video-player-wrapper @hideControlsClass">
365 <iframe class="video-player" loading="lazy" data-video="@YoutubeID" frameborder="0" allowfullscreen allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/@YoutubeID?autoplay=@AutoPlay&controls=@ShowControls&loop=@LoopVideo&playlist=@YoutubeID&playsinline=1&modestbranding=@CleanVideo&mute=@MuteAudio&rel=0&enablejsapi=1&origin=@origin&disablekb=0"></iframe>
366 </div>
367 </div>
368 </section>
369 }
370 else
371 {
372 <lite-youtube videoid="@YoutubeID" params="controls=@ShowControls&loop=@LoopVideo&playlist=@YoutubeID&playsinline=1&modestbranding=@CleanVideo&mute=@MuteAudio&rel=0&enablejsapi=1&origin=@origin&disablekb=0"></lite-youtube>
373 }
374 }
375 if (!string.IsNullOrWhiteSpace(VimeoLink))
376 {
377 <section class="cta-paragraph__video-container" style="@imagesHeight">
378 <div class="">
379 <div class="video-player-wrapper">
380 <iframe class="video-player" loading="lazy" data-video="@VimeoID" frameborder="0" allowfullscreen allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="Vimeo video player" src="https://player.vimeo.com/video/@VimeoID?title=0&byline=0&portrait=0&autoplay=@AutoPlay&controls=@ShowControls&loop=@LoopVideo&muted=@MuteAudio"></iframe>
381 </div>
382 </div>
383 </section>
384 }
385 }
386 }
387
388 @helper CTAParagraphIcon(ParagraphIcon Icon, bool strCenterVertical)
389 {
390 if (!string.IsNullOrWhiteSpace(Icon.FaIcon))
391 {
392 string centerIconClass = strCenterVertical ? "justify-center" : "justify-start";
393 string iconSizeClass = string.Format("cta-paragraph__icon--{0}", Icon.FaIconSize);
394
395 <div class="cta-paragraph__icon-container">
396 <div class="cta-paragraph__icon-inner-container @centerIconClass">
397 <span class="cta-paragraph__icon @iconSizeClass">@Icon.FaIcon</span>
398 </div>
399 </div>
400 }
401 }
402
403 @helper RenderContentAlignment(BackgroundConfiguration data)
404 {
405
406 switch (data.ContentElementAlign)
407 {
408 case "align-left":
409 <text>
410 align-items: flex-start;
411 text-align: left;
412 </text>
413 break;
414 case "align-center":
415 <text>
416 align-items: center;
417 text-align: center;
418 </text>
419 break;
420 case "align-right":
421 <text>
422 align-items: flex-end;
423 text-align: right;
424 </text>
425 break;
426 case "align-full":
427 <text>
428 align-items: flex-start;
429 text-align: justify;
430 </text>
431 break;
432 }
433
434 }
435
436
437 <style>
438
439 @@media screen and (min-width: 991px) {
440 .cta-paragraph__container--@paragraphID {
441 height: @ParagraphHeight !important;
442 }
443 }
444
445 </style>
446
447 @if (_data != null)
448 {
449
450 string BackgroundPadding = _data.BackgroundConfiguration.backgroundPadding;
451
452 bool Containerfit = _data.BackgroundConfiguration.ContainerFit == "Fit" ? true : false;
453 if (!string.IsNullOrWhiteSpace(contentRightClass))
454 {
455 contentRightClass = Containerfit ? "" : contentRightClass;
456 }
457
458 string backgroundImageRepeatClass = _data.BackgroundConfiguration.BackgroundImageRepeat;
459 string backgroundImageSizeClass = "";
460
461 string BackgroundImagePositionX = _data.BackgroundConfiguration.BackgroundImagePositionX;
462 string BackgroundImagePositionY = _data.BackgroundConfiguration.BackgroundImagePositionY;
463
464
465 string BackgroundImagePositionClass = "";
466
467 if (backgroundImageRepeatClass == "no-repeat")
468 {
469 BackgroundImagePositionClass = BackgroundImagePositionY + "-" + BackgroundImagePositionX;
470 backgroundImageSizeClass = _data.BackgroundConfiguration.BackgroundImageSize;
471 }
472
473 string shadowClass = _data.BackgroundConfiguration.contentShadow ? "contentShadow" : "";
474
475 <section class="cta-paragraph cta-paragraph--@paragraphID config--@_data.BackgroundConfigurationID @backgroundClass @_data.CssClass @backgroundImageRepeatClass @BackgroundImagePositionClass @backgroundImageSizeClass @BackgroundPadding @ctaHasBackgroundImageClass" style="@backgroundStyle" data-paragraphid="@paragraphID" id="@paragraphID" data-aos="@DataAosValue" data-aos-duration="@AnimationDuration">
476
477 <div class="cta-paragraph__container cta-paragraph__container--@paragraphID @fullWidthContainerClass @clickableClass @contentRightClass @shadowClass">
478
479 <style>
480
481 .cta-paragraph--@paragraphID .cta-paragraph__content {
482 @if (Containerfit)
483 {
484 <text>
485 flex-grow: 0;
486 </text>
487 }
488 }
489
490 .cta-paragraph--@paragraphID .cta-paragraph__image-container {
491 @if (Containerfit)
492 {
493 <text>
494 position: absolute;
495 top: 0;
496 left: 0;
497 right: 0;
498 bottom: 0;
499 </text>
500 }
501 }
502
503 </style>
504
505 @CTAParagraphImage(
506 _data.Image,
507 true,
508 _data.ImageAsBackground,
509 _data.ImagePosition,
510 _data.ParallaxImage,
511 _data.Fullwidth,
512 "",
513 ColumnWidthSize,
514 AnimationDuration,
515 AnimateHalfBlock
516 )
517 @CTAParagraphContent(
518 paragraphID,
519 _data.Header,
520 _data.SubHeader,
521 _data.Content,
522 _data.Button,
523 _data.ExtraButton,
524 _data.Image,
525 _data.CenterVertical,
526 _data.ImagePosition,
527 AnimationDuration,
528 AnimateHalfBlock
529 )
530
531 @if (clickableBlock)
532 {
533 <a href="@_data.Button.GetLink(Pageview)" class="cta-paragraph__clickable" @newWindow @ariaLabel></a>
534 }
535
536 </div>
537
538 </section>
539 }
540