Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> dynamicElement.element("dynamic-content")  [in template "20095#20121#35356" at line 278, column 18]

----
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: #if dynamicElement.element("dynamic-c...  [in template "20095#20121#35356" at line 278, column 13]
----
1<#--  V3.2  --> 
2 
3<#setting locale = themeDisplay.getLocale() /> 
4<#setting time_zone = "Europe/Rome" /> 
5 
6<#assign 
7    FriendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService") 
8    ClassNameService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameService") 
9    JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
10    LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") 
11    journalArticleId = .vars['reserved-article-id'].data 
12    journalArticleResourceLocalServiceUtil = staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"] 
13    assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"] 
14    articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId) 
15    categoryList = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK) 
16    AssetVocabularyLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil"] 
17    has_custom_coordinates = (CustomLat.getData()?has_content && CustomLat.getData() != "null" && CustomLat.getData()?number != 0 && CustomLng.getData()?has_content && CustomLng.getData() != "null" && CustomLng.getData()?number != 0) 
18/> 
19 
20<#if has_custom_coordinates> 
21 
22    <#attempt> 
23	    <#assign 
24            custom_lat = CustomLat.getData()?number 
25            custom_lng = CustomLng.getData()?number 
26        /> 
27    <#recover> 
28        <#assign has_custom_coordinates = false /> 
29    </#attempt> 
30 
31</#if> 
32 
33<#setting locale = themeDisplay.getLocale() /> 
34 
35<#-- gestione dei breadcrumbs --> 
36<#assign 
37    paginaPadre = LayoutLocalService.getLayout(groupId, PaginaPadre.getData()?eval.privateLayout, PaginaPadre.getData()?eval.layoutId?number) 
38    ancestors = paginaPadre.getAncestors() 
39    sorted_ancestors = [] 
40/> 
41 
42<#list ancestors as parente> 
43    <#assign 
44        sorted_ancestors += 
45        [{ 
46            "name": parente.getName(themeDisplay.getLanguageId()), 
47            "ancestors": parente.getAncestors()?size, 
48            "data": parente 
49        }] 
50    /> 
51</#list> 
52 
53<div class="container finmatica-breadcrumb-container mb-4"> 
54    <div class="row justify-content-center"> 
55        <div class="col-12 col-lg-10"> 
56            <div class="cmp-breadcrumbs" role="navigation"> 
57                <nav class="breadcrumb-container" aria-label="breadcrumb"> 
58                    <ol class="breadcrumb p-0" data-element="breadcrumb"> 
59                        <li class="breadcrumb-item"><a 
60                                href="${themeDisplay.getThemeSetting('Home URL')}"> 
61                                <span class="breadcrumb-text-truncate">Home</span> 
62                            </a> 
63                            <span class="separator">/</span> 
64                        </li> 
65                        <#list sorted_ancestors?sort_by("ancestors") as ancestor> 
66                        <li class="breadcrumb-item"><a 
67                                href="/portal${ancestor.data.getFriendlyURL()}"> 
68                                <span class="breadcrumb-text-truncate"> 
69                                    ${ancestor.name} 
70                                </span> 
71                            </a> 
72                            <span class="separator">/</span> 
73                        </li> 
74                        </#list> 
75                        <li class="breadcrumb-item"><a 
76                                href="/portal${paginaPadre.getFriendlyURL()}"> 
77                                <span class="breadcrumb-text-truncate"> 
78                                    ${paginaPadre.getName(themeDisplay.getLanguageId())} 
79                                </span> 
80                            </a> 
81                            <span class="separator">/</span> 
82                        </li> 
83                        <li class="breadcrumb-item">${Titolo.getData()}</li> 
84                    </ol> 
85                </nav> 
86            </div> 
87        </div> 
88    </div> 
89</div> 
90 
91<#assign 
92    argomenti = [] 
93    tipi_luogo = [] 
94/> 
95<#list categoryList as categoryEntry> 
96    <#assign 
97        vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId()) 
98        className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory") 
99        friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), categoryEntry.categoryId) 
100        friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId) 
101        cat_name = categoryEntry.name 
102        cat_localized_name = categoryEntry.getTitle(themeDisplay.getLocale(), true), 
103        cat_url = friendlyUrlList[0].urlTitle 
104    /> 
105    <#if 
106        vocabulary.name == "tassonomia argomenti" 
107        || vocabulary.name == "tassonomia argomento" 
108
109        <#assign 
110            argomenti += 
111            [{ 
112                "name": cat_localized_name, 
113                "url": cat_url 
114            }] 
115        /> 
116    <#elseif vocabulary.name == "tassonomia tipi di luogo"> 
117        <#assign 
118            tipi_luogo += [ cat_localized_name ] 
119        /> 
120    </#if> 
121</#list> 
122 
123 
124<#assign luoghi_collegati = [] /> 
125<#if LuoghiCollegati.getData()?has_content> 
126    <#list LuoghiCollegati.getSiblings() as cur_LuoghiCollegati> 
127        <#assign 
128            luogoData = jsonFactoryUtil.createJSONObject(cur_LuoghiCollegati.getData()) 
129            relatedArticles = JournalArticleLocalService.getArticlesByResourcePrimKey(luogoData.classPK?number) 
130        /> 
131        <#if relatedArticles?? && relatedArticles?size gt 0> 
132            <#assign 
133                relatedArticle = relatedArticles[0] 
134                document = relatedArticle.getDocumentByLocale(themeDisplay.getLocale()) 
135                rootElement = document.getRootElement() 
136                nome_luogo = "" 
137                immagine = "" 
138                orari_luogo = "" 
139                indirizzo_luogo = "" 
140                url_luogo = cur_LuoghiCollegati.getFriendlyUrl() 
141            /> 
142            <#list rootElement.elements() as dynamicElement> 
143                <#if dynamicElement.attributeValue("field-reference") == "Titolo"> 
144                    <#assign nome_luogo = dynamicElement.element("dynamic-content").getText() /> 
145                <#elseif dynamicElement.attributeValue("field-reference")=="OrarioPerIlPubblico"> 
146                    <#if dynamicElement.element("dynamic-content")??> 
147                        <#assign orari_luogo = dynamicElement.element("dynamic-content").getText() /> 
148                    </#if> 
149                <#elseif dynamicElement.attributeValue("field-reference")=="Indirizzo"> 
150                    <#assign indirizzo_luogo = dynamicElement.element("dynamic-content").getText() /> 
151                <#elseif dynamicElement.attributeValue("field-reference")=="CAP"> 
152                    <#if indirizzo_luogo != ""> 
153                    <#assign 
154                        indirizzo_luogo += ", ${dynamicElement.element('dynamic-content').getText()}" 
155                    /> 
156                    </#if> 
157                <#elseif dynamicElement.attributeValue("field-reference") == "Immagine"> 
158                    <#assign immagine = dynamicElement.element("dynamic-content").getText() /> 
159                    <#if immagine?has_content> 
160                        <#assign immagine = jsonFactoryUtil.createJSONObject(immagine) /> 
161                        <#if immagine?has_content> 
162                            <#assign immagine = immagine?eval /> 
163                        </#if> 
164                    </#if> 
165                </#if> 
166            </#list> 
167            <#assign 
168                luoghi_collegati += 
169                [{ 
170                    "nome": nome_luogo, 
171                    "immagine": immagine, 
172                    "orari": orari_luogo, 
173                    "url": url_luogo, 
174                    "indirizzo": indirizzo_luogo 
175                }] 
176            /> 
177        </#if> 
178    </#list> 
179</#if> 
180 
181<#-- GET STRUTTURA RESPONSABILE --> 
182 
183<#assign 
184    struttura_responsabile_Data = jsonFactoryUtil.createJSONObject(StrutturaResponsabile.getData()) 
185    has_struttura_responsabile = struttura_responsabile_Data?eval?has_content 
186/> 
187 
188<#if has_struttura_responsabile> 
189    <#assign relatedArticles = JournalArticleLocalService.getArticlesByResourcePrimKey(struttura_responsabile_Data.classPK?number) /> 
190    <#if relatedArticles?? && relatedArticles?size gt 0> 
191        <#assign 
192            relatedArticle = relatedArticles[0] 
193            document = relatedArticle.getDocumentByLocale(themeDisplay.getLocale()) 
194            struttura_responsabile_root = document.getRootElement() 
195            nome_struttura = "" 
196            indirizzo_struttura = "" 
197            immagine_struttura = "" 
198            orari_struttura = "" 
199            url_struttura = relatedArticle.getUrlTitle() 
200        /> 
201 
202        <#list struttura_responsabile_root.elements() as dynamicElement> 
203            <#if dynamicElement.attributeValue("field-reference") == "Titolo"> 
204                <#assign nome_struttura = dynamicElement.element("dynamic-content").getText() /> 
205            <#elseif dynamicElement.attributeValue("field-reference") == "SedePrincipale"> 
206                <#assign sede_data = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData()) /> 
207                <#if sede_data.classPK??> 
208                    <#assign 
209                        Sedi = JournalArticleLocalService.getArticlesByResourcePrimKey(sede_data.classPK?number) 
210                        Sede = Sedi[0] 
211                        document = Sede.getDocumentByLocale(themeDisplay.getLocale()) 
212                        rootElement = document.getRootElement() 
213                    /> 
214                    <#list rootElement.elements() as dynamicElement> 
215                        <#if dynamicElement.attributeValue("field-reference") == "Indirizzo"> 
216                            <#assign indirizzo_struttura = dynamicElement.element("dynamic-content").getText() /> 
217                        <#elseif dynamicElement.attributeValue("field-reference") == "CAP"> 
218                            <#assign indirizzo_struttura += ', ${dynamicElement.element("dynamic-content").getText()}' /> 
219                        <#elseif dynamicElement.attributeValue("field-reference") == "OrarioPerIlPubblico"> 
220                            <#assign orari_struttura = dynamicElement.element("dynamic-content").getText() /> 
221                        </#if> 
222                    </#list> 
223                </#if> 
224            <#elseif dynamicElement.attributeValue("field-reference") == "Immagine"> 
225                <#assign immagine_struttura = dynamicElement.element("dynamic-content").getText() /> 
226                <#if immagine_struttura?has_content> 
227                    <#assign immagine_struttura = jsonFactoryUtil.createJSONObject(immagine_struttura) /> 
228                    <#if immagine_struttura?has_content> 
229                        <#assign immagine_struttura = immagine_struttura?eval /> 
230                    </#if> 
231                </#if> 
232            </#if> 
233        </#list> 
234    </#if> 
235</#if> 
236 
237<#-- GET VIDEOGALLERY --> 
238<#assign videogallery = [] /> 
239<#if GalleriaDiVideo.getData()?has_content> 
240    <#list GalleriaDiVideo.getSiblings() as cur_GalleriaDiVideo> 
241        <#assign videogallery +=[cur_GalleriaDiVideo.getData()] /> 
242    </#list> 
243</#if> 
244 
245<#-- GET PHOTOGALLERY --> 
246<#assign photogallery = [] /> 
247<#if GalleriaDiImmagini.getSiblings()?has_content> 
248<#list GalleriaDiImmagini.getSiblings() as cur_GalleriaDiImmagini> 
249    <#if cur_GalleriaDiImmagini.getData()?? && cur_GalleriaDiImmagini.getData() != ""> 
250        <#assign 
251            photogallery += 
252            [{ 
253                "alt": cur_GalleriaDiImmagini.getAttribute("alt"), 
254                "fileentryid": cur_GalleriaDiImmagini.getAttribute("fileEntryId"), 
255                "src": cur_GalleriaDiImmagini.getData() 
256            }] 
257        /> 
258    </#if> 
259</#list> 
260</#if> 
261 
262<#-- SEZIONE GET CONTATTI --> 
263<#assign 
264    contatti_wallet = [] 
265    contatti_data = jsonFactoryUtil.createJSONObject(PuntiDiContatto.getData()) 
266    has_contatti = contatti_data?eval?has_content 
267/> 
268 
269<#if has_contatti> 
270    <#assign relatedArticles = JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_data.classPK?number) /> 
271    <#if relatedArticles?? && relatedArticles?size gt 0> 
272        <#assign 
273            relatedArticle = relatedArticles[0] 
274            document = relatedArticle.getDocumentByLocale(themeDisplay.getLocale()) 
275            rootElement = document.getRootElement() 
276        /> 
277        <#list rootElement.elements() as dynamicElement> 
278            <#if dynamicElement.element("dynamic-content").getText()?has_content> 
279                <#assign 
280                    tipo_contatto = (dynamicElement.attributeValue("field-reference") == "URL" )?string("Sito Web", dynamicElement.attributeValue("field-reference")) 
281                    contatti_wallet += 
282                    [{ 
283                        "tipo": tipo_contatto, 
284                        "valore": dynamicElement.element("dynamic-content").getText() 
285                    }] 
286                /> 
287            </#if> 
288        </#list> 
289    </#if> 
290</#if> 
291 
292<div class="container"> 
293    <div class="row justify-content-center"> 
294        <div class="col-12 col-lg-10"> 
295            <div class="cmp-heading pb-3 pb-lg-4"> 
296                <div class="row"> 
297                    <div class="col-lg-8"> 
298                        <h1 class="title-xxxlarge" data-element="service-title"> 
299                            ${Titolo.getData()} 
300                        </h1> 
301                        <#if NomeAlternativo.getData() !=""> 
302                        <p class="subtitle-small mb-5"> 
303                            ${NomeAlternativo.getData()} 
304                        </p> 
305                        </#if> 
306                    </div> 
307 
308                    <div class="col-lg-3 offset-lg-1"> 
309 
310                        <div class="dropdown" id="fallback-share"> 
311                            <button 
312                                aria-label="condividi sui social" 
313                                class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-6 text-primary" 
314                                type="button" 
315                                id="shareActions" 
316                                data-bs-toggle="dropdown" 
317                                aria-haspopup="true" 
318                                aria-expanded="false" 
319
320                                <svg class="icon icon-primary" aria-hidden="true"> 
321                                    <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-share"></use> 
322                                </svg> 
323                                <small><@liferay.language key="share" /></small> 
324                            </button> 
325                            <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions"> 
326                                <div class="link-list-wrapper"> 
327                                    <ul class="link-list" role="menu"> 
328                                        <li role="none"> 
329                                            <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('facebook')"> 
330                                                <svg class="icon icon-primary" aria-hidden="true"> 
331                                                    <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-facebook"></use> 
332                                                </svg> 
333                                                <span>Facebook</span> 
334                                            </button> 
335                                        </li> 
336                                        <li role="none"> 
337                                            <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('twitter')"> 
338                                                <svg class="icon icon-primary" aria-hidden="true"> 
339                                                    <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-twitter"></use> 
340                                                </svg> 
341                                                <span><@liferay.language key="Twitter" /></span> 
342                                            </button> 
343                                        </li> 
344                                        <li role="none"> 
345                                            <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('whatsapp')"> 
346                                                <svg class="icon icon-primary" aria-hidden="true"> 
347                                                    <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-whatsapp"></use> 
348                                                </svg> 
349                                                <span>Whatsapp</span> 
350                                            </button> 
351                                        </li> 
352                                    </ul> 
353                                </div> 
354                            </div> 
355                        </div> 
356 
357                        <div class="dropdown"> 
358                            <button 
359                                aria-label="vedi azioni da compiere sulla pagina" 
360                                class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-0" 
361                                type="button" 
362                                id="viewActions" 
363                                data-bs-toggle="dropdown" 
364                                aria-haspopup="true" 
365                                aria-expanded="false" 
366
367                                <svg class="icon icon-primary" aria-hidden="true"> 
368                                    <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-more-items"></use> 
369                                </svg> 
370                                <small><@liferay.language key="actions" /></small> 
371                            </button> 
372                            <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions"> 
373                                <div class="link-list-wrapper"> 
374                                    <ul class="link-list" role="menu"> 
375                                        <li role="none"> 
376                                            <button class="list-item px-3 fs-6 text-primary" onclick="window.print()" role="menuitem"> 
377                                                <svg class="icon icon-primary" aria-hidden="true"> 
378                                                    <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-print"></use> 
379                                                </svg> 
380                                                <span><@liferay.language key="print" /></span> 
381                                            </button> 
382                                        </li> 
383                                        <li role="none"> 
384                                            <a class="list-item mail-anchor px-3 fs-6" href="mailto:" role="menuitem"> 
385                                                <svg class="icon icon-primary" aria-hidden="true"> 
386                                                    <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-mail"></use> 
387                                                </svg> 
388                                                <span><@liferay.language key="send" /></span> 
389                                            </a> 
390                                        </li> 
391                                    </ul> 
392                                </div> 
393                            </div> 
394                        </div> 
395 
396                        <#list tipi_luogo> 
397                        <div class="mt-4 mb-3"> 
398                            <span class="text-paragraph-small fw-semibold"><@liferay.language key="place-type" />:</span> 
399                        </div> 
400                        <ul class="d-flex d-lg-block"> 
401 
402                            <ul class="d-flex flex-wrap gap-2 mt-10 mb-3"> 
403                                <#items as tipo> 
404                                <li> 
405                                    <span class="badge bg-primary">${tipo}</span> 
406                                </li> 
407                                </#items> 
408                            </ul> 
409 
410                        </ul> 
411                        </#list> 
412                    </div> 
413                </div> 
414            </div> 
415        </div> 
416    </div> 
417</div> 
418 
419<#-- IMMAGINE HERO --> 
420<#if Immagine.getData()?? && Immagine.getData() !=""> 
421    <div class="container-fluid my-3"> 
422        <div class="row"> 
423            <figure class="figure px-0 img-full"> 
424                <img src="${Immagine.getData()}" class="figure-img img-fluid" alt="${Immagine.getAttribute('alt')}" loading="lazy"> 
425                <figcaption class="figure-caption text-center pt-3"> 
426                    ${Immagine.getAttribute("alt")} 
427                </figcaption> 
428            </figure> 
429        </div> 
430    </div> 
431</#if> 
432<#-- NAVIGAZIONE E CONTENUTO --> 
433<div class="container"> 
434    <div class="row border-top border-light row-column-menu-left pb-4 pb-lg-80"> 
435        <div class="col-12 col-lg-3 mb-4 border-col"> 
436            <div class="cmp-navscroll sticky-top" aria-labelledby="accordion-title-one"> 
437                <nav class="navbar it-navscroll-wrapper navbar-expand-lg" aria-label="${languageUtil.get(locale, 'page-index')}" data-bs-navscroll=""> 
438                    <div class="navbar-custom" id="navbarNavProgress"> 
439                        <div class="menu-wrapper"> 
440                            <div class="link-list-wrapper"> 
441                                <div class="accordion"> 
442                                    <div class="accordion-item"> 
443                                        <span class="accordion-header" id="accordion-title-one"> 
444                                            <button class="accordion-button pb-10 px-3" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-one" aria-expanded="true" aria-controls="collapse-one"> 
445                                                <@liferay.language key="page-index" /> 
446                                                <svg class="icon icon-xs right"> 
447                                                    <use href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-expand"></use> 
448                                                </svg> 
449                                            </button> 
450                                        </span> 
451                                        <div class="progress"> 
452                                            <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> 
453                                        </div> 
454                                        <div id="collapse-one" class="accordion-collapse collapse show" role="region" aria-labelledby="accordion-title-one"> 
455                                            <div class="accordion-body"> 
456                                                <ul class="link-list" data-element="page-index"> 
457 
458                                                        <#-- LINK A SEZIONE --> 
459                                                    <#if DescrizioneEstesa.getData()?has_content> 
460                                                    <@navigatorLink sectionId="description" title="${languageUtil.get(locale, 'description')}" /> 
461                                                    </#if> 
462 
463                                                    <#if photogallery?size gt 0> 
464                                                    <@navigatorLink sectionId="photogallery" title="${languageUtil.get(locale, 'image-gallery')}" /> 
465                                                    </#if> 
466 
467                                                    <#if videogallery?size gt 0> 
468                                                    <@navigatorLink sectionId="videogallery" title="${languageUtil.get(locale, 'video-gallery')}" /> 
469                                                    </#if> 
470 
471                                                    <#if LuoghiCollegati.getData()?has_content && luoghi_collegati?size gt 0> 
472                                                        <@navigatorLink sectionId="related-places" title="${languageUtil.get(locale, 'related-places')}" /> 
473                                                    </#if> 
474 
475                                                    <#if ServiziPresentiNelLuogo.getData()?has_content> 
476                                                    <@navigatorLink sectionId="services" title="${languageUtil.get(locale, 'offered-services')}" /> 
477                                                    </#if> 
478 
479                                                    <#if ModalitaAccesso.getData()?has_content> 
480                                                    <@navigatorLink sectionId="access" title="${languageUtil.get(locale, 'access-mode')}" /> 
481                                                    </#if> 
482 
483                                                    <#if Indirizzo.getData()?has_content> 
484                                                    <@navigatorLink sectionId="location" title="${languageUtil.get(locale, 'address')}" /> 
485                                                    </#if> 
486 
487                                                    <#if OrarioPerIlPubblico.getData()?has_content> 
488                                                    <@navigatorLink sectionId="timetable" title="${languageUtil.get(locale, 'opening-times')}" /> 
489                                                    </#if> 
490 
491                                                    <#if has_contatti && contatti_wallet?size gt 0> 
492                                                    <@navigatorLink sectionId="contacts" title="${languageUtil.get(locale, 'contact')}" /> 
493                                                    </#if> 
494 
495                                                    <#if (StrutturaResponsabile.getData()?has_content && nome_struttura?has_content)> 
496                                                    <@navigatorLink sectionId="chief-uo" title="${languageUtil.get(locale, 'chief-UO')}" /> 
497                                                    </#if> 
498 
499                                                    <#if UlterioriInformazioni.getData()?has_content> 
500                                                    <@navigatorLink sectionId="more-info" title="${languageUtil.get(locale, 'additional-information')}" /> 
501                                                    </#if> 
502 
503                                                </ul> 
504                                            </div> 
505                                        </div> 
506                                    </div> 
507                                </div> 
508                            </div> 
509                        </div> 
510                    </div> 
511                </nav> 
512            </div> 
513        </div> 
514        <div class="col-12 col-lg-8 offset-lg-1"> 
515            <div class="it-page-sections-container pt-4 unstiled-lists-wrapper"> 
516 
517                <#if DescrizioneEstesa.getData()?has_content> 
518                <section class="it-page-section mb-30" id="description"> 
519                    <h2 class="title-xxlarge mb-3"><@liferay.language key="description" /></h2> 
520                    <div class="richtext-wrapper lora"> 
521                        ${DescrizioneEstesa.getData()} 
522                    </div> 
523                </section> 
524                </#if> 
525 
526                <#list photogallery> 
527                <section class="it-page-section mb-30" id="photogallery"> 
528                    <h2 class="title-xxlarge mb-3"><@liferay.language key="image-gallery" /></h2> 
529                    <div class="it-carousel-wrapper it-carousel-landscape-abstract-three-cols splide splide--slide splide--ltr splide--draggable is-active mb-4" data-bs-carousel-splide="" id="splide01"> 
530                        <div class="splide__track" id="splide01-track" style="padding-left: 0px; padding-right: 0px;"> 
531                            <ul class="splide__list it-carousel-all" id="splide01-list" style="transform: translateX(0px);"> 
532                                <#items as img> 
533                                <li class="splide__slide is-active is-visible h-100" id="splide01-slide0${img?counter}" style="margin-right: 24px; width: calc(calc(100% / 3) - 16px);" tabindex="0" data-focus-mouse="false"> 
534                                    <div class="it-single-slide-wrapper"> 
535                                        <figure> 
536                                            <a href="${img.src}"> 
537                                                <img src="${img.src}" alt="${img.alt}" class="img-fluid" style="width: 100%; object-fit: cover; object-position: center; aspect-ratio: 1/1;" loading="lazy"> 
538                                            </a> 
539                                            <figcaption class="figure-caption mt-2 text-center small text-muted"> 
540                                                ${img.alt} 
541                                            </figcaption> 
542                                        </figure> 
543                                    </div> 
544                                </li> 
545                                </#items> 
546                            </ul> 
547                        </div> 
548                    </div> 
549                </section> 
550                </#list> 
551 
552                <#list videogallery> 
553                <section class="it-page-section mb-30" id="videogallery"> 
554                    <h2 class="mb-3"><@liferay.language key="video-gallery" /></h2> 
555                    <div id="iframe-wrapper"> 
556                        <#items as cur_Sezione_URLVideo> 
557                        <div class="iframe-element"> 
558                            ${cur_Sezione_URLVideo} 
559                        </div> 
560                        </#items> 
561                    </div> 
562                </section> 
563                </#list> 
564 
565                <#list luoghi_collegati> 
566                <section class="it-page-section mb-30" id="related-places"> 
567                    <h2 class="title-xxlarge mb-3"><@liferay.language key="related-places" /></h2> 
568                    <div class="col-12 col-md-8 col-lg-6 mb-30 ps-0"> 
569                        <#items as luogo> 
570                        <div class="card-wrapper rounded h-auto mt-10"> 
571                            <div class="card card-teaser card-teaser-info rounded shadow-sm p-3"> 
572                                <div class="card-body pe-3"> 
573                                    <a href="${luogo.url}"> 
574                                        <p class="card-title fw-semibold text-paragraph-regular-medium-semi mb-0 primary-color-b3"> 
575                                            ${luogo.nome} 
576                                        </p> 
577                                    </a> 
578                                    <div class="card-text"> 
579                                        <#if luogo.orari?has_content> 
580                                        <p class="u-main-black" style="word-break: break-word; font-size: 1rem !important;"> 
581                                            ${luogo.orari} 
582                                        </p> 
583                                        </#if> 
584                                        <#if luogo.indirizzo?has_content> 
585                                        <small class="small text-muted mt-3" style="word-break: break-word;"> 
586                                            ${luogo.indirizzo} 
587                                        </small> 
588                                        </#if> 
589                                    </div> 
590                                </div> 
591 
592                                <#if luogo.immagine?has_content && luogo.immagine.url?has_content> 
593                                <div class="avatar size-xl"> 
594                                    <img 
595                                        title="${luogo.nome}" 
596                                        alt="${luogo.immagine.alt}" 
597                                        src="${luogo.immagine.url}" 
598                                        style="aspect-ratio: 1;" 
599                                    /> 
600                                </div> 
601                                </#if> 
602 
603                            </div> 
604                        </div> 
605                        </#items> 
606                    </div> 
607                </section> 
608                </#list> 
609 
610                <#if ServiziPresentiNelLuogo.getData()?has_content> 
611                <section class="it-page-section mb-30" id="services"> 
612                    <h2 class="title-xxlarge mb-3"><@liferay.language key="offered-services" /></h2> 
613                    <div class="richtext-wrapper lora"> 
614                        ${ServiziPresentiNelLuogo.getData()} 
615                    </div> 
616                </section> 
617                </#if> 
618 
619                <#if ModalitaAccesso.getData()?has_content> 
620                <section class="it-page-section mb-30" id="access"> 
621                    <h2 class="title-xxlarge mb-3"><@liferay.language key="access-mode" /></h2> 
622                    <div class="richtext-wrapper lora"> 
623                        ${ModalitaAccesso.getData()} 
624                    </div> 
625                </section> 
626                </#if> 
627 
628                <#if Indirizzo.getData()?has_content> 
629                <section class="it-page-section mb-30" id="location"> 
630                    <h2 class="title-xxlarge mb-3"><@liferay.language key="address" /></h2> 
631                    <div class="map-wrapper row"> 
632                        <div class="col-12"> 
633 
634                            <#assign 
635                                latitude = 0 
636                                longitude = 0 
637                            /> 
638 
639                            <#--  Le coordinate definite dall'utente nei campi di testo hanno la precedenza su quelli definiti tramite marker  --> 
640                            <#if has_custom_coordinates> 
641 
642                                <#assign 
643                                    latitude = custom_lat 
644                                    longitude = custom_lng 
645                                /> 
646 
647                            <#elseif (Geolocalizzazione.getData() != "")> 
648                                <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(Geolocalizzazione.getData())> 
649 
650                                <#assign latitude = geolocationJSONObject.getDouble("lat")> 
651                                <#assign longitude = geolocationJSONObject.getDouble("lng")> 
652                            </#if> 
653 
654                            <#if latitude?has_content && longitude?has_content> 
655 
656                                <@liferay_map["map-display"] 
657                                    geolocation=true 
658                                    latitude=latitude 
659                                    longitude=longitude 
660                                    name="Geolocalizzazione${random.nextInt()}" 
661                                /> 
662 
663                                <div class="mt-2 d-flex flex-wrap align-items-center"> 
664                                    <small class="small text-muted d-inline-block me-3"><@liferay.language key="latitude" />: ${latitude}</small> 
665                                    <small class="small text-muted d-inline-block"><@liferay.language key="longitude" />: ${longitude}</small> 
666                                </div> 
667 
668                            </#if> 
669                        </div> 
670                    </div> 
671                    <div class="richtext-wrapper lora mt-4"> 
672                        <#if (Indirizzo.getData())??> 
673                        <div> 
674                            <span class="fw-semibold"><@liferay.language key="address" />: </span>${Indirizzo.getData()} 
675                        </div> 
676                        </#if> 
677                        <#if (CAP.getData())??> 
678                        <div> 
679                            <span class="fw-semibold"><@liferay.language key="zip" />: </span>${CAP.getData()} 
680                        </div> 
681                        </#if> 
682                        <#if (Quartiere.getData())?? && Quartiere.getData()?has_content> 
683                        <div> 
684                            <span class="fw-semibold"><@liferay.language key="district" />: </span>${Quartiere.getData()} 
685                        </div> 
686                        </#if> 
687                        <#if (Circoscrizione.getData())?? && Circoscrizione.getData()?has_content> 
688                        <div> 
689                            <span class="fw-semibold"><@liferay.language key="precinct" />: </span>${Circoscrizione.getData()} 
690                        </div> 
691                        </#if> 
692                    </div> 
693                </section> 
694                </#if> 
695 
696                <#if OrarioPerIlPubblico.getData()?has_content> 
697                <section class="it-page-section mb-30" id="timetable"> 
698                    <h2 class="title-xxlarge mb-3"><@liferay.language key="opening-times" /></h2> 
699                    <div class="richtext-wrapper lora"> 
700                        ${OrarioPerIlPubblico.getData()} 
701                    </div> 
702                </section> 
703                </#if> 
704 
705 
706                <#if has_contatti> 
707                <#list contatti_wallet> 
708 
709                <section class="it-page-section mb-30 pt-4" id="contacts"> 
710                    <h2 class="title-xxlarge mb-3"><@liferay.language key="contact" /></h2> 
711                    <div class="row"> 
712                        <div class="col-12 col-lg-6 shadow rounded p-3"> 
713                            <#items as contatto> 
714                            <div> 
715                                <#assign url_type="" /> 
716                                <#if 
717                                    contatto.tipo=="Email" 
718                                    || contatto.tipo=="PEC" 
719
720                                    <#assign url_type="mailto:" /> 
721                                <#elseif 
722                                    contatto.tipo=="Telefono" 
723                                    || contatto.tipo=="Whatsapp" 
724                                    || contatto.tipo=="Telegram" 
725
726                                    <#assign url_type="tel:" /> 
727                                </#if> 
728                                <span class="fw-semibold"> 
729                                    <@liferay.language key="${contatto.tipo?replace(' ', '-')}" />:</span> 
730                                <span class="ms-1"> 
731                                    <a 
732                                        href="${url_type}${contatto.valore}" 
733                                        target="_blank" 
734                                        class="t-primary" 
735
736                                        ${contatto.valore} 
737                                    </a> 
738                                </span> 
739                            </div> 
740                            </#items> 
741                        </div> 
742                    </div> 
743                </section> 
744 
745                </#list> 
746                </#if> 
747 
748                <#if has_struttura_responsabile && nome_struttura?has_content> 
749                <section class="it-page-section mb-30" id="chief-uo"> 
750                    <h2 class="title-xxlarge mb-3"><@liferay.language key="chief-UO" /></h2> 
751                    <div class="col-12 col-md-8 col-lg-6 mb-30 ps-0"> 
752                        <div class="card-wrapper rounded h-auto mt-10"> 
753                            <div class="card card-teaser card-teaser-info rounded shadow-sm p-3"> 
754                                <div class="card-body pe-3"> 
755                                    <a href="${url_struttura}"> 
756                                        <p class="card-title fw-semibold text-paragraph-regular-medium-semi mb-0 primary-color-b3"> 
757                                            ${nome_struttura} 
758                                        </p> 
759                                    </a> 
760                                    <div class="card-text"> 
761                                        <#if orari_struttura?has_content> 
762                                        <p class="u-main-black" style="word-break: break-word; font-size: 1rem !important;"> 
763                                            ${orari_struttura} 
764                                        </p> 
765                                        </#if> 
766                                        <#if indirizzo_struttura?has_content> 
767                                        <small class="small text-muted mt-3" style="word-break: break-word;"> 
768                                            ${indirizzo_struttura} 
769                                        </small> 
770                                        </#if> 
771                                    </div> 
772                                </div> 
773 
774                                <#if immagine_struttura?has_content && immagine_struttura.url?has_content> 
775                                <div class="avatar size-xl"> 
776                                    <img 
777                                        alt="${immagine_struttura.alt}" 
778                                        src="${immagine_struttura.url}" 
779                                        style="aspect-ratio: 1;" 
780                                    /> 
781                                </div> 
782                                </#if> 
783 
784                            </div> 
785                        </div> 
786                    </div> 
787                </section> 
788                </#if> 
789 
790                <#if UlterioriInformazioni.getData()?has_content> 
791                <section class="it-page-section mb-30" id="more-info"> 
792                    <h2 class="title-xxlarge mb-3"><@liferay.language key="additional-information" /></h2> 
793                    <div class="richtext-wrapper lora"> 
794                        ${UlterioriInformazioni.getData()} 
795                    </div> 
796                </section> 
797                </#if> 
798 
799                <#-- ARGOMENTI E CATEGORIE --> 
800                <div class="border-top border-light pt-4 mt-2 mb-30"> 
801                    <#list argomenti> 
802                    <span class="text-paragraph-small fw-semibold"><@liferay.language key="topics" />:</span> 
803                    <ul class="d-flex flex-wrap gap-2 mt-10 mb-3"> 
804                        <#items as argomento> 
805                        <li> 
806                            <a href="${argomento.url}" class="chip chip-simple"> 
807                                <span class="chip-label">${argomento.name}</span> 
808                            </a> 
809                        </li> 
810                        </#items> 
811                    </ul> 
812                    </#list> 
813 
814                    <div class="mt-3"> 
815                        <#-- DATA ULTIMA MODIFICA --> 
816                        <#assign 
817                            modifiedDate = dateUtil.parseDate("EEE, d MMM yyyy HH:mm:ss Z", .vars['reserved-article-modified-date'].data, localeUtil.getDefault()) 
818                            displayModifiedDate = modifiedDate?datetime?string.short 
819                        /> 
820 
821                        <p class="text-paragraph-small mb-0 lora"> 
822                            <span class="fw-semibold"><@liferay.language key="last-update-date" />: </span> 
823                            <span> 
824                                ${displayModifiedDate} 
825                            </span> 
826                        </p> 
827                    </div> 
828 
829                </div> 
830            </div> 
831        </div> 
832    </div> 
833</div> 
834 
835<script defer> 
836    document.querySelectorAll(".mail-anchor").forEach(anchor => anchor.href = "mailto:&subject=${Titolo.getData()}&body=" + window.location.href) 
837 
838    function shareOn(type) { 
839        let articleUrl = window.location.href; 
840        const mapping = { 
841            "facebook": "https://facebook.com/sharer/sharer.php?u=" + articleUrl, 
842            "twitter": "https://twitter.com/intent/tweet/?text=" + articleUrl, 
843            "linkedin": "http://www.linkedin.com/sharing/share-offsite/?url=" + articleUrl, 
844            "whatsapp": "whatsapp://send?text=" + articleUrl 
845
846 
847        window.open(mapping[type], "_blank"); 
848        return 
849
850 
851    function bringMeTo(id) { 
852        document.getElementById(id).scrollIntoView({behavior: 'smooth'}); 
853
854</script> 
855 
856<script> 
857    // Function to dynamically load a script 
858    function loadScript(src) { 
859        return new Promise((resolve, reject) => { 
860            const script = document.createElement('script'); 
861            script.src = src; 
862            script.onload = resolve; 
863            script.onerror = reject; 
864            document.head.appendChild(script); 
865        }); 
866
867 
868    // Initialize all Splide elements on the page 
869    async function initializeSplides() { 
870        const splideElements = document.querySelectorAll('.splide'); 
871 
872        // Check if there are any Splide elements on the page 
873        if (splideElements.length === 0) { 
874            return; 
875
876 
877        // Dynamically load Splide.js 
878        try { 
879            await loadScript('https://cdn.jsdelivr.net/npm/@splidejs/splide/dist/js/splide.min.js'); 
880 
881            // Initialize each Splide element 
882            splideElements.forEach((splideElement) => { 
883                // Check if Splide is already initialized for this element 
884                if (splideElement.classList.contains('is-initialized')) { 
885                    return; 
886
887 
888                // Initialize Splide 
889                const splide = new Splide(splideElement, { 
890                    type: 'slide', 
891                    perPage: 3, 
892                    gap: 24, 
893                    padding: { left: 0, right: 0 }, 
894                    arrows: false, 
895                    breakpoints: { 
896                        768: { 
897                            perPage: 1, 
898                            gap: 24, 
899                            padding: { left: 0, right: 0 }, 
900                            arrows: false, 
901                        }, 
902                        992: { 
903                            perPage: 2, 
904                            gap: 24, 
905                            padding: { left: 40, right: 40 }, 
906                            arrows: false, 
907                        }, 
908                    }, 
909                }); 
910 
911                splide.mount(); 
912 
913                // Mark Splide as initialized 
914                splideElement.classList.add('is-initialized'); 
915            }); 
916        } catch (error) { 
917            console.error("Failed to load Splide.js", error); 
918
919
920 
921    // Run the initializer after a 3-second delay 
922    setTimeout(() => { 
923        initializeSplides(); 
924    }, 3000); 
925</script> 
926 
927<#macro navigatorLink sectionId title> 
928<#local desc = "" /> 
929 
930<#if title?? && title?has_content> 
931    <#local desc = title /> 
932<#else> 
933    <#local desc = sectionId /> 
934</#if> 
935 
936<li class="nav-item"> 
937    <a 
938        class="nav-link active" 
939        onclick="bringMeTo('${sectionId}')" 
940        role="button" 
941        aria-label="${languageUtil.get(locale, 'go-to-section')}: ${title}" 
942
943        <span class="title-medium">${title}</span> 
944    </a> 
945</li> 
946</#macro>