Si è verificato un errore nell'elaborarazione del modello.
Java method "com.sun.proxy.$Proxy83.getLayout(long, boolean, long)" threw an exception when invoked on com.sun.proxy.$Proxy83 object "com.liferay.layout.internal.service.LayoutLocalServiceWrapper@2fb718d"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: paginaPadre = LayoutLocalService.getL... [in template "20095#20121#35046" at line 22, column 5] ----
1<#assign
2 FriendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")
3 ClassNameService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameService")
4 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
5 LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")
6 journalArticleId = .vars['reserved-article-id'].data
7 journalArticleResourceLocalServiceUtil = staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]
8 assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]
9 articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)
10 categoryList = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK)
11 AssetVocabularyLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil"]
12 currentLayout = themeDisplay.getLayout()
13 current_page = currentLayout.getName()
14 current_page_url = currentLayout.friendlyURL
15/>
16
17<#setting locale = themeDisplay.getLocale() />
18<#setting url_escaping_charset = 'UTF-8'>
19
20<#-- gestione dei breadcrumbs -->
21<#assign
22 paginaPadre = LayoutLocalService.getLayout(groupId, PaginaPadre.getData()?eval.privateLayout, PaginaPadre.getData()?eval.layoutId?number)
23 ancestors = paginaPadre.getAncestors()
24 sorted_ancestors = []
25/>
26
27<#list ancestors as parente>
28 <#assign
29 sorted_ancestors +=
30 [{
31 "name": parente.getName(themeDisplay.getLanguageId()),
32 "ancestors": parente.getAncestors()?size,
33 "data": parente
34 }]
35 />
36</#list>
37
38<div class="container finmatica-breadcrumb-container mb-4">
39 <div class="row justify-content-center">
40 <div class="col-12 col-lg-10">
41 <div class="cmp-breadcrumbs" role="navigation">
42 <nav class="breadcrumb-container" aria-label="breadcrumb">
43 <ol class="breadcrumb p-0" data-element="breadcrumb">
44 <li class="breadcrumb-item"><a
45 href="${themeDisplay.getThemeSetting('Home URL')}">
46 <span class="breadcrumb-text-truncate">Home</span>
47 </a>
48 <span class="separator">/</span>
49 </li>
50 <#list sorted_ancestors?sort_by("ancestors") as ancestor>
51 <li class="breadcrumb-item"><a
52 href="/portal${ancestor.data.getFriendlyURL()}">
53 <span class="breadcrumb-text-truncate">
54 ${ancestor.name}
55 </span>
56 </a>
57 <span class="separator">/</span>
58 </li>
59 </#list>
60 <li class="breadcrumb-item"><a
61 href="/portal${paginaPadre.getFriendlyURL()}">
62 <span class="breadcrumb-text-truncate">
63 ${paginaPadre.getName(themeDisplay.getLanguageId())}
64 </span>
65 </a>
66 <span class="separator">/</span>
67 </li>
68 <li class="breadcrumb-item">${Titolo.getData()}</li>
69 </ol>
70 </nav>
71 </div>
72 </div>
73 </div>
74</div>
75
76<#assign
77 has_document = Documenti.getData()?has_content
78 servizio_disponibile = getterUtil.getBoolean(ServizioDisponibile.getData())
79 categorieServizio = []
80 argomenti = []
81 lifeEvents = []
82 businessEvents = []
83 splitted = []
84/>
85<#list categoryList as categoryEntry>
86
87 <#assign
88 vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId())
89 className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory")
90 friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), categoryEntry.categoryId)
91 friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId)
92 cat_name = categoryEntry.name
93 cat_localized_name = categoryEntry.getTitle(themeDisplay.getLocale(), true),
94 cat_url = friendlyUrlList[0].urlTitle
95 />
96 <#if vocabulary.getName()?lower_case == "tassonomia argomento">
97 <#assign
98 argomenti +=
99 [{
100 "name": cat_localized_name,
101 "url": "/portal/web/guest/${cat_url}"
102 }]
103 />
104 <#elseif vocabulary.name == "tassonomia categoria servizi">
105 <#assign
106 categorieServizio +=
107 [{
108 "name": cat_localized_name,
109 "url": "/portal/web/guest/${cat_url}"
110 }]
111 />
112 <#elseif
113 vocabulary.name == "life events"
114 || vocabulary.description == "eventi della vita delle persone"
115 />
116 <#assign lifeEvents +=[cat_localized_name] />
117 <#elseif
118 vocabulary.name == "tassonomia business events"
119 || vocabulary.description == "eventi della vita delle imprese"
120 />
121 <#assign businessEvents +=[cat_localized_name] />
122 </#if>
123</#list>
124
125<#assign scadenze = [] />
126<#list TempiEScadenze.getSiblings() as cur_Sezione_TempiEScadenze>
127
128 <#--
129 anche se vuoti i campi venivano conteggiati e inseriti comunque nell'array,
130 venendo quindi renderizzati in maschera senza contenuto
131 -->
132
133 <#assign
134 data = cur_Sezione_TempiEScadenze.DataScadenza.getData()
135 etichetta = cur_Sezione_TempiEScadenze.DescrizioneScadenza.getData()
136 />
137
138 <#if
139 data?? && data?has_content && data != ""
140 && etichetta?? && etichetta?has_content && etichetta != ""
141 >
142 <#assign
143 scadenze +=
144 [{
145 "data": cur_Sezione_TempiEScadenze.DataScadenza.getData(),
146 "etichetta": cur_Sezione_TempiEScadenze.DescrizioneScadenza.getData()
147 }]
148 />
149 </#if>
150</#list>
151
152<#assign
153 has_online = false
154 has_required_login = false />
155<#if (ServizioDigitale.getData())??>
156 <#assign ServizioDigitaleArray = ServizioDigitale.getData()?replace("[", "" )?replace("]", "" )?replace("\"", "" )?split(",")>
157 <#list ServizioDigitaleArray as servizioDigitaleEntry>
158 <#if servizioDigitaleEntry == "DisponibileOnline">
159 <#assign has_online = true />
160 <#elseif servizioDigitaleEntry == "AutenticazioneObbligatoria">
161 <#assign has_required_login = true />
162 </#if>
163 </#list>
164</#if>
165
166<#assign
167 UO_Data = jsonFactoryUtil.createJSONObject(UnitaOrganizzativaResponsabile.getData())
168 has_UO = UnitaOrganizzativaResponsabile.getData()?? && UnitaOrganizzativaResponsabile.getData()?has_content
169/>
170
171<#if UnitaOrganizzativaResponsabile.getData()?? && UnitaOrganizzativaResponsabile.getData()?has_content>
172 <#assign relatedArticles = JournalArticleLocalService.getArticlesByResourcePrimKey(UO_Data.classPK?number) />
173 <#if relatedArticles?? && relatedArticles?size gt 0>
174 <#assign
175 relatedArticle = relatedArticles[0]
176 url_UO = relatedArticle.getUrlTitle()
177 document = relatedArticle.getDocumentByLocale(themeDisplay.getLocale())
178 rootElement = document.getRootElement()
179 nome_UO = ""
180 descrizione_UO = ""
181 immagine_UO = ""
182 has_immagine_UO = false
183 contatti_UO = []
184 />
185
186 <#if rootElement.elements()?has_content>
187 <#list rootElement.elements() as dynamicElement>
188 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
189 <#assign nome_UO = dynamicElement.element("dynamic-content").getText() />
190 <#elseif dynamicElement.attributeValue("field-reference") == "DescrizioneBreve">
191 <#assign descrizione_UO = dynamicElement.element("dynamic-content").getText() />
192 <#elseif dynamicElement.attributeValue("field-reference") == "Immagine">
193 <#assign immagine_UO = dynamicElement.element("dynamic-content").getText() />
194 <#if immagine_UO?has_content>
195 <#assign immagine_UO = jsonFactoryUtil.createJSONObject(immagine_UO) />
196 <#if immagine_UO?has_content>
197 <#assign
198 immagine_UO = immagine_UO?eval
199 has_immagine_UO = true
200 />
201 </#if>
202 </#if>
203 <#elseif dynamicElement.attributeValue("field-reference") == "PuntiDiContatto">
204 <#assign contatti_UO_data = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData()) />
205 <#if contatti_UO_data.classPK??>
206 <#assign
207 relatedContatti = JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_UO_data.classPK?number)
208 tipo_contatto = ""
209 valore_contatto = ""
210 categorie_contatti = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",contatti_UO_data.classPK?number)
211 />
212 <#if relatedContatti?? && relatedContatti?size gt 0>
213 <#assign
214 relatedContatto = relatedContatti[0]
215 document = relatedContatto.getDocumentByLocale(themeDisplay.getLocale())
216 rootElement = document.getRootElement()
217 />
218 </#if>
219 </#if>
220
221 <#if contatti_UO_data?eval?has_content>
222 <#assign relatedArticles = JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_UO_data.classPK?number) />
223 <#if relatedArticles?? && relatedArticles?size gt 0>
224 <#assign
225 relatedArticle = relatedArticles[0]
226 document = relatedArticle.getDocumentByLocale(themeDisplay.getLocale())
227 rootElement = document.getRootElement()
228 />
229 <#list rootElement.elements()>
230 <#items as dynamicElement>
231 <#assign
232 tipo_contatto = (dynamicElement.attributeValue("field-reference") == "URL" )?string("Sito Web", dynamicElement.attributeValue("field-reference"))
233 valore_contatto = dynamicElement.element("dynamic-content").getText()
234 url_type = ""
235 />
236 <#if
237 tipo_contatto == "Email"
238 || tipo_contatto == "PEC"
239 >
240 <#assign url_type = "mailto:" />
241 <#elseif
242 tipo_contatto == "Telefono"
243 || tipo_contatto == "Whatsapp"
244 || tipo_contatto == "Telegram"
245 >
246 <#assign url_type = "tel:" />
247 </#if>
248
249 <#if valore_contatto?has_content>
250 <#assign
251 contatti_UO +=
252 [{
253 "tipo" : tipo_contatto,
254 "url" : "${url_type}${valore_contatto}",
255 "testo" : valore_contatto
256 }]
257 />
258 </#if>
259 </#items>
260 </#list>
261 </#if>
262 </#if>
263 </#if>
264 </#list>
265 </#if>
266 </#if>
267</#if>
268
269<#assign documenti = [] />
270<#if Documenti.getSiblings()?has_content>
271 <#list Documenti.getSiblings() as cur_Documenti>
272 <#assign
273 documento_Data = jsonFactoryUtil.createJSONObject(cur_Documenti.Documento.getData())
274 />
275 <#if documento_Data.classPK?has_content>
276 <#assign relatedDocumentiS = JournalArticleLocalService.getArticlesByResourcePrimKey(documento_Data.classPK?number) />
277 <#if relatedDocumentiS?? && relatedDocumentiS?size gt 0>
278 <#assign
279 relatedDocumenti = relatedDocumentiS[0]
280 document = relatedDocumenti.getDocumentByLocale(themeDisplay.getLocale())
281 rootElement = document.getRootElement()
282 nome_documento = ""
283 />
284 <#list rootElement.elements() as dynamicElement>
285 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
286 <#assign
287 nome_documento =
288 cur_Documenti.EtichettaDocumento.getData()?has_content?string(
289 cur_Documenti.EtichettaDocumento.getData(),
290 dynamicElement.element("dynamic-content").getText()
291 )
292 />
293 </#if>
294 </#list>
295 <#assign
296 documenti +=
297 [{
298 "url": Documenti.Documento.getFriendlyUrl(),
299 "name": nome_documento
300 }]
301 />
302 </#if>
303 </#if>
304 </#list>
305</#if>
306
307<#-- GET CONTATTI -->
308<#assign
309 has_contatti = PuntiDiContatto.getData()?has_content
310 contatti = []
311/>
312<#if has_contatti>
313 <#list PuntiDiContatto.getSiblings() as cur_PuntiDiContatto>
314 <#assign
315 contatti_data = jsonFactoryUtil.createJSONObject(cur_PuntiDiContatto.getData())
316 nome_wallet = ""
317 contatti_wallet = []
318 relatedArticles = JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_data.classPK?number)
319 />
320 <#if relatedArticles?? && relatedArticles?size gt 0>
321 <#assign
322 relatedArticle = relatedArticles[0]
323 document = relatedArticle.getDocumentByLocale(themeDisplay.getLocale())
324 rootElement = document.getRootElement()
325 />
326 <#list rootElement.elements() as dynamicElement>
327 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
328 <#assign nome_wallet = dynamicElement.element("dynamic-content").getText() />
329 <#elseif dynamicElement.element("dynamic-content").getText()?has_content>
330 <#assign
331 tipo_contatto = (dynamicElement.attributeValue("field-reference") == "URL" )?string("Sito Web", dynamicElement.attributeValue("field-reference"))
332 contatti_wallet +=
333 [{
334 "tipo": tipo_contatto,
335 "valore": dynamicElement.element("dynamic-content").getText()
336 }]
337 />
338 </#if>
339 </#list>
340 </#if>
341 <#if contatti_wallet?size gt 0>
342 <#assign contatti +=
343 [{
344 "titolo": nome_wallet,
345 "contatti": contatti_wallet
346 }]
347 />
348 </#if>
349 </#list>
350</#if>
351
352<#-- GET SEDI SPORTELLO -->
353<#assign
354 has_sportello = getterUtil.getBoolean(DisponibileASportello.getData())
355 sedi_sportello = []
356/>
357
358<#if Sedi.getSiblings()?has_content>
359 <#list Sedi.getSiblings() as cur_Sedi>
360 <#assign sede_Data = jsonFactoryUtil.createJSONObject(cur_Sedi.getData()) />
361 <#if sede_Data.classPK??>
362 <#assign
363 relatedSediS = JournalArticleLocalService.getArticlesByResourcePrimKey(sede_Data.classPK?number)
364 relatedSedi = relatedSediS[0]
365 document = relatedSedi.getDocumentByLocale(themeDisplay.getLocale())
366 rootElement = document.getRootElement()
367 nome_sede = ""
368 immagine_sede = ""
369 descrizione_sede = ""
370 indirizzo_sede = ""
371 has_immagine_sede = false
372 />
373 <#list rootElement.elements() as dynamicElement>
374 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
375 <#assign nome_sede = dynamicElement.element("dynamic-content").getText() />
376 <#elseif dynamicElement.attributeValue("field-reference") == "Descrizione">
377 <#assign descrizione_sede = dynamicElement.element("dynamic-content").getText() />
378 <#elseif dynamicElement.attributeValue("field-reference") == "SedePrincipale">
379 <#assign sede_principale_data = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData()) />
380 <#if sede_principale_data.classPK??>
381 <#assign relatedSediPrincipali = JournalArticleLocalService.getArticlesByResourcePrimKey(sede_principale_data.classPK?number) />
382 <#if relatedSediPrincipali?? && relatedSediPrincipali?size gt 0>
383 <#assign
384 relatedSedePrincipale = relatedSediPrincipali[0]
385 document = relatedSedePrincipale.getDocumentByLocale(themeDisplay.getLocale())
386 rootElement = document.getRootElement()
387 />
388 <#list rootElement.elements() as dynamicElement>
389 <#if dynamicElement.attributeValue("field-reference") == "Indirizzo">
390 <#assign indirizzo_sede = dynamicElement.element("dynamic-content").getText() />
391 <#elseif
392 dynamicElement.attributeValue("field-reference")?lower_case == "cap"
393 && dynamicElement.element("dynamic-content").getText()??
394 >
395 <#assign indirizzo_sede += (", " + dynamicElement.element("dynamic-content").getText()) />
396 </#if>
397 </#list>
398 </#if>
399 </#if>
400 <#elseif dynamicElement.attributeValue("field-reference") == "Indirizzo">
401 <#assign indirizzo_sede = dynamicElement.element("dynamic-content").getText() />
402 <#elseif dynamicElement.attributeValue("field-reference") == "Immagine">
403 <#assign immagine_sede = dynamicElement.element("dynamic-content").getText() />
404 <#if immagine_sede?has_content>
405 <#assign immagine_sede = jsonFactoryUtil.createJSONObject(immagine_sede) />
406 <#if
407 immagine_sede?has_content
408 && immagine_sede.url?has_content
409 >
410 <#assign
411 immagine_sede = immagine_sede?eval
412 has_immagine_sede = true
413 />
414 </#if>
415 </#if>
416 </#if>
417 </#list>
418 <#assign
419 sedi_sportello +=
420 [{
421 "nome": nome_sede,
422 "url": "${cur_Sedi.getFriendlyUrl()}",
423 "immagine": immagine_sede,
424 "has_immagine", has_immagine_sede,
425 "indirizzo": indirizzo_sede,
426 "descrizione": descrizione_sede
427 }]
428 />
429 </#if>
430 </#list>
431</#if>
432
433<#assign has_condizioni_servizio = false />
434<#list CondizioniServizio.getSiblings() as condizione>
435 <#if condizione.File.getData()?has_content>
436 <#assign has_condizioni_servizio = true />
437 </#if>
438</#list>
439
440<div class="container" id="main-container">
441 <div class="row justify-content-center">
442 <div class="col-12 col-lg-10">
443 <div class="cmp-heading pb-3 pb-lg-4">
444 <div class="row">
445 <div class="col-lg-8">
446 <h1 class="title-xxxlarge" data-element="service-title">
447 ${Titolo.getData()}
448 </h1>
449 <#if Sottotitolo.getData() != "">
450 <p class="subtitle-small mb-3" data-element="service-description">
451 ${Sottotitolo.getData()}
452 </p>
453 <#elseif DescrizioneBreve.getData() != "">
454 <p class="subtitle-small mb-3" data-element="service-description">
455 ${DescrizioneBreve.getData()}
456 </p>
457 </#if>
458 <ul class="d-flex flex-wrap gap-1 my-3">
459 <li>
460 <div class="d-flex align-items-center">
461 <div class="badge ${servizio_disponibile?string('bg-success', 'bg-danger')}">
462 ${servizio_disponibile?string("${languageUtil.get(locale, 'service-is-active')}", "${languageUtil.get(locale, 'service-not-active')}")}
463 </div>
464 <#if (!servizio_disponibile)>
465 <small class="small text-muted mb-0">${MotivoIndisponibilita.getData()}</small>
466 </#if>
467 </div>
468 </li>
469 </ul>
470 <#if has_online && EtichettaPulsanteDigitale.getData()?has_content>
471 <#if has_required_login>
472 <#--<#if themeDisplay.isSignedIn()>-->
473 <button type="button" class="btn btn-primary mobile-full" onclick="redirect('/portal${URLServizio.getData()}')">
474 <#--
475 <#else>
476 <#assign escapedLandingURL=URLServizio.getData()?replace("#", "%23" ) />
477 <button type="button" class="btn btn-primary mobile-full" onclick="redirect('${themeDisplay.getThemeSetting('Login URL')}' + 'portal${escapedLandingURL}')">
478 </#if>
479 -->
480 <#else>
481 <button type="button" class="btn btn-primary mobile-full" onclick="redirect('/portal${URLServizio.getData()}')">
482 </#if>
483 <span class="">
484 ${EtichettaPulsanteDigitale.getData()}
485 </span>
486 </button>
487 </#if>
488 </div>
489
490 <div class="col-lg-3 offset-lg-1 mt-5 mt-lg-0">
491
492 <div class="dropdown" id="fallback-share">
493 <button
494 aria-label="condividi sui social"
495 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-6 ps-3 text-primary"
496 type="button"
497 id="shareActions"
498 data-bs-toggle="dropdown"
499 aria-haspopup="true"
500 aria-expanded="false"
501 >
502 <svg class="icon icon-primary" aria-hidden="true">
503 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-share"></use>
504 </svg>
505 <small><@liferay.language key="share" /></small>
506 </button>
507 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
508 <div class="link-list-wrapper">
509 <ul class="link-list" role="menu">
510 <li role="none">
511 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('facebook')">
512 <svg class="icon icon-primary" aria-hidden="true">
513 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-facebook"></use>
514 </svg>
515 <span>Facebook</span>
516 </button>
517 </li>
518 <li role="none">
519 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('twitter')">
520 <svg class="icon icon-primary" aria-hidden="true">
521 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-twitter"></use>
522 </svg>
523 <span><@liferay.language key="Twitter" /></span>
524 </button>
525 </li>
526 <li role="none">
527 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('whatsapp')">
528 <svg class="icon icon-primary" aria-hidden="true">
529 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-whatsapp"></use>
530 </svg>
531 <span>Whatsapp</span>
532 </button>
533 </li>
534 </ul>
535 </div>
536 </div>
537 </div>
538
539 <div class="dropdown">
540 <button
541 aria-label="vedi azioni da compiere sulla pagina"
542 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-0"
543 type="button"
544 id="viewActions"
545 data-bs-toggle="dropdown"
546 aria-haspopup="true"
547 aria-expanded="false"
548 >
549 <svg class="icon icon-primary" aria-hidden="true">
550 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-more-items"></use>
551 </svg>
552 <small><@liferay.language key="actions" /></small>
553 </button>
554 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
555 <div class="link-list-wrapper">
556 <ul class="link-list" role="menu">
557 <li role="none">
558 <button class="list-item px-3 fs-6 text-primary" onclick="window.print()" role="menuitem">
559 <svg class="icon icon-primary" aria-hidden="true">
560 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-print"></use>
561 </svg>
562 <span><@liferay.language key="print" /></span>
563 </button>
564 </li>
565 <li role="none">
566 <a class="list-item mail-anchor px-3 fs-6" href="mailto:" role="menuitem">
567 <svg class="icon icon-primary" aria-hidden="true">
568 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-mail"></use>
569 </svg>
570 <span><@liferay.language key="send" /></span>
571 </a>
572 </li>
573 </ul>
574 </div>
575 </div>
576 </div>
577 </div>
578
579 </div>
580 </div>
581 </div>
582 </div>
583</div>
584
585<#if Immagine.getData()?? && Immagine.getData() != "">
586<div class="container-fluid my-3">
587 <div class="row">
588 <figure class="figure px-0 img-full">
589 <img src="${Immagine.getData()}" class="figure-img img-fluid" alt="${Immagine.getAttribute('alt')}">
590 <figcaption class="figure-caption text-center pt-3">
591 ${Immagine.getAttribute("alt")}
592 </figcaption>
593 </figure>
594 </div>
595</div>
596</#if>
597
598<div class="container">
599 <div class="row border-top border-light row-column-menu-left pb-4 pb-lg-80 it-page-sections-container">
600 <aside class="col-12 col-lg-3 mb-4 border-col">
601 <div class="cmp-navscroll sticky-top" aria-labelledby="accordion-title-one">
602 <nav class="navbar it-navscroll-wrapper navbar-expand-lg" aria-label="<@liferay.language key='page-index' />" data-bs-navscroll="">
603 <div class="navbar-custom" id="navbarNavProgress">
604 <div class="menu-wrapper">
605 <div class="link-list-wrapper">
606 <div class="accordion">
607 <div class="accordion-item">
608 <span class="accordion-header" id="accordion-title-one">
609 <button
610 class="accordion-button pb-10 px-3"
611 data-bs-toggle="collapse"
612 data-bs-target="#collapse-one"
613 aria-expanded="true"
614 aria-controls="collapse-one">
615 <@liferay.language key="page-index"
616 />
617 <svg class="icon icon-xs right">
618 <use href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-expand"></use>
619 </svg>
620 </button>
621 </span>
622 <div class="progress">
623 <div class="progress-bar it-navscroll-progressbar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;" aria-label="Progress bar"></div>
624 </div>
625 <div id="collapse-one" class="accordion-collapse collapse show" role="region" aria-labelledby="accordion-title-one">
626 <div class="accordion-body">
627 <ul class="link-list" data-element="page-index">
628 <#if AChiERivolto.getData()?has_content>
629 <@navigatorLink sectionId="who-needs" title="${languageUtil.get(locale, 'aimed-at')}" />
630 </#if>
631
632 <#if Descrizione.getData()?has_content>
633 <@navigatorLink sectionId="description" title="${languageUtil.get(locale, 'description')}" />
634 </#if>
635
636 <#if CoperturaGeografica.getData()?has_content>
637 <@navigatorLink sectionId="copertura-geografica" title="${languageUtil.get(locale, 'geographic-coverage')}" />
638 </#if>
639
640 <#if ComeFare.getData()?has_content>
641 <@navigatorLink sectionId="how-to" title="${languageUtil.get(locale, 'how-to')}" />
642 </#if>
643
644 <#if CosaServe.getData()?has_content>
645 <@navigatorLink sectionId="needed" title="${languageUtil.get(locale, 'needed')}" />
646 </#if>
647
648 <#if CosaSiOttiene.getData()?has_content>
649 <@navigatorLink sectionId="obtain" title="${languageUtil.get(locale, 'obtained')}" />
650 </#if>
651
652 <#if scadenze?size gt 0>
653 <@navigatorLink sectionId="deadlines" title="${languageUtil.get(locale, 'deadlines')}" />
654 </#if>
655
656 <#if Costi.getData()?has_content>
657 <@navigatorLink sectionId="costs" title="${languageUtil.get(locale, 'costs')}" />
658 </#if>
659
660 <#if ProcedureEsito.getData()?has_content>
661 <@navigatorLink sectionId="proc-esito" title="${languageUtil.get(locale, 'outcome')}" />
662 </#if>
663
664 <#if has_sportello || has_online>
665 <@navigatorLink sectionId="service-access" title="${languageUtil.get(locale, 'service-access')}" />
666 </#if>
667
668 <#if Vincoli.getData()?has_content>
669 <@navigatorLink sectionId="vincoli" title="${languageUtil.get(locale, 'constraints')}" />
670 </#if>
671
672 <#if CasiParticolari.getData()?has_content>
673 <@navigatorLink sectionId="casi-particolari" title="${languageUtil.get(locale, 'special-cases')}" />
674 </#if>
675
676 <#if UlterioriInformazioni.getData()?has_content>
677 <@navigatorLink sectionId="ulteriori-info" title="${languageUtil.get(locale, 'additional-information')}" />
678 </#if>
679
680 <#if has_condizioni_servizio>
681 <@navigatorLink sectionId="conditions" title="${languageUtil.get(locale, 'terms-of-service')}" />
682 </#if>
683
684 <#if documenti?has_content>
685 <@navigatorLink sectionId="documents" title="${languageUtil.get(locale, 'documents')}" />
686 </#if>
687
688 <#if has_contatti && contatti?size gt 0>
689 <@navigatorLink sectionId="contacts" title="${languageUtil.get(locale, 'contacts')}" />
690 </#if>
691
692 <#if has_UO>
693 <@navigatorLink sectionId="office" title="${languageUtil.get(locale, 'organization-unit')}" />
694 </#if>
695
696 <#if IPAErogatore.getData()?has_content>
697 <@navigatorLink sectionId="ipa-erogatore" title="${languageUtil.get(locale, 'provider-code')}" />
698 </#if>
699
700 <#if SettoreMerceologico.getData()?has_content>
701 <@navigatorLink sectionId="settore-merceologico" title="${languageUtil.get(locale, 'commodity-sector')}" />
702 </#if>
703
704 </ul>
705 </div>
706 </div>
707 </div>
708 </div>
709 </div>
710 </div>
711 </div>
712 </nav>
713 </div>
714 </aside>
715 <div class="col-12 col-lg-8 offset-lg-1">
716 <div class="pt-4">
717 <#if AChiERivolto.getData()?has_content>
718 <article class="it-page-section mb-30" id="who-needs">
719 <h2 class="title-xxlarge mb-3"><@liferay.language key="aimed-at" /></h2>
720 <div class="richtext-wrapper lora" data-element="service-addressed">
721 ${AChiERivolto.getData()}
722 </div>
723 </article>
724 </#if>
725
726 <#if Descrizione.getData()?has_content>
727 <article class="it-page-section mb-30" id="description">
728 <h2 class="title-xxlarge mb-3"><@liferay.language key="description" /></h2>
729 <div class="richtext-wrapper lora">
730 ${Descrizione.getData()}
731 </div>
732 </article>
733 </#if>
734
735 <#if CoperturaGeografica.getData()?has_content>
736 <article class="it-page-section mb-30" id="copertura-geografica">
737 <h2 class="title-xxlarge mb-3"><@liferay.language key="geographic-coverage" /></h2>
738 <div class="richtext-wrapper lora">
739 <div class="d-flex flex-wrap gap-2 mt-10 mb-30 font-sans-serif">
740 <div class="badge bg-primary">
741 ${CoperturaGeografica.getData()}
742 </div>
743 </div>
744 </div>
745 </article>
746 </#if>
747
748 <#if ComeFare.getData()?has_content>
749 <article class="it-page-section mb-30" id="how-to">
750 <h2 class="title-xxlarge mb-3"><@liferay.language key="how-to" /></h2>
751 <div class="richtext-wrapper lora" data-element="service-how-to">
752 ${ComeFare.getData()}
753 </div>
754 </article>
755 </#if>
756
757 <#if CosaServe.getData()?has_content>
758 <article class="it-page-section mb-30 has-bg-grey p-3" id="needed">
759 <h2 class="title-xxlarge mb-3"><@liferay.language key="needed" /></h2>
760 <div class="richtext-wrapper lora" data-element="service-needed">
761 ${CosaServe.getData()}
762 </div>
763 </article>
764 </#if>
765
766 <#if CosaSiOttiene.getData()?has_content>
767 <article class="it-page-section mb-30" id="obtain">
768 <h2 class="title-xxlarge mb-3"><@liferay.language key="obtained" /></h2>
769 <div class="richtext-wrapper lora" data-element="service-achieved">
770 ${CosaSiOttiene.getData()}
771 </div>
772 </article>
773 </#if>
774
775 <#if scadenze?size gt 0>
776 <article class="it-page-section mb-30" id="deadlines">
777 <div class="cmp-timeline">
778 <h2 class="title-xxlarge mb-3"><@liferay.language key="deadlines" /></h2>
779 <div class="richtext-wrapper lora" data-element="service-calendar-text">
780 ${DescrizioneTempiScadenze.getData()}
781 </div>
782 <#if TempiEScadenze.getSiblings()?has_content>
783 <#list scadenze>
784 <div class="calendar-vertical mb-3" data-element="service-calendar-list">
785 <#items as scadenza>
786 <#assign splitted = scadenza.data?split("-") />
787 <#if splitted?size == 2>
788 <#assign
789 expiration_year = ""
790 expiration_day = splitted?first
791 expiration_month = splitted?last
792 />
793 <#elseif splitted?size == 3>
794 <#assign
795 expiration_year = splitted?first
796 expiration_day = splitted?last
797 expiration_month = splitted[1]
798 />
799 </#if>
800 <div class="calendar-date">
801 <h3 class="calendar-date-day text-center d-flex flex-column justify-content-center m-0">
802 <#if expiration_year?has_content>
803 <small class="calendar-date-day__year">${expiration_year}</small>
804 </#if>
805 <#if expiration_day?has_content>
806 <span class="title-xxlarge-regular d-flex justify-content-center">${expiration_day}</span>
807 </#if>
808 <#if expiration_month?has_content>
809 <small class="calendar-date-day__month">${expiration_month}</small>
810 </#if>
811 </h3>
812 <div class="calendar-date-description rounded bg-white my-2">
813 <div class="calendar-date-description-content">
814 <p class="mb-0 text-primary fw-semibold">${scadenza.etichetta}</p>
815 </div>
816 </div>
817 </div>
818 </#items>
819 </div>
820 </#list>
821 </#if>
822 </div>
823 </article>
824 </#if>
825
826 <#if Costi.getData()?has_content>
827 <article class="it-page-section mb-30" id="costs">
828 <h2 class="title-xxlarge mb-3"><@liferay.language key="costs" /></h2>
829 <div class="richtext-wrapper lora">
830 ${Costi.getData()}
831 </div>
832 </article>
833 </#if>
834
835 <#if ProcedureEsito.getData()?has_content>
836 <article class="it-page-section mb-30" id="proc-esito">
837 <h2 class="title-xxlarge mb-3"><@liferay.language key="outcome" /></h2>
838 <div class="richtext-wrapper lora">
839 ${ProcedureEsito.getData()}
840 </div>
841 </article>
842 </#if>
843
844 <#if has_sportello || has_online>
845 <article class="it-page-section mb-30 has-bg-grey p-3 p-lg-4" id="service-access">
846 <h2 class="mb-3"><@liferay.language key="service-access" /></h2>
847 <#if has_online>
848 <p class="text-paragraph lora mb-4">
849 ${EtichettaDigitale.getData()}
850 </p>
851 <#if EtichettaPulsanteDigitale.getData()?has_content>
852 <#if has_required_login>
853 <#if themeDisplay.isSignedIn()>
854 <button type="button" class="btn btn-primary mobile-full" onclick="redirect('/portal${URLServizio.getData()}')">
855 <#else>
856 <#assign escapedLandingURL = URLServizio.getData()?replace("#", "%23" ) />
857 <button type="button" class="btn btn-primary mobile-full" onclick="redirect('${themeDisplay.getThemeSetting('Login URL')}' + 'portal${escapedLandingURL}')">
858 </#if>
859 <#else>
860 <button type="button" class="btn btn-primary mobile-full" onclick="redirect('/portal${URLServizio.getData()}')">
861 </#if>
862 <span class="">
863 ${EtichettaPulsanteDigitale.getData()}
864 </span>
865 </button>
866 </#if>
867 </#if>
868 <#if has_sportello>
869 <p class="text-paragraph lora mt-4">
870 ${EtichettaPrenotazione.getData()}
871 </p>
872
873 <#if EtichettaPulsantePrenotazione.getData()?has_content>
874 <button type="button" class="btn btn-outline-primary t-primary bg-white mobile-full" onclick="redirect('/portal${URLPrenotazione.getData()}')" data-element="service-booking-access">
875 <span>${EtichettaPulsantePrenotazione.getData()}</span>
876 </button>
877 </#if>
878 <#list sedi_sportello>
879 <h3 class="fs-5 text-secondary mt-5 mb-0"><@liferay.language key="service-offices" /></h3>
880 <div class="row">
881 <#items as sede>
882
883 <#if sede.nome?has_content>
884 <div class="col-12 col-md-6 col-lg" style="min-width: 300px;">
885 <div class="card-wrapper rounded h-auto mt-10">
886 <div class="card card-teaser card-teaser-info rounded shadow-sm p-3">
887 <div class="card-body pe-3">
888 <a class="card-title text-paragraph-regular-medium-semi mb-3 primary-color-b3" href="${sede.url}">
889 ${sede.nome}
890 </a>
891 <p>${sede.descrizione}</p>
892
893 <#if sede.indirizzo?has_content>
894 <small class="text-muted lora">
895 ${sede.indirizzo}
896 </small>
897 </#if>
898
899 </div>
900
901 <#if sede.has_immagine >
902 <div class="avatar size-xl">
903 <a href="${sede.url}">
904 <img
905 class="w-100"
906 style="aspect-ratio: 1/1;"
907 alt="${sede.immagine.alt!sede.nome}"
908 src="${sede.immagine.url}"
909 />
910 </a>
911 </div>
912 </#if>
913 </div>
914 </div>
915 </div>
916 </#if>
917 </#items>
918 </div>
919 </#list>
920 </#if>
921 </article>
922 </#if>
923
924 <#if Vincoli.getData()?has_content>
925 <article class="it-page-section mb-30" id="vincoli">
926 <h2 class="title-xxlarge mb-3"><@liferay.language key="constraints" /></h2>
927 <div class="richtext-wrapper lora">
928 ${Vincoli.getData()}
929 </div>
930 </article>
931 </#if>
932
933 <#if CasiParticolari.getData()?has_content>
934 <article class="it-page-section mb-30" id="casi-particolari">
935 <h2 class="title-xxlarge mb-3"><@liferay.language key="special-cases" /></h2>
936 <div class="richtext-wrapper lora">
937 ${CasiParticolari.getData()}
938 </div>
939 </article>
940 </#if>
941
942 <#if UlterioriInformazioni.getData()?has_content>
943 <article class="it-page-section mb-30" id="ulteriori-info">
944 <h2 class="title-xxlarge mb-3"><@liferay.language key="additional-information" /></h2>
945 <div class="richtext-wrapper lora">
946 ${UlterioriInformazioni.getData()}
947 </div>
948 </article>
949 </#if>
950
951 <#if has_condizioni_servizio>
952 <article class="it-page-section mb-30" id="conditions">
953 <h2 class="title-xxlarge mb-3"><@liferay.language key="terms-of-service" /></h2>
954 <p class="text-paragraph lora">
955 <@liferay.language key="terms-of-service-detail" />
956 </p>
957 <#if CondizioniServizio.getSiblings()?has_content>
958 <#list CondizioniServizio.getSiblings()>
959 <div class="cmp-icon-link d-flex flex-wrap">
960 <#items as cur_CondizioniDiServizio>
961 <a class="list-item icon-left d-inline-block p-3 me-2 mb-0 shadow-sm border border-light rounded" href="${cur_CondizioniDiServizio.File.getData()}" aria-label="Scarica ${languageUtil.format(locale, 'download-x', 'Condizioni di servizio', false)}" title="Scarica ${languageUtil.format(locale, 'download-x', 'Condizioni di servizio', false)}" data-element="service-file"
962 >
963 <span class="list-item-title-icon-wrapper">
964 <svg class="icon icon-primary icon-sm me-1" aria-hidden="true">
965 <use href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-download"></use>
966 </svg>
967 <span class="list-item">
968 ${cur_CondizioniDiServizio.Etichetta.getData()}
969 </span>
970 </span>
971 </a>
972 </#items>
973 </div>
974 </#list>
975 </#if>
976 </article>
977 </#if>
978
979 <#list documenti>
980 <article class="it-page-section mb-30 pt-4" id="documents">
981 <h2 class="title-xxlarge mb-3"><@liferay.language key="documents" /></h2>
982 <div class="col-12 col-md-8 shadow p-3 mb-4 rounded">
983 <#items as doc>
984 <div class="d-flex align-items-center ${doc?has_next?string('pb-3 border-bottom border-light mb-3', 'mt-3')}">
985 <svg class="icon icon-primary icon-lh me-2">
986 <use href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-external-link"></use>
987 </svg>
988 <a class="text-decoration_none fw-semibold t-primary" href="${doc.url}">
989 ${doc.name}
990 </a>
991 </div>
992 </#items>
993 </div>
994 </article>
995 </#list>
996
997 <#list contatti>
998 <article class="it-page-section mb-30" id="contacts">
999 <h2 class="title-xxlarge mb-3"><@liferay.language key="contacts" /></h2>
1000 <div class="row" data-element="service-area">
1001 <#items as wallet_contatti>
1002 <div class="col-12 col-md-6 pe-3">
1003 <div class="col-11 p-3 shadow-sm rounded">
1004 <#list wallet_contatti.contatti as contatto>
1005 <div>
1006 <span class="fw-semibold">
1007 <@liferay.language key="${contatto.tipo?replace(' ', '-')}" />:</span>
1008 <#assign url_type="" />
1009 <#if
1010 contatto.tipo == "Email"
1011 || contatto.tipo == "PEC"
1012 >
1013 <#assign url_type="mailto:" />
1014 <#elseif
1015 contatto.tipo == "Telefono"
1016 || contatto.tipo == "Whatsapp"
1017 || contatto.tipo == "Telegram"
1018 >
1019 <#assign url_type = "tel:" />
1020 </#if>
1021 <span class="ms-1">
1022 <a
1023 href="${url_type}${contatto.valore}"
1024 target="_blank"
1025 class="text-primary">
1026 ${contatto.valore}
1027 </a>
1028 </span>
1029 </div>
1030 </#list>
1031 </div>
1032 </div>
1033 </#items>
1034 </div>
1035 </article>
1036 </#list>
1037
1038 <#if has_UO>
1039 <article id="office">
1040 <h2 class="mb-3" data-element="service-area"><@liferay.language key="organization-unit" /> <@liferay.language key="manager" /></h2>
1041 <div class="row">
1042 <div class="col-12 col-md-8 col-lg-6">
1043 <div class="card-wrapper rounded h-auto mt-10">
1044 <div class="card card-teaser card-teaser-info rounded shadow-sm p-3">
1045 <div class="card-body pe-3">
1046 <a class="card-title text-paragraph-regular-medium-semi mb-3 primary-color-b3" href="/portal/-/${url_UO}">
1047 ${nome_UO}
1048 </a>
1049 <#if descrizione_UO?has_content>
1050 <p>${descrizione_UO}</p>
1051 </#if>
1052 <#list contatti_UO >
1053 <div class="pt-3">
1054 <#items as contatto>
1055 <div class="col-12 px-0">
1056 <div class="col-11 px-0">
1057 <div>
1058 <span class="fw-semibold"><@liferay.language key="${contatto.tipo?replace(' ', '-')}" />:</span>
1059 <#assign url_type = "" />
1060 <#if
1061 contatto.tipo == "Email"
1062 || contatto.tipo == "PEC"
1063 >
1064 <#assign url_type = "mailto:" />
1065 <#elseif
1066 contatto.tipo == "Telefono"
1067 || contatto.tipo == "Whatsapp"
1068 || contatto.tipo == "Telegram"
1069 >
1070 <#assign url_type = "tel:" />
1071 </#if>
1072
1073 <span class="ms-1">
1074 <a
1075 href="${url_type}${contatto.testo}"
1076 target="_blank"
1077 class="text-primary"
1078 >
1079 ${contatto.testo}
1080 </a>
1081 </span>
1082 </div>
1083 </div>
1084 </div>
1085 </#items>
1086 </div>
1087 </#list>
1088 </div>
1089
1090 <#if immagine_UO?has_content && immagine_UO.url?has_content>
1091 <div class="avatar size-xl">
1092 <a href="/portal/-/${url_UO}">
1093 <img
1094 class="w-100"
1095 style="aspect-ratio: 1/1;"
1096 alt="${immagine_UO.alt!}"
1097 src="${immagine_UO.url}"
1098 />
1099 </a>
1100 </div>
1101
1102 </#if>
1103 </div>
1104 </div>
1105 </div>
1106 </div>
1107 </article>
1108 </#if>
1109
1110 <#if IPAErogatore.getData()?has_content>
1111 <article class="it-page-section mb-30" id="ipa-erogatore">
1112 <h2 class="title-xxlarge mb-3"><@liferay.language key="provider-code" /></h2>
1113 <div class="richtext-wrapper lora">
1114 ${IPAErogatore.getData()}
1115 </div>
1116 </article>
1117 </#if>
1118
1119 <#if SettoreMerceologico.getData()?has_content>
1120 <article class="it-page-section mb-30" id="settore-merceologico">
1121 <h2 class="title-xxlarge mb-3"><@liferay.language key="commodity-sector" /></h2>
1122 <div class="richtext-wrapper lora">
1123 ${SettoreMerceologico.getData()}
1124 </div>
1125 </article>
1126 </#if>
1127
1128 <#-- ARGOMENTI E CATEGORIE -->
1129 <div class="border-top border-light pt-4 mt-2 mb-30">
1130 <span class="text-paragraph-small fw-semibold"><@liferay.language key="topics" />:</span>
1131
1132 <ul class="d-flex flex-wrap gap-2 mt-10 mb-3">
1133 <#list argomenti as argomento>
1134 <li>
1135 <a class="chip chip-simple" href="${argomento.url}">
1136 <span class="chip-label">${argomento.name}</span>
1137 </a>
1138 </li>
1139 </#list>
1140 </ul>
1141 </div>
1142 <div>
1143 <#list categorieServizio>
1144 <span class="text-paragraph-small fw-semibold"><@liferay.language key="service-category" />:</span>
1145 <ul class="d-flex flex-wrap gap-2 mt-10 mb-3">
1146 <#items as cat>
1147 <li>
1148 <a
1149 href="${cat.url}"
1150 class="chip chip-simple"
1151 data-element="service-topic"
1152 >
1153 <span class="chip-label">
1154 ${cat.name}
1155 </span>
1156 </a>
1157 </li>
1158 </#items>
1159 </ul>
1160 </#list>
1161 <#-- DATA ULTIMA MODIFICA -->
1162 <#assign
1163 modifiedDate = .vars['reserved-article-modified-date'].getData()?split(", ")[1]?split(" +")[0]
1164 displayModifiedDate = modifiedDate?datetime("dd MMM yyyy hh:mm:ss")?datetime
1165 />
1166 <p class="text-paragraph-small mb-0 lora">
1167 <span class="fw-semibold"><@liferay.language key="last-update-date" />: </span>
1168 <span>
1169 ${displayModifiedDate?string.short}
1170 </span>
1171 </p>
1172 <#list lifeEvents>
1173 <div>
1174 <#items as evento_life>
1175 <span class="sr-only">
1176 ${evento_life}
1177 </span>
1178 </#items>
1179 </div>
1180 </#list>
1181 <#list businessEvents>
1182 <div>
1183 <#items as evento_business>
1184 <span class="sr-only">
1185 ${evento_business}
1186 </span>
1187 </#items>
1188 </div>
1189 </#list>
1190 </div>
1191 </div>
1192 </div>
1193 </div>
1194</div>
1195<style>
1196.blu-finmatica .calendar-vertical .calendar-date .calendar-date-day::before {
1197 top: 50%;
1198 translate: 0 -50%;
1199}
1200.blu-finmatica .calendar-vertical .calendar-date .calendar-date-day::after {
1201 top: 50%;
1202 translate: 0 -50%;
1203}
1204#navbarNavProgress .menu-wrapper .link-list-wrapper .link-list .nav-item a.nav-link,
1205#navbarNavProgress .menu-wrapper .link-list-wrapper .link-list .nav-item a.nav-link.active {
1206 border-left: none !important;
1207 padding: 0 24px !important;
1208}
1209</style>
1210<script defer>
1211
1212 document.querySelectorAll(".mail-anchor").forEach(anchor => anchor.href = "mailto:&subject=${Titolo.getData()}&body=" + window.location.href)
1213
1214 function redirect(url) {
1215 window.location.href = url;
1216 }
1217
1218 function shareOn(type) {
1219 let articleUrl = window.location.href;
1220 const mapping = {
1221 "facebook": "https://facebook.com/sharer/sharer.php?u=" + articleUrl,
1222 "twitter": "https://twitter.com/intent/tweet/?text=" + articleUrl,
1223 "linkedin": "http://www.linkedin.com/sharing/share-offsite/?url=" + articleUrl,
1224 "whatsapp": "whatsapp://send?text=" + articleUrl
1225 }
1226
1227 window.open(mapping[type], "_blank");
1228 return
1229 }
1230
1231 function bringMeTo(id) {
1232 document.getElementById(id).scrollIntoView({behavior: 'smooth'});
1233 }
1234
1235</script>
1236
1237<#macro navigatorLink sectionId title>
1238<#local desc = "" />
1239
1240<#if title?? && title?has_content>
1241 <#local desc = title />
1242<#else>
1243 <#local desc = sectionId />
1244</#if>
1245
1246<li class="nav-item">
1247 <a
1248 class="nav-link active"
1249 onclick="javascript: event.preventDefault(); bringMeTo('${sectionId}')"
1250 role="button"
1251 aria-label="${languageUtil.get(locale, 'go-to-section')}: ${title}"
1252 href="#"
1253 >
1254 <span class="title-medium">${title}</span>
1255 </a>
1256</li>
1257</#macro>