Protezione FOB - Elettronica

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> bannerImageData.mobile  [in template "20115#20151#14304386" at line 200, column 75]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${bannerImageData.mobile?replace(" ",...  [in template "20115#20151#14304386" at line 200, column 73]
----
1<#assign siteExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge() /> 
2<#assign new_restyle = (siteExpandoBridge.hasAttribute("new-restyle")?then(getterUtil.getBoolean(siteExpandoBridge.getAttribute("new-restyle", false)),false)) /> 
3<#if new_restyle?? && new_restyle> 
4 
5<@leonardo.articleInfo .vars "SP-Product-base"/> 
6	<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
7 
8	<#assign jArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) > 
9 
10	<#assign productLayout = (jArticle.getLayout()!)> 
11 
12	<#assign docsDownloadURL = ''> 
13	<#if (layout.getGroup().getGroupId()) != (jArticle.getGroupId())> 
14		<#assign docsDownloadURL = portalUtil.getVirtualHostname (productLayout.getLayoutSet())> 
15		<#if (docsDownloadURL)?has_content && (docsDownloadURL?lower_case != 'localhost')> 
16			<#assign docsDownloadURL = 'https://' + docsDownloadURL > 
17		<#else> 
18			<#assign docsDownloadURL = ''> 
19		</#if> 
20	</#if> 
21	<#assign currentGroupExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge()> 
22	<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
23	<#assign languageId = languageUtil.getLanguageId(locale) /> 
24 
25	<#assign 
26		title = '' 
27		abstract = '' 
28		type = 'text' 
29		date = '' 
30		author = '' 
31		jad = '' 
32		metaTitle = '' 
33		metaDescription = '' 
34
35 
36	<#if SeparatorOverview.ContentAbstract?? && (SeparatorOverview.ContentAbstract.getData())?has_content> 
37		<#assign abstract = SeparatorOverview.ContentAbstract.getData()> 
38	</#if> 
39 
40	<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
41	<#assign layoutObject = LayoutLocalService.getLayout(layout.getPlid()) /> 
42	<#assign layoutParent = LayoutLocalService.getLayout(layoutObject.getParentPlid()) /> 
43	<#assign layout = LayoutLocalService.getLayout(layoutObject.getPlid()) /> 
44	<#assign ancestors = layout.getAncestors() /> 
45	<#assign parentName = layoutParent.getName(locale) /> 
46	<#assign parentURL = layoutParent.getFriendlyURL(locale) /> 
47	<#assign GroupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")> 
48	<#assign guestUrl = GroupLocalService.getGroup(themeDisplay.getScopeGroupId()).getFriendlyURL() /> 
49 
50	<#assign maxTechnicalBoxes = 12> 
51 
52	<#assign languageId = languageUtil.getLanguageId(locale) /> 
53 
54	<#assign sectionFreeArea1 = false> 
55	<#assign sectionTDFound = false> 
56	<#assign sectionOFound = false> 
57	<#assign sectionOHtmlFound = false> 
58	<#assign sectionFreeArea2 = false> 
59 
60 
61	<!--FREE AREA 1 --> 
62	<#if SeparatorMainFeatures?? && SeparatorMainFeatures.getSiblings()?has_content> 
63		<#list SeparatorMainFeatures.getSiblings() as cur_sectionMF> 
64			<#if (cur_sectionMF.MFSectionTitle.getData())?has_content || 
65			(cur_sectionMF.MFText.getData())?has_content || 
66			(cur_sectionMF.FreeWebContent.getData())?has_content> 
67				<#assign sectionFreeArea1 = true> 
68				<#break> 
69			</#if> 
70		</#list> 
71	</#if> 
72 
73	<#if (SeparatorTechnicalData.TDSectionTitle.getSiblings())?has_content> 
74		<#list SeparatorTechnicalData.TDSectionTitle.getSiblings() as cur_sectionTD> 
75			<#if cur_sectionTD.getData() != ""> 
76				<#assign sectionTDFound = true> 
77				<#break> 
78			</#if> 
79		</#list> 
80	</#if> 
81 
82	<#if SeparatorFreeArea2?? && SeparatorFreeArea2.getSiblings()?has_content> 
83		<#list SeparatorFreeArea2.getSiblings() as cur_sectionFA2> 
84			<#if (cur_sectionFA2.Fa2Text.getData())?has_content || 
85			(cur_sectionFA2.Fa2SectionTitle.getData())?has_content || 
86			(cur_sectionFA2.Fa2WebContent.getData())?has_content 
87
88				<#assign sectionFreeArea2 = true> 
89				<#break> 
90			</#if> 
91		</#list> 
92	</#if> 
93 
94	<#if (SeparatorOverview.OverviewText.getData())?has_content || 
95	(SeparatorOverview.OverviewTitle.getData())?has_content> 
96		<#assign sectionOFound = true> 
97	</#if> 
98 
99	<#if SeparatorOverview.ContentHtml?? && 
100	SeparatorOverview.ContentHtml.getData() != "" > 
101		<#assign sectionOHtmlFound = true> 
102	</#if> 
103 
104	<#function getProductImageUUID plid=-1> 
105		<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
106		<#assign assetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryPropertyLocalService")> 
107		<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
108		<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")> 
109 
110		<#assign groupExpandoBridge = layout.getGroup().getExpandoBridge() /> 
111		<#assign products_vocabulary_id = (groupExpandoBridge.hasAttribute("products-vocabulary-id")?then(getterUtil.getLong(groupExpandoBridge.getAttribute("products-vocabulary-id", false)),0)) /> 
112 
113		<#if (plid > 0)> 
114			<#assign fromLayout = layoutLocalService.fetchLayout(plid)> 
115			<#if fromLayout??> 
116				<#assign categories = assetCategoryLocalService.getCategories("com.liferay.portal.kernel.model.Layout", fromLayout.getPlid()) /> 
117				<#list categories as category> 
118					<#assign properties = assetCategoryPropertyLocalService.getCategoryProperties(category.getCategoryId())> 
119					<#list properties as property> 
120						<#if (products_vocabulary_id == category.getVocabularyId()) && (property.key == "uuid-banner-image") && (property.value)?has_content> 
121							<#return property.getValue() /> 
122						</#if> 
123					</#list> 
124				</#list> 
125				<#return getProductImageUUID(fromLayout.getParentPlid())/> 
126			</#if> 
127		<#elseif (plid < 0)> 
128			<#assign from = paramUtil.getString(themeDisplay.getRequest(), "f", "null")> 
129			<#assign fromLayout = layout> 
130			<#if validator.isNotNull(from) && (from != "/search")> 
131				<#assign fromLayout = layoutLocalService.fetchLayoutByFriendlyURL(groupId, false, from)!> 
132				<#if validator.isNotNull(fromLayout)> 
133					<#assign uuid_banner_image = getProductImageUUID(fromLayout.getPlid()) /> 
134				</#if> 
135			</#if> 
136			<#if !((uuid_banner_image)?has_content)> 
137				<#assign resourcePrimKey = journalArticleResourceLocalService.getArticleResourcePrimKey(groupId, .vars['reserved-article-id'].data)> 
138				<#assign categories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", resourcePrimKey) /> 
139				<#list categories as category> 
140					<#assign properties = assetCategoryPropertyLocalService.getCategoryProperties(category.getCategoryId())> 
141					<#list properties as property> 
142						<#if (products_vocabulary_id == category.getVocabularyId()) && (property.key == "uuid-banner-image") && (property.value)?has_content> 
143							<#return property.getValue() /> 
144						</#if> 
145					</#list> 
146				</#list> 
147			</#if> 
148 
149			<#if uuid_banner_image??> 
150				<#return uuid_banner_image> 
151			</#if> 
152		</#if> 
153		<#return ""> 
154	</#function> 
155 
156	<#function getImageURL uuid> 
157		<#if (uuid?has_content)> 
158			<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
159			<#assign banner_image = dlFileEntryLocalService.fetchDLFileEntryByUuidAndGroupId(uuid, groupId)! /> 
160			<#if (banner_image?has_content)> 
161				<#assign t = banner_image.getFileVersion().getModifiedDate()! /> 
162				<#assign url = "/documents/" + banner_image.getRepositoryId() 
163				+ "/" + banner_image.getFolderId() 
164				+ "/" + httpUtil.encodePath(banner_image.getFileName()) 
165				+ "/" + banner_image.getUuid() + "?t=" + t?long> 
166				<#assign dataImage = {"fileEntryId": banner_image.getFileEntryId(), "fileName": banner_image.getFileName(), "ts": t?long}> 
167				<#assign scalingDetails = { 
168				"desktop": {"alternateImage": {}, "key": "w_1440"}, 
169				"tl": {"alternateImage": {}, "key": "h_460"}, 
170				"tp": {"alternateImage": {}, "key": "h_560"}, 
171				"mobile": {"alternateImage": {}, "key": "h_400"} 
172				}> 
173				<#return leonardo.adaptImage(dataImage, scalingDetails)> 
174			</#if> 
175		</#if> 
176		<#return {}> 
177	</#function> 
178	<#assign uuid = getProductImageUUID()> 
179	<#assign bannerImageData = getImageURL(uuid)> 
180	<!-- default number of visible technical data boxes  --> 
181	<#assign maxTechnicalBoxes = 12> 
182 
183	<div class="sticky-container"> 
184		<section> 
185			<#if !(hasDetailPage?? && getterUtil.getBoolean(hasDetailPage.getData())) > 
186				<#if (SeparatorOverview.OverviewImage)?has_content > 
187					<div class="container-full-width black hero-image-small product"> 
188						<div class="hero-bottom-gradient"> 
189							<div class="text-content container"> 
190								<h1 class="title-hero-02 mb-0">${SeparatorOverview.ProductName.getData()}</h1> 
191							</div> 
192						</div> 
193					</div> 
194 
195				</#if> 
196			<#else> 
197				<div class="container-full-width black hero-image-small product"> 
198					<div class="hero-bottom-gradient"> 
199						<picture class="bg-picture"> 
200							<source srcset="${bannerImageData.mobile?replace(" ", "%20")!}" media="(max-width: 576px)"> 
201							<source srcset="${bannerImageData.tablet_portrait?replace(" ", "%20")!}" media="(max-width: 768px)"> 
202							<source srcset="${bannerImageData.tablet_landscape?replace(" ", "%20")!}" media="(max-width: 1024px)"> 
203							<img class="img-fluid bg" src="${bannerImageData.desktop?replace(" ", "%20")!}"> 
204						</picture> 
205 
206						<div class="text-content container"> 
207							<h1 class="title-hero-02 mb-0">${SeparatorOverview.ProductName.getData()}</h1> 
208						</div> 
209					</div> 
210				</div> 
211			</#if> 
212		</section> 
213		<#if hasDetailPage?? && getterUtil.getBoolean(hasDetailPage.getData()) > 
214			<div class="menu-fixed menu-fixed-grey"> 
215				<div class="menu-wrapper"> 
216					<ul> 
217						<li> 
218							<a 
219									class="label-light" 
220									data-scrolltosection="#section-overview" 
221									title="${(SeparatorOverview.OverviewTitle.getData())!defaultValue}" 
222									aria-label="${(SeparatorOverview.OverviewTitle.getData())!defaultValue}" 
223
224 
225								${((SeparatorOverview.OverviewTitle.getData())?has_content)?then(SeparatorOverview.OverviewTitle.getData(),defaultValue)} 
226							</a> 
227						</li> 
228 
229						<#-- FREE AREA 1 --> 
230						<#if sectionFreeArea1 && SeparatorMainFeatures??> 
231							<#list SeparatorMainFeatures.getSiblings() as cur_section> 
232								<#assign showTitleOrText = false> 
233								<#if (cur_section.MFSectionTitle.getData())?has_content && 
234								(cur_section.MFText.getData())?has_content> 
235									<#assign showTitleOrText = true> 
236								</#if> 
237								<#if showTitleOrText> 
238									<#if cur_section.Fa1AnchorBarText.getData()?has_content > 
239										<li> 
240											<a 
241													class="label-light" 
242													data-scrolltosection="#section-content--features-${cur_section?index}" 
243													title="${cur_section.Fa1AnchorBarText.getData()}" 
244													aria-label="${cur_section.Fa1AnchorBarText.getData()}" 
245
246												${cur_section.Fa1AnchorBarText.getData()} 
247											</a> 
248										</li> 
249									</#if> 
250								</#if> 
251							</#list> 
252						</#if> 
253 
254						<#-- TECHNICAL DATA --> 
255						<#if sectionTDFound> 
256							<#assign tdSiblings = SeparatorTechnicalData.TDTitle.getSiblings()> 
257							<#if tdSiblings?has_content 
258								&& ((tdSiblings?first.getData()!"")?trim != "" || (tdSiblings?first.TDText.getData()!"")?trim != "")> 
259								<#assign defaultValue = languageUtil.get(locale, "section-techdata-default") /> 
260								<li> 
261									<a 
262											class="label-light" 
263											data-scrolltosection="#products-technical-data" 
264											title="${((SeparatorTechnicalData.TDSectionTitle.getData())?has_content)?then(SeparatorTechnicalData.TDSectionTitle.getData(),defaultValue)}" 
265											aria-label="${((SeparatorTechnicalData.TDSectionTitle.getData())?has_content)?then(SeparatorTechnicalData.TDSectionTitle.getData(),defaultValue)}" 
266
267										${((SeparatorTechnicalData.TDSectionTitle.getData())?has_content)?then(SeparatorTechnicalData.TDSectionTitle.getData(),defaultValue)} 
268 
269									</a> 
270								</li> 
271							</#if> 
272						</#if> 
273 
274						<#-- FREE AREA 2 --> 
275						<#if sectionFreeArea2 && SeparatorFreeArea2??> 
276							<#list SeparatorFreeArea2.getSiblings() as fa2> 
277								<#if fa2.Fa2AnchorBarText.getData()?has_content > 
278									<li> 
279										<a 
280												class="label-light" 
281												data-scrolltosection="#section-content--features-fa2-${fa2?index}" 
282												title="${fa2.Fa2AnchorBarText.getData()}" 
283												aria-label="${fa2.Fa2AnchorBarText.getData()}" 
284
285											${fa2.Fa2AnchorBarText.getData()} 
286										</a> 
287									</li> 
288								</#if> 
289							</#list> 
290						</#if> 
291 
292 
293						<li> 
294							<a 
295									class="label-light anchorbar_products_contacts" 
296									title='${languageUtil.get(locale, "anchor-contacts")}' 
297									aria-label='${languageUtil.get(locale, "anchor-contacts")}' 
298									data-scrolltosection=".section-contacts" 
299
300								${languageUtil.get(locale, "anchor-contacts")} 
301							</a> 
302						</li> 
303 
304					</ul> 
305 
306				</div> 
307			</div> 
308		</#if> 
309 
310	</div> 
311 
312	<div class="container-full-width <#if abstract!='' >black<#else>grey</#if>"> 
313		<div class="container"> 
314			<nav aria-label="Breadcrumb" class="breadcrumbs"> 
315				<ol> 
316					<#list ancestors?reverse as ancestor> 
317						<#if !ancestor.isHidden()> 
318							<#assign url = ancestor.getFriendlyURL()!""> 
319							<#if !url?ends_with("-node")> 
320								<li> 
321									<a class="label-regular" 
322									   title="${ancestor.getName(locale)}" 
323									   href="${themeDisplay.getPathFriendlyURLPublic()}${guestUrl}${ancestor.getFriendlyURL(locale)}" 
324
325										${ancestor.getName(locale)} 
326									</a> 
327								</li> 
328							</#if> 
329						</#if> 
330					</#list> 
331					<li class="border-0 text-truncate" style="flex:auto"> 
332						<span class="label-regular">${.vars['reserved-article-title'].data}</span> 
333					</li> 
334				</ol> 
335			</nav> 
336		</div> 
337	</div> 
338 
339	<#macro displayDownloadLinks fileUrlElms> 
340		<div class="grid-col-download rounded-20 margin-bottom"> 
341			<#list fileUrlElms as cur_file> 
342				<#if cur_file.getData()?? && cur_file.getData() != ""> 
343					<#assign defLabel = languageUtil.get(locale, "download-brochure")> 
344						<#assign file_info = leonardo.findFileEntryInfo(cur_file.getData()) > 
345							<a class="report-download" 
346						   target="_blank" 
347						   href="${docsDownloadURL}${file_info.downloadUrl}" 
348						   title='${(file_info.title)!cur_file.OverviewFileLabel.getData()!defLabel}' 
349
350						<img src="${themeDisplay.getPathThemeImages()}/img/reports/download-icon.svg" alt="download icon" style="border-radius:0;width:auto"> 
351                        <span class="label-regular"> 
352                            ${(cur_file.OverviewFileLabel.getData())!(file_info.title)!defLabel} 
353                        </span> 
354						</a> 
355				</#if> 
356			</#list> 
357		</div> 
358	</#macro> 
359 
360	<#if !(hasDetailPage?? && getterUtil.getBoolean(hasDetailPage.getData())) > 
361		<#if (SeparatorOverview.OverviewText.getData())?has_content> 
362			<div class="container-full-width padding-block pagination-flex"> 
363				<div id = "section-overview" class="container tight"> 
364					<div class="simple-text"> 
365						<div class="body-regular"> 
366							${SeparatorOverview.OverviewText.getData()} 
367						</div> 
368					</div> 
369				</div> 
370			</div> 
371		</#if> 
372		<#assign validFiles = 0> 
373		<#assign overviewSiblings = SeparatorOverview.OverviewFileUrl.getSiblings()> 
374 
375		<#if overviewSiblings?has_content> 
376			<#list overviewSiblings as itemList> 
377				<#assign file_info = leonardo.findFileEntryInfo(itemList.getData())> 
378				<#assign label = (itemList.OverviewFileLabel.getData()!"")?trim> 
379				<#assign downloadUrl = (file_info.downloadUrl!"")?trim> 
380 
381				<#if label != "" && downloadUrl != ""> 
382					<#assign validFiles = validFiles + 1> 
383				</#if> 
384			</#list> 
385		</#if> 
386 
387		<#assign hasValidFiles = (validFiles > 0)> 
388 
389		<#if hasValidFiles> 
390			<div class="container-full-width padding-top"> 
391				<div class="container tight"> 
392					<div class="grid-col-download rounded-20"> 
393						<#list overviewSiblings as itemList> 
394							<#assign file_info = leonardo.findFileEntryInfo(itemList.getData())> 
395							<#assign label = (itemList.OverviewFileLabel.getData()!"")?trim> 
396							<#assign downloadUrl = (file_info.downloadUrl!"")?trim> 
397 
398							<#if label != "" && downloadUrl != ""> 
399								<a class="report-download" 
400								   href="${downloadUrl}" 
401								   title="${file_info.title!}" 
402								   target="_blank"> 
403									<img src="${themeDisplay.getPathThemeImages()}/img/reports/download-icon.svg" alt="download icon"> 
404									<span class="label-regular">${label}</span> 
405								</a> 
406							</#if> 
407						</#list> 
408					</div> 
409				</div> 
410			</div> 
411		</#if> 
412	<#else> 
413		<div class="container-full-width padding-block pagination-flex"> 
414			<!--OVERVIEW LAUNCH--> 
415 
416			<div id = "section-overview" class="container tight"> 
417				<div class="simple-text component-with-title"> 
418					<div class="body-regular"> 
419						<#--<#if (SeparatorOverview.ProductTitle.getData())?has_content> 
420							<h2 class="title-extralarge"> 
421								${(SeparatorOverview.ProductTitle.getData())} 
422							</h2> 
423						</#if>--> 
424 
425						<#if (SeparatorOverview.OverviewText.getData())?has_content> 
426							${SeparatorOverview.OverviewText.getData()} 
427						</#if> 
428					</div> 
429					<!--Start Module: Section Content--> 
430					<#if SeparatorOverview.ContentHtml.getData() != ""> 
431						<div class="body-regular"> 
432							${SeparatorOverview.ContentHtml.getData()} 
433						</div> 
434					</#if> 
435 
436					<#assign overviewFileUrlElms = SeparatorOverview.OverviewFileUrl.getSiblings() /> 
437					<#assign validFiles = overviewFileUrlElms?filter(f -> f.getData()?? && f.getData()?trim != "")> 
438 
439					<#if validFiles?has_content && !getterUtil.getBoolean(hasDetailPage.getData())> 
440						<@displayDownloadLinks fileUrlElms=overviewFileUrlElms /> 
441					</#if> 
442						<!--End Module: Section Content--> 
443 
444					<#if (discoverMoreLink)?has_content && (discoverMoreLink.getData() != '')> 
445						<div class = "product-det-discover padding-top"> 
446							<div class="white-card"> 
447								${discoverMoreLink.getData()!} 
448							</div> 
449						</div> 
450					</#if> 
451				</div> 
452			</div> 
453			<!--END MODULE: LAUNCH SECTION--> 
454 
455			<!--START MODULE: FREE AREA 1--> 
456			<#if sectionFreeArea1 > 
457				<#list SeparatorMainFeatures.getSiblings() as cur_sectionMF> 
458					<!--Start Module: Section Content--> 
459					<#assign showTitleOrText = false> 
460					<#if (cur_sectionMF.MFSectionTitle.getData())?has_content && 
461					(cur_sectionMF.MFText.getData())?has_content> 
462						<#assign showTitleOrText = true> 
463					</#if> 
464					<#if showTitleOrText> 
465						<div id = "section-content--features-${cur_sectionMF?index}" class="container section-content--features"> 
466							<div class="simple-text"> 
467								<div class="body-regular"> 
468									<#if (cur_sectionMF.MFSectionTitle.getData())?has_content> 
469										<h2 class="title-extralarge"> 
470											${cur_sectionMF.MFSectionTitle.getData()} 
471										</h2> 
472									</#if> 
473 
474									<#if cur_sectionMF.MFText.getData() != ""> 
475										<#assign htmlFormatted = leonardo.expandElementsInPage(cur_sectionMF.MFText.getData())> 
476										${htmlFormatted} 
477									</#if> 
478								</div> 
479							</div> 
480						</div> 
481					</#if> 
482					<#if (cur_sectionMF.FreeWebContent.getData())?has_content> 
483						<!--Start Module: Free Web Content --> 
484						<div ${(showTitleOrText)?then('','id="section-content--features-'+ cur_sectionMF?index + '"')}> 
485							<#assign data = cur_sectionMF.FreeWebContent.getData()/> 
486							<#assign json = jsonFactoryUtil.createJSONObject(data) /> 
487							<#assign classPK = json.getLong("classPK") /> 
488							<#if (classPK >0) > 
489								<#assign ja = journalArticleLocalService.getLatestArticle(classPK) /> 
490								<#assign jad = journalArticleLocalService.getArticleDisplay(ja, ja.getTemplateId(), "", languageId, 1, null, themeDisplay) /> 
491								${jad.getContent()} 
492							</#if> 
493						</div> 
494						<!--End Module: Free Web Content--> 
495					</#if> 
496					<!--End Module: Section Content--> 
497				</#list> 
498			</#if> 
499			<!--END MODULE: FREE AREA 1--> 
500 
501			<!--START MODULE: PRODUCTS TECHNICAL DATA--> 
502			<#if sectionTDFound  > 
503				<#assign tdSiblings = SeparatorTechnicalData.TDTitle.getSiblings()> 
504				<#if tdSiblings?has_content 
505					&& ((tdSiblings?first.getData()!"")?trim != "" || (tdSiblings?first.TDText.getData()!"")?trim != "")> 
506					<div id = "products-technical-data" class="container"> 
507						<div class="component-with-title"> 
508							<#if SeparatorTechnicalData.TDSectionTitle.getData() != ""> 
509								<h1 class="title-extralarge"> 
510									${SeparatorTechnicalData.TDSectionTitle.getData()} 
511								</h1> 
512							</#if> 
513							<div class="grid-technical"> 
514									<#list SeparatorTechnicalData.TDTitle.getSiblings() as cur_TDTitle> 
515										<div class="data-container rounded-20"> 
516											<#if cur_TDTitle.getData() != ""> 
517												<h2 class="body-medium text-center mb-0">${cur_TDTitle.getData()}</h2> 
518											</#if> 
519											<#if cur_TDTitle.TDText.getData() != ""> 
520												<div class="body-medium text-center mb-0"> 
521													${cur_TDTitle.TDText.getData()} 
522												</div> 
523											</#if> 
524										</div> 
525									</#list> 
526								</#if> 
527								<#if SeparatorTechnicalData.TDButtonLabel.getData() != ""> 
528 
529							</div> 
530						</div> 
531					</div> 
532				</#if> 
533			</#if> 
534			<!--END MODULE: PRODUCTS TECHNICAL DATA--> 
535 
536			<!--START MODULE: FREE AREA 2 --> 
537			<#if sectionFreeArea2 > 
538				<#list SeparatorFreeArea2.getSiblings() as cur_sectionFA2> 
539					<!--Start Module: Section Content--> 
540					<#assign showTitleOrText = false> 
541					<#if (cur_sectionFA2.Fa2SectionTitle.getData())?has_content || 
542					(cur_sectionFA2.Fa2Text.getData())?has_content> 
543						<#assign showTitleOrText = true> 
544					</#if> 
545					<#if showTitleOrText> 
546						<div id = "section-content--features-fa2-${cur_sectionFA2?index}" class="container section-content--features-fa2"> 
547							<div class="simple-text"> 
548								<div class="body-regular"> 
549									<#if (cur_sectionFA2.Fa2SectionTitle.getData())?has_content> 
550										<h2 class="title-extralarge"> 
551											${cur_sectionFA2.Fa2SectionTitle.getData()} 
552										</h2> 
553									</#if> 
554 
555									<#if cur_sectionFA2.Fa2Text.getData() != ""> 
556										<#assign htmlFormatted = leonardo.expandElementsInPage(cur_sectionFA2.Fa2Text.getData())> 
557										${htmlFormatted} 
558									</#if> 
559								</div> 
560							</div> 
561						</div> 
562					</#if> 
563					<#if (cur_sectionFA2.Fa2WebContent.getData())?has_content> 
564						<!--Start Module: Free Web Content --> 
565						<div ${(showTitleOrText)?then('','id="section-content--features-fa2-'+ cur_sectionFA2?index + '"')}> 
566							<#assign data = cur_sectionFA2.Fa2WebContent.getData()/> 
567							<#assign json = jsonFactoryUtil.createJSONObject(data) /> 
568							<#assign classPK = json.getLong("classPK") /> 
569							<#if (classPK >0) > 
570								<#assign ja = journalArticleLocalService.getLatestArticle(classPK) /> 
571								<#assign jad = journalArticleLocalService.getArticleDisplay(ja, ja.getTemplateId(), "", languageId, 1, null, themeDisplay) /> 
572								${jad.getContent()} 
573							</#if> 
574						</div> 
575						<!--End Module: Free Web Content--> 
576					</#if> 
577					<!--End Module: Section Content--> 
578				</#list> 
579			</#if> 
580			<!--END MODULE: FREE AREA 2 --> 
581 
582			<#assign validFiles = 0> 
583			<#assign overviewSiblings = SeparatorOverview.OverviewFileUrl.getSiblings()> 
584 
585			<#if overviewSiblings?has_content> 
586				<#list overviewSiblings as itemList> 
587					<#assign file_info = leonardo.findFileEntryInfo(itemList.getData())> 
588					<#assign label = (itemList.OverviewFileLabel.getData()!"")?trim> 
589					<#assign downloadUrl = (file_info.downloadUrl!"")?trim> 
590 
591					<#if label != "" && downloadUrl != ""> 
592						<#assign validFiles = validFiles + 1> 
593					</#if> 
594				</#list> 
595			</#if> 
596 
597			<#assign hasValidFiles = (validFiles > 0)> 
598 
599			<#if hasValidFiles> 
600				<div class="container tight padding-top"> 
601					<div class="grid-col-download rounded-20"> 
602						<#list overviewSiblings as itemList> 
603							<#assign file_info = leonardo.findFileEntryInfo(itemList.getData())> 
604							<#assign label = (itemList.OverviewFileLabel.getData()!"")?trim> 
605							<#assign downloadUrl = (file_info.downloadUrl!"")?trim> 
606 
607							<#if label != "" && downloadUrl != ""> 
608								<a class="report-download" 
609								   href="${downloadUrl}" 
610								   title="${file_info.title!}" 
611								   target="_blank"> 
612									<img src="${themeDisplay.getPathThemeImages()}/img/reports/download-icon.svg" alt="download icon"> 
613									<span class="label-regular">${label}</span> 
614								</a> 
615							</#if> 
616						</#list> 
617					</div> 
618				</div> 
619			</#if> 
620 
621 
622 
623			<div class="container"> 
624				<span class="separator-grey"></span> 
625			</div> 
626			<!--END MODULE: DOWNLOAD --> 
627		</div> 
628 
629		<#assign metaDesc = ""> 
630		<!-- Meta description --> 
631		<#if (layout.getDescription(themeDisplay.locale))?has_content> 
632			<#assign metaDesc = layout.getDescription(themeDisplay.locale)> 
633		<#elseif (.vars['reserved-article-description'].data)?has_content> 
634			<#assign metaDesc = .vars['reserved-article-description'].data> 
635		</#if> 
636		<#if metaDesc?has_content> 
637			${layout.setDescription(metaDesc)} 
638		</#if> 
639		<#if SeparatorHero?? && (SeparatorHero.HeroImage.getData())?has_content> 
640			<!-- Social Sharing --> 
641			<#if (heroImg.desktop)?has_content> 
642				<#assign imageFileName = heroImg.desktop!"" > 
643			<#elseif (overviewImg.desktop)?has_content> 
644				<#assign imageFileName = overviewImg.desktop!"" > 
645			<#else> 
646				<#assign imageFileName = "" > 
647			</#if> 
648 
649			<#if (SeparatorHero.HeroTitle.getData())?has_content> 
650				<#assign shareDescription = (htmlUtil.escape(SeparatorHero.HeroTitle.getData())!"")/> 
651				<#assign shareDescription = (shareDescription?replace("\n", " "))/> 
652			</#if> 
653 
654			<#assign ogType='product'> 
655 
656			<#assign twitterVia = "Leonardo_live"> 
657			<@leonardo.socialShareMetaAndLinks shareDescription=shareDescription imageFileName=imageFileName ogType=ogType twitterVia=twitterVia/> 
658		</#if> 
659	</#if> 
660<#else> 
661 
662	<@leonardo.articleInfo .vars "SP-Product-base"/> 
663 
664	<#assign rndNamespace = randomNamespace> 
665 
666	<#assign currentGroupExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge()> 
667	<#assign isDarkTheme = false> 
668	<#if currentGroupExpandoBridge.hasAttribute("dark-theme")> 
669		<#assign isDarkTheme = currentGroupExpandoBridge.getAttribute("dark-theme", false)> 
670	</#if> 
671 
672 
673	<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
674	<#assign languageId = languageUtil.getLanguageId(locale) /> 
675 
676	<#assign jArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) > 
677	<#assign productLayout = (jArticle.getLayout()!)> 
678 
679	<#assign docsDownloadURL = ''> 
680	<#if (layout.getGroup().getGroupId()) != (jArticle.getGroupId())> 
681		<#assign docsDownloadURL = portalUtil.getVirtualHostname (productLayout.getLayoutSet())> 
682		<#if (docsDownloadURL)?has_content && (docsDownloadURL?lower_case != 'localhost')> 
683			<#assign docsDownloadURL = 'https://' + docsDownloadURL > 
684		<#else> 
685			<#assign docsDownloadURL = ''> 
686		</#if> 
687	</#if> 
688 
689	<#if isDarkTheme && !(hasDetailPage?? && getterUtil.getBoolean(hasDetailPage.getData()))> 
690		<#if SeparatorOverview??> 
691			<#assign scalingDetails = { 
692			"desktop": {"alternateImage": {}, "key": "w_317"}, 
693			"tl": {"alternateImage": SeparatorOverview.OverviewImage.ImageTl!, "key": "w_317"}, 
694			"tp": {"alternateImage": SeparatorOverview.OverviewImage.ImageTp!, "key": "w_317"}, 
695			"mobile": {"alternateImage": SeparatorOverview.OverviewImage.ImageM!, "key": "w_317"} 
696			}> 
697 
698			<#assign dataImg = leonardo.adaptImage(SeparatorOverview.OverviewImage!, scalingDetails )> 
699			<div class="product-page-hero-card product-card-modal-container product-base section-hero-card--smallerVersion section-hero-card--wider-page-padding"> 
700				<div class="product-card-modal"> 
701					<div class="product-card-modal-text"> 
702						<div class="modal-title-container"> 
703							<h1 class="modal-title"> 
704								${SeparatorOverview.ProductName.getData()} 
705							</h1> 
706						</div> 
707						<div class="product-card--graphic-container"> 
708							<img class="product-card--graphic" alt="${SeparatorOverview.ProductName.getData()!}" title="${SeparatorOverview.ProductName.getData()!}" src="${themeDisplay.pathThemeImages}/blank.png" 
709								 data-src-url-d="${dataImg.desktop!}" 
710								 data-src-url-tl="${dataImg.tablet_landscape!}" 
711								 data-src-url-tp="${dataImg.tablet_portrait!}" 
712								 data-src-url-m="${dataImg.mobile!}"/> 
713						</div> 
714						<div class="modal-description"> 
715							${SeparatorOverview.OverviewText.getData()} 
716						</div> 
717 
718						<#if SeparatorOverview.OverviewFileUrl??> 
719							<#assign docsDownloadURL = ''> 
720 
721							<ul class="js-ul-overview"> 
722								<#list SeparatorOverview.OverviewFileUrl.getSiblings() as itemList> 
723 
724									<#assign file_info = leonardo.findFileEntryInfo(itemList.getData()) > 
725									<#if itemList.OverviewFileLabel.getData()!= '' && file_info.downloadUrl != ''> 
726										<li class="list-item"> 
727											<a href="${docsDownloadURL}${file_info.downloadUrl}" target="_blank"> 
728												${itemList.OverviewFileLabel.getData()!} 
729											</a> 
730										</li> 
731									</#if> 
732								</#list> 
733							</ul> 
734						</#if> 
735					</div> 
736				</div> 
737			</div> 
738		</#if> 
739	<#else> 
740		<#macro downloadIcon> 
741			<svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18"> 
742				<path fill="#000" fill-rule="nonzero" d="M6.61 12.763l-2.145-2.24a.58.58 0 0 1 0-.796c.211-.22.551-.22.762 0l1.235 1.29V6.75c0-.31.24-.563.538-.563.297 0 .538.252.538.563v4.267l1.235-1.29c.21-.22.551-.22.762 0a.58.58 0 0 1 0 .796l-2.145 2.24a.526.526 0 0 1-.78 0zM12.62 18H1.383C.62 18 0 17.368 0 16.592V5.037c0-.49.19-.968.52-1.314L3.565.544A1.728 1.728 0 0 1 4.82 0h7.797C13.38 0 14 .631 14 1.407v15.186C14 17.37 13.38 18 12.619 18zM4.82 1.125a.682.682 0 0 0-.496.214L1.282 4.52a.755.755 0 0 0-.205.518v11.555c0 .156.137.283.306.283h11.235c.168 0 .305-.127.305-.282V1.407c0-.155-.137-.282-.305-.282H4.821zm-.783 4.5H2.154a.551.551 0 0 1-.539-.563c0-.31.242-.562.539-.562h1.884c.15 0 .27-.126.27-.281V2.25c0-.31.24-.563.538-.563.297 0 .539.252.539.563v1.969c0 .775-.605 1.406-1.347 1.406zm6.193 9.563H3.769a.55.55 0 0 1-.538-.563.55.55 0 0 1 .538-.563h6.462a.55.55 0 0 1 .538.563.55.55 0 0 1-.538.563z"/> 
743			</svg> 
744		</#macro> 
745 
746		<#macro displayDownloadLinks fileUrlElms fileVirtualHost> 
747			<div class="section-content--action-items"> 
748				<#list fileUrlElms as cur_file> 
749					<#if cur_file.getData()?? && cur_file.getData() != ""> 
750						<#assign defLabel = languageUtil.get(locale, "download-brochure")> 
751						<div class="section-content--action-items--download"> 
752							<#assign file_info = leonardo.findFileEntryInfo(cur_file.getData()) > 
753 
754							<a class="section-content--action-items--download--link" 
755							   target="_blank" 
756							   href="${fileVirtualHost}${file_info.downloadUrl}" 
757							   title='${(file_info.title)!cur_file.OverviewFileLabel.getData()!defLabel}'> 
758								<@downloadIcon /> 
759								<span class="section-content--action-items--download--link--filename"> 
760								   ${(cur_file.OverviewFileLabel.getData())!(file_info.title)!defLabel} 
761								  </span> 
762							</a> 
763						</div> 
764					</#if> 
765				</#list> 
766			</div> 
767		</#macro> 
768 
769		<#function getProductImageUUID plid=-1> 
770			<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
771			<#assign assetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryPropertyLocalService")> 
772			<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
773			<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")> 
774 
775			<#assign groupExpandoBridge = layout.getGroup().getExpandoBridge() /> 
776			<#assign products_vocabulary_id = (groupExpandoBridge.hasAttribute("products-vocabulary-id")?then(getterUtil.getLong(groupExpandoBridge.getAttribute("products-vocabulary-id", false)),0)) /> 
777 
778			<#if (plid > 0)> 
779				<#assign fromLayout = layoutLocalService.fetchLayout(plid)> 
780				<#if fromLayout??> 
781					<#assign categories = assetCategoryLocalService.getCategories("com.liferay.portal.kernel.model.Layout", fromLayout.getPlid()) /> 
782					<#list categories as category> 
783						<#assign properties = assetCategoryPropertyLocalService.getCategoryProperties(category.getCategoryId())> 
784						<#list properties as property> 
785							<#if (products_vocabulary_id == category.getVocabularyId()) && (property.key == "uuid-banner-image") && (property.value)?has_content> 
786								<#return property.getValue() /> 
787							</#if> 
788						</#list> 
789					</#list> 
790					<#return getProductImageUUID(fromLayout.getParentPlid())/> 
791				</#if> 
792			<#elseif (plid < 0)> 
793				<#assign from = paramUtil.getString(themeDisplay.getRequest(), "f", "null")> 
794				<#assign fromLayout = layout> 
795				<#if validator.isNotNull(from) && (from != "/search")> 
796					<#assign fromLayout = layoutLocalService.fetchLayoutByFriendlyURL(groupId, false, from)!> 
797					<#if validator.isNotNull(fromLayout)> 
798						<#assign uuid_banner_image = getProductImageUUID(fromLayout.getPlid()) /> 
799					</#if> 
800				</#if> 
801				<#if !((uuid_banner_image)?has_content)> 
802					<#assign resourcePrimKey = journalArticleResourceLocalService.getArticleResourcePrimKey(groupId, .vars['reserved-article-id'].data)> 
803					<#assign categories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", resourcePrimKey) /> 
804					<#list categories as category> 
805						<#assign properties = assetCategoryPropertyLocalService.getCategoryProperties(category.getCategoryId())> 
806						<#list properties as property> 
807							<#if (products_vocabulary_id == category.getVocabularyId()) && (property.key == "uuid-banner-image") && (property.value)?has_content> 
808								<#return property.getValue() /> 
809							</#if> 
810						</#list> 
811					</#list> 
812				</#if> 
813 
814				<#if uuid_banner_image??> 
815					<#return uuid_banner_image> 
816				</#if> 
817			</#if> 
818			<#return ""> 
819		</#function> 
820 
821		<#function getImageURL uuid> 
822			<#if (uuid?has_content)> 
823				<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
824				<#assign banner_image = dlFileEntryLocalService.fetchDLFileEntryByUuidAndGroupId(uuid, groupId)! /> 
825				<#if (banner_image?has_content)> 
826					<#assign t = banner_image.getFileVersion().getModifiedDate()! /> 
827					<#assign url = "/documents/" + banner_image.getRepositoryId() 
828					+ "/" + banner_image.getFolderId() 
829					+ "/" + httpUtil.encodePath(banner_image.getFileName()) 
830					+ "/" + banner_image.getUuid() + "?t=" + t?long> 
831					<#assign dataImage = {"fileEntryId": banner_image.getFileEntryId(), "fileName": banner_image.getFileName(), "ts": t?long}> 
832					<#assign scalingDetails = { 
833					"desktop": {"alternateImage": {}, "key": "w_1440"}, 
834					"tl": {"alternateImage": {}, "key": "h_460"}, 
835					"tp": {"alternateImage": {}, "key": "h_560"}, 
836					"mobile": {"alternateImage": {}, "key": "h_400"} 
837					}> 
838					<#return leonardo.adaptImage(dataImage, scalingDetails)> 
839				</#if> 
840			</#if> 
841			<#return {}> 
842		</#function> 
843		<#assign uuid = getProductImageUUID()> 
844		<#assign bannerImageData = getImageURL(uuid)> 
845		<!-- default number of visible technical data boxes  --> 
846		<#assign maxTechnicalBoxes = 12> 
847 
848 
849 
850 
851 
852		<#assign sectionOFound = false> 
853		<#assign sectionOHtmlFound = false> 
854		<#assign sectionFreeArea1 = false> 
855		<#assign sectionFreeArea2 = false> 
856		<#assign sectionTDFound = false> 
857 
858		<!--FREE AREA 1 --> 
859		<#if SeparatorMainFeatures?? && SeparatorMainFeatures.getSiblings()?has_content> 
860			<#list SeparatorMainFeatures.getSiblings() as cur_sectionMF> 
861				<#if (cur_sectionMF.MFSectionTitle.getData())?has_content || 
862				(cur_sectionMF.MFText.getData())?has_content || 
863				(cur_sectionMF.FreeWebContent.getData())?has_content> 
864					<#assign sectionFreeArea1 = true> 
865					<#break> 
866				</#if> 
867			</#list> 
868		</#if> 
869		<!--FREE AREA 2 --> 
870		<#if SeparatorFreeArea2?? && SeparatorFreeArea2.getSiblings()?has_content> 
871			<#list SeparatorFreeArea2.getSiblings() as cur_sectionFA2> 
872				<#if (cur_sectionFA2.Fa2Text.getData())?has_content || 
873				(cur_sectionFA2.Fa2SectionTitle.getData())?has_content || 
874				(cur_sectionFA2.Fa2WebContent.getData())?has_content> 
875					<#assign sectionFreeArea2 = true> 
876					<#break> 
877				</#if> 
878			</#list> 
879		</#if> 
880		<#if (SeparatorTechnicalData.TDSectionTitle.getSiblings())?has_content> 
881			<#list SeparatorTechnicalData.TDSectionTitle.getSiblings() as cur_sectionTD> 
882				<#if cur_sectionTD.getData() != ""> 
883					<#assign sectionTDFound = true> 
884					<#break> 
885				</#if> 
886			</#list> 
887		</#if> 
888		<#if (SeparatorOverview.OverviewText.getData())?has_content || 
889		(SeparatorOverview.OverviewTitle.getData())?has_content> 
890			<#assign sectionOFound = true> 
891		</#if> 
892		<#if (SeparatorOverview.ContentHtml.getData())?has_content > 
893			<#assign sectionOHtmlFound = true> 
894		</#if> 
895		<#if (SeparatorOverview.OverviewFileUrl)?has_content> 
896			<#assign overviewFileUrlElms = SeparatorOverview.OverviewFileUrl.getSiblings()> 
897		</#if> 
898 
899		<div class="product-wrapper product-base"> 
900			<!--Start Module: Hero--> 
901			<div class="section-container section-container--fluid"> 
902				<style> 
903					<#if bannerImageData?has_content> 
904					.hero-banner-half-image-bck{background-image: url(${bannerImageData.desktop!});} 
905					@media all and (min-width: 1024px) and (max-width: 1279px) { 
906						.hero-banner-half-image-bck{background-image: url(${bannerImageData.tablet_landscape!});} 
907
908					@media all and (min-width: 768px) and (max-width: 1023px) { 
909						.hero-banner-half-image-bck{background-image: url(${bannerImageData.tablet_portrait!});} 
910
911					@media all and (max-width: 767px) { 
912						.hero-banner-half-image-bck{background-image: url(${bannerImageData.mobile!});} 
913
914					<#else> 
915					.hero-banner-half-image-bck{background-color: #8698a2;} 
916					</#if> 
917				</style> 
918 
919				<div class="hero"> 
920					<!--Start Module: Hero Slide--> 
921					<div class="hero-slide hero-slide--internal hero-banner-half-image-bck"> 
922						<div class="hero-slide--content"> 
923							<h1 class="hero-slide--content--title">${(SeparatorOverview.ProductName.data)!"Product"}</h1> 
924						</div> 
925						<noscript> 
926							<img src="${bannerImageData.desktop!}" alt='${bannerImageData.alt_desktop!}'> 
927							<img src="${bannerImageData.tablet_landscape!}" alt='${bannerImageData.alt_tablet_landscape!}'> 
928							<img src="${bannerImageData.tablet_portrait!}" alt='${bannerImageData.alt_tablet_portrait!}'> 
929							<img src="${bannerImageData.mobile!}" alt='${bannerImageData.alt_mobile!}'> 
930						</noscript> 
931					</div> 
932					<!--End Module: Hero Slide--> 
933 
934					<!--Start Mixin: Icon Share Primary--> 
935					<@leonardo.shareLinkHero/> 
936					<!--End Mixin: Icon Share Primary--> 
937				</div> 
938			</div> 
939 
940			<!--Start Module: Section Navigator Anchor bar product base--> 
941			<div class="section-container section-container--fluid"> 
942				<div class="section-navigator"> 
943					<div class="section-navigator--list"> 
944						<div class="section-container swiper-container--sectionNavigator section-container--fixed"> 
945							<div class="section-navigator--list--item-wrap swiper-wrapper"> 
946								<!--Overview--> 
947								<#assign defaultValue=languageUtil.get(locale, "section-overview-default")> 
948								<a class="section-navigator--list--item swiper-slide active" href="javascript:void(0);" 
949								   title="${(SeparatorOverview.OverviewTitle.getData())!defaultValue}" 
950								   data-target=".section-hero-card"> 
951									${(SeparatorOverview.OverviewTitle.getData())!defaultValue}</a> 
952								<!--Free Area 1 --> 
953								<#if sectionFreeArea1  && SeparatorMainFeatures??> 
954									<#list SeparatorMainFeatures.getSiblings() as cur_section> 
955										<#if (cur_section.Fa1AnchorBarText.getData())?has_content > 
956											<a class="section-navigator--list--item swiper-slide" href="javascript:void(0);" 
957											   title='${(cur_section.Fa1AnchorBarText.getData())}' 
958											   data-target=".section-content--features-${cur_section?index}"> 
959												${(cur_section.Fa1AnchorBarText.getData())!}</a> 
960										</#if> 
961									</#list> 
962								</#if> 
963								<!--Technical data--> 
964								<#if sectionTDFound = true > 
965									<#assign defaultValue=languageUtil.get(locale, "section-techdata-default")> 
966									<a class="section-navigator--list--item swiper-slide" href="javascript:void(0)" 
967									   title='${(SeparatorTechnicalData.TDSectionTitle.getData())!defaultValue}' 
968									   data-target=".products-technical-data"> 
969										${(SeparatorTechnicalData.TDSectionTitle.getData())!defaultValue}</a> 
970								</#if> 
971								<!--Free Area 2 --> 
972								<#if sectionFreeArea2  && SeparatorFreeArea2??> 
973									<#list SeparatorFreeArea2.getSiblings() as cur_section> 
974										<#if (cur_section.Fa2AnchorBarText.getData())?has_content > 
975											<a class="section-navigator--list--item swiper-slide" href="javascript:void(0)" 
976											   title='${(cur_section.Fa2AnchorBarText.getData())!}' 
977											   data-target=".section-content--features-fa2-${cur_section?index}"> 
978												${(cur_section.Fa2AnchorBarText.getData())!}</a> 
979										</#if> 
980									</#list> 
981								</#if> 
982								<!--Contacts--> 
983								<a class="section-navigator--list--item anchorbar_products_contacts swiper-slide"  href="javascript:void(0)" 
984								   title='${languageUtil.get(locale, "anchor-contacts")}' 
985								   data-target=".section-contacts"> 
986									${languageUtil.get(locale, "anchor-contacts")}</a> 
987								<!--Related Products--> 
988								<a class="section-navigator--list--item anchorbar_products_related swiper-slide" href="javascript:void(0)" 
989								   title='${languageUtil.get(locale, "related-products")}' 
990								   data-target=".related-products"> 
991									${languageUtil.get(locale, "related-products")}</a> 
992							</div> 
993						</div> 
994						<div class="swiper-button-prev section-navigator--scroll--left"><span class="section-navigator--scroll--left--icon"></span></div> 
995						<div class="swiper-button-next section-navigator--scroll--right"><span class="section-navigator--scroll--right--icon"></span></div> 
996					</div> 
997					<div class="section-navigator--spacer"></div> 
998				</div> 
999			</div> 
1000 
1001			<!--End Module: Section Navigator--> 
1002			<#if sectionOFound = true || sectionOHtmlFound = true> 
1003 
1004				<#if (SeparatorOverview.ProductTitle.getData())?has_content> 
1005					<#assign isMiddle = leonardo.isRadioButtonValue(SeparatorOverview.ProductTitle.ProductTitlePosition, "middle")> 
1006					<#if (isMiddle=="true")> 
1007						<#assign forcedStyle = rndNamespace + "forced-style-200"> 
1008					<#else> 
1009						<#assign forcedStyle = rndNamespace + "forced-style-0"> 
1010					</#if> 
1011					<style> 
1012						/*Desktop and tablet landscape viewport*/ 
1013						@media all and (min-width: 1024px) { 
1014							.section-hero-card .section-grid .section-hero-card--content .section-hero-card--title.${rndNamespace}forced-style-200 { 
1015								margin-left: -200px !important; 
1016
1017							.section-hero-card .section-grid .section-hero-card--content .section-hero-card--title.${rndNamespace}forced-style-0 { 
1018								margin-left: 0 !important; 
1019
1020
1021					</style> 
1022				</#if> 
1023 
1024				<!--Start Module: Section Hero Cards--> 
1025				<div class="section-container section-container--fixed"> 
1026					<div class="product-page-hero-card section-hero-card section-hero-card--smallerVersion section-hero-card--wider-page-padding"> 
1027						<div class="section-grid layout--tp-col layout--m-col"> 
1028							<div class="grid grid--tp100p grid--m100p grid--d33p grid--tl33p hidden-on-dark-theme"> 
1029								<#assign scalingDetails = { 
1030								"desktop": {"alternateImage": {}, "key": "h_480"}, 
1031								"tl": {"alternateImage": (SeparatorOverview.OverviewImage.ImageTl)!, "key": "h_480"}, 
1032								"tp": {"alternateImage": (SeparatorOverview.OverviewImage.ImageTp)!, "key": "w_768"}, 
1033								"mobile": {"alternateImage": (SeparatorOverview.OverviewImage.ImageM)!, "key": "h_300"} 
1034								}> 
1035								<#assign overviewImg = leonardo.adaptImage((SeparatorOverview.OverviewImage)!, scalingDetails )> 
1036								<div class="mr1 section-hero-card--graphic is-light" 
1037									 data-img-url-d="${(overviewImg.desktop)!}" 
1038									 data-img-url-tl="${(overviewImg.tablet_landscape)!}" 
1039									 data-img-url-tp="${(overviewImg.tablet_portrait)!}" 
1040									 data-img-url-m="${(overviewImg.mobile!)}"> 
1041 
1042									<noscript> 
1043										<img src="${overviewImg.desktop!}" alt='${overviewImg.alt_desktop!}'> 
1044										<img src="${overviewImg.tablet_landscape!}" alt='${overviewImg.alt_tablet_landscape!}'> 
1045										<img src="${overviewImg.tablet_portrait!}" alt='${overviewImg.alt_tablet_portrait!}'> 
1046										<img src="${overviewImg.mobile!}" alt='${overviewImg.alt_mobile!}'> 
1047									</noscript> 
1048								</div> 
1049							</div> 
1050							<div class="grid grid--tp100p grid--m100p grid--d67p grid--tl67p"> 
1051								<div class="section-hero-card--content"> 
1052									<#if (SeparatorOverview.ProductTitle.getData())?has_content> 
1053										<h2 class="section-hero-card--title section-hero-card--title-alwayson ${forcedStyle!}">${(SeparatorOverview.ProductTitle.getData())}</h2> 
1054									</#if> 
1055									<#if (SeparatorOverview.OverviewText.getData())?has_content> 
1056										<h3 class="section-hero-card--description">${SeparatorOverview.OverviewText.getData()}</h3> 
1057									</#if> 
1058									<!--download section--> 
1059									<#if sectionOHtmlFound = false && overviewFileUrlElms??> 
1060										<@displayDownloadLinks fileUrlElms=overviewFileUrlElms fileVirtualHost=docsDownloadURL/> 
1061									</#if> 
1062								</div> 
1063							</div> 
1064						</div> 
1065					</div> 
1066				</div> 
1067				<!--End Module: Section Hero Cards--> 
1068 
1069				<!--Start Module: Section Content--> 
1070				<#if SeparatorOverview.ContentHtml.getData() != ""> 
1071					<div class="section-container section-container--fixed generic-content-body"> 
1072						<div class="section-content"> 
1073							<div class="section-content--content"> 
1074								${SeparatorOverview.ContentHtml.getData()} 
1075							</div> 
1076							<#if sectionOHtmlFound = true && overviewFileUrlElms??> 
1077								<@displayDownloadLinks fileUrlElms=overviewFileUrlElms  fileVirtualHost=docsDownloadURL/> 
1078							</#if> 
1079						</div> 
1080					</div> 
1081				</#if> 
1082				<!--End Module: Section Content--> 
1083			</#if> 
1084 
1085 
1086			<!--START MODULE: FREE AREA 1--> 
1087			<#if sectionFreeArea1 > 
1088				<#list SeparatorMainFeatures.getSiblings() as cur_sectionMF> 
1089					<!--Start Module: Section Content--> 
1090					<#assign showTitleOrText = false> 
1091					<#if (cur_sectionMF.MFSectionTitle.getData())?has_content || 
1092					(cur_sectionMF.MFText.getData())?has_content> 
1093						<#assign showTitleOrText = true> 
1094					</#if> 
1095					<#if showTitleOrText> 
1096						<div class="section-container section-container--fixed generic-content-body"> 
1097							<div class="section-content"> 
1098								<div class="section-content--content section-content--features-${cur_sectionMF?index}"> 
1099									<!--title--> 
1100									<#if cur_sectionMF.MFSectionTitle.getData() != ""> 
1101										<div class="4section-content--features--heading section-heading section-heading--center"> 
1102											${cur_sectionMF.MFSectionTitle.getData()} 
1103										</div> 
1104									</#if> 
1105									<!--text--> 
1106									<#if cur_sectionMF.MFText.getData() != ""> 
1107										<#assign htmlFormatted = leonardo.expandElementsInPage(cur_sectionMF.MFText.getData())> 
1108										<div class="check-html-content">${htmlFormatted}</div> 
1109									</#if> 
1110								</div> 
1111							</div> 
1112						</div> 
1113					</#if> 
1114					<#if (cur_sectionMF.FreeWebContent.getData())?has_content> 
1115						<!--Start Module: Free Web Content --> 
1116						<div ${(showTitleOrText)?then('','class="section-content--features-'+ cur_sectionMF?index + '"')}> 
1117							<#assign data = cur_sectionMF.FreeWebContent.getData()/> 
1118							<#assign json = jsonFactoryUtil.createJSONObject(data) /> 
1119							<#assign classPK = json.getLong("classPK") /> 
1120							<#if (classPK >0) > 
1121								<#assign ja = journalArticleLocalService.getLatestArticle(classPK) /> 
1122								<#assign jad = journalArticleLocalService.getArticleDisplay(ja, ja.getTemplateId(), "", languageId, 1, null, themeDisplay) /> 
1123								${jad.getContent()} 
1124							</#if> 
1125						</div> 
1126						<!--End Module: Free Web Content--> 
1127					</#if> 
1128					<!--End Module: Section Content--> 
1129				</#list> 
1130			</#if> 
1131			<!--END MODULE: FREE AREA 1--> 
1132 
1133			<!--START MODULE: PRODUCTS TECHNICAL DATA--> 
1134			<#if sectionTDFound  > 
1135				<div id = "products-technical-data" class="container"> 
1136					<div class="component-with-title"> 
1137						<#if SeparatorTechnicalData.TDSectionTitle.getData() != ""> 
1138							<h1 class="title-extralarge"> 
1139								${SeparatorTechnicalData.TDSectionTitle.getData()} 
1140							</h1> 
1141						</#if> 
1142 
1143						<div class="grid-technical"> 
1144							<#if SeparatorTechnicalData.TDSectionTitle.getSiblings()?has_content> 
1145								<#list SeparatorTechnicalData.TDSectionTitle.getSiblings() as cur_TDSectionTitle> 
1146									<div class="data-container rounded-20"> 
1147										<#if cur_TDSectionTitle.getData() != ""> 
1148											<h2 class="body-medium text-center mb-0">${cur_TDSectionTitle.getData()}</h2> 
1149										</#if> 
1150										<#if cur_TDSectionTitle.TDText.getData() != ""> 
1151											<div class="body-medium text-center mb-0"> 
1152												${cur_TDSectionTitle.TDText.getData()} 
1153											</div> 
1154										</#if> 
1155									</div> 
1156 
1157								</#list> 
1158							</#if> 
1159							<#if SeparatorTechnicalData.TDButtonLabel.getData() != ""> 
1160 
1161							</#if> 
1162						</div> 
1163					</div> 
1164				</div> 
1165			</#if> 
1166			<!--END MODULE: PRODUCTS TECHNICAL DATA--> 
1167 
1168			<!-- TECHNICAL DATA --> 
1169			<#if sectionTDFound = true > 
1170				<!--Start Module: Products Technical Data--> 
1171				<div class="section-container section-container--fixed"> 
1172					<div class="products-technical-data" data-expandable="true" data-lazy-load="12"> 
1173						<#if SeparatorTechnicalData.TDSectionTitle.getData() != ""> 
1174							<h2 class="products-technical-data--heading section-heading section-heading--center"> 
1175								${SeparatorTechnicalData.TDSectionTitle.getData()} 
1176							</h2> 
1177						</#if> 
1178						<div class="products-technical-data--specifications"> 
1179							<#if SeparatorTechnicalData.TDSectionTitle.getSiblings()?has_content> 
1180								<#list SeparatorTechnicalData.TDSectionTitle.getSiblings() as cur_TDSectionTitle> 
1181									<div class='products-technical-data--spec invisible'> 
1182										<#if cur_TDSectionTitle.getData() != ""> 
1183											<div class="products-technical-data--spec--label">${cur_TDSectionTitle.getData()}</div> 
1184										</#if> 
1185										<#if cur_TDSectionTitle.TDText.getData() != ""> 
1186											<div class="products-technical-data--spec--value"> 
1187												${cur_TDSectionTitle.TDText.getData()} 
1188											</div> 
1189										</#if> 
1190									</div> 
1191								</#list> 
1192							</#if> 
1193						</div> 
1194						<#if SeparatorTechnicalData.TDButtonLabel.getData() != ""> 
1195							<div class="products-technical-data--action-items"> 
1196								<div class="" style="text-align: center;"> 
1197									<button class="btn btn-leo see-more" type="button">${SeparatorTechnicalData.TDButtonLabel.getData()}</button> 
1198								</div> 
1199							</div> 
1200						</#if> 
1201					</div> 
1202				</div> 
1203				<!--End Module: Products Technical Data--> 
1204			</#if> 
1205 
1206			<!--START MODULE: FREE AREA 2 --> 
1207			<#if sectionFreeArea2 > 
1208				<#list SeparatorFreeArea2.getSiblings() as cur_sectionFA2> 
1209					<!--Start Module: Section Content--> 
1210					<#assign showTitleOrText = false> 
1211					<#if (cur_sectionFA2.Fa2SectionTitle.getData())?has_content || 
1212					(cur_sectionFA2.Fa2Text.getData())?has_content> 
1213						<#assign showTitleOrText = true> 
1214					</#if> 
1215					<#if showTitleOrText> 
1216						<div class="section-container section-container--fixed generic-content-body"> 
1217							<div class="section-content"> 
1218								<div class="section-content--content section-content--features-fa2-${cur_sectionFA2?index}"> 
1219									<!--title--> 
1220									<#if cur_sectionFA2.Fa2SectionTitle.getData() != ""> 
1221										<div class="section-content--features--heading section-heading section-heading--center"> 
1222											${cur_sectionFA2.Fa2SectionTitle.getData()} 
1223										</div> 
1224									</#if> 
1225									<!--text--> 
1226									<#if cur_sectionFA2.Fa2Text.getData() != ""> 
1227										<#assign htmlFormatted = leonardo.expandElementsInPage(cur_sectionFA2.Fa2Text.getData())> 
1228										<div class="check-html-content">${htmlFormatted}</div> 
1229									</#if> 
1230								</div> 
1231							</div> 
1232						</div> 
1233					</#if> 
1234					<#if (cur_sectionFA2.Fa2WebContent.getData())?has_content> 
1235						<!--Start Module: Free Web Content --> 
1236						<div ${(showTitleOrText)?then('','class="section-content--features-fa2-'+ cur_sectionFA2?index + '"')}> 
1237							<#assign data = cur_sectionFA2.Fa2WebContent.getData()/> 
1238							<#assign json = jsonFactoryUtil.createJSONObject(data) /> 
1239							<#assign classPK = json.getLong("classPK") /> 
1240							<#if (classPK >0) > 
1241								<#assign ja = journalArticleLocalService.getLatestArticle(classPK) /> 
1242								<#assign jad = journalArticleLocalService.getArticleDisplay(ja, ja.getTemplateId(), "", languageId, 1, null, themeDisplay) /> 
1243								${jad.getContent()} 
1244							</#if> 
1245						</div> 
1246						<!--End Module: Free Web Content--> 
1247					</#if> 
1248					<!--End Module: Section Content--> 
1249				</#list> 
1250			</#if> 
1251			<!--END MODULE: FREE AREA 2 --> 
1252		</div> 
1253 
1254		<!-- Meta description --> 
1255		<#if (layout.getDescription(themeDisplay.locale))?has_content> 
1256			<#assign metaDesc = layout.getDescription(themeDisplay.locale)> 
1257		<#elseif (.vars['reserved-article-description'].data)?has_content> 
1258			<#assign metaDesc = .vars['reserved-article-description'].data> 
1259		</#if> 
1260		<#if metaDesc?has_content> 
1261			${layout.setDescription(metaDesc)} 
1262		</#if> 
1263 
1264		<!-- Social Sharing --> 
1265		<#if (overviewImg.desktop)?has_content> 
1266			<#assign imageFileName = overviewImg.desktop!"" > 
1267		<#elseif (bannerImageData.desktop)?has_content> 
1268			<#assign imageFileName = bannerImageData.desktop!"" > 
1269		<#else> 
1270			<#assign imageFileName = "" > 
1271		</#if> 
1272		<#if (SeparatorOverview)?has_content> 
1273			<#assign shareTitle = (SeparatorOverview.ProductName.getData())!""> 
1274			<#assign shareDescription = (SeparatorOverview.ProductTitle.getData())!metaDesc!(SeparatorOverview.ProductName.getData())!""> 
1275 
1276			<#assign ogType='product'> 
1277			<@leonardo.socialShareMetaAndLinks shareTitle=shareTitle shareDescription=shareDescription imageFileName=imageFileName ogType=ogType /> 
1278 
1279		</#if> 
1280	</#if> 
1281 
1282</#if> 

Leonardo

Per ulteriori informazioni

Email: infomarketing@leonardo.com
Contattaci
Non ci sono risultati.
Search overlay background

Mobile navigation menu