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#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_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="${ri_url}" 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                             
234                            <#if hasCoords> 
235                                <div class="relative flex h-70"> 
236                                    <div class="absolute w-full lg:w-105% h-full right-0"> 
237                                        <div id="suggesto-map" class="monochrome-map size-full border-0"></div> 
238                                    </div> 
239                                </div> 
240                                <div class="card-body p-5 lg:px-10"> 
241                                    <!-- https://www.google.com/maps/dir/?api=1&travelmode=driving&destination=lat,lon  
242                                    https://www.google.com/maps/@${lat},${lng} 
243                                    --> 
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                                     
281                                    <#assign z=request.setAttribute("ogImage","${pic[langId]}")> 
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            if(${(doc.details.images?has_content)?c}){ 
628                new Swiper("#gallery .swiper-container", { 
629                    slidesPerView: 1, 
630                    spaceBetween: 50, 
631                    centerSlides: true, 
632                    centerInsufficientSlides: true, 
633                    breakpoints: { 
634                        768: { 
635                            slidesPerView: 2, 
636                            spaceBetween: 25 
637                        }, 
638                        992: { 
639                            slidesPerView: 3, 
640                            spaceBetween: 25 
641
642                    }, 
643                    navigation: { 
644                        prevEl: "#gallery .btn-prev", 
645                        nextEl: "#gallery .btn-next" 
646
647                }); 
648                 
649                var thumbnails = new Swiper("#thumbnail-swiper", { 
650                    spaceBetween: 10, 
651                    slidesPerView: 2, 
652                    centerInsufficientSlides: true, 
653                    freeMode: true, 
654                    watchSlidesVisibility: true, 
655                    watchSlidesProgress: true, 
656        			breakpoints: { 
657        				768: { 
658        					slidesPerView: 3 
659        				}, 
660        				992: { 
661        					slidesPerView: 4 
662        				}, 
663        				1200: { 
664        					slidesPerView: 5 
665
666        			}, 
667                }); 
668                 
669                var lightbox = new Swiper("#lightbox-swiper", { 
670        		    spaceBetween: 10, 
671                    autoHeight: true, 
672                    observer: true, 
673                    observeSlideChildren: true, 
674                    keyboard: { 
675                        enabled: true 
676                    }, 
677                    navigation: { 
678                        nextEl: ".swiper-button-next", 
679                        prevEl: ".swiper-button-prev" 
680                    }, 
681                    thumbs: { 
682                        swiper: thumbnails 
683
684                }); 
685                 
686                $("#lightbox-modal").on("shown.bs.modal", function(e){ 
687                    lightbox.update(); 
688                    thumbnails.update(); 
689                    lightbox.slideTo($(e.relatedTarget).data("slider")); 
690                    lightbox.update(); 
691                }); 
692                 
693                $("#lightbox-modal .swiper-wrapper").on("click", function(e){ 
694                    if($(e.target).attr("class").includes("swiper-slide")){ 
695                        $("#lightbox-modal").modal("hide"); 
696
697                }); 
698                 
699                if ($(window).width() > 991) { 
700                    var left_col_h = $(".relative.mt-20 > .container > .row > .col-lg-7").outerHeight(); 
701                    var right_col_h = $(".relative.mt-20 > .container > .row > .col-lg-5").outerHeight(); 
702                    var marg_h = right_col_h - left_col_h + 40; 
703                     
704                    if(right_col_h > left_col_h) 
705
706                        $('#gallery').removeClass('lg:mt-40 mt-20'); 
707                        $('#gallery').css({'margin-top':marg_h+'px'});  
708
709
710
711        }); 
712    </script> 
713</#if>