Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> response.data.docs.getJSONObject(0)  [in template "3572636#3572671#4212428" at line 27, column 24]

----
Tip: If the failing expression is known to be 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: #assign doc = response.data.docs.getJ...  [in template "3572636#3572671#4212428" at line 27, column 9]
----
1<#import "_TEMPLATE_CONTEXT_/3572636/3574130/23609/3793037" as d40> 
2 
3<#setting url_escaping_charset="UTF-8"> 
4 
5<#assign 
6    PUTIL = objectUtil("com.liferay.portal.kernel.util.PortalUtil") 
7    uuid = themeDisplay.getURLCurrent()?keep_after("-/c/n/")?keep_before("?")?keep_after_last("_") 
8    langId = locale?keep_before("_") 
9    contentType = "event" 
10    vueActions = "" 
11    doc = "" 
12    lat = "0" 
13    lng = "0" 
14    hasCoords = false 
15/> 
16<#-- <#assign z=request.setAttribute("ogTitle","title")> 
17<#assign z=request.setAttribute("ogImage","imgg")> 
18<#assign z=request.setAttribute("ogDesc","desc")> --> 
19 
20<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
21<#assign z=request.setAttribute("ogUrl","${currentUrl}")> 
22 
23<#if uuid?has_content> 
24    <#assign response = d40.fetchData("https://guestapp.d40.it/v1/search/apt-trento/${contentType}/?uuid=${uuid}&active=false")> 
25     
26    <#if !response.error && response.data.docs?has_content> 
27        <#assign doc = response.data.docs.getJSONObject(0)> 
28         
29        ${request.session.removeAttribute("circularCategories")} 
30        ${request.session.setAttribute("circularCategories", doc.details.assetCategoryIds)} 
31    </#if> 
32</#if> 
33 
34<#if doc?has_content> 
35    <#if doc.details?? && doc.details.name[langId]?has_content> 
36        ${PUTIL.setPageTitle(doc.details.name[langId], request)} 
37    </#if> 
38     
39    <#assign vueActions = "getFavorites();"> 
40     
41    <#if doc.details.location.geoCoords.lat?has_content && doc.details.location.geoCoords.lon?has_content> 
42        <#assign 
43            hasCoords = true 
44            lat = doc.details.location.geoCoords.lat 
45            lng = doc.details.location.geoCoords.lon 
46            vueActions = "getFavorites();buildMap(${lat}, ${lng})" 
47        /> 
48    </#if> 
49</#if> 
50 
51<style> 
52    .swiper-button-next:after{ 
53        content: ""; 
54
55    .swiper-button-prev:after{ 
56        content: ""; 
57
58    .bg-darkgray{ 
59        background-color: #e5e5e5 !important; 
60
61    .min-h-12{ 
62        min-height: 3rem; 
63
64    .-ml-5{ 
65        margin-left: -5%; 
66
67</style> 
68 
69<div v-scope id="${d40.portletNamespace}" @vue:mounted="${vueActions}" v-cloak> 
70    <#if doc?has_content> 
71        <#if themeDisplay.getLayout().getAncestors()?has_content> 
72            <section id="breadcrumb" class="z-15 mt-25"> 
73                <div class="container"> 
74                    <ol class="breadcrumb flex lg:justify-center"> 
75                        <li class="pl-1 text-sm mr-2 relative">${d40.getLabel("sei_in")}:</li> 
76                         
77                        <li class="breadcrumb-item"> 
78                            <a href="/" class="breadcrumb-link" title="Home"> 
79                                <span class="breadcrumb-text-truncate text-dark underline">Home</span> 
80                            </a> 
81                        </li> 
82                         
83                        <#list themeDisplay.getLayout().getAncestors()?reverse as ancestor> 
84                            <li class="breadcrumb-item"> 
85                                <a href="${ancestor.getFriendlyURL()}" class="breadcrumb-link" title="${d40.escape(ancestor.getHTMLTitle(locale))}"> 
86                                    <span class="breadcrumb-text-truncate text-dark underline"> 
87                                        ${d40.escape(ancestor.getHTMLTitle(locale))} 
88                                    </span> 
89                                </a> 
90                            </li> 
91                        </#list> 
92                         
93                        <li class="breadcrumb-item active"> 
94                            <span class="breadcrumb-text-truncate text-dark"> 
95                                ${doc.details.name[langId]} 
96                            </span> 
97                        </li> 
98                    </ol> 
99                </div> 
100            </section> 
101        </#if> 
102         
103        <section class="relative mt-20"> 
104            <div class="container"> 
105                <div class="row"> 
106                    <div class="col-12 col-lg-7"> 
107                        <div class="card-row flex-col lg:flex-row mb-10"> 
108                            <div class="autofit-col autofit-col-expand order-2 lg:order-1"> 
109                                <div class="autofit-section"> 
110                                    <p class="text-dark font-semibold font-heading text-3xl lg:text-4xl uppercase"> 
111                                        ${doc.details.name[langId]} 
112                                         
113                                        <#assign z=request.setAttribute("ogTitle","${doc.details.name[langId]}")> 
114                                         
115                                    </p> 
116                                </div> 
117                            </div> 
118                            <div class="autofit-col justify-start order-1 lg:order-2 mb-3 lg:mb-0"> 
119                                <div class="autofit-section"> 
120                                    <div class="flex space-x-4"> 
121                                        <button type="button" v-if="isFavorite('${doc.uuid}')" @click="removeFavorite($event, '${doc.uuid}')" class="btn btn-link px-2"> 
122                                            <i class="fas fa-heart text-dark fa-2x"></i> 
123                                        </button> 
124                                        <button type="button" v-else @click="setFavorite($event, {id: '${doc.uuid}', contentJSON: {title: '${doc.details.name[langId]?js_string}', previewDescription: '', description: '', geoRef: '', previewPicture: '${d40.getDTNPreview(doc)}', viewUrl: '${d40.getDTNUrl(doc.details.name[langId], doc.uuid, contentType)}'}})" class="btn btn-link px-2"> 
125                                            <i class="fal fa-heart text-dark fa-2x"></i> 
126                                        </button> 
127                                         
128                                        <button type="button" @click="share('${doc.details.name[langId]}', '')" class="btn btn-link px-2"> 
129                                            <i class="fas fa-share-alt text-dark fa-2x"></i> 
130                                        </button> 
131                                    </div> 
132                                </div> 
133                            </div> 
134                        </div> 
135                         
136                        <#if doc.details.description[langId]?has_content> 
137                            <div class="underline-grow text-dark font-light lg:text-lg leading-loose"> 
138                                ${doc.details.description[langId]} 
139                                 
140                                <#if doc.details.description[langId]?length lt 160> 
141                                    <#assign  
142                                        z=request.setAttribute("ogDesc","${htmlUtil.stripHtml(doc.details.description[langId])}") 
143                                    /> 
144                                <#else> 
145                                    <#assign  
146                                        z=request.setAttribute("ogDesc","${htmlUtil.stripHtml(doc.details.description[langId])?substring(0,160)}") 
147                                    /> 
148                                </#if> 
149                                 
150                            </div> 
151                        </#if> 
152                         
153                        <#if doc.timetables.timeDescription[langId]?has_content> 
154                            <div class="text-dark text-lg font-light mb-5 mt-10"> 
155                                ${doc.timetables.timeDescription[langId]?keep_before("<br><p><b>")} 
156                            </div> 
157                        </#if> 
158                         
159                        <#if doc.details.howToArrive?has_content && doc.details.howToArrive[langId]?has_content> 
160                            <div class="text-dark text-lg font-light mb-5 mt-10"> 
161                                <b>${d40.getLabel("come_arrivare")}:</b> 
162                                ${doc.details.howToArrive[langId]} 
163                            </div> 
164                        </#if> 
165                         
166                        <#-- <#if d40.isDev> --> 
167                        <#if doc.booking?has_content> 
168                            <#if doc.booking.bookable?has_content && doc.booking.bookable> 
169                                <#if doc.booking.standartPrices?has_content> 
170                                    <#attempt> 
171                                        <div class="text-dark text-lg font-light mb-5 mt-10"> 
172                                            <#list doc.booking.standartPrices.iterator() as single_price > 
173                                                <#if single_price[langId]?has_content> 
174                                                 
175                                                    <#if single_price?index == 0> 
176                                                        <p class="mt-3"><b>${d40.getLabel("costo_biglietto")}:</b></p> 
177                                                        <ul style="padding-left:0;list-style: none;"> 
178                                                    </#if> 
179                                                 
180                                                    <li> 
181                                                        • ${single_price[langId]} 
182                                                    </li> 
183                                                </#if> 
184                                            </#list> 
185                                            </ul> 
186                                        </div> 
187                                    <#recover> 
188                                        <div style="display:none !important;"></div> 
189                                    </#attempt> 
190                                </#if> 
191                            </#if> 
192                        </#if> 
193                        <#-- </#if> --> 
194 
195                    </div> 
196                     
197                    <div class="xl:absolute col-12 col-lg-5 xl:max-w-xl lg:right-0"> 
198                        <div class="bg-light"> 
199                            <div class="card-body px-5 pt-5 lg:px-10 lg:pt-10 pb-0"> 
200                                <p class="text-dark font-bold uppercase text-lg mb-0"> 
201                                    ${d40.getLabel("informazioni_contatti")} 
202                                </p> 
203                                <#if doc.details.townLabel != "{}"> 
204                                    <p class="text-dark text-lg mb-0"> 
205                                        ${d40.getLabel("localita")}: <span class="text-capitalize">${doc.details.townLabel[langId]}</span> 
206                                    </p> 
207                                </#if> 
208                                <#if doc.details.location.address.fulltext?? && doc.details.location.address.fulltext?has_content> 
209                                    <p class="text-dark text-lg mb-0"> 
210                                        ${doc.details.location.address.fulltext} 
211                                    </p> 
212                                </#if> 
213                                <#if doc.timetables.timeInfos?has_content> 
214                                    <p class="text-dark font-bold text-lg mb-0 mt-3"> 
215                                        ${d40.getLabel("date_evento")} 
216                                    </p> 
217                                </#if> 
218                            </div> 
219                             
220                            <#if doc.timetables.timeInfos?has_content> 
221                                <div class="flex min-h-12"> 
222                                    <details class="bg-darkgray w-full lg:w-105% right-0 -ml-5"> 
223                                        <summary class="btn btn-link text-dark no-underline my-1 ml-12"> 
224                                            <i class="fal fa-calendar-alt"></i> 
225                                             
226                                            <#attempt> 
227                                                <#assign day_count = 0> 
228                                                 
229                                                <#list doc.timetables.timeInfos.getJSONObject(0).openingDays.iterator()?keys as single_day > 
230                                                    <#assign day_count += 1> 
231                                                </#list> 
232                                                 
233                                                <div style="display:none !important;"> 
234                                                    ${jsonFactoryUtil.looseSerialize(day_count)} 
235                                                </div> 
236                                            <#recover> 
237                                                <#assign test = doc.timetables.timeInfos.getJSONObject(0).openingDays /> 
238                                                <div style="display:none !important;"> 
239 
240                                                </div> 
241                                            </#attempt> 
242                                             
243                                             
244                                            <#assign  
245                                                split_fdf = doc.timetables.timeRange.rangeFrom?split('-')  
246                                                split_fdt = doc.timetables.timeRange.rangeTo?split('-') 
247                                                fdf = split_fdf[2]+"."+split_fdf[1]+"."+split_fdf[0] 
248                                                fdt = split_fdt[2]+"."+split_fdt[1]+"."+split_fdt[0] 
249 
250                                            />    
251                                             
252                                            <#if fdf == fdt> 
253                                                ${fdf} 
254                                            <#else> 
255                                                <#if uuid == 'c8637ac5-e494-57ad-b04c-70a592de363c'> 
256                                                    ${d40.getLabel("dal")} 26.10.2024 ${d40.getLabel("al")} 27.10.2024 
257                                                <#else> 
258                                                    ${d40.getLabel("dal")} ${fdf} ${d40.getLabel("al")} ${fdt} 
259                                                </#if> 
260                                            </#if> 
261                                             
262                                            <i class="fal fa-chevron-down fa-lg ml-5"></i> 
263                                        </summary> 
264                                         
265                                        <#if doc.timetables.timeDescription[langId]?has_content> 
266                                            <div class="card-body px-5 lg:px-15" style="display:none"> 
267                                                <div class="text-dark"> 
268                                                    ${doc.timetables.timeDescription[langId]?keep_after('<br>')?keep_before("<br><p><b>")} 
269                                                </div> 
270                                            </div> 
271                                        </#if> 
272                                         
273                                        <#-- <#if d40.isDev> --> 
274                                        <#if doc.booking?has_content> 
275                                            <#if doc.booking.bookable?has_content && doc.booking.bookable> 
276                                                <#if doc.booking.standartPrices?has_content && doc.booking.standartPrices.iterator()?has_content> 
277                                                    <#attempt> 
278                                                        <div class="card-body px-5 lg:px-15"> 
279                                                            <#list doc.booking.standartPrices.iterator() as single_price > 
280                                                                <#if single_price[langId]?has_content> 
281                                                                 
282                                                                    <#if single_price?index == 0> 
283                                                                        <p class="mt-3"><b>${d40.getLabel("costo_biglietto")}:</b></p> 
284                                                                        <ul style="padding-left:0;list-style: none;"> 
285                                                                    </#if> 
286                                                                 
287                                                                    <li> 
288                                                                        • ${single_price[langId]} 
289                                                                    </li> 
290                                                                </#if> 
291                                                            </#list> 
292                                                            </ul> 
293                                                        </div> 
294                                                    <#recover> 
295                                                        <div style="display:none !important;"></div> 
296                                                    </#attempt> 
297                                                </#if> 
298                                            </#if> 
299                                        </#if> 
300                                        <#-- </#if> --> 
301                                         
302                                        <div class="card-body px-5 lg:px-10" > 
303                                            <ul> 
304                                                <#list doc.timetables.timeInfos.iterator() as datetime> 
305                                                    <li class="text-dark mb-1"> 
306 
307                                                        <#assign  
308                                                            split_df = datetime.dateFrom?split('-')  
309                                                            split_dt = datetime.dateTo?split('-') 
310                                                            df = split_df[2]+"."+split_df[1]+"."+split_df[0] 
311                                                            dt = split_dt[2]+"."+split_dt[1]+"."+split_dt[0] 
312                                                            tf = datetime.timeFrom 
313                                                            tt = datetime.timeTo 
314                                                        />    
315                                                         
316                                                        <#if df == dt> 
317                                                            <#if tf == '00:00' && tt == '23:59'> 
318                                                                ${d40.getLabel("il")} ${df} 
319                                                            <#else> 
320                                                                ${d40.getLabel("il")} ${df} - ${tf} - ${tt} 
321                                                            </#if> 
322                                                        <#else> 
323                                                            <#if tf == '00:00' && tt == '23:59'> 
324                                                                ${d40.getLabel("dal")} ${df} ${d40.getLabel("al")} ${dt} 
325                                                            <#else> 
326                                                                ${d40.getLabel("dal")} ${df} ${d40.getLabel("al")} ${dt} - ${tf} - ${tt} 
327                                                            </#if> 
328                                                        </#if> 
329                                                    </li> 
330                                                </#list> 
331                                            </ul> 
332                                        </div> 
333                                    </details> 
334                                </div> 
335                            </#if> 
336                             
337                            <div class="card-body px-5 lg:px-10"> 
338                                <#if doc.contacts.getJSONObject(0).address.fulltext?? && doc.contacts.getJSONObject(0).address.fulltext?has_content> 
339                                    <p class="text-dark font-bold uppercase text-lg mb-0"> 
340                                        ${d40.getLabel("organizzazione")} 
341                                    </p> 
342                                </#if> 
343 
344                                <#if doc.contacts.getJSONObject(0).supplierName?? && doc.contacts.getJSONObject(0).supplierName?has_content> 
345                                    <p class="text-dark text-lg mb-1 font-bold"> 
346                                        ${doc.contacts.getJSONObject(0).supplierName} 
347                                    </p> 
348                                </#if> 
349                             
350                                <#if doc.contacts.getJSONObject(0).address.fulltext?? && doc.contacts.getJSONObject(0).address.fulltext?has_content> 
351                                    <p class="text-dark text-lg mb-1"> 
352                                        ${doc.contacts.getJSONObject(0).address.fulltext} 
353                                    </p> 
354                                </#if> 
355                                 
356                                <#if doc.contacts.getJSONObject(0).telephone?? && doc.contacts.getJSONObject(0).telephone?has_content> 
357                                    <#list doc.contacts.getJSONObject(0).telephone.iterator() as phone> 
358                                        <#if phone?? && phone?has_content> 
359                                            <a href="tel:${phone}" class="block no-underline text-dark text-lg space-x-2 mb-0"> 
360                                                <#assign clear_phone = phone?replace('+39', '')/> 
361                                                <#if clear_phone?starts_with("0461")> 
362                                                    <#assign display_phone = clear_phone?replace('0461', '0461 ')/> 
363                                                <#else> 
364                                                    <#attempt> 
365                                                        <#assign  
366                                                            pre_chunk = clear_phone[0..2] 
367                                                            display_phone = pre_chunk+" "+clear_phone[3..] 
368                                                        /> 
369                                                    <#recover> 
370                                                    </#attempt> 
371                                                </#if> 
372     
373                                                <#if display_phone?? && display_phone?has_content> 
374                                                    <i class="far fa-phone text-dark"></i> 
375                                                    <u>${display_phone}</u> 
376                                                </#if> 
377                                            </a> 
378                                        </#if> 
379                                    </#list> 
380                                </#if> 
381                                <#if doc.contacts.getJSONObject(0).mail?? && doc.contacts.getJSONObject(0).mail?has_content> 
382                                    <a href="mailto:${doc.contacts.getJSONObject(0).mail}" class="block no-underline text-dark text-lg space-x-2 mb-0"> 
383                                        <i class="far fa-envelope text-dark"></i> 
384                                        <u>${doc.contacts.getJSONObject(0).mail}</u> 
385                                    </a> 
386                                </#if> 
387                                <#if doc.contacts.getJSONObject(0).websiteUrl[langId]?? && doc.contacts.getJSONObject(0).websiteUrl[langId]?has_content> 
388                                    <a href="${doc.contacts.getJSONObject(0).websiteUrl[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
389                                        <i class="far fa-external-link text-dark"></i> 
390                                        <u>${d40.getLabel("sito_web")}</u> 
391                                    </a> 
392                                </#if> 
393                                 
394                                <#if doc.contacts.getJSONObject(0).socialRefs.facebook?? && doc.contacts.getJSONObject(0).socialRefs.facebook?has_content> 
395                                    <a href="${doc.contacts.getJSONObject(0).socialRefs.facebook[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
396                                        <i class="fab fa-facebook-square text-dark"></i> 
397                                        <u>facebook</u> 
398                                    </a> 
399                                </#if> 
400                                 
401                                <#if doc.contacts.getJSONObject(0).socialRefs.twitter?? && doc.contacts.getJSONObject(0).socialRefs.twitter?has_content> 
402                                    <a href="${doc.contacts.getJSONObject(0).socialRefs.twitter[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
403                                        <i class="fab fa-twitter-square text-dark"></i> 
404                                        <u>twitter</u> 
405                                    </a> 
406                                </#if> 
407                                 
408                                <#if doc.contacts.getJSONObject(0).socialRefs.instagram?? && doc.contacts.getJSONObject(0).socialRefs.instagram?has_content> 
409                                    <a href="${doc.contacts.getJSONObject(0).socialRefs.instagram[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
410                                        <i class="fab fa-instagram-square text-dark"></i> 
411                                        <u>instagram</u> 
412                                    </a> 
413                                </#if> 
414                                 
415                                <#if langId == 'en'> 
416                                    <#assign ri_url = "/contact-tourist-office-trento" /> 
417                                <#elseif langId == 'de'> 
418                                    <#assign ri_url = "/kontakt-info-anfrage-trento" /> 
419                                <#else> 
420                                    <#assign ri_url = "/richiesta-informazioni" /> 
421                                </#if> 
422                                 
423                                <a href="#contact-form" class="btn bg-green text-white font-bold uppercase px-4 py-2 rounded-0 mt-10"> 
424                                    ${d40.getLabel("richiedi_info")} 
425                                </a> 
426                                 
427                                <#attempt> 
428                                    <#if doc.booking.bookingLink?has_content && doc.booking.bookingLink[langId]?has_content> 
429                                        <a href="${doc.booking.bookingLink[langId]}" target="_blank" class="btn bg-green text-white font-bold uppercase px-4 py-2 rounded-0 mt-10"> 
430                                            ${d40.getLabel("prenota")} 
431                                        </a> 
432                                    </#if> 
433                                <#recover> 
434
435                                </#attempt> 
436                            </div> 
437                            <#if hasCoords> 
438                                <div class="relative flex h-70"> 
439                                    <div class="absolute w-full lg:w-105% h-full right-0"> 
440                                        <div id="suggesto-map" class="monochrome-map size-full border-0"></div> 
441                                    </div> 
442                                </div> 
443                             
444                                <div class="card-body p-5 lg:px-10"> 
445                                    <!-- https://www.google.com/maps/@${lat},${lng},14z --> 
446                                    <a href="https://www.google.com/maps/dir/?api=1&travelmode=driving&destination=${lat},${lng}" class="d-block no-underline space-x-5" target="_blank"> 
447                                        <span class="font-bold text-dark uppercase"> 
448                                            ${d40.getLabel("indicazioni_stradali")} 
449                                        </span> 
450                                        <img src="${d40.icons_folder}/arrow_circle-dark.svg" class="w-20" /> 
451                                    </a> 
452                                </div> 
453                            </#if> 
454                        </div> 
455                    </div> 
456                </div> 
457            </div> 
458        </section> 
459         
460        <#if doc.details.images?has_content> 
461            <#assign usePreview = false> 
462             
463            <section id="gallery" class="relative overflow-x-hidden mt-20 lg:mt-40"> 
464                <div class="container"> 
465                    <p class="text-dark uppercase text-lg lg:text-3xl mb-7"> 
466                        ${d40.getLabel("galleria_immagini")} 
467                    </p> 
468                     
469                    <div class="swiper-container"> 
470                        <div class="swiper-wrapper"> 
471                            <#if doc.details.cover != "[]"> 
472                                <#assign usePreview = true> 
473                                 
474                                <#list doc.details.cover.iterator() as pic> 
475                                    <div class="swiper-slide"> 
476                                        <a href="javascript:void(0);" class="card shadow-none border-0 bg-transparent no-underline" data-toggle="modal" data-target="#lightbox-modal" data-slider="${pic?index}" data-senna-off="true"> 
477                                            <div class="relative"> 
478                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload rounded-custom size-full fit-cover" alt="" /> 
479                                            </div> 
480                                        </a> 
481                                    </div> 
482                                     
483                                    <#-- assign z=request.setAttribute("ogImage","${pic[langId]}") --> 
484                                  <#assign z=request.setAttribute("ogImage","${d40.getKitPrefix(pic[langId], 'n-preview_h')}")>                                                                         
485                                     
486                                    <#break> 
487                                </#list> 
488                            </#if> 
489                             
490                            <#list doc.details.images.iterator() as pic> 
491                                <#if usePreview> 
492                                    <#assign counter = pic?counter> 
493                                <#else> 
494                                    <#assign counter = pic?index> 
495                                </#if> 
496                                 
497                                <div class="swiper-slide"> 
498                                    <a href="javascript:void(0);" class="card shadow-none border-0 bg-transparent no-underline" data-toggle="modal" data-target="#lightbox-modal" data-slider="${counter}" data-senna-off="true"> 
499                                        <div class="relative"> 
500                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload rounded-custom size-full fit-cover" alt="" /> 
501                                        </div> 
502                                    </a> 
503                                </div> 
504                            </#list> 
505                        </div> 
506                    </div> 
507                </div> 
508                <div class="btn-square absolute btn-prev bg-white left-0"> 
509                    <span class="sr-only">${d40.getLabel("precedente")}</span> 
510                    <i class="fas fa-chevron-left text-dark w-6 h-6"></i> 
511                </div> 
512                <div class="btn-square absolute btn-next bg-white right-0"> 
513                    <span class="sr-only">${d40.getLabel("successivo")}</span> 
514                    <i class="fas fa-chevron-right text-dark w-6 h-6"></i> 
515                </div> 
516            </section> 
517             
518            <div id="lightbox-modal" tabindex="-1" role="dialog" class="modal fade"> 
519                <div class="modal-dialog modal-full-screen inset-0 border-0 shadow-none"> 
520                    <div class="modal-content bg-transparent"> 
521                        <div class="modal-body overflow-hidden"> 
522                            <div class="absolute top-0 right-0 z-5"> 
523                                <button type="button" data-dismiss="modal" class="btn btn-monospaced btn-secondary m-3"> 
524                                    <span class="sr-only">${d40.getLabel("chiudi")}</span> 
525                                    <i class="fal fa-times fa-lg"></i> 
526                                </button> 
527                            </div> 
528                             
529                            <#-- lightbox --> 
530            				<div id="lightbox-swiper" class="swiper-container h-75 my-auto"> 
531            				    <div class="swiper-button-prev w-12 h-12"> 
532                                    <span class="sticker sticker-circle bg-green size-full"> 
533                                        <span class="sticker-overlay"> 
534                                            <i class="fas fa-chevron-left fa-2x text-white"></i> 
535                                        </span> 
536                                    </span> 
537                                </div> 
538                                 
539                                <div class="swiper-button-next w-12 h-12"> 
540                                    <span class="sticker sticker-circle bg-green size-full"> 
541                                        <span class="sticker-overlay"> 
542                                            <i class="fas fa-chevron-right fa-2x text-white"></i> 
543                                        </span> 
544                                    </span> 
545                                </div> 
546                                 
547                                <div class="swiper-wrapper h-full"> 
548                                    <#if doc.details.cover != "[]"> 
549                                        <#list doc.details.cover.iterator() as pic> 
550                                            <div class="swiper-slide h-full"> 
551                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-full_hd')}" loading="lazy" class="lazyload flex h-full object-contain mx-auto" alt=""> 
552                                            </div> 
553                                            <#break> 
554                                        </#list> 
555                                    </#if> 
556                                     
557                                    <#list doc.details.images.iterator() as pic> 
558                                        <div class="swiper-slide h-full"> 
559                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-full_hd')}" loading="lazy" class="lazyload flex h-full object-contain mx-auto" alt=""> 
560                                        </div> 
561                                    </#list> 
562                                </div> 
563                            </div> 
564                             
565                            <#-- thumbnails --> 
566            				<div id="thumbnail-swiper" class="swiper-container" thumbsSlider=""> 
567                                <div class="swiper-wrapper"> 
568                                    <#if doc.details.cover != "[]"> 
569                                        <#list doc.details.cover.iterator() as pic> 
570                                            <div class="swiper-slide"> 
571                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload object-cover cursor-pointer size-full" alt=""> 
572                                            </div> 
573                                            <#break> 
574                                        </#list> 
575                                    </#if> 
576                                     
577                                    <#list doc.details.images.iterator() as pic> 
578                                        <div class="swiper-slide"> 
579                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload object-cover cursor-pointer size-full" alt=""> 
580                                        </div> 
581                                    </#list> 
582                                </div> 
583                            </div> 
584                        </div> 
585                    </div> 
586                </div> 
587            </div> 
588        </#if> 
589         
590        <#-- SEZIONE NON USATA 
591        <section class="mt-20"> 
592            <div class="container"> 
593                <div class="bg-light max-w-xl p-5 lg:p-10"> 
594                    <div class="card-row space-x-5"> 
595                        <div class="autofit-col"> 
596                            <div class="autofit-section"> 
597                                <i class="fas fa-download text-dark w-7 h-7"></i> 
598                            </div> 
599                        </div> 
600                        <div class="autofit-col autofit-col-expand"> 
601                            <div class="autofit-section"> 
602                                <p class="text-dark font-bold text-lg lg:text-xl uppercase mb-0"> Programma completo </p> 
603                            </div> 
604                        </div> 
605                    </div> 
606                </div> 
607                 
608                <div class="row mt-10 lg:mt-20"> 
609                    <div class="col-12 col-lg-8"> 
610                        <div class="space-y-10"> 
611                            <p class="text-dark uppercase text-lg lg:text-3xl"> 
612                                ${d40.getLabel("dettagli")} 
613                            </p> 
614                            <div class="space-y-5"> 
615                                <div class="row"> 
616                                    <div class="col-12 col-md-3 col-lg-2"> 
617                                        <p class="text-dark font-bold uppercase">Data</p> 
618                                    </div> 
619                                    <div class="col-12 col-md-9 col-lg-10"> 
620                                        <div class="text-dark font-light text-lg"> 
621                                            Dettagli 
622                                        </div> 
623                                    </div> 
624                                </div> 
625                            </div> 
626                        </div> 
627                    </div> 
628                </div> 
629            </div> 
630        </section> 
631        --> 
632         
633        <#-- <section class="mt-20"> 
634            <div class="container"> 
635                <div class="bg-light"> 
636                    <div class="space-y-10 p-5 lg:p-10"> 
637                        <p class="text-dark uppercase text-lg lg:text-3xl mb-0"> 
638                            ${d40.getLabel("organizzazione")} 
639                        </p> 
640                        <div class="space-y-2"> 
641                            <#if doc.contacts.getJSONObject(0).address.fulltext?? && doc.contacts.getJSONObject(0).address.fulltext?has_content> 
642                                <p class="text-dark mb-0"> 
643                                    ${doc.contacts.getJSONObject(0).address.fulltext} 
644                                </p> 
645                            </#if> 
646                             
647                            <#if doc.contacts.getJSONObject(0).mail?? && doc.contacts.getJSONObject(0).mail?has_content> 
648                                <a href="mailto:${doc.contacts.getJSONObject(0).mail}" class="d-block text-dark underline"> 
649                                    ${doc.contacts.getJSONObject(0).mail} 
650                                </a> 
651                            </#if> 
652                             
653                            <#if doc.contacts.getJSONObject(0).telephone?? && doc.contacts.getJSONObject(0).telephone?has_content> 
654                                <#list doc.contacts.getJSONObject(0).telephone.iterator() as phone> 
655                                    <p class="text-dark mb-0"> 
656                                        <span class="font-bold">${d40.getLabel("telefono")}:</span> 
657                                        ${phone} 
658                                    </p> 
659                                </#list> 
660                            </#if> 
661                             
662                            <#if doc.contacts.getJSONObject(0).socialRefs.facebook?? && doc.contacts.getJSONObject(0).socialRefs.facebook?has_content> 
663                                <a href="${doc.contacts.getJSONObject(0).socialRefs.facebook[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
664                                    <i class="fab fa-facebook-square text-dark"></i> 
665                                    <u>facebook</u> 
666                                </a> 
667                            </#if> 
668                             
669                            <#if doc.contacts.getJSONObject(0).socialRefs.twitter?? && doc.contacts.getJSONObject(0).socialRefs.twitter?has_content> 
670                                <a href="${doc.contacts.getJSONObject(0).socialRefs.twitter[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
671                                    <i class="fab fa-twitter-square text-dark"></i> 
672                                    <u>twitter</u> 
673                                </a> 
674                            </#if> 
675                             
676                            <#if doc.contacts.getJSONObject(0).socialRefs.instagram?? && doc.contacts.getJSONObject(0).socialRefs.instagram?has_content> 
677                                <a href="${doc.contacts.getJSONObject(0).socialRefs.instagram[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
678                                    <i class="fab fa-instagram-square text-dark"></i> 
679                                    <u>instagram</u> 
680                                </a> 
681                            </#if> 
682                        </div> 
683                    </div> 
684                </div> 
685            </div> 
686        </section> --> 
687         
688        <#-- SEZIONE NON USATA 
689        <section class="mt-10"> 
690            <div class="container"> 
691                <p class="text-dark uppercase text-lg lg:text-3xl mb-7"> Info sezione </p> 
692                <p class="text-dark text-lg font-light mb-0"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. </p> 
693            </div> 
694        </section> 
695        --> 
696    <#else> 
697        <div class="text-center mt-35"> 
698            <p class="text-dark"> 
699                ${d40.getLabel("errore_caricamento_contenuto")} 
700            </p> 
701        </div> 
702    </#if> 
703</div> 
704 
705<script type="module"> 
706    import { createApp } from "https://cdnjs.cloudflare.com/ajax/libs/petite-vue/0.4.1/petite-vue.es.min.js"; 
707 
708    createApp({ 
709        isMobile: window.innerWidth < 768, 
710        favorites: [], 
711        getFavorites() { 
712            if(localStorage.getItem("favorites") !== null) { 
713    			this.favorites = JSON.parse(localStorage.getItem("favorites")); 
714
715        }, 
716        setFavorite(e, item) { 
717            e.preventDefault(); 
718    		this.getFavorites(); 
719     
720    		var newFavorite = { 
721    			id: item.id, 
722        			contentJSON: { 
723    				title: item.contentJSON.title, 
724    				previewDescription: item.contentJSON.previewDescription, 
725    				description: item.contentJSON.description, 
726    				geoRef: item.contentJSON.geoRef, 
727    				previewPicture: item.contentJSON.previewPicture, 
728    				viewUrl: item.contentJSON.viewUrl, 
729    				type: "lfr", 
730
731    		}; 
732     
733    		this.favorites.push(newFavorite); 
734    		this.saveFavorites(); 
735    	}, 
736    	removeFavorite(e, itemId) { 
737    	    e.preventDefault(); 
738    		this.favorites = this.favorites.filter((obj) => obj.id !== itemId); 
739    		this.saveFavorites(); 
740    	}, 
741    	saveFavorites() { 
742    		localStorage.setItem("favorites", JSON.stringify(this.favorites)); 
743    	}, 
744    	isFavorite(itemId) { 
745    		if (this.favorites.some((e) => e.id == itemId)) { 
746    			return true; 
747
748     
749    		return false; 
750    	}, 
751    	buildMap(lat, lng) { 
752            var map = new SuggestoMap("suggesto-map"), 
753                location = [parseFloat(lat), parseFloat(lng)]; 
754             
755            var svgIcon = L.divIcon({ 
756                html: ` 
757                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44.537 64.343"> 
758                        <path d="M32.952,68c-4.491-5.935-9.221-11.692-12.837-18.251-3.4-6.175-5.892-12.453-4.094-19.725,2.422-9.787,12.253-17.363,22.112-16.878,11.322.558,20.189,8.638,21.649,19.385.8,5.867-1.25,10.892-3.84,15.837A105.38,105.38,0,0,1,43.958,65.889c-.687.844-1.309,1.739-1.96,2.611-.953,1.06-1.971,2.068-2.841,3.191-.965,1.245-1.729,1.629-2.844.1A50.506,50.506,0,0,0,32.952,68m4.722-46.328A14.156,14.156,0,0,0,23.76,35.59c-.168,7.053,6.542,13.748,13.813,13.783A14.234,14.234,0,0,0,51.46,35.693,14.138,14.138,0,0,0,37.674,21.676" transform="translate(-15.419 -13.129)" fill="#5098c6"/> 
759                        <path d="M31.941,63.206A50.288,50.288,0,0,1,35.3,67c1.116,1.526,1.878,1.142,2.844-.1.87-1.123,1.889-2.132,2.841-3.191a8.579,8.579,0,0,1,5.414,2.22c1.659,1.642,1.586,3.631-.455,4.627a21.209,21.209,0,0,1-16.871.723c-1.611-.565-3.293-1.51-3.092-3.645.19-2.018,1.855-2.718,3.511-3.342.833-.315,1.791-.363,2.447-1.079" transform="translate(-14.408 -8.331)" fill="#222"/> 
760                        <path d="M36.946,20.929A14.137,14.137,0,0,1,50.732,34.944,14.236,14.236,0,0,1,36.844,48.626c-7.27-.036-13.98-6.732-13.813-13.783A14.157,14.157,0,0,1,36.946,20.929m-.023,5.445a8.4,8.4,0,1,0,8.394,8.22,8.5,8.5,0,0,0-8.394-8.22" transform="translate(-14.69 -12.381)" fill="#fdfcf9"/> 
761                        <path d="M36.45,25.9a8.4,8.4,0,0,1,.077,16.809A8.405,8.405,0,1,1,36.45,25.9" transform="translate(-14.218 -11.905)" fill="#222"/> 
762                    </svg>`, 
763                className: "", 
764                iconSize: [44.537, 64.343], 
765                iconAnchor: [22.287, 64.343], 
766            }); 
767                 
768            var mapData = { 
769                tilelayer: "osm", 
770                gestureHandling: true, 
771                fitBounds: false, 
772                mapcenter: location, 
773                zoom: 15, 
774                markersFilter: "*", 
775                markers: [], 
776                layers: [] 
777            }; 
778                 
779            map.sm.createMap(mapData); 
780             
781            L.circleMarker(location, { 
782                radius: 0, 
783                color: "#000", 
784                fillOpacity: 0, 
785                weight: 0 
786            }).addTo(map.sm.lmap); 
787             
788            L.marker(location, { 
789                icon: svgIcon 
790            }).addTo(map.sm.lmap); 
791        }, 
792        share(title, desc, mode = "legacy") { 
793            if (this.isMobile) { 
794                var shareData = { 
795                    title: title, 
796                    text: desc, 
797                    url: window.location.href.replaceAll("{", "%7B").replaceAll("}", "%7D") 
798                }; 
799 
800                try { 
801                    navigator.share(shareData); 
802                } catch (err) { 
803                    console.error("Error sharing: " + err); 
804 
805                    if (mode == "legacy") { 
806                        this.legacyShare(); 
807                    } else if (mode == "social") { 
808                        this.socialShare(title, desc); 
809
810
811            } else { 
812                if (mode == "legacy") { 
813                    this.legacyShare(); 
814                } else if (mode == "social") { 
815                    this.socialShare(title, desc); 
816
817
818        }, 
819        legacyShare() { 
820            var clip = document.createElement("input"), 
821                toCopy = window.location.href.replaceAll("{", "%7B").replaceAll("}", "%7D"); 
822 
823            document.body.appendChild(clip); 
824            clip.value = toCopy; 
825            clip.select(); 
826            clip.setSelectionRange(0, 999999); 
827 
828            navigator.clipboard.writeText(clip.value); 
829            document.body.removeChild(clip); 
830 
831            alert("Link copiato"); 
832        }, 
833        socialShare(title, desc, image = "") { 
834            var link = "#", 
835                winHeight = 450, 
836                winWidth = 600, 
837                winTop = window.screen.height / 2 - winHeight / 2, 
838                winLeft = window.screen.width / 2 - winWidth / 2, 
839                params = "scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=" + winWidth + ",height=" + winHeight + ",left=" + winLeft + ",top=" + winTop; 
840 
841            link = "http://www.facebook.com/sharer.php?s=100&p[title]=" + encodeURIComponent(title) + "&p[summary]=" + encodeURIComponent(desc) + "&p[url]=" + window.location.href + "&p[images][0]=" + image; 
842 
843            window.open(link, "Facebook", params); 
844
845    }).mount("#${d40.portletNamespace}"); 
846</script> 
847 
848<#if doc?has_content> 
849    <script> 
850        document.addEventListener("DOMContentLoaded", function(){ 
851         
852            document.querySelectorAll('a[href^="#contact"]').forEach(anchor => { 
853                anchor.addEventListener('click', function (e) { 
854                    e.preventDefault(); 
855             
856                    document.querySelector(this.getAttribute('href')).scrollIntoView({ 
857                        behavior: 'smooth' 
858                    }); 
859                }); 
860            }); 
861         
862         
863            if(${(doc.details.images?has_content)?c}){ 
864                new Swiper("#gallery .swiper-container", { 
865                    slidesPerView: 1, 
866                    spaceBetween: 50, 
867                    centerSlides: true, 
868                    centerInsufficientSlides: true, 
869                    breakpoints: { 
870                        768: { 
871                            slidesPerView: 2, 
872                            spaceBetween: 25 
873                        }, 
874                        992: { 
875                            slidesPerView: 3, 
876                            spaceBetween: 25 
877
878                    }, 
879                    navigation: { 
880                        prevEl: "#gallery .btn-prev", 
881                        nextEl: "#gallery .btn-next" 
882
883                }); 
884                 
885                var thumbnails = new Swiper("#thumbnail-swiper", { 
886                    spaceBetween: 10, 
887                    slidesPerView: 2, 
888                    centerInsufficientSlides: true, 
889                    freeMode: true, 
890                    watchSlidesVisibility: true, 
891                    watchSlidesProgress: true, 
892        			breakpoints: { 
893        				768: { 
894        					slidesPerView: 3 
895        				}, 
896        				992: { 
897        					slidesPerView: 4 
898        				}, 
899        				1200: { 
900        					slidesPerView: 5 
901
902        			}, 
903                }); 
904                 
905                var lightbox = new Swiper("#lightbox-swiper", { 
906        		    spaceBetween: 10, 
907                    autoHeight: true, 
908                    observer: true, 
909                    observeSlideChildren: true, 
910                    keyboard: { 
911                        enabled: true 
912                    }, 
913                    navigation: { 
914                        nextEl: ".swiper-button-next", 
915                        prevEl: ".swiper-button-prev" 
916                    }, 
917                    thumbs: { 
918                        swiper: thumbnails 
919
920                }); 
921                 
922                $("#lightbox-modal").on("shown.bs.modal", function(e){ 
923                    lightbox.update(); 
924                    thumbnails.update(); 
925                    lightbox.slideTo($(e.relatedTarget).data("slider")); 
926                    lightbox.update(); 
927                }); 
928                 
929                $("#lightbox-modal .swiper-wrapper").on("click", function(e){ 
930                    if($(e.target).attr("class").includes("swiper-slide")){ 
931                        $("#lightbox-modal").modal("hide"); 
932
933                }); 
934                 
935                if ($(window).width() > 991) { 
936                    var left_col_h = $(".relative.mt-20 > .container > .row > .col-lg-7").outerHeight(); 
937                    var right_col_h = $(".relative.mt-20 > .container > .row > .col-lg-5").outerHeight(); 
938                    var marg_h = right_col_h - left_col_h + 40; 
939                     
940                    if(right_col_h > left_col_h) 
941
942                        $('#gallery').removeClass('lg:mt-40 mt-20'); 
943                        $('#gallery').css({'margin-top':marg_h+'px'});  
944
945
946
947        }); 
948    </script> 
949</#if> 

L'invio della richiesta è andata a buon fine