An error occurred while processing the template.
The following has evaluated to null or missing:
==> response.data.docs.getJSONObject(0)  [in template "3572636#3572671#4358125" 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#4358125" 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.time_infos?has_content> 
170                                    <p class="text-dark font-bold text-lg mb-0 mt-3"> 
171                                        ${d40.getLabel("date_apertura")} 
172                                    </p> 
173                                </#if> 
174                            </div> 
175                             
176                            <#if doc.timetables.time_infos?has_content> 
177                                <div class="flex min-h-12"> 
178                                    <details class="bg-darkgray w-full lg:w-105% right-0 -ml-5"> 
179                                        <summary class="btn btn-link text-dark no-underline my-1 ml-12"> 
180                                            <i class="fal fa-calendar-alt"></i> 
181                                            <span>${doc.timetables.time_infos.getJSONObject(0).date_from} - ${doc.timetables.time_infos.getJSONObject(0).time_from} - ${doc.timetables.time_infos.getJSONObject(0).time_to}</span> 
182                                            <i class="fal fa-chevron-down fa-lg ml-5"></i> 
183                                        </summary> 
184                                         
185                                        <div class="card-body px-5 lg:px-10"> 
186                                            <ul> 
187                                                <#list doc.timetables.time_infos.iterator() as datetime> 
188                                                    <li class="text-dark mb-1"> 
189                                                        ${d40.getLabel("dal")} ${datetime.date_from} 
190                                                        ${d40.getLabel("al")} ${datetime.date_to} 
191                                                        ${d40.getLabel("dalle")} ${datetime.time_from} 
192                                                        ${d40.getLabel("alle")} ${datetime.time_to} 
193                                                    </li> 
194                                                </#list> 
195                                            </ul> 
196                                        </div> 
197                                    </details> 
198                                </div> 
199                            </#if> 
200                            <div class="card-body px-5 lg:px-10"> 
201                                <#if doc.contacts.getJSONObject(0).telephone?? && doc.contacts.getJSONObject(0).telephone?has_content> 
202                                    <#list doc.contacts.getJSONObject(0).telephone.iterator() as phone> 
203                                        <p class="text-dark text-lg mb-0"> 
204                                            Tel: ${phone} 
205                                        </p> 
206                                    </#list> 
207                                </#if> 
208                                <#if doc.contacts.getJSONObject(0).mail?? && doc.contacts.getJSONObject(0).mail?has_content> 
209                                    <a href="mailto:${doc.contacts.getJSONObject(0).mail}" class="block no-underline text-dark text-lg space-x-2 mb-0"> 
210                                        <i class="far fa-envelope text-dark"></i> 
211                                        <u>${doc.contacts.getJSONObject(0).mail}</u> 
212                                    </a> 
213                                </#if> 
214                                <#if doc.contacts.getJSONObject(0).websiteUrl[langId]?? && doc.contacts.getJSONObject(0).websiteUrl[langId]?has_content> 
215                                    <a href="${doc.contacts.getJSONObject(0).websiteUrl[langId]}" class="block no-underline text-dark text-lg space-x-2 mb-0" target="_blank"> 
216                                        <i class="far fa-external-link text-dark"></i> 
217                                        <u>${d40.getLabel("sito_web")}</u> 
218                                    </a> 
219                                </#if> 
220                                 
221                                <#if langId == 'en'> 
222                                    <#assign ri_url = "/contact-tourist-office-trento" /> 
223                                <#elseif langId == 'de'> 
224                                    <#assign ri_url = "/kontakt-info-anfrage-trento" /> 
225                                <#else> 
226                                    <#assign ri_url = "/richiesta-informazioni" /> 
227                                </#if> 
228                                 
229                                <a href="#contact-form" class="btn bg-green text-white font-bold uppercase px-4 py-2 rounded-0 mt-10"> 
230                                    ${d40.getLabel("richiedi_info")} 
231                                </a> 
232                            </div> 
233                            <#if hasCoords> 
234                                <div class="relative flex h-70"> 
235                                    <div class="absolute w-full lg:w-105% h-full right-0"> 
236                                        <div id="suggesto-map" class="monochrome-map size-full border-0"></div> 
237                                    </div> 
238                                </div> 
239                             
240                                <div class="card-body p-5 lg:px-10"> 
241                                    <!-- https://www.google.com/maps/@${lat},${lng},14z --> 
242                                    <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"> 
243                                        <span class="font-bold text-dark uppercase"> 
244                                            ${d40.getLabel("indicazioni_stradali")} 
245                                        </span> 
246                                        <img src="${d40.icons_folder}/arrow_circle-dark.svg" class="w-20" /> 
247                                    </a> 
248                                </div> 
249                            </#if> 
250                        </div> 
251                    </div> 
252                </div> 
253            </div> 
254        </section> 
255         
256        <#if doc.details.images?has_content> 
257            <#assign usePreview = false> 
258             
259            <section id="gallery" class="relative overflow-x-hidden mt-20 lg:mt-40"> 
260                <div class="container"> 
261                    <p class="text-dark uppercase text-lg lg:text-3xl mb-7"> 
262                        ${d40.getLabel("galleria_immagini")} 
263                    </p> 
264                     
265                    <div class="swiper-container"> 
266                        <div class="swiper-wrapper"> 
267                            <#if doc.details.cover != "[]"> 
268                                <#assign usePreview = true> 
269                                 
270                                <#list doc.details.cover.iterator() as pic> 
271                                    <div class="swiper-slide"> 
272                                        <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"> 
273                                            <div class="relative"> 
274                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload rounded-custom size-full fit-cover" alt="" /> 
275                                            </div> 
276                                        </a> 
277                                    </div> 
278                                     
279                                    <#--assign z=request.setAttribute("ogImage","${pic[langId]}")--> 
280                                  <#assign z=request.setAttribute("ogImage","${d40.getKitPrefix(pic[langId], 'n-preview_h')}")>                                                                         
281                                     
282                                    <#break> 
283                                </#list> 
284                            </#if> 
285                             
286                            <#list doc.details.images.iterator() as pic> 
287                                <#if usePreview> 
288                                    <#assign counter = pic?counter> 
289                                <#else> 
290                                    <#assign counter = pic?index> 
291                                </#if> 
292                                 
293                                <div class="swiper-slide"> 
294                                    <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"> 
295                                        <div class="relative"> 
296                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload rounded-custom size-full fit-cover" alt="" /> 
297                                        </div> 
298                                    </a> 
299                                </div> 
300                            </#list> 
301                        </div> 
302                    </div> 
303                </div> 
304                <div class="btn-square absolute btn-prev bg-white left-0"> 
305                    <span class="sr-only">${d40.getLabel("precedente")}</span> 
306                    <i class="fas fa-chevron-left text-dark w-6 h-6"></i> 
307                </div> 
308                <div class="btn-square absolute btn-next bg-white right-0"> 
309                    <span class="sr-only">${d40.getLabel("successivo")}</span> 
310                    <i class="fas fa-chevron-right text-dark w-6 h-6"></i> 
311                </div> 
312            </section> 
313             
314            <div id="lightbox-modal" tabindex="-1" role="dialog" class="modal fade"> 
315                <div class="modal-dialog modal-full-screen inset-0 border-0 shadow-none"> 
316                    <div class="modal-content bg-transparent"> 
317                        <div class="modal-body overflow-hidden"> 
318                            <div class="absolute top-0 right-0 z-5"> 
319                                <button type="button" data-dismiss="modal" class="btn btn-monospaced btn-secondary m-3"> 
320                                    <span class="sr-only">${d40.getLabel("chiudi")}</span> 
321                                    <i class="fal fa-times fa-lg"></i> 
322                                </button> 
323                            </div> 
324                             
325                            <#-- lightbox --> 
326            				<div id="lightbox-swiper" class="swiper-container h-75 my-auto"> 
327            				    <div class="swiper-button-prev w-12 h-12"> 
328                                    <span class="sticker sticker-circle bg-green size-full"> 
329                                        <span class="sticker-overlay"> 
330                                            <i class="fas fa-chevron-left fa-2x text-white"></i> 
331                                        </span> 
332                                    </span> 
333                                </div> 
334                                 
335                                <div class="swiper-button-next w-12 h-12"> 
336                                    <span class="sticker sticker-circle bg-green size-full"> 
337                                        <span class="sticker-overlay"> 
338                                            <i class="fas fa-chevron-right fa-2x text-white"></i> 
339                                        </span> 
340                                    </span> 
341                                </div> 
342                                 
343                                <div class="swiper-wrapper h-full"> 
344                                    <#if doc.details.cover != "[]"> 
345                                        <#list doc.details.cover.iterator() as pic> 
346                                            <div class="swiper-slide h-full"> 
347                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-full_hd')}" loading="lazy" class="lazyload flex h-full object-contain mx-auto" alt=""> 
348                                            </div> 
349                                            <#break> 
350                                        </#list> 
351                                    </#if> 
352                                     
353                                    <#list doc.details.images.iterator() as pic> 
354                                        <div class="swiper-slide h-full"> 
355                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-full_hd')}" loading="lazy" class="lazyload flex h-full object-contain mx-auto" alt=""> 
356                                        </div> 
357                                    </#list> 
358                                </div> 
359                            </div> 
360                             
361                            <#-- thumbnails --> 
362            				<div id="thumbnail-swiper" class="swiper-container" thumbsSlider=""> 
363                                <div class="swiper-wrapper"> 
364                                    <#if doc.details.cover != "[]"> 
365                                        <#list doc.details.cover.iterator() as pic> 
366                                            <div class="swiper-slide"> 
367                                                <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload object-cover cursor-pointer size-full" alt=""> 
368                                            </div> 
369                                            <#break> 
370                                        </#list> 
371                                    </#if> 
372                                     
373                                    <#list doc.details.images.iterator() as pic> 
374                                        <div class="swiper-slide"> 
375                                            <img data-src="${d40.getKitPrefix(pic[langId], 'n-preview_h')}" loading="lazy" class="lazyload object-cover cursor-pointer size-full" alt=""> 
376                                        </div> 
377                                    </#list> 
378                                </div> 
379                            </div> 
380                        </div> 
381                    </div> 
382                </div> 
383            </div> 
384        </#if> 
385         
386        <#-- SEZIONE NON USATA 
387        <section class="mt-20"> 
388            <div class="container"> 
389                <div class="bg-light max-w-xl p-5 lg:p-10"> 
390                    <div class="card-row space-x-5"> 
391                        <div class="autofit-col"> 
392                            <div class="autofit-section"> 
393                                <i class="fas fa-download text-dark w-7 h-7"></i> 
394                            </div> 
395                        </div> 
396                        <div class="autofit-col autofit-col-expand"> 
397                            <div class="autofit-section"> 
398                                <p class="text-dark font-bold text-lg lg:text-xl uppercase mb-0"> Programma completo </p> 
399                            </div> 
400                        </div> 
401                    </div> 
402                </div> 
403                 
404                <div class="row mt-10 lg:mt-20"> 
405                    <div class="col-12 col-lg-8"> 
406                        <div class="space-y-10"> 
407                            <p class="text-dark uppercase text-lg lg:text-3xl"> 
408                                ${d40.getLabel("dettagli")} 
409                            </p> 
410                            <div class="space-y-5"> 
411                                <div class="row"> 
412                                    <div class="col-12 col-md-3 col-lg-2"> 
413                                        <p class="text-dark font-bold uppercase">Data</p> 
414                                    </div> 
415                                    <div class="col-12 col-md-9 col-lg-10"> 
416                                        <div class="text-dark font-light text-lg"> 
417                                            Dettagli 
418                                        </div> 
419                                    </div> 
420                                </div> 
421                            </div> 
422                        </div> 
423                    </div> 
424                </div> 
425            </div> 
426        </section> 
427        --> 
428         
429        <section class="mt-20"> 
430            <div class="container"> 
431                <div class="bg-light"> 
432                    <div class="space-y-10 p-5 lg:p-10"> 
433                        <p class="text-dark uppercase text-lg lg:text-3xl mb-0"> 
434                            ${d40.getLabel("organizzazione")} 
435                        </p> 
436                        <div class="space-y-2"> 
437                            <#if doc.contacts.getJSONObject(0).address.fulltext?? && doc.contacts.getJSONObject(0).address.fulltext?has_content> 
438                                <p class="text-dark mb-0"> 
439                                    ${doc.contacts.getJSONObject(0).address.fulltext} 
440                                </p> 
441                            </#if> 
442                             
443                            <#if doc.contacts.getJSONObject(0).mail?? && doc.contacts.getJSONObject(0).mail?has_content> 
444                                <a href="mailto:${doc.contacts.getJSONObject(0).mail}" class="d-block text-dark underline"> 
445                                    ${doc.contacts.getJSONObject(0).mail} 
446                                </a> 
447                            </#if> 
448                             
449                            <#if doc.contacts.getJSONObject(0).telephone?? && doc.contacts.getJSONObject(0).telephone?has_content> 
450                                <#list doc.contacts.getJSONObject(0).telephone.iterator() as phone> 
451                                    <p class="text-dark mb-0"> 
452                                        <span class="font-bold">${d40.getLabel("telefono")}:</span> 
453                                        ${phone} 
454                                    </p> 
455                                </#list> 
456                            </#if> 
457                        </div> 
458                    </div> 
459                </div> 
460            </div> 
461        </section> 
462         
463        <#-- 
464        <section class="mt-10"> 
465            <div class="container"> 
466                <p class="text-dark uppercase text-lg lg:text-3xl mb-7"> Info sezione </p> 
467                <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> 
468            </div> 
469        </section> 
470        --> 
471    <#else> 
472        <div class="text-center mt-35"> 
473            <p class="text-dark"> 
474                ${d40.getLabel("errore_caricamento_contenuto")} 
475            </p> 
476        </div> 
477    </#if> 
478</div> 
479 
480<script type="module"> 
481    import { createApp } from "https://cdnjs.cloudflare.com/ajax/libs/petite-vue/0.4.1/petite-vue.es.min.js"; 
482 
483    createApp({ 
484        isMobile: window.innerWidth < 768, 
485        favorites: [], 
486        getFavorites() { 
487            if(localStorage.getItem("favorites") !== null) { 
488    			this.favorites = JSON.parse(localStorage.getItem("favorites")); 
489
490        }, 
491        setFavorite(e, item) { 
492            e.preventDefault(); 
493    		this.getFavorites(); 
494     
495    		var newFavorite = { 
496    			id: item.id, 
497        			contentJSON: { 
498    				title: item.contentJSON.title, 
499    				previewDescription: item.contentJSON.previewDescription, 
500    				description: item.contentJSON.description, 
501    				geoRef: item.contentJSON.geoRef, 
502    				previewPicture: item.contentJSON.previewPicture, 
503    				viewUrl: item.contentJSON.viewUrl, 
504    				type: "lfr", 
505
506    		}; 
507     
508    		this.favorites.push(newFavorite); 
509    		this.saveFavorites(); 
510    	}, 
511    	removeFavorite(e, itemId) { 
512    	    e.preventDefault(); 
513    		this.favorites = this.favorites.filter((obj) => obj.id !== itemId); 
514    		this.saveFavorites(); 
515    	}, 
516    	saveFavorites() { 
517    		localStorage.setItem("favorites", JSON.stringify(this.favorites)); 
518    	}, 
519    	isFavorite(itemId) { 
520    		if (this.favorites.some((e) => e.id == itemId)) { 
521    			return true; 
522
523     
524    		return false; 
525    	}, 
526    	buildMap(lat, lng) { 
527            var map = new SuggestoMap("suggesto-map"), 
528                location = [parseFloat(lat), parseFloat(lng)]; 
529             
530            var svgIcon = L.divIcon({ 
531                html: ` 
532                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44.537 64.343"> 
533                        <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"/> 
534                        <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"/> 
535                        <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"/> 
536                        <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"/> 
537                    </svg>`, 
538                className: "", 
539                iconSize: [44.537, 64.343], 
540                iconAnchor: [22.287, 64.343], 
541            }); 
542                 
543            var mapData = { 
544                tilelayer: "osm", 
545                gestureHandling: true, 
546                fitBounds: false, 
547                mapcenter: location, 
548                zoom: 15, 
549                markersFilter: "*", 
550                markers: [], 
551                layers: [] 
552            }; 
553                 
554            map.sm.createMap(mapData); 
555             
556            L.circleMarker(location, { 
557                radius: 0, 
558                color: "#000", 
559                fillOpacity: 0, 
560                weight: 0 
561            }).addTo(map.sm.lmap); 
562             
563            L.marker(location, { 
564                icon: svgIcon 
565            }).addTo(map.sm.lmap); 
566        }, 
567        share(title, desc, mode = "legacy") { 
568            if (this.isMobile) { 
569                var shareData = { 
570                    title: title, 
571                    text: desc, 
572                    url: window.location.href.replaceAll("{", "%7B").replaceAll("}", "%7D") 
573                }; 
574 
575                try { 
576                    navigator.share(shareData); 
577                } catch (err) { 
578                    console.error("Error sharing: " + err); 
579 
580                    if (mode == "legacy") { 
581                        this.legacyShare(); 
582                    } else if (mode == "social") { 
583                        this.socialShare(title, desc); 
584
585
586            } else { 
587                if (mode == "legacy") { 
588                    this.legacyShare(); 
589                } else if (mode == "social") { 
590                    this.socialShare(title, desc); 
591
592
593        }, 
594        legacyShare() { 
595            var clip = document.createElement("input"), 
596                toCopy = window.location.href.replaceAll("{", "%7B").replaceAll("}", "%7D"); 
597 
598            document.body.appendChild(clip); 
599            clip.value = toCopy; 
600            clip.select(); 
601            clip.setSelectionRange(0, 999999); 
602 
603            navigator.clipboard.writeText(clip.value); 
604            document.body.removeChild(clip); 
605 
606            alert("Link copiato"); 
607        }, 
608        socialShare(title, desc, image = "") { 
609            var link = "#", 
610                winHeight = 450, 
611                winWidth = 600, 
612                winTop = window.screen.height / 2 - winHeight / 2, 
613                winLeft = window.screen.width / 2 - winWidth / 2, 
614                params = "scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=" + winWidth + ",height=" + winHeight + ",left=" + winLeft + ",top=" + winTop; 
615 
616            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; 
617 
618            window.open(link, "Facebook", params); 
619
620    }).mount("#${d40.portletNamespace}"); 
621</script> 
622 
623<#if doc?has_content> 
624    <script> 
625        document.addEventListener("DOMContentLoaded", function(){ 
626 
627            document.querySelectorAll('a[href^="#contact"]').forEach(anchor => { 
628                anchor.addEventListener('click', function (e) { 
629                    e.preventDefault(); 
630             
631                    document.querySelector(this.getAttribute('href')).scrollIntoView({ 
632                        behavior: 'smooth' 
633                    }); 
634                }); 
635            }); 
636         
637         
638            if(${(doc.details.images?has_content)?c}){ 
639                new Swiper("#gallery .swiper-container", { 
640                    slidesPerView: 1, 
641                    spaceBetween: 50, 
642                    centerSlides: true, 
643                    centerInsufficientSlides: true, 
644                    breakpoints: { 
645                        768: { 
646                            slidesPerView: 2, 
647                            spaceBetween: 25 
648                        }, 
649                        992: { 
650                            slidesPerView: 3, 
651                            spaceBetween: 25 
652
653                    }, 
654                    navigation: { 
655                        prevEl: "#gallery .btn-prev", 
656                        nextEl: "#gallery .btn-next" 
657
658                }); 
659                 
660                var thumbnails = new Swiper("#thumbnail-swiper", { 
661                    spaceBetween: 10, 
662                    slidesPerView: 2, 
663                    centerInsufficientSlides: true, 
664                    freeMode: true, 
665                    watchSlidesVisibility: true, 
666                    watchSlidesProgress: true, 
667        			breakpoints: { 
668        				768: { 
669        					slidesPerView: 3 
670        				}, 
671        				992: { 
672        					slidesPerView: 4 
673        				}, 
674        				1200: { 
675        					slidesPerView: 5 
676
677        			}, 
678                }); 
679                 
680                var lightbox = new Swiper("#lightbox-swiper", { 
681        		    spaceBetween: 10, 
682                    autoHeight: true, 
683                    observer: true, 
684                    observeSlideChildren: true, 
685                    keyboard: { 
686                        enabled: true 
687                    }, 
688                    navigation: { 
689                        nextEl: ".swiper-button-next", 
690                        prevEl: ".swiper-button-prev" 
691                    }, 
692                    thumbs: { 
693                        swiper: thumbnails 
694
695                }); 
696                 
697                $("#lightbox-modal").on("shown.bs.modal", function(e){ 
698                    lightbox.update(); 
699                    thumbnails.update(); 
700                    lightbox.slideTo($(e.relatedTarget).data("slider")); 
701                    lightbox.update(); 
702                }); 
703                 
704                $("#lightbox-modal .swiper-wrapper").on("click", function(e){ 
705                    if($(e.target).attr("class").includes("swiper-slide")){ 
706                        $("#lightbox-modal").modal("hide"); 
707
708                }); 
709                 
710                if ($(window).width() > 991) { 
711                    var left_col_h = $(".relative.mt-20 > .container > .row > .col-lg-7").outerHeight(); 
712                    var right_col_h = $(".relative.mt-20 > .container > .row > .col-lg-5").outerHeight(); 
713                    var marg_h = right_col_h - left_col_h + 40; 
714                     
715                    if(right_col_h > left_col_h) 
716
717                        $('#gallery').removeClass('lg:mt-40 mt-20'); 
718                        $('#gallery').css({'margin-top':marg_h+'px'});  
719
720
721
722        }); 
723    </script> 
724</#if> 

Your request was sent successfully