EU DECLARATIONS OF CONFORMITY - Cyber & Sicurezza

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> bannerImageData.mobile  [in template "20115#20151#13222278" 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#13222278" 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<@leonardo.articleInfo .vars "SP-Product-base"/> 
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 
661<#else> 
662 
663	<@leonardo.articleInfo .vars "SP-Product-base"/> 
664 
665	<#assign rndNamespace = randomNamespace> 
666 
667	<#assign currentGroupExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge()> 
668	<#assign isDarkTheme = false> 
669	<#if currentGroupExpandoBridge.hasAttribute("dark-theme")> 
670		<#assign isDarkTheme = currentGroupExpandoBridge.getAttribute("dark-theme", false)> 
671	</#if> 
672 
673 
674	<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
675	<#assign languageId = languageUtil.getLanguageId(locale) /> 
676 
677	<#assign jArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) > 
678	<#assign productLayout = (jArticle.getLayout()!)> 
679 
680	<#assign docsDownloadURL = ''> 
681	<#if (layout.getGroup().getGroupId()) != (jArticle.getGroupId())> 
682		<#assign docsDownloadURL = portalUtil.getVirtualHostname (productLayout.getLayoutSet())> 
683		<#if (docsDownloadURL)?has_content && (docsDownloadURL?lower_case != 'localhost')> 
684			<#assign docsDownloadURL = 'https://' + docsDownloadURL > 
685		<#else> 
686			<#assign docsDownloadURL = ''> 
687		</#if> 
688	</#if> 
689 
690	<#if isDarkTheme && !(hasDetailPage?? && getterUtil.getBoolean(hasDetailPage.getData()))> 
691		<#if SeparatorOverview??> 
692			<#assign scalingDetails = { 
693			"desktop": {"alternateImage": {}, "key": "w_317"}, 
694			"tl": {"alternateImage": SeparatorOverview.OverviewImage.ImageTl!, "key": "w_317"}, 
695			"tp": {"alternateImage": SeparatorOverview.OverviewImage.ImageTp!, "key": "w_317"}, 
696			"mobile": {"alternateImage": SeparatorOverview.OverviewImage.ImageM!, "key": "w_317"} 
697			}> 
698 
699			<#assign dataImg = leonardo.adaptImage(SeparatorOverview.OverviewImage!, scalingDetails )> 
700			<div class="product-page-hero-card product-card-modal-container product-base section-hero-card--smallerVersion section-hero-card--wider-page-padding"> 
701				<div class="product-card-modal"> 
702					<div class="product-card-modal-text"> 
703						<div class="modal-title-container"> 
704							<h1 class="modal-title"> 
705								${SeparatorOverview.ProductName.getData()} 
706							</h1> 
707						</div> 
708						<div class="product-card--graphic-container"> 
709							<img class="product-card--graphic" alt="${SeparatorOverview.ProductName.getData()!}" title="${SeparatorOverview.ProductName.getData()!}" src="${themeDisplay.pathThemeImages}/blank.png" 
710								 data-src-url-d="${dataImg.desktop!}" 
711								 data-src-url-tl="${dataImg.tablet_landscape!}" 
712								 data-src-url-tp="${dataImg.tablet_portrait!}" 
713								 data-src-url-m="${dataImg.mobile!}"/> 
714						</div> 
715						<div class="modal-description"> 
716							${SeparatorOverview.OverviewText.getData()} 
717						</div> 
718 
719						<#if SeparatorOverview.OverviewFileUrl??> 
720							<#assign docsDownloadURL = ''> 
721 
722							<ul class="js-ul-overview"> 
723								<#list SeparatorOverview.OverviewFileUrl.getSiblings() as itemList> 
724 
725									<#assign file_info = leonardo.findFileEntryInfo(itemList.getData()) > 
726									<#if itemList.OverviewFileLabel.getData()!= '' && file_info.downloadUrl != ''> 
727										<li class="list-item"> 
728											<a href="${docsDownloadURL}${file_info.downloadUrl}" target="_blank"> 
729												${itemList.OverviewFileLabel.getData()!} 
730											</a> 
731										</li> 
732									</#if> 
733								</#list> 
734							</ul> 
735						</#if> 
736					</div> 
737				</div> 
738			</div> 
739		</#if> 
740	<#else> 
741		<#macro downloadIcon> 
742			<svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18"> 
743				<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"/> 
744			</svg> 
745		</#macro> 
746 
747		<#macro displayDownloadLinks fileUrlElms fileVirtualHost> 
748			<div class="section-content--action-items"> 
749				<#list fileUrlElms as cur_file> 
750					<#if cur_file.getData()?? && cur_file.getData() != ""> 
751						<#assign defLabel = languageUtil.get(locale, "download-brochure")> 
752						<div class="section-content--action-items--download"> 
753							<#assign file_info = leonardo.findFileEntryInfo(cur_file.getData()) > 
754 
755							<a class="section-content--action-items--download--link" 
756							   target="_blank" 
757							   href="${fileVirtualHost}${file_info.downloadUrl}" 
758							   title='${(file_info.title)!cur_file.OverviewFileLabel.getData()!defLabel}'> 
759								<@downloadIcon /> 
760								<span class="section-content--action-items--download--link--filename"> 
761								   ${(cur_file.OverviewFileLabel.getData())!(file_info.title)!defLabel} 
762								  </span> 
763							</a> 
764						</div> 
765					</#if> 
766				</#list> 
767			</div> 
768		</#macro> 
769 
770		<#function getProductImageUUID plid=-1> 
771			<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
772			<#assign assetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryPropertyLocalService")> 
773			<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
774			<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")> 
775 
776			<#assign groupExpandoBridge = layout.getGroup().getExpandoBridge() /> 
777			<#assign products_vocabulary_id = (groupExpandoBridge.hasAttribute("products-vocabulary-id")?then(getterUtil.getLong(groupExpandoBridge.getAttribute("products-vocabulary-id", false)),0)) /> 
778 
779			<#if (plid > 0)> 
780				<#assign fromLayout = layoutLocalService.fetchLayout(plid)> 
781				<#if fromLayout??> 
782					<#assign categories = assetCategoryLocalService.getCategories("com.liferay.portal.kernel.model.Layout", fromLayout.getPlid()) /> 
783					<#list categories as category> 
784						<#assign properties = assetCategoryPropertyLocalService.getCategoryProperties(category.getCategoryId())> 
785						<#list properties as property> 
786							<#if (products_vocabulary_id == category.getVocabularyId()) && (property.key == "uuid-banner-image") && (property.value)?has_content> 
787								<#return property.getValue() /> 
788							</#if> 
789						</#list> 
790					</#list> 
791					<#return getProductImageUUID(fromLayout.getParentPlid())/> 
792				</#if> 
793			<#elseif (plid < 0)> 
794				<#assign from = paramUtil.getString(themeDisplay.getRequest(), "f", "null")> 
795				<#assign fromLayout = layout> 
796				<#if validator.isNotNull(from) && (from != "/search")> 
797					<#assign fromLayout = layoutLocalService.fetchLayoutByFriendlyURL(groupId, false, from)!> 
798					<#if validator.isNotNull(fromLayout)> 
799						<#assign uuid_banner_image = getProductImageUUID(fromLayout.getPlid()) /> 
800					</#if> 
801				</#if> 
802				<#if !((uuid_banner_image)?has_content)> 
803					<#assign resourcePrimKey = journalArticleResourceLocalService.getArticleResourcePrimKey(groupId, .vars['reserved-article-id'].data)> 
804					<#assign categories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", resourcePrimKey) /> 
805					<#list categories as category> 
806						<#assign properties = assetCategoryPropertyLocalService.getCategoryProperties(category.getCategoryId())> 
807						<#list properties as property> 
808							<#if (products_vocabulary_id == category.getVocabularyId()) && (property.key == "uuid-banner-image") && (property.value)?has_content> 
809								<#return property.getValue() /> 
810							</#if> 
811						</#list> 
812					</#list> 
813				</#if> 
814 
815				<#if uuid_banner_image??> 
816					<#return uuid_banner_image> 
817				</#if> 
818			</#if> 
819			<#return ""> 
820		</#function> 
821 
822		<#function getImageURL uuid> 
823			<#if (uuid?has_content)> 
824				<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
825				<#assign banner_image = dlFileEntryLocalService.fetchDLFileEntryByUuidAndGroupId(uuid, groupId)! /> 
826				<#if (banner_image?has_content)> 
827					<#assign t = banner_image.getFileVersion().getModifiedDate()! /> 
828					<#assign url = "/documents/" + banner_image.getRepositoryId() 
829					+ "/" + banner_image.getFolderId() 
830					+ "/" + httpUtil.encodePath(banner_image.getFileName()) 
831					+ "/" + banner_image.getUuid() + "?t=" + t?long> 
832					<#assign dataImage = {"fileEntryId": banner_image.getFileEntryId(), "fileName": banner_image.getFileName(), "ts": t?long}> 
833					<#assign scalingDetails = { 
834					"desktop": {"alternateImage": {}, "key": "w_1440"}, 
835					"tl": {"alternateImage": {}, "key": "h_460"}, 
836					"tp": {"alternateImage": {}, "key": "h_560"}, 
837					"mobile": {"alternateImage": {}, "key": "h_400"} 
838					}> 
839					<#return leonardo.adaptImage(dataImage, scalingDetails)> 
840				</#if> 
841			</#if> 
842			<#return {}> 
843		</#function> 
844		<#assign uuid = getProductImageUUID()> 
845		<#assign bannerImageData = getImageURL(uuid)> 
846		<!-- default number of visible technical data boxes  --> 
847		<#assign maxTechnicalBoxes = 12> 
848 
849 
850 
851 
852 
853		<#assign sectionOFound = false> 
854		<#assign sectionOHtmlFound = false> 
855		<#assign sectionFreeArea1 = false> 
856		<#assign sectionFreeArea2 = false> 
857		<#assign sectionTDFound = false> 
858 
859		<!--FREE AREA 1 --> 
860		<#if SeparatorMainFeatures?? && SeparatorMainFeatures.getSiblings()?has_content> 
861			<#list SeparatorMainFeatures.getSiblings() as cur_sectionMF> 
862				<#if (cur_sectionMF.MFSectionTitle.getData())?has_content || 
863				(cur_sectionMF.MFText.getData())?has_content || 
864				(cur_sectionMF.FreeWebContent.getData())?has_content> 
865					<#assign sectionFreeArea1 = true> 
866					<#break> 
867				</#if> 
868			</#list> 
869		</#if> 
870		<!--FREE AREA 2 --> 
871		<#if SeparatorFreeArea2?? && SeparatorFreeArea2.getSiblings()?has_content> 
872			<#list SeparatorFreeArea2.getSiblings() as cur_sectionFA2> 
873				<#if (cur_sectionFA2.Fa2Text.getData())?has_content || 
874				(cur_sectionFA2.Fa2SectionTitle.getData())?has_content || 
875				(cur_sectionFA2.Fa2WebContent.getData())?has_content> 
876					<#assign sectionFreeArea2 = true> 
877					<#break> 
878				</#if> 
879			</#list> 
880		</#if> 
881		<#if (SeparatorTechnicalData.TDSectionTitle.getSiblings())?has_content> 
882			<#list SeparatorTechnicalData.TDSectionTitle.getSiblings() as cur_sectionTD> 
883				<#if cur_sectionTD.getData() != ""> 
884					<#assign sectionTDFound = true> 
885					<#break> 
886				</#if> 
887			</#list> 
888		</#if> 
889		<#if (SeparatorOverview.OverviewText.getData())?has_content || 
890		(SeparatorOverview.OverviewTitle.getData())?has_content> 
891			<#assign sectionOFound = true> 
892		</#if> 
893		<#if (SeparatorOverview.ContentHtml.getData())?has_content > 
894			<#assign sectionOHtmlFound = true> 
895		</#if> 
896		<#if (SeparatorOverview.OverviewFileUrl)?has_content> 
897			<#assign overviewFileUrlElms = SeparatorOverview.OverviewFileUrl.getSiblings()> 
898		</#if> 
899 
900		<div class="product-wrapper product-base"> 
901			<!--Start Module: Hero--> 
902			<div class="section-container section-container--fluid"> 
903				<style> 
904					<#if bannerImageData?has_content> 
905					.hero-banner-half-image-bck{background-image: url(${bannerImageData.desktop!});} 
906					@media all and (min-width: 1024px) and (max-width: 1279px) { 
907						.hero-banner-half-image-bck{background-image: url(${bannerImageData.tablet_landscape!});} 
908
909					@media all and (min-width: 768px) and (max-width: 1023px) { 
910						.hero-banner-half-image-bck{background-image: url(${bannerImageData.tablet_portrait!});} 
911
912					@media all and (max-width: 767px) { 
913						.hero-banner-half-image-bck{background-image: url(${bannerImageData.mobile!});} 
914
915					<#else> 
916					.hero-banner-half-image-bck{background-color: #8698a2;} 
917					</#if> 
918				</style> 
919 
920				<div class="hero"> 
921					<!--Start Module: Hero Slide--> 
922					<div class="hero-slide hero-slide--internal hero-banner-half-image-bck"> 
923						<div class="hero-slide--content"> 
924							<h1 class="hero-slide--content--title">${(SeparatorOverview.ProductName.data)!"Product"}</h1> 
925						</div> 
926						<noscript> 
927							<img src="${bannerImageData.desktop!}" alt='${bannerImageData.alt_desktop!}'> 
928							<img src="${bannerImageData.tablet_landscape!}" alt='${bannerImageData.alt_tablet_landscape!}'> 
929							<img src="${bannerImageData.tablet_portrait!}" alt='${bannerImageData.alt_tablet_portrait!}'> 
930							<img src="${bannerImageData.mobile!}" alt='${bannerImageData.alt_mobile!}'> 
931						</noscript> 
932					</div> 
933					<!--End Module: Hero Slide--> 
934 
935					<!--Start Mixin: Icon Share Primary--> 
936					<@leonardo.shareLinkHero/> 
937					<!--End Mixin: Icon Share Primary--> 
938				</div> 
939			</div> 
940 
941			<!--Start Module: Section Navigator Anchor bar product base--> 
942			<div class="section-container section-container--fluid"> 
943				<div class="section-navigator"> 
944					<div class="section-navigator--list"> 
945						<div class="section-container swiper-container--sectionNavigator section-container--fixed"> 
946							<div class="section-navigator--list--item-wrap swiper-wrapper"> 
947								<!--Overview--> 
948								<#assign defaultValue=languageUtil.get(locale, "section-overview-default")> 
949								<a class="section-navigator--list--item swiper-slide active" href="javascript:void(0);" 
950								   title="${(SeparatorOverview.OverviewTitle.getData())!defaultValue}" 
951								   data-target=".section-hero-card"> 
952									${(SeparatorOverview.OverviewTitle.getData())!defaultValue}</a> 
953								<!--Free Area 1 --> 
954								<#if sectionFreeArea1  && SeparatorMainFeatures??> 
955									<#list SeparatorMainFeatures.getSiblings() as cur_section> 
956										<#if (cur_section.Fa1AnchorBarText.getData())?has_content > 
957											<a class="section-navigator--list--item swiper-slide" href="javascript:void(0);" 
958											   title='${(cur_section.Fa1AnchorBarText.getData())}' 
959											   data-target=".section-content--features-${cur_section?index}"> 
960												${(cur_section.Fa1AnchorBarText.getData())!}</a> 
961										</#if> 
962									</#list> 
963								</#if> 
964								<!--Technical data--> 
965								<#if sectionTDFound = true > 
966									<#assign defaultValue=languageUtil.get(locale, "section-techdata-default")> 
967									<a class="section-navigator--list--item swiper-slide" href="javascript:void(0)" 
968									   title='${(SeparatorTechnicalData.TDSectionTitle.getData())!defaultValue}' 
969									   data-target=".products-technical-data"> 
970										${(SeparatorTechnicalData.TDSectionTitle.getData())!defaultValue}</a> 
971								</#if> 
972								<!--Free Area 2 --> 
973								<#if sectionFreeArea2  && SeparatorFreeArea2??> 
974									<#list SeparatorFreeArea2.getSiblings() as cur_section> 
975										<#if (cur_section.Fa2AnchorBarText.getData())?has_content > 
976											<a class="section-navigator--list--item swiper-slide" href="javascript:void(0)" 
977											   title='${(cur_section.Fa2AnchorBarText.getData())!}' 
978											   data-target=".section-content--features-fa2-${cur_section?index}"> 
979												${(cur_section.Fa2AnchorBarText.getData())!}</a> 
980										</#if> 
981									</#list> 
982								</#if> 
983								<!--Contacts--> 
984								<a class="section-navigator--list--item anchorbar_products_contacts swiper-slide"  href="javascript:void(0)" 
985								   title='${languageUtil.get(locale, "anchor-contacts")}' 
986								   data-target=".section-contacts"> 
987									${languageUtil.get(locale, "anchor-contacts")}</a> 
988								<!--Related Products--> 
989								<a class="section-navigator--list--item anchorbar_products_related swiper-slide" href="javascript:void(0)" 
990								   title='${languageUtil.get(locale, "related-products")}' 
991								   data-target=".related-products"> 
992									${languageUtil.get(locale, "related-products")}</a> 
993							</div> 
994						</div> 
995						<div class="swiper-button-prev section-navigator--scroll--left"><span class="section-navigator--scroll--left--icon"></span></div> 
996						<div class="swiper-button-next section-navigator--scroll--right"><span class="section-navigator--scroll--right--icon"></span></div> 
997					</div> 
998					<div class="section-navigator--spacer"></div> 
999				</div> 
1000			</div> 
1001 
1002			<!--End Module: Section Navigator--> 
1003			<#if sectionOFound = true || sectionOHtmlFound = true> 
1004 
1005				<#if (SeparatorOverview.ProductTitle.getData())?has_content> 
1006					<#assign isMiddle = leonardo.isRadioButtonValue(SeparatorOverview.ProductTitle.ProductTitlePosition, "middle")> 
1007					<#if (isMiddle=="true")> 
1008						<#assign forcedStyle = rndNamespace + "forced-style-200"> 
1009					<#else> 
1010						<#assign forcedStyle = rndNamespace + "forced-style-0"> 
1011					</#if> 
1012					<style> 
1013						/*Desktop and tablet landscape viewport*/ 
1014						@media all and (min-width: 1024px) { 
1015							.section-hero-card .section-grid .section-hero-card--content .section-hero-card--title.${rndNamespace}forced-style-200 { 
1016								margin-left: -200px !important; 
1017
1018							.section-hero-card .section-grid .section-hero-card--content .section-hero-card--title.${rndNamespace}forced-style-0 { 
1019								margin-left: 0 !important; 
1020
1021
1022					</style> 
1023				</#if> 
1024 
1025				<!--Start Module: Section Hero Cards--> 
1026				<div class="section-container section-container--fixed"> 
1027					<div class="product-page-hero-card section-hero-card section-hero-card--smallerVersion section-hero-card--wider-page-padding"> 
1028						<div class="section-grid layout--tp-col layout--m-col"> 
1029							<div class="grid grid--tp100p grid--m100p grid--d33p grid--tl33p hidden-on-dark-theme"> 
1030								<#assign scalingDetails = { 
1031								"desktop": {"alternateImage": {}, "key": "h_480"}, 
1032								"tl": {"alternateImage": (SeparatorOverview.OverviewImage.ImageTl)!, "key": "h_480"}, 
1033								"tp": {"alternateImage": (SeparatorOverview.OverviewImage.ImageTp)!, "key": "w_768"}, 
1034								"mobile": {"alternateImage": (SeparatorOverview.OverviewImage.ImageM)!, "key": "h_300"} 
1035								}> 
1036								<#assign overviewImg = leonardo.adaptImage((SeparatorOverview.OverviewImage)!, scalingDetails )> 
1037								<div class="mr1 section-hero-card--graphic is-light" 
1038									 data-img-url-d="${(overviewImg.desktop)!}" 
1039									 data-img-url-tl="${(overviewImg.tablet_landscape)!}" 
1040									 data-img-url-tp="${(overviewImg.tablet_portrait)!}" 
1041									 data-img-url-m="${(overviewImg.mobile!)}"> 
1042 
1043									<noscript> 
1044										<img src="${overviewImg.desktop!}" alt='${overviewImg.alt_desktop!}'> 
1045										<img src="${overviewImg.tablet_landscape!}" alt='${overviewImg.alt_tablet_landscape!}'> 
1046										<img src="${overviewImg.tablet_portrait!}" alt='${overviewImg.alt_tablet_portrait!}'> 
1047										<img src="${overviewImg.mobile!}" alt='${overviewImg.alt_mobile!}'> 
1048									</noscript> 
1049								</div> 
1050							</div> 
1051							<div class="grid grid--tp100p grid--m100p grid--d67p grid--tl67p"> 
1052								<div class="section-hero-card--content"> 
1053									<#if (SeparatorOverview.ProductTitle.getData())?has_content> 
1054										<h2 class="section-hero-card--title section-hero-card--title-alwayson ${forcedStyle!}">${(SeparatorOverview.ProductTitle.getData())}</h2> 
1055									</#if> 
1056									<#if (SeparatorOverview.OverviewText.getData())?has_content> 
1057										<h3 class="section-hero-card--description">${SeparatorOverview.OverviewText.getData()}</h3> 
1058									</#if> 
1059									<!--download section--> 
1060									<#if sectionOHtmlFound = false && overviewFileUrlElms??> 
1061										<@displayDownloadLinks fileUrlElms=overviewFileUrlElms fileVirtualHost=docsDownloadURL/> 
1062									</#if> 
1063								</div> 
1064							</div> 
1065						</div> 
1066					</div> 
1067				</div> 
1068				<!--End Module: Section Hero Cards--> 
1069 
1070				<!--Start Module: Section Content--> 
1071				<#if SeparatorOverview.ContentHtml.getData() != ""> 
1072					<div class="section-container section-container--fixed generic-content-body"> 
1073						<div class="section-content"> 
1074							<div class="section-content--content"> 
1075								${SeparatorOverview.ContentHtml.getData()} 
1076							</div> 
1077							<#if sectionOHtmlFound = true && overviewFileUrlElms??> 
1078								<@displayDownloadLinks fileUrlElms=overviewFileUrlElms  fileVirtualHost=docsDownloadURL/> 
1079							</#if> 
1080						</div> 
1081					</div> 
1082				</#if> 
1083				<!--End Module: Section Content--> 
1084			</#if> 
1085 
1086 
1087			<!--START MODULE: FREE AREA 1--> 
1088			<#if sectionFreeArea1 > 
1089				<#list SeparatorMainFeatures.getSiblings() as cur_sectionMF> 
1090					<!--Start Module: Section Content--> 
1091					<#assign showTitleOrText = false> 
1092					<#if (cur_sectionMF.MFSectionTitle.getData())?has_content || 
1093					(cur_sectionMF.MFText.getData())?has_content> 
1094						<#assign showTitleOrText = true> 
1095					</#if> 
1096					<#if showTitleOrText> 
1097						<div class="section-container section-container--fixed generic-content-body"> 
1098							<div class="section-content"> 
1099								<div class="section-content--content section-content--features-${cur_sectionMF?index}"> 
1100									<!--title--> 
1101									<#if cur_sectionMF.MFSectionTitle.getData() != ""> 
1102										<div class="4section-content--features--heading section-heading section-heading--center"> 
1103											${cur_sectionMF.MFSectionTitle.getData()} 
1104										</div> 
1105									</#if> 
1106									<!--text--> 
1107									<#if cur_sectionMF.MFText.getData() != ""> 
1108										<#assign htmlFormatted = leonardo.expandElementsInPage(cur_sectionMF.MFText.getData())> 
1109										<div class="check-html-content">${htmlFormatted}</div> 
1110									</#if> 
1111								</div> 
1112							</div> 
1113						</div> 
1114					</#if> 
1115					<#if (cur_sectionMF.FreeWebContent.getData())?has_content> 
1116						<!--Start Module: Free Web Content --> 
1117						<div ${(showTitleOrText)?then('','class="section-content--features-'+ cur_sectionMF?index + '"')}> 
1118							<#assign data = cur_sectionMF.FreeWebContent.getData()/> 
1119							<#assign json = jsonFactoryUtil.createJSONObject(data) /> 
1120							<#assign classPK = json.getLong("classPK") /> 
1121							<#if (classPK >0) > 
1122								<#assign ja = journalArticleLocalService.getLatestArticle(classPK) /> 
1123								<#assign jad = journalArticleLocalService.getArticleDisplay(ja, ja.getTemplateId(), "", languageId, 1, null, themeDisplay) /> 
1124								${jad.getContent()} 
1125							</#if> 
1126						</div> 
1127						<!--End Module: Free Web Content--> 
1128					</#if> 
1129					<!--End Module: Section Content--> 
1130				</#list> 
1131			</#if> 
1132			<!--END MODULE: FREE AREA 1--> 
1133 
1134			<!--START MODULE: PRODUCTS TECHNICAL DATA--> 
1135			<#if sectionTDFound  > 
1136				<div id = "products-technical-data" class="container"> 
1137					<div class="component-with-title"> 
1138						<#if SeparatorTechnicalData.TDSectionTitle.getData() != ""> 
1139							<h1 class="title-extralarge"> 
1140								${SeparatorTechnicalData.TDSectionTitle.getData()} 
1141							</h1> 
1142						</#if> 
1143 
1144						<div class="grid-technical"> 
1145							<#if SeparatorTechnicalData.TDSectionTitle.getSiblings()?has_content> 
1146								<#list SeparatorTechnicalData.TDSectionTitle.getSiblings() as cur_TDSectionTitle> 
1147									<div class="data-container rounded-20"> 
1148										<#if cur_TDSectionTitle.getData() != ""> 
1149											<h2 class="body-medium text-center mb-0">${cur_TDSectionTitle.getData()}</h2> 
1150										</#if> 
1151										<#if cur_TDSectionTitle.TDText.getData() != ""> 
1152											<div class="body-medium text-center mb-0"> 
1153												${cur_TDSectionTitle.TDText.getData()} 
1154											</div> 
1155										</#if> 
1156									</div> 
1157 
1158								</#list> 
1159							</#if> 
1160							<#if SeparatorTechnicalData.TDButtonLabel.getData() != ""> 
1161 
1162							</#if> 
1163						</div> 
1164					</div> 
1165				</div> 
1166			</#if> 
1167			<!--END MODULE: PRODUCTS TECHNICAL DATA--> 
1168 
1169			<!-- TECHNICAL DATA --> 
1170			<#if sectionTDFound = true > 
1171				<!--Start Module: Products Technical Data--> 
1172				<div class="section-container section-container--fixed"> 
1173					<div class="products-technical-data" data-expandable="true" data-lazy-load="12"> 
1174						<#if SeparatorTechnicalData.TDSectionTitle.getData() != ""> 
1175							<h2 class="products-technical-data--heading section-heading section-heading--center"> 
1176								${SeparatorTechnicalData.TDSectionTitle.getData()} 
1177							</h2> 
1178						</#if> 
1179						<div class="products-technical-data--specifications"> 
1180							<#if SeparatorTechnicalData.TDSectionTitle.getSiblings()?has_content> 
1181								<#list SeparatorTechnicalData.TDSectionTitle.getSiblings() as cur_TDSectionTitle> 
1182									<div class='products-technical-data--spec invisible'> 
1183										<#if cur_TDSectionTitle.getData() != ""> 
1184											<div class="products-technical-data--spec--label">${cur_TDSectionTitle.getData()}</div> 
1185										</#if> 
1186										<#if cur_TDSectionTitle.TDText.getData() != ""> 
1187											<div class="products-technical-data--spec--value"> 
1188												${cur_TDSectionTitle.TDText.getData()} 
1189											</div> 
1190										</#if> 
1191									</div> 
1192								</#list> 
1193							</#if> 
1194						</div> 
1195						<#if SeparatorTechnicalData.TDButtonLabel.getData() != ""> 
1196							<div class="products-technical-data--action-items"> 
1197								<div class="" style="text-align: center;"> 
1198									<button class="btn btn-leo see-more" type="button">${SeparatorTechnicalData.TDButtonLabel.getData()}</button> 
1199								</div> 
1200							</div> 
1201						</#if> 
1202					</div> 
1203				</div> 
1204				<!--End Module: Products Technical Data--> 
1205			</#if> 
1206 
1207			<!--START MODULE: FREE AREA 2 --> 
1208			<#if sectionFreeArea2 > 
1209				<#list SeparatorFreeArea2.getSiblings() as cur_sectionFA2> 
1210					<!--Start Module: Section Content--> 
1211					<#assign showTitleOrText = false> 
1212					<#if (cur_sectionFA2.Fa2SectionTitle.getData())?has_content || 
1213					(cur_sectionFA2.Fa2Text.getData())?has_content> 
1214						<#assign showTitleOrText = true> 
1215					</#if> 
1216					<#if showTitleOrText> 
1217						<div class="section-container section-container--fixed generic-content-body"> 
1218							<div class="section-content"> 
1219								<div class="section-content--content section-content--features-fa2-${cur_sectionFA2?index}"> 
1220									<!--title--> 
1221									<#if cur_sectionFA2.Fa2SectionTitle.getData() != ""> 
1222										<div class="section-content--features--heading section-heading section-heading--center"> 
1223											${cur_sectionFA2.Fa2SectionTitle.getData()} 
1224										</div> 
1225									</#if> 
1226									<!--text--> 
1227									<#if cur_sectionFA2.Fa2Text.getData() != ""> 
1228										<#assign htmlFormatted = leonardo.expandElementsInPage(cur_sectionFA2.Fa2Text.getData())> 
1229										<div class="check-html-content">${htmlFormatted}</div> 
1230									</#if> 
1231								</div> 
1232							</div> 
1233						</div> 
1234					</#if> 
1235					<#if (cur_sectionFA2.Fa2WebContent.getData())?has_content> 
1236						<!--Start Module: Free Web Content --> 
1237						<div ${(showTitleOrText)?then('','class="section-content--features-fa2-'+ cur_sectionFA2?index + '"')}> 
1238							<#assign data = cur_sectionFA2.Fa2WebContent.getData()/> 
1239							<#assign json = jsonFactoryUtil.createJSONObject(data) /> 
1240							<#assign classPK = json.getLong("classPK") /> 
1241							<#if (classPK >0) > 
1242								<#assign ja = journalArticleLocalService.getLatestArticle(classPK) /> 
1243								<#assign jad = journalArticleLocalService.getArticleDisplay(ja, ja.getTemplateId(), "", languageId, 1, null, themeDisplay) /> 
1244								${jad.getContent()} 
1245							</#if> 
1246						</div> 
1247						<!--End Module: Free Web Content--> 
1248					</#if> 
1249					<!--End Module: Section Content--> 
1250				</#list> 
1251			</#if> 
1252			<!--END MODULE: FREE AREA 2 --> 
1253		</div> 
1254 
1255		<!-- Meta description --> 
1256		<#if (layout.getDescription(themeDisplay.locale))?has_content> 
1257			<#assign metaDesc = layout.getDescription(themeDisplay.locale)> 
1258		<#elseif (.vars['reserved-article-description'].data)?has_content> 
1259			<#assign metaDesc = .vars['reserved-article-description'].data> 
1260		</#if> 
1261		<#if metaDesc?has_content> 
1262			${layout.setDescription(metaDesc)} 
1263		</#if> 
1264 
1265		<!-- Social Sharing --> 
1266		<#if (overviewImg.desktop)?has_content> 
1267			<#assign imageFileName = overviewImg.desktop!"" > 
1268		<#elseif (bannerImageData.desktop)?has_content> 
1269			<#assign imageFileName = bannerImageData.desktop!"" > 
1270		<#else> 
1271			<#assign imageFileName = "" > 
1272		</#if> 
1273		<#if (SeparatorOverview)?has_content> 
1274			<#assign shareTitle = (SeparatorOverview.ProductName.getData())!""> 
1275			<#assign shareDescription = (SeparatorOverview.ProductTitle.getData())!metaDesc!(SeparatorOverview.ProductName.getData())!""> 
1276 
1277			<#assign ogType='product'> 
1278			<@leonardo.socialShareMetaAndLinks shareTitle=shareTitle shareDescription=shareDescription imageFileName=imageFileName ogType=ogType /> 
1279 
1280		</#if> 
1281	</#if> 
1282 
1283</#if> 
Non ci sono risultati.
Non ci sono risultati.
Search overlay background

Mobile navigation menu