An error occurred while processing the template.
The following has evaluated to null or missing:
==> response.data.docs.getJSONObject(0)  [in template "3572636#3572671#4340004" at line 28, 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#4340004" at line 28, 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 = "poi" 
10    vueActions = "" 
11    doc = "" 
12    lat = "0" 
13    lng = "0" 
14    hasCoords = false 
15/> 
16 
17<#-- <#assign z=request.setAttribute("ogTitle","title")> 
18<#assign z=request.setAttribute("ogImage","imgg")> 
19<#assign z=request.setAttribute("ogDesc","desc")> --> 
20 
21<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
22<#assign z=request.setAttribute("ogUrl","${currentUrl}")> 
23 
24<#if uuid?has_content> 
25    <#assign response = d40.fetchData("https://guestapp.d40.it/v1/search/apt-trento/${contentType}/?uuid=${uuid}")> 
26     
27    <#if !response.error && response.data.docs?has_content> 
28        <#assign doc = response.data.docs.getJSONObject(0)> 
29         
30        ${request.session.removeAttribute("circularCategories")} 
31        ${request.session.setAttribute("circularCategories", doc.details.assetCategoryIds)} 
32    </#if> 
33</#if> 
34 
35<#if doc?has_content> 
36    <#if doc.details?? && doc.details.name[langId]?has_content> 
37        ${PUTIL.setPageTitle(doc.details.name[langId], request)} 
38    </#if> 
39     
40    <#assign vueActions = "getFavorites();"> 
41     
42    <#if doc.details.location.geoCoords.lat?has_content && doc.details.location.geoCoords.lon?has_content> 
43        <#assign 
44            hasCoords = true 
45            lat = doc.details.location.geoCoords.lat 
46            lng = doc.details.location.geoCoords.lon 
47            vueActions = "getFavorites();buildMap(${lat}, ${lng})" 
48        /> 
49    </#if> 
50</#if> 
51 
52<style> 
53    .swiper-button-next:after{ 
54        content: ""; 
55
56    .swiper-button-prev:after{ 
57        content: ""; 
58
59    .bg-darkgray{ 
60        background-color: #e5e5e5 !important; 
61
62    .min-h-12{ 
63        min-height: 3rem; 
64
65    .-ml-5{ 
66        margin-left: -5%; 
67
68</style> 
69 
70<div v-scope id="${d40.portletNamespace}" @vue:mounted="${vueActions}" v-cloak> 
71    <#if doc?has_content> 
72        <#if themeDisplay.getLayout().getAncestors()?has_content> 
73            <section id="breadcrumb" class="z-15 mt-25"> 
74                <div class="container"> 
75                    <ol class="breadcrumb flex lg:justify-center"> 
76                        <li class="pl-1 text-sm mr-2 relative">${d40.getLabel("sei_in")}:</li> 
77                         
78                        <li class="breadcrumb-item"> 
79                            <a href="/" class="breadcrumb-link" title="Home"> 
80                                <span class="breadcrumb-text-truncate text-dark underline">Home</span> 
81                            </a> 
82                        </li> 
83                         
84                        <#list themeDisplay.getLayout().getAncestors()?reverse as ancestor> 
85                            <li class="breadcrumb-item"> 
86                                <a href="${ancestor.getFriendlyURL()}" class="breadcrumb-link" title="${d40.escape(ancestor.getHTMLTitle(locale))}"> 
87                                    <span class="breadcrumb-text-truncate text-dark underline"> 
88                                        ${d40.escape(ancestor.getHTMLTitle(locale))} 
89                                    </span> 
90                                </a> 
91                            </li> 
92                        </#list> 
93                         
94                        <li class="breadcrumb-item active"> 
95                            <span class="breadcrumb-text-truncate text-dark"> 
96                                ${doc.details.name[langId]} 
97                            </span> 
98                        </li> 
99                    </ol> 
100                </div> 
101            </section> 
102        </#if> 
103         
104        <section class="relative mt-20"> 
105            <div class="container"> 
106                <div class="row"> 
107                    <div class="col-12 col-lg-7"> 
108                        <div class="card-row flex-col lg:flex-row mb-10"> 
109                            <div class="autofit-col autofit-col-expand order-2 lg:order-1"> 
110                                <div class="autofit-section"> 
111                                    <p class="text-dark font-semibold font-heading text-3xl lg:text-4xl uppercase"> 
112                                        ${doc.details.name[langId]} 
113                                        <#assign z=request.setAttribute("ogTitle","${doc.details.name[langId]}")> 
114                                    </p> 
115                                </div> 
116                            </div> 
117                            <div class="autofit-col justify-start order-1 lg:order-2 mb-3 lg:mb-0"> 
118                                <div class="autofit-section"> 
119                                    <div class="flex space-x-4"> 
120                                        <button type="button" v-if="isFavorite('${doc.uuid}')" @click="removeFavorite($event, '${doc.uuid}')" class="btn btn-link px-2"> 
121                                            <i class="fas fa-heart text-dark fa-2x"></i> 
122                                        </button> 
123                                        <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"> 
124                                            <i class="fal fa-heart text-dark fa-2x"></i> 
125                                        </button> 
126                                         
127                                        <button type="button" @click="share('${doc.details.name[langId]}', '')" class="btn btn-link px-2"> 
128                                            <i class="fas fa-share-alt text-dark fa-2x"></i> 
129                                        </button> 
130                                    </div> 
131                                </div> 
132                            </div> 
133                        </div> 
134                         
135                        <#if doc.timetables.timeDescription[langId]?has_content> 
136                            <div class="text-dark text-lg font-light mb-15 mt-5"> 
137                                ${doc.timetables.timeDescription[langId]} 
138                            </div> 
139                        </#if> 
140                         
141                        <#if doc.details.description[langId]?has_content> 
142                            <div class="underline-grow text-dark font-light lg:text-lg leading-loose"> 
143                                ${doc.details.description[langId]} 
144                                 
145                                <#if doc.details.description[langId]?length lt 160> 
146                                    <#assign  
147                                        z=request.setAttribute("ogDesc","${htmlUtil.stripHtml(doc.details.description[langId])}") 
148                                    /> 
149                                <#else> 
150                                    <#assign  
151                                        z=request.setAttribute("ogDesc","${htmlUtil.stripHtml(doc.details.description[langId])?substring(0,160)}") 
152                                    /> 
153                                </#if> 
154                            </div> 
155                        </#if> 
156                    </div> 
157                     
158                    <div class="xl:absolute col-12 col-lg-5 xl:max-w-xl lg:right-0"> 
159                        <div class="bg-light"> 
160                            <div class="card-body px-5 pt-5 lg:px-10 lg:pt-10 pb-0"> 
161                                <p class="text-dark font-bold uppercase text-lg mb-0"> 
162                                    ${d40.getLabel("informazioni_contatti")} 
163                                </p> 
164                                <#if doc.details.townLabel != "{}"> 
165                                    <p class="text-dark text-lg mb-0"> 
166                                        ${d40.getLabel("localita")}: <span class="text-capitalize">${doc.details.townLabel[langId]}</span> 
167                                    </p> 
168                                </#if> 
169                                <#if doc.timetables.timeInfos?has_content> 
170                                    <p class="text-dark font-bold text-lg mb-0 mt-3 d-none"> 
171                                        ${d40.getLabel("date_apertura")} 
172                                    </p> 
173                                </#if> 
174                            </div> 
175                             
176                             
177                            <#if doc.timetables.timeInfos?has_content> 
178                                <div class="flex"> 
179                                    <details class="bg-darkgray w-full lg:w-105% right-0 -ml-5 d-none"> 
180                                        <summary class="btn btn-link text-dark no-underline my-1 ml-12"> 
181                                            <i class="fal fa-calendar-alt"></i> 
182                                            <span>${doc.timetables.timeInfos.getJSONObject(0).dateFrom} - ${doc.timetables.timeInfos.getJSONObject(0).timeFrom} - ${doc.timetables.timeInfos.getJSONObject(0).timeTo}</span> 
183                                            <i class="fal fa-chevron-down fa-lg ml-5"></i> 
184                                        </summary> 
185                                         
186                                        <div class="card-body px-5 lg:px-10"> 
187                                            <ul> 
188                                                <#list doc.timetables.timeInfos.iterator() as datetime> 
189                                                    <li class="text-dark mb-1"> 
190                                                        ${d40.getLabel("dal")} ${datetime.dateFrom} 
191                                                        ${d40.getLabel("al")} ${datetime.dateTo} 
192                                                        ${d40.getLabel("dalle")} ${datetime.timeFrom} 
193                                                        ${d40.getLabel("alle")} ${datetime.timeTo} 
194                                                    </li> 
195                                                </#list> 
196                                            </ul> 
197                                        </div> 
198                                    </details> 
199                                </div> 
200                            </#if> 
201                             
202                             
203                            <div class="card-body px-5 lg:px-10"> 
204                                <#if doc.contacts.getJSONObject(0).telephone?? && doc.contacts.getJSONObject(0).telephone?has_content> 
205                                    <#attempt> 
206                                        <#list doc.contacts.getJSONObject(0).telephone.iterator() as phone> 
207                                            <p class="text-dark text-lg mb-0"> 
208                                                Tel: ${phone} 
209                                            </p> 
210                                        </#list> 
211                                    <#recover> 
212                                        <p class="text-dark text-lg mb-0"> 
213                                            Tel: ${doc.contacts.getJSONObject(0).telephone} 
214                                        </p> 
215                                    </#attempt> 
216                                     
217                                </#if> 
218                                <#if doc.contacts.getJSONObject(0).mail?? && doc.contacts.getJSONObject(0).mail?has_content> 
219                                    <a href="mailto:${doc.contacts.getJSONObject(0).mail}" class="block no-underline text-dark text-lg space-x-2 mb-0"> 
220                                        <i class="far fa-envelope text-dark"></i> 
221                                        <u>${doc.contacts.getJSONObject(0).mail}</u> 
222                                    </a> 
223                                </#if> 
224                                <#if doc.contacts.getJSONObject(0).websiteUrl[langId]?? && doc.contacts.getJSONObject(0).websiteUrl[langId]?has_content> 
225                                    <a href="${doc.contacts.getJSONObject(0).websiteUrl[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
226                                        <i class="far fa-external-link text-dark"></i> 
227                                        <u>${d40.getLabel("sito_web")}</u> 
228                                    </a> 
229                                </#if> 
230                                 
231                                <#if langId == 'en'> 
232                                    <#assign ri_url = "/contact-tourist-office-trento" /> 
233                                <#elseif langId == 'de'> 
234                                    <#assign ri_url = "/kontakt-info-anfrage-trento" /> 
235                                <#else> 
236                                    <#assign ri_url = "/richiesta-informazioni" /> 
237                                </#if> 
238                                 
239                                <a href="#contact-form" class="btn bg-green text-white font-bold uppercase px-4 py-2 rounded-0 mt-10"> 
240                                    ${d40.getLabel("richiedi_info")} 
241                                </a> 
242                            </div> 
243                             
244                            <#if hasCoords> 
245                                <div class="relative flex h-70"> 
246                                    <div class="absolute w-full lg:w-105% h-full right-0"> 
247                                        <div id="suggesto-map" class="monochrome-map size-full border-0"></div> 
248                                    </div> 
249                                </div> 
250                                <div class="card-body p-5 lg:px-10"> 
251                                    <!-- https://www.google.com/maps/dir/?api=1&travelmode=driving&destination=lat,lon  
252                                    https://www.google.com/maps/@${lat},${lng} 
253                                    --> 
254                                    <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"> 
255                                        <span class="font-bold text-dark uppercase"> 
256                                            ${d40.getLabel("indicazioni_stradali")} 
257                                        </span> 
258                                        <img src="${d40.icons_folder}/arrow_circle-dark.svg" class="w-20" /> 
259                                    </a> 
260                                </div> 
261                            </#if> 
262                        </div> 
263                    </div> 
264                </div> 
265            </div> 
266        </section> 
267         
268        <#if doc.details.images?has_content> 
269            <#assign usePreview = false> 
270             
271            <section id="gallery" class="relative overflow-x-hidden mt-20 lg:mt-40"> 
272                <div class="container"> 
273                    <p class="text-dark uppercase text-lg lg:text-3xl mb-7"> 
274                        ${d40.getLabel("galleria_immagini")} 
275                    </p> 
276                     
277                    <div class="swiper-container"> 
278                        <div class="swiper-wrapper"> 
279                            <#if doc.details.cover != "[]"> 
280                                <#assign usePreview = true> 
281                                 
282                                <#list doc.details.cover.iterator() as pic> 
283                                    <div class="swiper-slide"> 
284                                        <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"> 
285                                            <div class="relative"> 
286                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload rounded-custom size-full fit-cover" alt="" /> 
287                                            </div> 
288                                        </a> 
289                                    </div> 
290                                     
291                                    <#--assign z=request.setAttribute("ogImage","${pic[langId]}")--> 
292                                  <#assign z=request.setAttribute("ogImage","${d40.getKitPrefix(pic[langId], 'n-preview_h')}")>                           
293                                   
294                                    <#break> 
295                                </#list> 
296                            </#if> 
297                             
298                            <#list doc.details.images.iterator() as pic> 
299                                <#if usePreview> 
300                                    <#assign counter = pic?counter> 
301                                <#else> 
302                                    <#assign counter = pic?index> 
303                                </#if> 
304                                 
305                                <div class="swiper-slide"> 
306                                    <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"> 
307                                        <div class="relative"> 
308                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload rounded-custom size-full fit-cover" alt="" /> 
309                                        </div> 
310                                    </a> 
311                                </div> 
312                            </#list> 
313                        </div> 
314                    </div> 
315                </div> 
316                <div class="btn-square absolute btn-prev bg-white left-0"> 
317                    <span class="sr-only">${d40.getLabel("precedente")}</span> 
318                    <i class="fas fa-chevron-left text-dark w-6 h-6"></i> 
319                </div> 
320                <div class="btn-square absolute btn-next bg-white right-0"> 
321                    <span class="sr-only">${d40.getLabel("successivo")}</span> 
322                    <i class="fas fa-chevron-right text-dark w-6 h-6"></i> 
323                </div> 
324            </section> 
325             
326            <div id="lightbox-modal" tabindex="-1" role="dialog" class="modal fade"> 
327                <div class="modal-dialog modal-full-screen inset-0 border-0 shadow-none"> 
328                    <div class="modal-content bg-transparent"> 
329                        <div class="modal-body overflow-hidden"> 
330                            <div class="absolute top-0 right-0 z-5"> 
331                                <button type="button" data-dismiss="modal" class="btn btn-monospaced btn-secondary m-3"> 
332                                    <span class="sr-only">${d40.getLabel("chiudi")}</span> 
333                                    <i class="fal fa-times fa-lg"></i> 
334                                </button> 
335                            </div> 
336                             
337                            <#-- lightbox --> 
338            				<div id="lightbox-swiper" class="swiper-container h-75 my-auto"> 
339            				    <div class="swiper-button-prev w-12 h-12"> 
340                                    <span class="sticker sticker-circle bg-green size-full"> 
341                                        <span class="sticker-overlay"> 
342                                            <i class="fas fa-chevron-left fa-2x text-white"></i> 
343                                        </span> 
344                                    </span> 
345                                </div> 
346                                 
347                                <div class="swiper-button-next w-12 h-12"> 
348                                    <span class="sticker sticker-circle bg-green size-full"> 
349                                        <span class="sticker-overlay"> 
350                                            <i class="fas fa-chevron-right fa-2x text-white"></i> 
351                                        </span> 
352                                    </span> 
353                                </div> 
354                                 
355                                <div class="swiper-wrapper h-full"> 
356                                    <#if doc.details.cover != "[]"> 
357                                        <#list doc.details.cover.iterator() as pic> 
358                                            <div class="swiper-slide h-full"> 
359                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-full_hd')}" loading="lazy" class="lazyload flex h-full object-contain mx-auto" alt=""> 
360                                            </div> 
361                                            <#break> 
362                                        </#list> 
363                                    </#if> 
364                                     
365                                    <#list doc.details.images.iterator() as pic> 
366                                        <div class="swiper-slide h-full"> 
367                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-full_hd')}" loading="lazy" class="lazyload flex h-full object-contain mx-auto" alt=""> 
368                                        </div> 
369                                    </#list> 
370                                </div> 
371                            </div> 
372                             
373                            <#-- thumbnails --> 
374            				<div id="thumbnail-swiper" class="swiper-container" thumbsSlider=""> 
375                                <div class="swiper-wrapper"> 
376                                    <#if doc.details.cover != "[]"> 
377                                        <#list doc.details.cover.iterator() as pic> 
378                                            <div class="swiper-slide"> 
379                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload object-cover cursor-pointer size-full" alt=""> 
380                                            </div> 
381                                            <#break> 
382                                        </#list> 
383                                    </#if> 
384                                     
385                                    <#list doc.details.images.iterator() as pic> 
386                                        <div class="swiper-slide"> 
387                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload object-cover cursor-pointer size-full" alt=""> 
388                                        </div> 
389                                    </#list> 
390                                </div> 
391                            </div> 
392                        </div> 
393                    </div> 
394                </div> 
395            </div> 
396        </#if> 
397         
398        <#-- SEZIONE NON USATA 
399        <section class="mt-20"> 
400            <div class="container"> 
401                <div class="bg-light max-w-xl p-5 lg:p-10"> 
402                    <div class="card-row space-x-5"> 
403                        <div class="autofit-col"> 
404                            <div class="autofit-section"> 
405                                <i class="fas fa-download text-dark w-7 h-7"></i> 
406                            </div> 
407                        </div> 
408                        <div class="autofit-col autofit-col-expand"> 
409                            <div class="autofit-section"> 
410                                <p class="text-dark font-bold text-lg lg:text-xl uppercase mb-0"> Programma completo </p> 
411                            </div> 
412                        </div> 
413                    </div> 
414                </div> 
415                 
416                <div class="row mt-10 lg:mt-20"> 
417                    <div class="col-12 col-lg-8"> 
418                        <div class="space-y-10"> 
419                            <p class="text-dark uppercase text-lg lg:text-3xl"> 
420                                ${d40.getLabel("dettagli")} 
421                            </p> 
422                            <div class="space-y-5"> 
423                                <div class="row"> 
424                                    <div class="col-12 col-md-3 col-lg-2"> 
425                                        <p class="text-dark font-bold uppercase">Data</p> 
426                                    </div> 
427                                    <div class="col-12 col-md-9 col-lg-10"> 
428                                        <div class="text-dark font-light text-lg"> 
429                                            Dettagli 
430                                        </div> 
431                                    </div> 
432                                </div> 
433                            </div> 
434                        </div> 
435                    </div> 
436                </div> 
437            </div> 
438        </section> 
439        --> 
440         
441        <section class="mt-20"> 
442            <div class="container"> 
443                <div class="bg-light"> 
444                    <div class="space-y-10 p-5 lg:p-10"> 
445                        <p class="text-dark uppercase text-lg lg:text-3xl mb-0"> 
446                            ${d40.getLabel("organizzazione")} 
447                        </p> 
448                        <div class="space-y-2"> 
449                            <#if doc.contacts.getJSONObject(0).address.fulltext?? && doc.contacts.getJSONObject(0).address.fulltext?has_content> 
450                                <p class="text-dark mb-0"> 
451                                    ${doc.contacts.getJSONObject(0).address.fulltext} 
452                                </p> 
453                            </#if> 
454                             
455                            <#if doc.contacts.getJSONObject(0).mail?? && doc.contacts.getJSONObject(0).mail?has_content> 
456                                <a href="mailto:${doc.contacts.getJSONObject(0).mail}" class="d-block text-dark underline"> 
457                                    ${doc.contacts.getJSONObject(0).mail} 
458                                </a> 
459                            </#if> 
460                             
461                            <#if doc.contacts.getJSONObject(0).telephone?? && doc.contacts.getJSONObject(0).telephone?has_content> 
462                                <#attempt> 
463                                    <#list doc.contacts.getJSONObject(0).telephone.iterator() as phone> 
464                                        <p class="text-dark mb-0"> 
465                                            <span class="font-bold">${d40.getLabel("telefono")}:</span> 
466                                            ${phone} 
467                                        </p> 
468                                    </#list> 
469                                <#recover> 
470                                    <p class="text-dark mb-0"> 
471                                        <span class="font-bold">${d40.getLabel("telefono")}:</span> 
472                                        ${doc.contacts.getJSONObject(0).telephone} 
473                                    </p> 
474                                </#attempt> 
475                            </#if> 
476                        </div> 
477                    </div> 
478                </div> 
479            </div> 
480        </section> 
481         
482        <#-- 
483        <section class="mt-10"> 
484            <div class="container"> 
485                <p class="text-dark uppercase text-lg lg:text-3xl mb-7"> Info sezione </p> 
486                <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> 
487            </div> 
488        </section> 
489        --> 
490    <#else> 
491        <div class="text-center mt-35"> 
492            <p class="text-dark"> 
493                ${d40.getLabel("errore_caricamento_contenuto")} 
494            </p> 
495        </div> 
496    </#if> 
497</div> 
498 
499<script type="module"> 
500    import { createApp } from "https://cdnjs.cloudflare.com/ajax/libs/petite-vue/0.4.1/petite-vue.es.min.js"; 
501 
502    createApp({ 
503        isMobile: window.innerWidth < 768, 
504        favorites: [], 
505        getFavorites() { 
506            if(localStorage.getItem("favorites") !== null) { 
507    			this.favorites = JSON.parse(localStorage.getItem("favorites")); 
508
509        }, 
510        setFavorite(e, item) { 
511            e.preventDefault(); 
512    		this.getFavorites(); 
513     
514    		var newFavorite = { 
515    			id: item.id, 
516        			contentJSON: { 
517    				title: item.contentJSON.title, 
518    				previewDescription: item.contentJSON.previewDescription, 
519    				description: item.contentJSON.description, 
520    				geoRef: item.contentJSON.geoRef, 
521    				previewPicture: item.contentJSON.previewPicture, 
522    				viewUrl: item.contentJSON.viewUrl, 
523    				type: "lfr", 
524
525    		}; 
526     
527    		this.favorites.push(newFavorite); 
528    		this.saveFavorites(); 
529    	}, 
530    	removeFavorite(e, itemId) { 
531    	    e.preventDefault(); 
532    		this.favorites = this.favorites.filter((obj) => obj.id !== itemId); 
533    		this.saveFavorites(); 
534    	}, 
535    	saveFavorites() { 
536    		localStorage.setItem("favorites", JSON.stringify(this.favorites)); 
537    	}, 
538    	isFavorite(itemId) { 
539    		if (this.favorites.some((e) => e.id == itemId)) { 
540    			return true; 
541
542     
543    		return false; 
544    	}, 
545    	buildMap(lat, lng) { 
546            var map = new SuggestoMap("suggesto-map"), 
547                location = [parseFloat(lat), parseFloat(lng)]; 
548             
549            var svgIcon = L.divIcon({ 
550                html: ` 
551                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44.537 64.343"> 
552                        <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"/> 
553                        <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"/> 
554                        <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"/> 
555                        <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"/> 
556                    </svg>`, 
557                className: "", 
558                iconSize: [44.537, 64.343], 
559                iconAnchor: [22.287, 64.343], 
560            }); 
561                 
562            var mapData = { 
563                tilelayer: "osm", 
564                gestureHandling: true, 
565                fitBounds: false, 
566                mapcenter: location, 
567                zoom: 15, 
568                markersFilter: "*", 
569                markers: [], 
570                layers: [] 
571            }; 
572                 
573            map.sm.createMap(mapData); 
574             
575            L.circleMarker(location, { 
576                radius: 0, 
577                color: "#000", 
578                fillOpacity: 0, 
579                weight: 0 
580            }).addTo(map.sm.lmap); 
581             
582            L.marker(location, { 
583                icon: svgIcon 
584            }).addTo(map.sm.lmap); 
585        }, 
586        share(title, desc, mode = "legacy") { 
587            if (this.isMobile) { 
588                var shareData = { 
589                    title: title, 
590                    text: desc, 
591                    url: window.location.href.replaceAll("{", "%7B").replaceAll("}", "%7D") 
592                }; 
593 
594                try { 
595                    navigator.share(shareData); 
596                } catch (err) { 
597                    console.error("Error sharing: " + err); 
598 
599                    if (mode == "legacy") { 
600                        this.legacyShare(); 
601                    } else if (mode == "social") { 
602                        this.socialShare(title, desc); 
603
604
605            } else { 
606                if (mode == "legacy") { 
607                    this.legacyShare(); 
608                } else if (mode == "social") { 
609                    this.socialShare(title, desc); 
610
611
612        }, 
613        legacyShare() { 
614            var clip = document.createElement("input"), 
615                toCopy = window.location.href.replaceAll("{", "%7B").replaceAll("}", "%7D"); 
616 
617            document.body.appendChild(clip); 
618            clip.value = toCopy; 
619            clip.select(); 
620            clip.setSelectionRange(0, 999999); 
621 
622            navigator.clipboard.writeText(clip.value); 
623            document.body.removeChild(clip); 
624 
625            alert("Link copiato"); 
626        }, 
627        socialShare(title, desc, image = "") { 
628            var link = "#", 
629                winHeight = 450, 
630                winWidth = 600, 
631                winTop = window.screen.height / 2 - winHeight / 2, 
632                winLeft = window.screen.width / 2 - winWidth / 2, 
633                params = "scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=" + winWidth + ",height=" + winHeight + ",left=" + winLeft + ",top=" + winTop; 
634 
635            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; 
636 
637            window.open(link, "Facebook", params); 
638
639    }).mount("#${d40.portletNamespace}"); 
640</script> 
641 
642<#if doc?has_content> 
643    <script> 
644        document.addEventListener("DOMContentLoaded", function(){ 
645         
646            document.querySelectorAll('a[href^="#contact"]').forEach(anchor => { 
647                anchor.addEventListener('click', function (e) { 
648                    e.preventDefault(); 
649             
650                    document.querySelector(this.getAttribute('href')).scrollIntoView({ 
651                        behavior: 'smooth' 
652                    }); 
653                }); 
654            }); 
655         
656         
657            if(${(doc.details.images?has_content)?c}){ 
658                new Swiper("#gallery .swiper-container", { 
659                    slidesPerView: 1, 
660                    spaceBetween: 50, 
661                    centerSlides: true, 
662                    centerInsufficientSlides: true, 
663                    breakpoints: { 
664                        768: { 
665                            slidesPerView: 2, 
666                            spaceBetween: 25 
667                        }, 
668                        992: { 
669                            slidesPerView: 3, 
670                            spaceBetween: 25 
671
672                    }, 
673                    navigation: { 
674                        prevEl: "#gallery .btn-prev", 
675                        nextEl: "#gallery .btn-next" 
676
677                }); 
678                 
679                var thumbnails = new Swiper("#thumbnail-swiper", { 
680                    spaceBetween: 10, 
681                    slidesPerView: 2, 
682                    centerInsufficientSlides: true, 
683                    freeMode: true, 
684                    watchSlidesVisibility: true, 
685                    watchSlidesProgress: true, 
686        			breakpoints: { 
687        				768: { 
688        					slidesPerView: 3 
689        				}, 
690        				992: { 
691        					slidesPerView: 4 
692        				}, 
693        				1200: { 
694        					slidesPerView: 5 
695
696        			}, 
697                }); 
698                 
699                var lightbox = new Swiper("#lightbox-swiper", { 
700        		    spaceBetween: 10, 
701                    autoHeight: true, 
702                    observer: true, 
703                    observeSlideChildren: true, 
704                    keyboard: { 
705                        enabled: true 
706                    }, 
707                    navigation: { 
708                        nextEl: ".swiper-button-next", 
709                        prevEl: ".swiper-button-prev" 
710                    }, 
711                    thumbs: { 
712                        swiper: thumbnails 
713
714                }); 
715                 
716                $("#lightbox-modal").on("shown.bs.modal", function(e){ 
717                    lightbox.update(); 
718                    thumbnails.update(); 
719                    lightbox.slideTo($(e.relatedTarget).data("slider")); 
720                    lightbox.update(); 
721                }); 
722                 
723                $("#lightbox-modal .swiper-wrapper").on("click", function(e){ 
724                    if($(e.target).attr("class").includes("swiper-slide")){ 
725                        $("#lightbox-modal").modal("hide"); 
726
727                }); 
728                 
729                if ($(window).width() > 991) { 
730                    var left_col_h = $(".relative.mt-20 > .container > .row > .col-lg-7").outerHeight(); 
731                    var right_col_h = $(".relative.mt-20 > .container > .row > .col-lg-5").outerHeight(); 
732                    var marg_h = right_col_h - left_col_h + 40; 
733                     
734                    if(right_col_h > left_col_h) 
735
736                        $('#gallery').removeClass('lg:mt-40 mt-20'); 
737                        $('#gallery').css({'margin-top':marg_h+'px'});  
738
739
740
741        }); 
742    </script> 
743</#if> 

Your request was sent successfully