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