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

L'invio della richiesta è andata a buon fine