Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> embed.descrizioneEmbedAudio [in template "1315478#1315513#1674018" at line 396, column 290]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to 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: #if (embed.AudioFields.titoloEmbedAud... [in template "1315478#1315513#1674018" at line 396, column 137]
----
1<#include "_TEMPLATE_CONTEXT_/1315478/1331017/23609/1656602">
2<#-- porting 74 v2 -->
3<#assign
4 articleId = .vars['reserved-article-id'].data
5 territorioCategories = getContentVocabularyCategories(articleId, "TERRITORIO", groupId)
6 slides = 0
7 hasSlides = false
8 hasDownloads = false
9 hasGallery = false
10 sliderCategories = []
11 lat = 0
12 lng = 0
13
14 groupedCategories = getNavCircCategories(articleId, groupId)
15/>
16
17<#-- MASONRY -->
18<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.js"></script>
19
20<#list territorioCategories as tCat>
21 <#if tCat.parentCategoryId != 0>
22 <#assign sliderCategories += [tCat.name]>
23 </#if>
24</#list>
25
26<#if tourismItem.slideHeader?? && tourismItem.slideHeader.getSiblings()?has_content>
27 <#list tourismItem.slideHeader.getSiblings() as slide>
28 <#if slide.getData()?has_content>
29 <#assign
30 hasSlides = true
31 slides = tourismItem.slideHeader.getSiblings()?size
32 />
33 <#break>
34 </#if>
35 </#list>
36</#if>
37<#--
38<#if geoRef.getData()?has_content>
39 <#assign
40 geoObj = createObject(geoRef.getData())
41 lat = geoObj.getDouble("latitude")
42 lng = geoObj.getDouble("longitude")
43 />
44</#if>
45-->
46<#if tourismItem.coordinateTestuali.getData()?has_content>
47 <#assign
48 lat = tourismItem.coordinateTestuali.getData()?keep_before(",")?number
49 lng = tourismItem.coordinateTestuali.getData()?keep_after(",")?number
50 />
51</#if>
52
53<#if tourismItem.ImmagineGallery?? && tourismItem.ImmagineGallery.getSiblings()?has_content>
54 <#list tourismItem.ImmagineGallery.getSiblings() as item>
55 <#if item.getData()?has_content>
56 <#assign hasGallery = true>
57 <#break>
58 </#if>
59 </#list>
60</#if>
61
62<style>
63 .no-shadow{
64 box-shadow: none;
65 }
66</style>
67
68<!-- Modello località -->
69
70<div id="${portletNamespace}" v-cloak>
71
72
73 <#if themeDisplay.getLayout().getAncestors()?has_content>
74 <section id="breadcrumb" class="mt-4">
75 <div class="container-fluid custom-container d-flex align-items-center">
76 <ol class="breadcrumb">
77 <li class="breadcrumb-item">
78 <a href="/" class="breadcrumb-link" title="Home">
79 <span class="breadcrumb-text-truncate tw:text-dark tw:uppercase">Home</span>
80 </a>
81 </li>
82
83 <#list themeDisplay.getLayout().getAncestors()?reverse as ancestor>
84 <li class="breadcrumb-item">
85 <a href="${ancestor.getFriendlyURL()}" class="breadcrumb-link" title="${escape(ancestor.getHTMLTitle(themeDisplay.getLocale()))}">
86 <span class="breadcrumb-text-truncate tw:text-dark tw:uppercase">${escape(ancestor.getHTMLTitle(themeDisplay.getLocale()))}</span>
87 </a>
88 </li>
89 </#list>
90
91 <li class="breadcrumb-item active">
92 <span class="tw:text-green tw:uppercase" title="${tourismItem.title.getData()?js_string}">
93 ${tourismItem.title.getData()}
94 </span>
95 </li>
96 </ol>
97
98 <div class="tw:flex tw:align-center">
99 <button type="button" @click="isFavorite(item.id) ? removeFavorite(item) : setFavorite(item);" class="btn btn-link tw:no-underline" :title="isFavorite(item.id) ? `${getLabel('rimuovi_preferiti', groupId)}` : `${getLabel('aggiungi_preferiti', groupId)}`">
100 <i :class="(isFavorite(item.id) ? 'fas' : 'fal') + ' fa-heart fa-2x tw:text-green'"></i>
101 </button>
102
103 <div class="btn dropdown tw:px-0">
104 <button type="button" class="btn btn-link dropdown-toggle tw:no-underline tw:text-green" data-toggle="dropdown">
105 <i class="fas fa-share-alt fa-2x"></i>
106 </button>
107 <div class="dropdown-menu dropdown-menu-center">
108 <button type="button" @click="customShare('facebook', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
109 <i class="fab fa-facebook-f fa-lg tw:text-green"></i>
110 <span class="tw:text-dark">
111 Facebook
112 </span>
113 </button>
114
115 <button type="button" @click="customShare('twitter', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
116 <i class="fab fa-twitter fa-lg tw:text-green"></i>
117 <span class="tw:text-dark">
118 Twitter
119 </span>
120 </button>
121
122 <button type="button" @click="customShare('pinterest', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
123 <i class="fab fa-pinterest fa-lg tw:text-green"></i>
124 <span class="tw:text-dark">
125 Pinterest
126 </span>
127 </button>
128
129 <button type="button" @click="customShare('whatsapp', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
130 <i class="fab fa-whatsapp fa-lg tw:text-green"></i>
131 <span class="tw:text-dark">
132 WhatsApp
133 </span>
134 </button>
135
136 <button type="button" @click="customShare('telegram', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
137 <i class="fab fa-telegram fa-lg tw:text-green"></i>
138 <span class="tw:text-dark">
139 Telegram
140 </span>
141 </button>
142
143 <button type="button" @click="customShare('print', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
144 <i class="fas fa-print fa-lg tw:text-green"></i>
145 <span class="tw:text-dark">
146 Print
147 </span>
148 </button>
149
150 <a :href="'mailto:inserisci indirizzo email?subject=' + item.contentJSON.title + '&body=${currentUrl} ' + item.contentJSON.description" class="dropdown-item tw:space-x-2">
151 <i class="fas fa-envelope fa-lg tw:text-green"></i>
152 <span class="tw:text-dark">
153 Email
154 </span>
155 </a>
156
157 <button type="button" @click="customShare('link', item.contentJSON.title, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
158 <i class="fas fa-link fa-lg tw:text-green"></i>
159 <span class="tw:text-dark">
160 Link
161 </span>
162 </button>
163 </div>
164 </div>
165 </div>
166 </div>
167 </section>
168 </#if>
169
170
171 <section id="slideshow" class="container-fluid custom-container">
172 <div class="swiper-container">
173 <div class="swiper-wrapper">
174 <#if hasSlides>
175 <#list tourismItem.slideHeader.getSiblings() as slide>
176 <div class="swiper-slide">
177 <img data-src="${getPrefix(slide.getData(), 1920, 730)}" loading="lazy" class="lazyload tw:object-cover tw:h-full tw:w-full" alt="${slide.getAttribute('alt')}"/>
178 <div class="card-img-overlay tw:bg-dark tw:bg-opacity-40"></div>
179
180 <div class="carousel-caption tw:flex tw:text-left tw:transform lg:tw:top-2/4 lg:tw:-translate-y-2/4">
181 <#if tourismItem.testoHeader?? && tourismItem.testoHeader.getData()?has_content>
182 <#assign locationClass = "tw:my-auto">
183 <#else>
184 <#assign locationClass = "tw:mt-auto tw:mb-20">
185 </#if>
186
187 <div class="tw:flex tw:flex-col ${locationClass}">
188 <div class="hcm-bg-capable tw:text-white tw:font-heading tw:uppercase tw:text-2xl tw:mr-auto tw:p-4 tw:rounded-md lg:tw:text-4xl">
189 <#if testoHeader?? && testoHeader.getData()?has_content>
190 <p>${tourismItem.testoHeader.getData()}</p>
191 <div class="dropdown-divider tw:border-green tw:border-t-3 tw:w-3/5 tw:mt-5 tw:mr-auto lg:tw:w-1/5 lg:tw:mt-10"></div>
192 </#if>
193 </div>
194
195 <#if sliderCategories?has_content>
196 <#assign cleanedCategories = cleanCategories(sliderCategories)>
197
198 <div class="tw:flex tw:mt-7">
199 <i class="fas fa-map-marker-alt fa-2x tw:text-white"></i>
200 <p class="tw:text-white tw:uppercase tw:font-heading tw:font-medium tw:my-auto tw:ml-3">
201 ${cleanedCategories?join(", ")}
202 </p>
203 </div>
204 </#if>
205 </div>
206 </div>
207 </div>
208 </#list>
209 <#else>
210 <div class="swiper-slide">
211 <img data-src="https://via.placeholder.com/1920x730" loading="lazy" class="lazyload tw:object-cover tw:h-full tw:w-full" alt=""/>
212 <div class="card-img-overlay tw:bg-dark tw:bg-opacity-40"></div>
213
214 <div class="carousel-caption tw:flex tw:text-left tw:transform lg:tw:top-2/4 lg:tw:-translate-y-2/4">
215 <#if tourismItem.testoHeader?? && tourismItem.testoHeader.getData()?has_content>
216 <#assign locationClass = "tw:my-auto">
217 <#else>
218 <#assign locationClass = "tw:mt-auto tw:mb-20">
219 </#if>
220
221 <div class="tw:flex tw:flex-col ${locationClass}">
222 <div class="hcm-bg-capable tw:text-white tw:font-heading tw:uppercase tw:text-2xl tw:mr-auto tw:p-4 tw:rounded-md lg:tw:text-4xl">
223 <#if tourismItem.testoHeader?? && tourismItem.testoHeader.getData()?has_content>
224 <p>${tourismItem.testoHeader.getData()}</p>
225 <div class="dropdown-divider tw:border-green tw:border-t-3 tw:w-3/5 tw:mt-5 tw:mr-auto lg:tw:w-1/5 lg:tw:mt-10"></div>
226 </#if>
227 </div>
228
229 <#if territorioCategories?has_content>
230 <div class="tw:flex tw:mt-7">
231 <i class="fas fa-map-marker-alt fa-2x tw:text-white"></i>
232 <p class="tw:text-white tw:uppercase tw:font-heading tw:font-medium tw:my-auto tw:ml-3">
233 <#list territorioCategories as cat>
234 <#if cat.parentCategoryId != 0>
235 ${cat.name}
236
237 <#if cat?has_next>,</#if>
238 </#if>
239 </#list>
240 </p>
241 </div>
242 </#if>
243 </div>
244 </div>
245 </div>
246 </#if>
247 </div>
248 </div>
249 </section>
250
251 <section id="intro-description" class="tw:font-text tw:mt-5">
252 <div class="d-flex container-fluid custom-container">
253 <div class="mt-4">
254 <#if tourismItem.title?? && tourismItem.title.getData()?has_content>
255 <h1>${tourismItem.title.getData()}</h1>
256 </#if>
257
258 <#if tourismItem.subTitle?? && tourismItem.subTitle.getData()?has_content>
259 <h3>${tourismItem.subTitle.getData()}</h3>
260 </#if>
261 </div>
262 <div class="tw:flex tw:mt-9 lg:tw:hidden">
263 <button type="button" @click="isFavorite(item.id) ? removeFavorite(item) : setFavorite(item);" class="btn btn-link tw:no-underline" :title="isFavorite(item.id) ? `${getLabel('rimuovi_preferiti', groupId)}` : `${getLabel('aggiungi_preferiti', groupId)}`">
264 <i :class="(isFavorite(item.id) ? 'fas' : 'fal') + ' fa-heart fa-lg tw:text-green'"></i>
265 </button>
266 <button type="button" @click="share(item.contentJSON.title, item.contentJSON.description)" class="btn btn-link tw:no-underline">
267 <i class="fas fa-share-alt fa-lg tw:text-green"></i>
268 </button>
269 </div>
270 </div>
271
272 <div class="container">
273 <div class="row">
274 <div class="col-12 col-lg-7">
275 <#if tourismItem.introDescription?? && tourismItem.introDescription.getData()?has_content>
276 <div class="mt-4">
277 ${tourismItem.introDescription.getData()}
278 </div>
279 <@contatti/>
280 </#if>
281
282 </div>
283 <div class="col-12 col-lg-5">
284 <div id="suggesto-map" class="map-image map-styled tw:mt-15" style="height: 350px;"></div>
285 </div>
286 </div>
287 </div>
288 </section>
289
290 <#-- MASONRY GALLERY -->
291 <#if hasGallery>
292 <section id="gallery" class="mt-4">
293 <div class="container-fluid custom-container">
294 <div class="gallery-grid grid">
295 <#list tourismItem.ImmagineGallery.getSiblings() as pic>
296 <div class="grid-item">
297 <a href="javascript:void(0);" data-toggle="modal" data-target="#lightbox-modal" data-slider="${pic?index}">
298 <img src="${getKitPrefix(pic.getData(), 'tr:w-900,fo-center')}" alt="${pic.getAttribute('alt')!''}" />
299 </a>
300 </div>
301 </#list>
302 </div>
303 </div>
304
305 <div id="lightbox-modal" tabindex="-1" role="dialog" class="modal fade">
306 <div class="modal-dialog modal-full-screen tw:inset-0 tw:border-none tw:shadow-none">
307 <div class="modal-content tw:bg-transparent">
308 <div class="modal-body tw:overflow-hidden">
309 <div class="tw:absolute tw:top-0 tw:right-0 tw:z-5">
310 <button type="button" data-dismiss="modal" class="btn btn-monospaced btn-secondary m-3">
311 <i class="fal fa-times fa-lg"></i>
312 </button>
313 </div>
314
315 <#-- lightbox -->
316 <div id="lightbox-swiper" class="swiper-container h-75 my-auto">
317 <div class="swiper-button-prev tw:w-12 tw:h-12">
318 <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full">
319 <span class="sticker-overlay">
320 <i class="fas fa-chevron-left fa-2x tw:text-white"></i>
321 </span>
322 </span>
323 </div>
324
325 <div class="swiper-button-next tw:w-12 tw:h-12">
326 <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full">
327 <span class="sticker-overlay">
328 <i class="fas fa-chevron-right fa-2x tw:text-white"></i>
329 </span>
330 </span>
331 </div>
332
333 <div class="swiper-wrapper tw:h-full">
334 <#list tourismItem.ImmagineGallery.getSiblings() as pic>
335 <div class="swiper-slide tw:h-full">
336 <img data-src="${getPrefix(pic.getData(), 1920, '')}" loading="lazy" class="lazyload tw:h-full tw:object-contain tw:mx-auto" alt="${pic.getAttribute('alt')!''}">
337 </div>
338 </#list>
339 </div>
340 </div>
341
342 <#-- thumbnails -->
343 <div id="thumbnail-swiper" class="swiper-container" thumbsSlider="">
344 <div class="swiper-wrapper">
345 <#list tourismItem.ImmagineGallery.getSiblings() as pic>
346 <div class="swiper-slide">
347 <img data-src="${getPrefix(pic.getData(), 300, '')}" loading="lazy" class="lazyload tw:object-cover tw:cursor-pointer tw:h-full tw:w-full" alt="${pic.getAttribute('alt')!''}">
348 </div>
349 </#list>
350 </div>
351 </div>
352 </div>
353 </div>
354 </div>
355 </div>
356 </section>
357 </#if>
358
359 <#if tourismItem.descriptionFieldSet.description?? && tourismItem.descriptionFieldSet.description.getData()?has_content>
360 <section id="description" class="tw:font-text tw:mt-20">
361 <div class="container-fluid custom-container">
362 <div class="tw:space-x-2 tw:mt-10">
363 <p class="tw:inline tw:text-dark tw:font-heading tw:font-extrabold tw:text-2xl tw:uppercase lg:tw:text-4xl">${getLabel('scopri-di-piu-parte1')}</p>
364 <p class="tw:inline tw:text-dark tw:font-heading tw:font-light tw:text-2xl tw:uppercase lg:tw:text-4xl">${getLabel('scopri-di-piu-parte2')}</p>
365 </div>
366 <div class="tw:border-t-2 tw:border-gray-50 tw:pt-10 tw:mt-5">
367 <div class="tw:flow-root">
368 <#if tourismItem.descriptionFieldSet.descriptionFieldSetFieldSet.ImmagineMain?? && tourismItem.descriptionFieldSet.descriptionFieldSetFieldSet.ImmagineMain.getData()?has_content>
369 <div class="tw:w-full lg:tw:float-left lg:tw:w-5/12 lg:pr-5">
370 <div class="aspect-ratio aspect-ratio-4-to-3 tw:rounded-md tw:shadow-md">
371 <img data-src="${getPrefix(tourismItem.descriptionFieldSet.descriptionFieldSetFieldSet.ImmagineMain.getData(), 400, 300)}" loading="lazy" class="lazyload aspect-ratio-item-fluid tw:object-cover tw:w-full tw:h-full" alt="${tourismItem.descriptionFieldSet.descriptionFieldSetFieldSet.ImmagineMain.getAttribute('alt')}" />
372 </div>
373 </div>
374 </#if>
375 <div class="tw:text-dark tw:font-light tw:mt-5 lg:tw:mt-0">
376 ${tourismItem.descriptionFieldSet.description.getData()}
377 </div>
378
379 </div>
380 </div>
381 </div>
382 </section>
383 </#if>
384
385
386 <#if AudioBlock.CodiceEmbedAudioAltro?? && AudioBlock.CodiceEmbedAudioAltro.data?has_content>
387 <section id="embeds" class="mt-20">
388 <div class="d-flex container-fluid custom-container">
389 <div class="row">
390 <#list AudioBlock.getSiblings() as embed>
391 <div class="col-12 col-lg-6 m-auto">
392 <div class="card">
393 <div class="embed-responsive embed-responsive-16by9 tw:rounded-md">
394 ${embed.CodiceEmbedAudioAltro.getData()}
395 </div>
396 <#if (embed.AudioFields.titoloEmbedAudio?? && embed.AudioFields.titoloEmbedAudio.getData()?has_content) || (embed.AudioFields.descrizioneEmbedAudio?? && embed.descrizioneEmbedAudio.getData()?has_content)>
397 <div class="card-body tw:px-0">
398 <#if embed.AudioFields.titoloEmbedAudio?? && embed.AudioFields.titoloEmbedAudio.getData()?has_content >
399 <p class="tw:text-dark tw:uppercase tw:font-heading tw:font-bold tw:text-xl lg:tw:text-2xl mb-4">${embed.AudioFields.titoloEmbedAudio.getData()}</p>
400 </#if>
401 <#if embed.AudioFields.descrizioneEmbedAudio?? && embed.AudioFields.descrizioneEmbedAudio.getData()?has_content>
402 <p class="tw:text-dark tw:font-light">${embed.AudioFields.descrizioneEmbedAudio.getData()}</p>
403 </#if>
404 </div>
405 </#if>
406 </div>
407 </div>
408 </#list>
409 </div>
410 </div>
411 </section>
412 </#if>
413
414 <#if VideoBlock.embed_video?? && VideoBlock.embed_video.data?has_content>
415 <section id="videos" class="mt-5">
416 <div class="d-flex container-fluid custom-container">
417 <div class="row w-100">
418 <#list VideoBlock.getSiblings() as video>
419 <div class="col-12 col-lg-6 offset-lg-2">
420 <div class="card">
421 <div class="embed-responsive embed-responsive-16by9">
422 <iframe class="embed-responsive-item" src="${video.embed_video.getData()}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
423 </div>
424 <#if (video.VideoFields.titoloEmbedVideo?? && video.VideoFields.titoloEmbedVideo.getData()?has_content) || (video.VideoFields.descrizioneEmbedVideo?? && video.VideoFields.descrizioneEmbedVideo.getData()?has_content)>
425 <div class="card-body py-3 px-0">
426 <#if video.VideoFields.titoloEmbedVideo?? && video.VideoFields.titoloEmbedVideo.getData()?has_content >
427 <p class="vid-title">${video.VideoFields.titoloEmbedVideo.getData()}</p>
428 </#if>
429 <#if video.VideoFields.descrizioneEmbedVideo?? && video.VideoFields.descrizioneEmbedVideo.getData()?has_content>
430 <p class="vid-desc">${video.VideoFields.titoloEmbedVideo.getData()}</p>
431 </#if>
432 </div>
433 </#if>
434 </div>
435 </div>
436 </#list>
437 </div>
438 </div>
439 </section>
440 </#if>
441
442
443 <#if downloads??>
444 <section id="downloads" >
445 <#list downloads.getSiblings() as item>
446 <#if item.downloadUrl.getData()?has_content>
447 <#assign hasDownloads = true>
448 <#break>
449 </#if>
450 </#list>
451 </#if>
452
453 <#if hasDownloads>
454 <section id="downloads">
455 <div class="d-flex container-fluid custom-container mt-20">
456 <div class="sheet tw-bg-light tw:space-y-4 p-3">
457 <#list tourismItem.downloadsFieldSet.downloadsFieldSetFieldSet.getSiblings() as item>
458 <#-- #assign doc = getFileFromUuid(createObject(item.downloadUrl.data).uuid, groupId) -->
459
460 <div class="card tw:bg-transparent tw:border-0 tw:shadow-none">
461 <div class="card-row">
462 <div class="autofit-col">
463 <div class="autofit-section">
464 <i class="fal fa-file-pdf fa-lg tw:text-dark"></i>
465 </div>
466 </div>
467 <div class="autofit-col autofit-col-expand autofit-col-gutters">
468 <div class="autofit-section">
469 <a href="${item.downloadUrl.getData()}" class="tw:text-dark tw:font-bold" download>
470 <#-- ${doc.fileName} -->
471 ${item.downloadText.getData()}
472
473 <span class="tw:font-light muted tw:ml-2">(${getLabel('scarica_qui')})</span>
474 </a>
475 </div>
476 </div>
477 </div>
478 </div>
479 </#list>
480 </div>
481 </div>
482 </section>
483 </#if>
484
485 <#macro contatti>
486 <#assign
487 contactNameSz=""
488 street_number1Sz=""
489 localitaSz=""
490 comuneSz=""
491 countrySz=""
492 zipCodeSz=""
493 telSz=""
494 emailSz=""
495 email2Sz=""
496 webSiteSz=""
497 facebookSz=""
498 instagramSz=""
499 thereAreContcats="false"
500 />
501
502 <#if tourismItem.contactFields.singleContact.contactName?? && tourismItem.contactFields.singleContact.contactName.getData()?has_content>
503 <#assign contactNameSz=tourismItem.contactFields.singleContact.contactName.getData()>
504 <#assign thereAreContcats="true">
505 </#if>
506 <#if tourismItem.contactFields.singleContact.street_number1?? && tourismItem.contactFields.singleContact.street_number1.getData()?has_content>
507 <#assign street_number1Sz=tourismItem.contactFields.singleContact.street_number1.getData()>
508 <#assign thereAreContcats="true">
509 </#if>
510 <#if tourismItem.contactFields.singleContact.localita?? && tourismItem.contactFields.singleContact.localita.getData()?has_content>
511 <#assign localitaSz=tourismItem.contactFields.singleContact.localita.getData()>
512 <#assign thereAreContcats="true">
513 </#if>
514 <#if tourismItem.contactFields.singleContact.comune?? && tourismItem.contactFields.singleContact.comune.getData()?has_content>
515 <#assign comuneSz=tourismItem.contactFields.singleContact.comune.getData()>
516 <#assign thereAreContcats="true">
517 </#if>
518 <#if tourismItem.contactFields.singleContact.country?? && tourismItem.contactFields.singleContact.country.getData()?has_content>
519 <#assign countrySz=tourismItem.contactFields.singleContact.country.getData()>
520 <#assign thereAreContcats="true">
521 </#if>
522 <#if tourismItem.contactFields.singleContact.zipCode?? && tourismItem.contactFields.singleContact.zipCode.getData()?has_content>
523 <#assign zipCodeSz=tourismItem.contactFields.singleContact.zipCode.getData()>
524 <#assign thereAreContcats="true">
525 </#if>
526 <#if tourismItem.contactFields.singleContact.tel?? && tourismItem.contactFields.singleContact.tel.getData()?has_content>
527 <#assign telSz=tourismItem.contactFields.singleContact.tel.getData()>
528 <#assign thereAreContcats="true">
529 </#if>
530 <#if tourismItem.contactFields.singleContact.email?? && tourismItem.contactFields.singleContact.email.getData()?has_content>
531 <#assign emailSz=tourismItem.contactFields.singleContact.email.getData()>
532 <#assign thereAreContcats="true">
533 </#if>
534 <#if tourismItem.contactFields.singleContact.email2?? && tourismItem.contactFields.singleContact.email2.getData()?has_content>
535 <#assign email2Sz=tourismItem.contactFields.singleContact.email2.getData()>
536 <#assign thereAreContcats="true">
537 </#if>
538 <#if tourismItem.contactFields.singleContact.webSite?? && tourismItem.contactFields.singleContact.webSite.getData()?has_content>
539 <#assign webSiteSz=tourismItem.contactFields.singleContact.webSite.getData()>
540 <#assign thereAreContcats="true">
541 </#if>
542 <#if tourismItem.contactFields.singleContact.facebook?? && tourismItem.contactFields.singleContact.facebook.getData()?has_content>
543 <#assign facebookSz=tourismItem.contactFields.singleContact.facebook.getData()>
544 <#assign thereAreContcats="true">
545 </#if>
546 <#if tourismItem.contactFields.singleContact.instagram?? && tourismItem.contactFields.singleContact.instagram.getData()?has_content>
547 <#assign instagramSz=tourismItem.contactFields.singleContact.instagram.getData()>
548 <#assign thereAreContcats="true">
549 </#if>
550
551 <#assign acapo="false">
552 <#if thereAreContcats == "true">
553 <div class="tw:text-dark tw:font-light tw:mt-8">
554 <#if contactNameSz != "">
555 ${contactNameSz}
556 <#assign acapo="true">
557 </#if>
558 <#if street_number1Sz != "">
559 <#if acapo == "true"><br/></#if>
560 ${street_number1Sz}
561 <#assign acapo="true">
562 </#if>
563 <#if localitaSz != "">
564 <#if acapo == "true"><br/></#if>
565 ${localitaSz}
566 <#assign acapo="true">
567 </#if>
568
569 <#if zipCodeSz != "" || comuneSz != "" || countrySz != "">
570 <#if acapo == "true"><br/></#if>
571 ${zipCodeSz} ${comuneSz} ${countrySz}
572 <#assign acapo="true">
573 </#if>
574
575 <#if telSz != "">
576 <#if acapo == "true"><br/></#if>
577 ${getLabel('tel')}: ${telSz}
578 <#assign acapo="true">
579 </#if>
580 <#if emailSz != "">
581 <#if acapo == "true"><br/></#if>
582 ${getLabel('email')}: <a href="mailto:${emailSz}" >${emailSz}</a>
583 <#if email2Sz != "">
584 <a href="mailto:${email2Sz}" style="margin-left: 20px;">${email2Sz}</a>
585 </#if>
586 <#assign acapo="true">
587 </#if>
588
589 <#if webSiteSz != "" || facebookSz != "" || instagramSz != "">
590 <#if acapo == "true"><br/></#if>
591 <#if webSiteSz != "">
592 <a href="${webSiteSz}" title="${webSiteSz}" alt="${webSiteSz}" target="_blank">${getLabel('sito-web')}</a>
593 </#if>
594 <#if facebookSz != "">
595 <a href="${facebookSz}" title="${facebookSz}" alt="${facebookSz}" target="_blank"><i class="fab fa-facebook-f" style="margin-left: 20px;"></i></a>
596 </#if>
597 <#if instagramSz != "">
598 <a href="${instagramSz}" title="${instagramSz}" alt="${instagramSz}" target="_blank"><i class="fab fa-instagram" style="margin-left: 20px;"></i></a>
599 </#if>
600
601 </#if>
602
603 </div>
604 </#if>
605
606
607 </#macro>
608</div>
609
610<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/components/securityV2.js"></script>
611<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/components/initVueApp.js"></script>
612<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/mixins/js/favorites.js"></script>
613<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/mixins/js/share.js"></script>
614
615<script>
616 var ${portletNamespace}_custom_hook = {
617 data: {
618 title: "${tourismItem.title.getData()?js_string}",
619 item: {
620 id: "${articleId}",
621 contentJSON: {
622 title: "${tourismItem.title.getData()?js_string}",
623 description: "${tourismItem.introDescription.getData()?js_string}",
624 geoRef: '${tourismItem.geoRef.getData()}',
625 previewPicture: "${tourismItem.previewPicture.getData()}",
626 viewUrl: window.location.href
627 }
628 },
629 loading: true,
630 coords: {
631 lat: "${lat}",
632 lng: "${lng}"
633 },
634 regionLat: "44.3921388",
635 regionLng: "7.5211695",
636 slider: null,
637 gallery: null,
638 thumbnails: null,
639 lightbox: null,
640 map: null
641 },
642 mounted(){
643 var that = this;
644
645 this.createMap();
646
647 if(${hasSlides?c}){
648 this.initSlider();
649 }
650
651 if(${hasGallery?c}){
652 this.initGallery();
653
654 $("#lightbox-modal").on("shown.bs.modal", function(e){
655 that.lightbox.update();
656 that.thumbnails.update();
657 that.lightbox.slideTo($(e.relatedTarget).data("slider"));
658 that.lightbox.update();
659 });
660
661 $("#lightbox-modal .swiper-wrapper").on("click", function(e){
662 if($(e.target).attr("class").includes("swiper-slide")){
663 $("#lightbox-modal").modal("hide");
664 }
665 });
666 }
667
668 this.loading = false;
669 },
670 methods: {
671 createMap: function(){
672 var map = new SuggestoMap("suggesto-map"),
673 maskImage = "${images_folder}/cuneo-mask-styled.png",
674 maskBounds = [[ 44.86534447171959, 6.845056749880314 ], [ 44.04193085127058, 8.226587511599066 ]],
675 location = [
676 parseFloat(this.coords.lat),
677 parseFloat(this.coords.lng)
678 ],
679 mapData = {
680 tilelayer: "none",
681 tilelayers: [''],
682 mapcenter: [
683 parseFloat(this.regionLat),
684 parseFloat(this.regionLng)
685 ],
686 zoom: 9,
687 zoomControl: false,
688 attributionControl: false,
689 markersFilter: "*",
690 gestureHandling: false,
691 fitBounds: false,
692 markers: [],
693 layers: []
694 };
695
696 map.sm.createMap(mapData);
697 map.sm.disableMapTouch();
698
699 var marker = L.circleMarker(location, {
700 radius: 3,
701 color: "#000",
702 fillOpacity: 1
703 }).addTo(map.sm.lmap);
704
705 var svgIcon = L.divIcon({
706 html: `
707 <svg xmlns="http://www.w3.org/2000/svg" width="30.5" height="39.555" viewBox="0 0 30.5 39.555">
708 <g id="Raggruppa_1" data-name="Raggruppa 1" transform="translate(-1.656)">
709 <g id="Raggruppa_197" data-name="Raggruppa 197" transform="translate(1.656 0)">
710 <path id="Tracciato_29905" data-name="Tracciato 29905" d="M291.2,382.292c.123.489.508.9.453,1.441a5.186,5.186,0,0,1-1.152.226c-2.214-.065-4.426-.07-6.639.041-.163-.174-.338-.339-.488-.524a7.653,7.653,0,0,0-7.322-2.9,7.871,7.871,0,0,0-5.667,3.643c-2.009-.458-4.048-.145-6.07-.247-.456-.023-.971.185-1.342-.275a14.837,14.837,0,0,1,3.257-5.7,15.783,15.783,0,0,1,11.209-4.732,15.2,15.2,0,0,1,9.883,3.76A14.417,14.417,0,0,1,291.2,382.292Z" transform="translate(-262.079 -373.262)" fill="#ba0249"/>
711 <path id="Tracciato_29906" data-name="Tracciato 29906" d="M262.011,394.926c.37.459.886.252,1.342.275,2.023.1,4.062-.211,6.07.247a8.371,8.371,0,0,0-.167,7.943c-2.22-.527-4.517.042-6.737-.482-.389-.394-.449-1.105-1.154-1.2-.57-2.213-.03-4.357.4-6.508Z" transform="translate(-261.119 -384.491)" fill="#ba0249"/>
712 <path id="Tracciato_29907" data-name="Tracciato 29907" d="M264.026,411.459c2.22.524,4.518-.045,6.737.482,1.547,2.288,3.556,3.883,6.415,4.06,3.6.222,6.01-1.643,7.771-4.579.328.433.8.268,1.219.272,2.11.02,4.219.018,6.329.023l-.078.705a3.382,3.382,0,0,0-.507,1.376,8.046,8.046,0,0,0-1.019,1.989,45.823,45.823,0,0,1-5.219,7.925,2.579,2.579,0,0,0-.534-.212,36.093,36.093,0,0,1-6.628-1.489A31.219,31.219,0,0,1,264.026,411.459Z" transform="translate(-262.626 -393.041)" fill="#ba0249"/>
713 <path id="Tracciato_29908" data-name="Tracciato 29908" d="M262.784,410.212a31.218,31.218,0,0,0,14.486,10.551,36.1,36.1,0,0,0,6.628,1.489,2.576,2.576,0,0,1,.534.212c-1.551,2.332-3.712,4.163-5.309,6.458a5.116,5.116,0,0,0-1.173,1.284,2.131,2.131,0,0,0-.866.916c-.464.529-.738-.008-1.076-.191a1.256,1.256,0,0,0-.716-.689q-2.756-3.27-5.515-6.538c-.152-.18-.327-.34-.49-.509l-3.1-4.184-2.5-4.222a22.765,22.765,0,0,1-2.059-5.772C262.335,409.107,262.395,409.819,262.784,410.212Z" transform="translate(-261.384 -391.794)" fill="#ba0249"/>
714 <path id="Tracciato_29909" data-name="Tracciato 29909" d="M314.427,403.206c-2.11-.005-4.219,0-6.329-.023-.416,0-.89.161-1.219-.272a8.88,8.88,0,0,0-.542-7.642c2.212-.111,4.424-.106,6.639-.041a5.189,5.189,0,0,0,1.152-.226,9.128,9.128,0,0,1,.771,2.445A11.385,11.385,0,0,1,314.427,403.206Z" transform="translate(-284.556 -384.53)" fill="#ba0249"/>
715 <path id="Tracciato_29910" data-name="Tracciato 29910" d="M290.666,391.787a8.88,8.88,0,0,1,.542,7.642c-1.761,2.935-4.174,4.8-7.771,4.579-2.859-.176-4.867-1.772-6.415-4.06a8.371,8.371,0,0,1,.167-7.943,7.871,7.871,0,0,1,5.667-3.643,7.653,7.653,0,0,1,7.322,2.9C290.329,391.448,290.5,391.613,290.666,391.787Z" transform="translate(-268.885 -381.048)" fill="#fdfdfd"/>
716 </g>
717 </g>
718 </svg>` + '<div class="leaflet-div-icon">' + this.title.toUpperCase() + '</div>',
719 className: "",
720 iconSize: [30.5, 39.555],
721 iconAnchor: [15.25, 39.555],
722 });
723
724 var icon = L.divIcon({
725 iconSize: -10,
726 html: this.title.toUpperCase()
727 });
728
729 L.marker(location, {
730 icon: svgIcon
731 }).addTo(map.sm.lmap);
732
733 L.imageOverlay(maskImage, maskBounds).addTo(map.sm.lmap);
734 L.imageOverlay(maskImage, maskBounds).bringToFront();
735
736 this.map = map;
737 },
738 initSlider: function(){
739 this.slider = new Swiper("#slideshow .swiper-container", {
740 loop: ${(slides > 0)?c},
741 effect: "fade",
742 speed: 3000,
743 allowTouchMove: false,
744 autoplay: {
745 delay: 3000,
746 disableOnInteraction: false,
747 },
748 fadeEffect: {
749 crossFade: true,
750 },
751 });
752 },
753 initGallery: function(){
754 this.gallery = new Swiper("#gallery .swiper-container", {
755 slidesPerView: 1,
756 spaceBetween: 25,
757 centerSlides: true,
758 centerInsufficientSlides: true,
759 navigation: {
760 prevEl: ".btn-prev",
761 nextEl: ".btn-next",
762 },
763 breakpoints: {
764 768: {
765 slidesPerView: 2,
766 spaceBetween: 25,
767 },
768 992: {
769 slidesPerView: 3,
770 spaceBetween: 25,
771 },
772 },
773 });
774
775 this.thumbnails = new Swiper("#thumbnail-swiper", {
776 spaceBetween: 10,
777 slidesPerView: 2,
778 centerInsufficientSlides: true,
779 freeMode: true,
780 watchSlidesVisibility: true,
781 watchSlidesProgress: true,
782 breakpoints: {
783 768: {
784 slidesPerView: 3
785 },
786 992: {
787 slidesPerView: 4
788 },
789 1200: {
790 slidesPerView: 5
791 }
792 },
793 });
794
795 this.lightbox = new Swiper("#lightbox-swiper", {
796 spaceBetween: 10,
797 autoHeight: true,
798 observer: true,
799 observeSlideChildren: true,
800 keyboard: {
801 enabled: true
802 },
803 navigation: {
804 nextEl: ".swiper-button-next",
805 prevEl: ".swiper-button-prev"
806 },
807 thumbs: {
808 swiper: this.thumbnails
809 }
810 });
811 },
812 customShare: function(type, title, description, image = ""){
813 if(type == "facebook"){
814 var winHeight = 450,
815 winWidth = 600,
816 winTop = window.screen.height / 2 - winHeight / 2,
817 winLeft = window.screen.width / 2 - winWidth / 2,
818 params = "scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=" + winWidth + ",height=" + winHeight + ",left=" + winLeft + ",top=" + winTop,
819 link = "http://www.facebook.com/sharer.php?s=100&p[title]=" + encodeURIComponent(title) + "&p[summary]=" + encodeURIComponent(description) + "&p[url]=" + window.location.href + "&p[images][0]=" + image;
820
821 window.open(link, "Facebook", params);
822 }
823
824 if(type == "twitter"){
825 var link = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(title) + "&url=" + encodeURIComponent(window.location.href);
826
827 window.open(link, "_blank").focus();
828 }
829
830 if(type == "pinterest"){
831 var link = "https://pinterest.com/pin/create/button/?url=" + encodeURIComponent(window.location.href) + "&description=" + encodeURIComponent(title);
832
833 window.open(link, "_blank").focus();
834 }
835
836 if(type == "whatsapp"){
837 var link = "https://wa.me?text=" + encodeURIComponent(title + ": " + window.location.href);
838
839 window.open(link, "_blank").focus();
840 }
841
842 if(type == "telegram"){
843 var link = "https://t.me/share/url?url=" + window.location.href + "&text=" + encodeURIComponent(title);
844
845 window.open(link, "_blank").focus();
846 }
847
848 if(type == "print"){
849 window.print();
850 }
851
852 if(type == "link"){
853 this.legacyShare();
854 }
855 }
856 }
857 }
858
859 document.addEventListener("DOMContentLoaded",function(){
860 var app = initVueApp(
861 "#${portletNamespace}",
862 "${portletNamespace}",
863 [d40_favorites, d40_share, ${portletNamespace}_custom_hook]
864 );
865 });
866
867 var groupedCategories = '${groupedCategories?js_string}';
868 var contentCoords = [${lat}, ${lng}];
869 console.log("espongo " + groupedCategories);
870</script>
871
872<#function cleanCategories categories>
873 <#assign
874 url = themeDisplay.getURLCurrent()
875 fixedCats = []
876 />
877
878 <#if url?contains("villafalletto-il-paese-di-vanzetti")>
879 <#list categories as cat>
880 <#if cat?lower_case != "busca">
881 <#assign fixedCats += [cat]>
882 </#if>
883 </#list>
884 <#elseif url?contains("margarita-nel-verde-della-campagna")>
885 <#list categories as cat>
886 <#if cat?lower_case != "cuneo">
887 <#assign fixedCats += [cat]>
888 </#if>
889 </#list>
890 <#elseif url?contains("cervere-il-paese-dei-porri")>
891 <#list categories as cat>
892 <#if cat?lower_case != "fossano">
893 <#assign fixedCats += [cat]>
894 </#if>
895 </#list>
896 <#elseif url?contains("piozzo-citta-della-zucca")>
897 <#list categories as cat>
898 <#if cat?lower_case != "bene vagienna" && cat?lower_case != "carru">
899 <#assign fixedCats += [cat]>
900 </#if>
901 </#list>
902 <#elseif url?contains("i-gatt-ross-di-farigliano")>
903 <#list categories as cat>
904 <#if cat?lower_case != "mondovi" && cat?lower_case != "fossano">
905 <#assign fixedCats += [cat]>
906 </#if>
907 </#list>
908 <#elseif url?contains("moretta-tra-storia-e-prodotti-del-territorio")>
909 <#list categories as cat>
910 <#if cat?lower_case != "saluzzo" && cat?lower_case != "racconigi">
911 <#assign fixedCats += [cat]>
912 </#if>
913 </#list>
914 <#elseif url?contains("magliano-alpi-e-i-resti-romani")>
915 <#list categories as cat>
916 <#if cat?lower_case != "fossano" && cat?lower_case != "mondovi">
917 <#assign fixedCats += [cat]>
918 </#if>
919 </#list>
920 <#elseif url?contains("vottignasco-lungo-il-sentiero-del-maira")>
921 <#list categories as cat>
922 <#if cat?lower_case != "saluzzo" && cat?lower_case != "fossano">
923 <#assign fixedCats += [cat]>
924 </#if>
925 </#list>
926 <#elseif url?contains("trinita-feudo-dei-conti-costa")>
927 <#list categories as cat>
928 <#if cat?lower_case != "fossano">
929 <#assign fixedCats += [cat]>
930 </#if>
931 </#list>
932 <#elseif url?contains("faule-e-la-festa-della-bagna-caoda")>
933 <#list categories as cat>
934 <#if cat?lower_case != "racconigi">
935 <#assign fixedCats += [cat]>
936 </#if>
937 </#list>
938 <#elseif url?contains("carde-angolo-di-nobile-piemonte")>
939 <#list categories as cat>
940 <#if cat?lower_case != "valli po bronda e infernotto">
941 <#assign fixedCats += [cat]>
942 </#if>
943 </#list>
944 <#else>
945 <#assign fixedCats = categories>
946 </#if>
947
948 <#return fixedCats>
949</#function>
it_IT
Cosa
fare
it_IT
Esperienze
it_IT
Dove
dormire
it_IT
Offerte
it_IT
Info