An error occurred while processing the template.
The following has evaluated to null or missing:
==> response.data.docs.getJSONObject(0) [in template "1315478#1315513#2355066" at line 32, column 24]
----
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: #assign doc = response.data.docs.getJ... [in template "1315478#1315513#2355066" at line 32, column 9]
----
1<#import "_TEMPLATE_CONTEXT_/1315478/1331017/23609/1656602" as d40>
2
3<#setting url_escaping_charset="UTF-8">
4
5<#assign
6 DLFLS = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFolderLocalService")
7 DLFELS = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")
8 SRLS = serviceLocator.findService("eu.suggesto.servicecs.service.SuggestoRecommenderLocalService")
9 PUTIL = objectUtil("com.liferay.portal.kernel.util.PortalUtil")
10
11 id = themeDisplay.getURLCurrent()?keep_after("id=")
12 langId = locale?keep_before("_")
13 contentType = "alloggi"
14 vueActions = ""
15 doc = ""
16
17 yucca_folder_id = 1745320
18
19 folders = DLFLS.getFolders(groupId, yucca_folder_id)
20 images = []
21 rawImages = []
22 header_images = []
23/>
24
25<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
26<#assign z=request.setAttribute("ogUrl","${currentUrl}")>
27
28<#if id?has_content>
29 <#assign response = d40.fetchData("https://api-visitcuneese.d40.it/v1/search_accommodation/?uuid=${id}")>
30
31 <#if !response.error && response.data.docs?has_content>
32 <#assign doc = response.data.docs.getJSONObject(0)>
33
34 ${request.session.removeAttribute("circularCategories")}
35 ${request.session.setAttribute("circularCategories", doc.assetCategoryIds)}
36 </#if>
37</#if>
38
39<#if doc?has_content>
40 <#if doc.denominazione?? && doc.denominazione?has_content>
41 ${PUTIL.setPageTitle(doc.denominazione, request)}
42 </#if>
43
44 <#if doc.latitudine?has_content && doc.longitudine?has_content>
45 <#assign
46 hasCoords = true
47 lat = doc.latitudine
48 lng = doc.longitudine
49 vueActions = "getFavorites();buildMap(${lat}, ${lng})"
50 />
51 </#if>
52</#if>
53
54<#if id?has_content>
55 <#list folders as folder>
56 <#if folder.name?contains(id)>
57 <#list DLFELS.getFileEntries(groupId, folder.folderId) as image>
58 <#if image.fileName?lower_case?contains(image.extension)>
59 <#assign
60 images += ["/documents/${image.groupId}/${image.folderId}/${image.fileName}"]
61 rawImages += [image]
62 />
63 </#if>
64 </#list>
65 </#if>
66 </#list>
67</#if>
68
69<#list images as img>
70 <#if img?contains("header")>
71 <#assign header_images += [img]>
72 </#if>
73</#list>
74
75<section id="${d40.portletNamespace}" class="tw:font-text" v-cloak>
76 <#if doc?has_content>
77 <div class="container-fluid custom-container">
78 <div v-if="detail != null" class="row">
79 <div v-show="loading" class="col-12 tw:text-center">
80 <div class="loading-animation"></div>
81 </div>
82 <div v-show="!loading" class="col-12">
83 <section id="breadcrumb" class="tw:font-heading tw:text-base tw:mt-4 <lg:tw:hidden">
84 <div class="container tw:flex tw:flex-row tw:justify-between">
85 <ol class="breadcrumb tw-space-x-2">
86 <li class="breadcrumb-item">
87 <a href="/" class="breadcrumb-link" title="Home">
88 <span class="breadcrumb-text-truncate tw:text-dark tw:uppercase">Home</span>
89 </a>
90 </li>
91
92 <#list themeDisplay.getLayout().getAncestors()?reverse as ancestor>
93 <li class="breadcrumb-item">
94 <a href="${ancestor.getFriendlyURL()}" class="breadcrumb-link" title="${d40.escape(ancestor.getHTMLTitle(themeDisplay.getLocale()))}">
95 <span class="breadcrumb-text-truncate tw:text-dark tw:uppercase">${d40.escape(ancestor.getHTMLTitle(themeDisplay.getLocale()))}</span>
96 </a>
97 </li>
98 </#list>
99
100 <li class="breadcrumb-item active">
101 <span class="tw:text-green tw:uppercase" :title="sanitize(detail.denominazione)">
102 {{ sanitize(detail.denominazione) }}
103 </span>
104 </li>
105 </ol>
106
107 <div class="tw:flex tw:align-center">
108 <button type="button" @click="isFavorite(item.id) ? removeFavorite(item.id) : setYuccaFavorite(item, item.id);" class="btn btn-link tw:no-underline" :title="isFavorite(item.id) ? `${d40.getLabel('rimuovi_preferiti', groupId)}` : `${d40.getLabel('aggiungi_preferiti', groupId)}`">
109 <i :class="(isFavorite(item.id) ? 'fas' : 'fal') + ' fa-heart fa-2x tw:text-green'"></i>
110 </button>
111
112 <div class="btn dropdown tw:px-0">
113 <button type="button" class="btn btn-link dropdown-toggle tw:no-underline tw:text-green" data-toggle="dropdown">
114 <i class="fas fa-share-alt fa-2x"></i>
115 </button>
116 <div class="dropdown-menu dropdown-menu-center">
117 <button type="button" @click="customShare('facebook', item.denominazione, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
118 <i class="fab fa-facebook-f fa-lg tw:text-green"></i>
119 <span class="tw:text-dark">
120 Facebook
121 </span>
122 </button>
123
124 <button type="button" @click="customShare('twitter', item.denominazione, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
125 <i class="fab fa-twitter fa-lg tw:text-green"></i>
126 <span class="tw:text-dark">
127 Twitter
128 </span>
129 </button>
130
131 <button type="button" @click="customShare('pinterest', item.denominazione, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
132 <i class="fab fa-pinterest fa-lg tw:text-green"></i>
133 <span class="tw:text-dark">
134 Pinterest
135 </span>
136 </button>
137
138 <button type="button" @click="customShare('whatsapp', item.denominazione, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
139 <i class="fab fa-whatsapp fa-lg tw:text-green"></i>
140 <span class="tw:text-dark">
141 WhatsApp
142 </span>
143 </button>
144
145 <button type="button" @click="customShare('telegram', item.denominazione, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
146 <i class="fab fa-telegram fa-lg tw:text-green"></i>
147 <span class="tw:text-dark">
148 Telegram
149 </span>
150 </button>
151
152 <button type="button" @click="customShare('print', item.denominazione, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
153 <i class="fas fa-print fa-lg tw:text-green"></i>
154 <span class="tw:text-dark">
155 Print
156 </span>
157 </button>
158
159 <a :href="'mailto:inserisci indirizzo email?subject=' + item.denominazione + '&body=${d40.currentUrl} ' + item.contentJSON.description" class="dropdown-item tw:space-x-2">
160 <i class="fas fa-envelope fa-lg tw:text-green"></i>
161 <span class="tw:text-dark">
162 Email
163 </span>
164 </a>
165
166 <button type="button" @click="customShare('link', item.denominazione, item.contentJSON.description, item.contentJSON.previewPicture)" class="dropdown-item tw:space-x-2">
167 <i class="fas fa-link fa-lg tw:text-green"></i>
168 <span class="tw:text-dark">
169 Link
170 </span>
171 </button>
172 </div>
173 </div>
174 </div>
175 </div>
176 </section>
177
178 <#if d40.isDev>
179 <div class="container">
180 <@debug />
181 </div>
182 </#if>
183
184 <section id="intro-description" class="tw:font-text tw:mt-5">
185 <div class="container tw:flex tw:flex-row tw:space-x-2 tw:justify-between tw:border-t-2 tw:border-gray-50">
186 <div class="tw:mt-10">
187 <p class="tw:text-green tw:font-heading tw:font-extrabold tw:text-2xl tw:uppercase lg:tw:text-4xl">
188 {{ sanitize(detail.denominazione) }}
189 </p>
190 <p class="tw:text-dark tw:font-heading tw:font-light tw:text-2xl tw:uppercase lg:tw:text-4xl">
191 {{ sanitize(detail.qualifica) }}
192
193 <span v-if="detail.stelle != ''" class="ml-3">
194 <i v-for="i in detail.stelle" class="fas fa-star fa-sm"></i>
195 </span>
196 </p>
197 </div>
198 <div class="tw:flex tw:mt-9 lg:tw:hidden">
199 <button type="button" @click="isFavorite(item.id) ? removeFavorite(item.id) : setYuccaFavorite(item, item.id);" class="btn btn-link tw:no-underline" :title="isFavorite(item.id) ? `${d40.getLabel('rimuovi_preferiti', groupId)}` : `${d40.getLabel('aggiungi_preferiti', groupId)}`">
200 <i :class="(isFavorite(item.id) ? 'fas' : 'fal') + ' fa-heart fa-lg tw:text-green'"></i>
201 </button>
202 <button type="button" @click="share()" class="btn btn-link tw:no-underline">
203 <i class="fas fa-share-alt fa-lg tw:text-green"></i>
204 </button>
205 </div>
206 </div>
207
208 <#-- CONTATTI -->
209 <div class="tw:font-text tw:mt-20">
210 <div class="container">
211 <div class="row tw:space-y-6 tw:mt-5 lg:tw:space-y-0">
212 <div class="col-12 col-lg-8">
213 <#if (header_images?size > 0)>
214 <div class="aspect-ratio aspect-ratio-16-to-9 tw:rounded-md tw:shadow-2xl">
215 <img data-src="${d40.getPrefix(header_images[0], 1280, 720)}" loading="lazy" :alt="sanitize(detail.denominazione)" class="lazyload aspect-ratio-item-fluid tw:object-cover tw:w-full tw:h-full">
216 </div>
217 </#if>
218 </div>
219 <div class="col-12 col-lg-4">
220 <div class="card hcm-bg-capable tw:bg-green tw:rounded-md tw:border-none tw:shadow-2xl tw:h-full tw:p-4 tw:mb-0">
221 <p class="tw:text-white tw:font-heading tw:font-bold tw:text-xl tw:uppercase lg:tw:text-2xl">${d40.getLabel("contatti")}</p>
222 <div class="tw:divide-y-2 tw:divide-gray-50 tw:mt-8 lg:tw:mt-10">
223 <p class="tw:text-white">
224 {{ sanitize(detail.indirizzo) }} {{ sanitize(detail.comune) }}, {{ detail.provincia }}
225 </p>
226
227 <div class="tw:space-y-4 tw:mt-4 tw:pt-4">
228 <div v-if="detail.pubblicato!=false" class="card-row tw:space-x-4">
229 <div class="autofit-col">
230 <i class="fas fa-arrow-circle-right fa-2x tw:text-white"></i>
231 </div>
232 <div class="autofit-col autofit-col-expand">
233 <div class="autofit-section">
234 <a :href="'tel:' + detail.telefono" class="tw:text-white tw:underline d-lg-none">
235 {{ detail.telefono }}
236 </a>
237 <div class="tw:text-white d-none d-lg-block">
238 {{ detail.telefono }}
239 </div>
240 </div>
241 </div>
242 </div>
243 <div v-if="detail.email !== null && detail.pubblicato!=false" class="card-row tw:space-x-4">
244 <div class="autofit-col">
245 <i class="fas fa-arrow-circle-right fa-2x tw:text-white"></i>
246 </div>
247 <div class="autofit-col autofit-col-expand">
248 <div class="autofit-section">
249 <a :href="'mailto:' + sanitize(detail.email)" class="tw:text-white tw:underline">
250 {{ sanitize(detail.email) }}
251 </a>
252 </div>
253 </div>
254 </div>
255 <div v-if="detail.www !== null" class="card-row tw:space-x-4">
256 <div class="autofit-col">
257 <i class="fas fa-arrow-circle-right fa-2x tw:text-white"></i>
258 </div>
259 <div class="autofit-col autofit-col-expand">
260 <div class="autofit-section">
261 <a :href="fixProtocol(detail.www)" class="tw:text-white tw:underline" target="_blank">
262 {{ fixProtocol(detail.www) }}
263 </a>
264 </div>
265 </div>
266 </div>
267 </div>
268 </div>
269 </div>
270 </div>
271 </div>
272 </div>
273 </div>
274 </section>
275
276 <#-- SERVIZI-->
277 <section id="itinerary-detail" class="tw:font-text tw:mt-20">
278 <div class="container">
279 <div class="tw:mt-10">
280 <p class="tw:inline tw:align-middle tw:text-dark tw:font-heading tw:font-light tw:text-2xl tw:uppercase lg:tw:text-4xl">
281 ${d40.getLabel("cosa_ti")}
282 <span class="tw:text-dark tw:font-heading tw:font-extrabold tw:text-2xl tw:uppercase lg:tw:text-4xl">${d40.getLabel("proponiamo")}</span>
283 </p>
284 </div>
285
286 <div class="card hcm-bg-capable tw:relative tw:bg-green tw:border-0 tw:rounded-md tw:shadow-2xl tw:mt-10 tw:z-10">
287 <div class="card-body">
288 <div class="container">
289 <div class="row">
290
291 <#-- Accessibilità -->
292 <div v-if="detail.disabili != null" class="col-12 col-lg-6">
293 <div class="card-row tw:space-x-4 tw:mb-10">
294 <div class="autofit-col">
295 <div class="autofit-section">
296 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
297 <i class="far fa-wheelchair fa-lg tw:text-white"></i>
298 </div>
299 </div>
300 </div>
301 <div class="autofit-col autofit-col-expand">
302 <div class="autofit-section">
303 <p class="tw:text-white tw:font-bold">
304 ${d40.getLabel("struttura_accessibile")}: {{ detail.disabili ? "${d40.getLabel('si')}" : "No" }}
305 </p>
306 </div>
307 </div>
308 </div>
309 </div>
310
311 <#-- Colazione -->
312 <div v-if="detail.colazione != null" class="col-12 col-lg-6">
313 <div class="card-row tw:space-x-4 tw:mb-10">
314 <div class="autofit-col">
315 <div class="autofit-section">
316 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
317 <i class="far fa-check fa-lg tw:text-white"></i>
318 </div>
319 </div>
320 </div>
321 <div class="autofit-col autofit-col-expand">
322 <div class="autofit-section">
323 <p class="tw:text-white">{{ detail.colazione }}</p>
324 </div>
325 </div>
326 </div>
327 </div>
328
329 <#-- Natura -->
330 <div v-if="detail.natura != null" class="col-12 col-lg-6">
331 <div class="card-row tw:space-x-4 tw:mb-10">
332 <div class="autofit-col">
333 <div class="autofit-section">
334 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
335 <i class="far fa-check fa-lg tw:text-white"></i>
336 </div>
337 </div>
338 </div>
339 <div class="autofit-col autofit-col-expand">
340 <div class="autofit-section">
341 <p class="tw:text-white">{{ detail.natura }}</p>
342 </div>
343 </div>
344 </div>
345 </div>
346
347 <#-- Ospitalità -->
348 <div v-if="detail.ospitalita != null" class="col-12 col-lg-6">
349 <div class="card-row tw:space-x-4 tw:mb-10">
350 <div class="autofit-col">
351 <div class="autofit-section">
352 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
353 <i class="far fa-check fa-lg tw:text-white"></i>
354 </div>
355 </div>
356 </div>
357 <div class="autofit-col autofit-col-expand">
358 <div class="autofit-section">
359 <p class="tw:text-white">{{ detail.ospitalita }}</p>
360 </div>
361 </div>
362 </div>
363 </div>
364
365 <#-- Sport -->
366 <div v-if="detail.sport != null" class="col-12 col-lg-6">
367 <div class="card-row tw:space-x-4 tw:mb-10">
368 <div class="autofit-col">
369 <div class="autofit-section">
370 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
371 <i class="far fa-check fa-lg tw:text-white"></i>
372 </div>
373 </div>
374 </div>
375 <div class="autofit-col autofit-col-expand">
376 <div class="autofit-section">
377 <p class="tw:text-white">{{ detail.sport }}</p>
378 </div>
379 </div>
380 </div>
381 </div>
382
383 <#-- Dotazione appartamenti -->
384 <div v-if="detail.dotazioni_appartamenti != null" class="col-12 col-lg-6">
385 <div class="card-row tw:space-x-4 tw:mb-10">
386 <div class="autofit-col">
387 <div class="autofit-section">
388 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
389 <i class="far fa-check fa-lg tw:text-white"></i>
390 </div>
391 </div>
392 </div>
393 <div class="autofit-col autofit-col-expand">
394 <div class="autofit-section">
395 <p class="tw:text-white">{{ detail.dotazioni_appartamenti }}</p>
396 </div>
397 </div>
398 </div>
399 </div>
400
401 <#-- Dotazione bagni appartamenti -->
402 <div v-if="detail.dotazioni_bagni_appartamenti != null" class="col-12 col-lg-6">
403 <div class="card-row tw:space-x-4 tw:mb-10">
404 <div class="autofit-col">
405 <div class="autofit-section">
406 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
407 <i class="far fa-check fa-lg tw:text-white"></i>
408 </div>
409 </div>
410 </div>
411 <div class="autofit-col autofit-col-expand">
412 <div class="autofit-section">
413 <p class="tw:text-white">{{ detail.dotazioni_bagni_appartamenti }}</p>
414 </div>
415 </div>
416 </div>
417 </div>
418
419 <#-- Dotazione bagni camere -->
420 <div v-if="detail.dotazioni_bagni_camere != null" class="col-12 col-lg-6">
421 <div class="card-row tw:space-x-4 tw:mb-10">
422 <div class="autofit-col">
423 <div class="autofit-section">
424 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
425 <i class="far fa-check fa-lg tw:text-white"></i>
426 </div>
427 </div>
428 </div>
429 <div class="autofit-col autofit-col-expand">
430 <div class="autofit-section">
431 <p class="tw:text-white">{{ detail.dotazioni_bagni_camere }}</p>
432 </div>
433 </div>
434 </div>
435 </div>
436
437 <#-- Dotazione bike -->
438 <div v-if="detail.dotazioni_bike != null" class="col-12 col-lg-6">
439 <div class="card-row tw:space-x-4 tw:mb-10">
440 <div class="autofit-col">
441 <div class="autofit-section">
442 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
443 <i class="far fa-check fa-lg tw:text-white"></i>
444 </div>
445 </div>
446 </div>
447 <div class="autofit-col autofit-col-expand">
448 <div class="autofit-section">
449 <p class="tw:text-white">{{ detail.dotazioni_bike }}</p>
450 </div>
451 </div>
452 </div>
453 </div>
454
455 <#-- Dotazione camere -->
456 <div v-if="detail.dotazioni_camere != null" class="col-12 col-lg-6">
457 <div class="card-row tw:space-x-4 tw:mb-10">
458 <div class="autofit-col">
459 <div class="autofit-section">
460 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
461 <i class="far fa-check fa-lg tw:text-white"></i>
462 </div>
463 </div>
464 </div>
465 <div class="autofit-col autofit-col-expand">
466 <div class="autofit-section">
467 <p class="tw:text-white">{{ detail.dotazioni_camere }}</p>
468 </div>
469 </div>
470 </div>
471 </div>
472
473 <#-- Dotazione comuni -->
474 <div v-if="detail.dotazioni_comuni != null" class="col-12 col-lg-6">
475 <div class="card-row tw:space-x-4 tw:mb-10">
476 <div class="autofit-col">
477 <div class="autofit-section">
478 <div class="sticker sticker-circle sticker-lg tw:border-2 border-white">
479 <i class="far fa-check fa-lg tw:text-white"></i>
480 </div>
481 </div>
482 </div>
483 <div class="autofit-col autofit-col-expand">
484 <div class="autofit-section">
485 <p class="tw:text-white">{{ detail.dotazioni_comuni }}</p>
486 </div>
487 </div>
488 </div>
489 </div>
490 </div>
491 </div>
492 </div>
493 </div>
494
495 <div class="card-body tw:relative tw:py-0 tw:-mt-15 tw:z-15">
496 <div class="container">
497 <button type="button" class="btn btn-link card tw:bg-white tw:border-none tw:shadow-2xl tw:rounded-md tw:p-0" data-toggle="collapse" data-target="#notes">
498 <div class="card-body">
499 <div class="card-row tw:space-x-4">
500 <div class="autofit-col">
501 <div class="autofit-section">
502 <div class="sticker sticker-circle tw:border-2 border-white">
503 <i class="plus-icon fas fa-plus fa-2x tw:text-dark"></i>
504 <i class="minus-icon fas fa-minus fa-2x tw:text-dark tw:hidden"></i>
505 </div>
506 </div>
507 </div>
508 <div class="autofit-col autofit-col-expand tw:pr-20">
509 <div class="autofit-section">
510 <p class="tw:text-dark tw:font-bold tw:font-heading tw:uppercase">${d40.getLabel("altro")}</p>
511 </div>
512 </div>
513 </div>
514 </div>
515 </button>
516 </div>
517 </div>
518
519 <div class="tw:-mt-15 tw:z-5">
520 <div id="notes" class="collapse">
521 <div class="card tw:bg-white tw:border-0 tw:rounded-md tw:shadow-2xl tw:mb-0 tw:z-5">
522 <div class="card-body">
523 <div class="container">
524 <ul class="tw:ml-5 tw:mt-10" style="list-style-type: disc !important;">
525 <li v-if="detail.orario_prenotazioni != null" class="tw:text-dark tw:font-light">
526 <span class="tw:font-bold">${d40.getLabel("orario_prenotazioni")}:</span>
527 {{ detail.orario_prenotazioni }}
528 </li>
529 <li v-if="detail.check_in != null" class="tw:text-dark tw:font-light">
530 <span class="tw:font-bold">Check-in:</span>
531 {{ detail.check_in }}
532 </li>
533 <li v-if="detail.check_out != null" class="tw:text-dark tw:font-light">
534 <span class="tw:font-bold">Check-out:</span>
535 {{ detail.check_out }}
536 </li>
537 <li v-if="detail.lingue != null" class="tw:text-dark tw:font-light">
538 <span class="tw:font-bold">${d40.getLabel("lingue_parlate")}:</span>
539 {{ detail.lingue }}
540 </li>
541 <li v-if="detail.raggiungibilita != null" class="tw:text-dark tw:font-light">
542 <span class="tw:font-bold">${d40.getLabel("raggiungibilita")}:</span>
543 {{ detail.raggiungibilita }}
544 </li>
545 <li v-if="detail.ubicazione != null" class="tw:text-dark tw:font-light">
546 <span class="tw:font-bold">${d40.getLabel("ubicazione")}:</span>
547 {{ detail.ubicazione }}
548 </li>
549 </ul>
550
551 <p class="tw:font-bold tw:mt-10">${d40.getLabel("info_struttura")}:</p>
552 <ul class="tw:ml-5" style="list-style-type: disc !important;">
553 <li v-if="detail.camere != null" class="tw:text-dark tw:font-light">
554 <span class="tw:font-bold">${d40.getLabel("numero_camere")}:</span>
555 {{ detail.camere }}
556 </li>
557 <li v-if="detail.bagni != null" class="tw:text-dark tw:font-light">
558 <span class="tw:font-bold">${d40.getLabel("numero_bagni")}:</span>
559 {{ detail.bagni }}
560 </li>
561 <li v-if="detail.posti_letto != null" class="tw:text-dark tw:font-light">
562 <span class="tw:font-bold">${d40.getLabel("numero_posti_letto")}:</span>
563 {{ detail.posti_letto }}
564 </li>
565 <li v-if="detail.piazzole_campeggio != null" class="tw:text-dark tw:font-light">
566 <span class="tw:font-bold">${d40.getLabel("numero_piazzole_campeggio")}:</span>
567 {{ detail.piazzole_campeggio }}
568 </li>
569 </ul>
570 </div>
571 </div>
572 </div>
573 </div>
574 </div>
575 </div>
576
577 <#-- ALLEGATI, PER ORA OFF
578 <div class="container tw:mt-20">
579 <div class="sheet tw-bg-light tw:space-y-4 p-3">
580 <div class="card tw:bg-transparent tw:border-0 tw:shadow-none tw:my-5">
581 <div class="card-row">
582 <div class="autofit-col">
583 <div class="autofit-section">
584 <i class="fas fa-download fa-lg tw:text-dark"></i>
585 </div>
586 </div>
587 <div class="autofit-col autofit-col-expand autofit-col-gutters">
588 <div class="autofit-section">
589 <a href="linkfile" class="tw:text-dark tw:font-bold" download>
590 nomefile
591
592 <span class="tw:font-light muted tw:ml-2">${d40.getLabel("scarica_qui_offerta")}</span>
593 </a>
594 </div>
595 </div>
596 </div>
597 </div>
598 </div>
599 </div>
600 -->
601 </section>
602
603 <section v-if="hasPrezzi">
604 <div class="container tw:mt-20">
605 <div class="sheet tw-bg-light tw:border-none tw:p-7">
606 <p class="tw:font-heading tw:text-2xl tw:uppercase tw:text-green tw:font-bold tw:mb-10">
607 ${d40.getLabel("informazioni_principali")}
608 </p>
609
610 <div class="row">
611 <#-- SINGOLA -->
612 <div v-if="detail.singola_alta_stagione != null" class="col-12 col-lg-6">
613 <div class="tw:mb-5">
614 <p class="tw:text-dark tw:font-bold">
615 ${d40.getLabel("prezzo_singola_alta")}:
616 </p>
617 <p class="tw:text-dark tw:font-light">
618 {{ detail.singola_alta_stagione }}€
619 </p>
620 </div>
621 </div>
622 <div v-if="detail.singola_bassa_stagione != null" class="col-12 col-lg-6">
623 <div class="tw:mb-5">
624 <p class="tw:text-dark tw:font-bold">
625 ${d40.getLabel("prezzo_singola_bassa")}:
626 </p>
627 <p class="tw:text-dark tw:font-light">
628 {{ detail.singola_bassa_stagione }}€
629 </p>
630 </div>
631 </div>
632
633 <#-- DOPPIA -->
634 <div v-if="detail.doppia_alta_stagione != null" class="col-12 col-lg-6">
635 <div class="tw:mb-5">
636 <p class="tw:text-dark tw:font-bold">
637 ${d40.getLabel("prezzo_doppia_alta")}:
638 </p>
639 <p class="tw:text-dark tw:font-light">
640 {{ detail.doppia_alta_stagione }}€
641 </p>
642 </div>
643 </div>
644 <div v-if="detail.doppia_bassa_stagione != null" class="col-12 col-lg-6">
645 <div class="tw:mb-5">
646 <p class="tw:text-dark tw:font-bold">
647 ${d40.getLabel("prezzo_doppia_bassa")}:
648 </p>
649 <p class="tw:text-dark tw:font-light">
650 {{ detail.doppia_bassa_stagione }}€
651 </p>
652 </div>
653 </div>
654
655 <#-- TRIPLA -->
656 <div v-if="detail.tripla_alta_stagione != null" class="col-12 col-lg-6">
657 <div class="tw:mb-5">
658 <p class="tw:text-dark tw:font-bold">
659 ${d40.getLabel("prezzo_tripla_alta")}:
660 </p>
661 <p class="tw:text-dark tw:font-light">
662 {{ detail.tripla_alta_stagione }}€
663 </p>
664 </div>
665 </div>
666 <div v-if="detail.tripla_bassa_stagione != null" class="col-12 col-lg-6">
667 <div class="tw:mb-5">
668 <p class="tw:text-dark tw:font-bold">
669 ${d40.getLabel("prezzo_tripla_bassa")}:
670 </p>
671 <p class="tw:text-dark tw:font-light">
672 {{ detail.tripla_bassa_stagione }}€
673 </p>
674 </div>
675 </div>
676
677 <#-- QUATTRO LETTI -->
678 <div v-if="detail.quattro_letti_alta_stagione != null" class="col-12 col-lg-6">
679 <div class="tw:mb-5">
680 <p class="tw:text-dark tw:font-bold">
681 ${d40.getLabel("prezzo_quadrupla_alta")}:
682 </p>
683 <p class="tw:text-dark tw:font-light">
684 {{ detail.quattro_letti_alta_stagione }}€
685 </p>
686 </div>
687 </div>
688 <div v-if="detail.quattro_letti_bassa_stagione != null" class="col-12 col-lg-6">
689 <div class="tw:mb-5">
690 <p class="tw:text-dark tw:font-bold">
691 ${d40.getLabel("prezzo_quarupla_bassa")}:
692 </p>
693 <p class="tw:text-dark tw:font-light">
694 {{ detail.quattro_letti_bassa_stagione }}€
695 </p>
696 </div>
697 </div>
698
699 <#-- PENSIONE COMPLETA -->
700 <div v-if="detail.pensione_completa_alta_stagione != null" class="col-12 col-lg-6">
701 <div class="tw:mb-5">
702 <p class="tw:text-dark tw:font-bold">
703 ${d40.getLabel("prezzo_pensione_completa_alta")}:
704 </p>
705 <p class="tw:text-dark tw:font-light">
706 {{ detail.pensione_completa_alta_stagione }}€
707 </p>
708 </div>
709 </div>
710 <div v-if="detail.pensione_completa_bassa_stagione != null" class="col-12 col-lg-6">
711 <div class="tw:mb-5">
712 <p class="tw:text-dark tw:font-bold">
713 ${d40.getLabel("prezzo_pensione_completa_bassa")}:
714 </p>
715 <p class="tw:text-dark tw:font-light">
716 {{ detail.pensione_completa_bassa_stagione }}€
717 </p>
718 </div>
719 </div>
720
721 <#-- MONOLOCALE 1 GIORNO -->
722 <div v-if="detail.monolocale_1giorno_alta_stagione != null" class="col-12 col-lg-6">
723 <div class="tw:mb-5">
724 <p class="tw:text-dark tw:font-bold">
725 ${d40.getLabel("prezzo_monolocale_1giorno_alta")}:
726 </p>
727 <p class="tw:text-dark tw:font-light">
728 {{ detail.monolocale_1giorno_alta_stagione }}€
729 </p>
730 </div>
731 </div>
732 <div v-if="detail.monolocale_1giorno_bassa_stagione != null" class="col-12 col-lg-6">
733 <div class="tw:mb-5">
734 <p class="tw:text-dark tw:font-bold">
735 ${d40.getLabel("prezzo_monolocale_1giorno_bassa")}:
736 </p>
737 <p class="tw:text-dark tw:font-light">
738 {{ detail.monolocale_1giorno_bassa_stagione }}€
739 </p>
740 </div>
741 </div>
742
743 <#-- MONOLOCALE 1 SETTIMANA -->
744 <div v-if="detail.monolocale_1settimana_alta_stagione != null" class="col-12 col-lg-6">
745 <div class="tw:mb-5">
746 <p class="tw:text-dark tw:font-bold">
747 ${d40.getLabel("prezzo_monolocale_1settimana_alta")}:
748 </p>
749 <p class="tw:text-dark tw:font-light">
750 {{ detail.monolocale_1settimana_alta_stagione }}€
751 </p>
752 </div>
753 </div>
754 <div v-if="detail.monolocale_1settimana_bassa_stagione != null" class="col-12 col-lg-6">
755 <div class="tw:mb-5">
756 <p class="tw:text-dark tw:font-bold">
757 ${d40.getLabel("prezzo_monolocale_1settimana_bassa")}:
758 </p>
759 <p class="tw:text-dark tw:font-light">
760 {{ detail.monolocale_1settimana_bassa_stagione }}€
761 </p>
762 </div>
763 </div>
764
765 <#-- BILOCALE 1 GIORNO -->
766 <div v-if="detail.bilocale_1giorno_alta_stagione != null" class="col-12 col-lg-6">
767 <div class="tw:mb-5">
768 <p class="tw:text-dark tw:font-bold">
769 ${d40.getLabel("prezzo_bilocale_1giorno_alta")}:
770 </p>
771 <p class="tw:text-dark tw:font-light">
772 {{ detail.bilocale_1giorno_alta_stagione }}€
773 </p>
774 </div>
775 </div>
776 <div v-if="detail.bilocale_1giorno_bassa_stagione != null" class="col-12 col-lg-6">
777 <div class="tw:mb-5">
778 <p class="tw:text-dark tw:font-bold">
779 ${d40.getLabel("prezzo_bilocale_1giorno_bassa")}:
780 </p>
781 <p class="tw:text-dark tw:font-light">
782 {{ detail.bilocale_1giorno_bassa_stagione }}€
783 </p>
784 </div>
785 </div>
786
787 <#-- BILOCALE 1 SETTIMANA -->
788 <div v-if="detail.bilocale_1settimana_alta_stagione != null" class="col-12 col-lg-6">
789 <div class="tw:mb-5">
790 <p class="tw:text-dark tw:font-bold">
791 ${d40.getLabel("prezzo_bilocale_1settimana_alta")}:
792 </p>
793 <p class="tw:text-dark tw:font-light">
794 {{ detail.bilocale_1settimana_alta_stagione }}€
795 </p>
796 </div>
797 </div>
798 <div v-if="detail.bilocale_1settimana_bassa_stagione != null" class="col-12 col-lg-6">
799 <div class="tw:mb-5">
800 <p class="tw:text-dark tw:font-bold">
801 ${d40.getLabel("prezzo_bilocale_1settimana_bassa")}:
802 </p>
803 <p class="tw:text-dark tw:font-light">
804 {{ detail.bilocale_1settimana_bassa_stagione }}€
805 </p>
806 </div>
807 </div>
808
809 <#-- TRI/PLURILOCALE 1 GIORNO -->
810 <div v-if="detail.plurilocale_1giorno_alta_stagione != null" class="col-12 col-lg-6">
811 <div class="tw:mb-5">
812 <p class="tw:text-dark tw:font-bold">
813 ${d40.getLabel("prezzo_plurilocale_1giorno_alta")}:
814 </p>
815 <p class="tw:text-dark tw:font-light">
816 {{ detail.plurilocale_1giorno_alta_stagione }}€
817 </p>
818 </div>
819 </div>
820 <div v-if="detail.plurilocale_1giorno_bassa_stagione != null" class="col-12 col-lg-6">
821 <div class="tw:mb-5">
822 <p class="tw:text-dark tw:font-bold">
823 ${d40.getLabel("prezzo_plurilocale_1giorno_bassa")}:
824 </p>
825 <p class="tw:text-dark tw:font-light">
826 {{ detail.plurilocale_1giorno_bassa_stagione }}€
827 </p>
828 </div>
829 </div>
830
831 <#-- TRI/PLURILOCALE 1 SETTIMANA -->
832 <div v-if="detail.plurilocale_1settimana_alta_stagione != null" class="col-12 col-lg-6">
833 <div class="tw:mb-5">
834 <p class="tw:text-dark tw:font-bold">
835 ${d40.getLabel("prezzo_plurilocale_1settimana_alta")}:
836 </p>
837 <p class="tw:text-dark tw:font-light">
838 {{ detail.plurilocale_1settimana_alta_stagione }}€
839 </p>
840 </div>
841 </div>
842 <div v-if="detail.plurilocale_1settimana_bassa_stagione != null" class="col-12 col-lg-6">
843 <div class="tw:mb-5">
844 <p class="tw:text-dark tw:font-bold">
845 ${d40.getLabel("prezzo_plurilocale_1settimana_bassa")}:
846 </p>
847 <p class="tw:text-dark tw:font-light">
848 {{ detail.plurilocale_1settimana_bassa_stagione }}€
849 </p>
850 </div>
851 </div>
852
853 </div>
854
855 <div v-if="detail.codice_struttura != null" class="tw:mt-3 tw:pt-5" style="border-top:1px solid #ccc;">
856 <p class="tw:text-dark tw:font-bold">
857 ${d40.getLabel("codice_identificativo_regionale")}:
858 </p>
859 <p class="tw:text-dark tw:font-light">
860 {{ detail.codice_struttura }}
861 </p>
862 </div>
863
864 <div v-if="detail.codice_cin != null" class="tw:mt-3 tw:pt-5" style="border-top:1px solid #ccc;">
865 <p class="tw:text-dark tw:font-bold">
866 ${d40.getLabel("cin")}:
867 </p>
868 <p class="tw:text-dark tw:font-light">
869 {{ detail.codice_cin }}
870 </p>
871 </div>
872
873 <#--
874 <div class="tw:flex tw:justify-end tw:mt-20">
875 <a href="#contact-form" class="smooth-scroll btn btn-link tw:bg-green tw:text-white tw:uppercase tw:font-bold tw:font-heading tw:rounded-md tw:py-3 tw:px-5">
876 ${d40.getLabel("richiedi_info")}
877 </a>
878 </div>
879 -->
880 </div>
881 </div>
882 </section>
883 <section v-else="hasPrezzi">
884 <div class="container tw:mt-30">
885 <div class="sheet tw-bg-light tw:border-none tw:p-7">
886 <p class="tw:font-heading tw:text-2xl tw:uppercase tw:text-green tw:font-bold tw:mb-10">
887 ${d40.getLabel("informazioni_principali")}
888 </p>
889
890 <div class="row">
891 <div v-if="detail.codice_struttura != null" class="col-12">
892 <p class="tw:text-dark tw:font-bold">
893 ${d40.getLabel("codice_identificativo_regionale")}:
894 </p>
895 <p class="tw:text-dark tw:font-light">
896 {{ detail.codice_struttura }}
897 </p>
898 </div>
899 <div v-if="detail.codice_cin != null" class="col-12">
900 <p class="tw:text-dark tw:font-bold">
901 ${d40.getLabel("cin")}:
902 </p>
903 <p class="tw:text-dark tw:font-light">
904 {{ detail.codice_cin }}
905 </p>
906 </div>
907 </div>
908 </div>
909 </div>
910 </section>
911 </div>
912 </div>
913 </div>
914
915
916 <#-- GALLERY -->
917 <#if rawImages?has_content>
918 <section id="gallery" class="tw:mt-30">
919 <div class="container">
920 <div class="swiper-container tw:pt-10">
921 <#if (images?size > 3)>
922 <div class="swiper-button-prev tw:w-12 tw:h-12">
923 <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full">
924 <span class="sticker-overlay">
925 <i class="fas fa-chevron-left fa-2x text-white"></i>
926 </span>
927 </span>
928 </div>
929 <div class="swiper-button-next tw:w-12 tw:h-12">
930 <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full">
931 <span class="sticker-overlay">
932 <i class="fas fa-chevron-right fa-2x text-white"></i>
933 </span>
934 </span>
935 </div>
936 </#if>
937
938 <div class="swiper-wrapper">
939 <#list images as pic>
940 <div class="swiper-slide">
941 <a href="javascript:void(0);" data-toggle="modal" data-target="#lightbox-modal" data-slider="${pic?index}">
942 <div class="aspect-ratio aspect-ratio-4-to-3 tw:rounded-md tw:shadow-2xl">
943 <img data-src="${d40.getPrefix(pic, 900, 675)}" loading="lazy" class="lazyload aspect-ratio-item-fluid tw:object-cover tw:w-full tw:h-full" alt="immagine ${pic?index}" />
944 </div>
945 </a>
946 </div>
947 </#list>
948 </div>
949 </div>
950 </div>
951 </section>
952
953 <div id="lightbox-modal" tabindex="-1" role="dialog" class="modal fade">
954 <div class="modal-dialog modal-full-screen tw:inset-0 tw:border-none tw:shadow-none">
955 <div class="modal-content tw:bg-transparent">
956 <div class="modal-body tw:overflow-hidden">
957 <div class="tw:absolute tw:top-0 tw:right-0 tw:z-5">
958 <button type="button" data-dismiss="modal" class="btn btn-monospaced btn-secondary m-3">
959 <i class="fal fa-times fa-lg"></i>
960 </button>
961 </div>
962
963 <#-- lightbox -->
964 <div id="lightbox-swiper" class="swiper-container h-75 my-auto">
965 <div class="swiper-button-prev tw:w-12 tw:h-12">
966 <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full">
967 <span class="sticker-overlay">
968 <i class="fas fa-chevron-left fa-2x tw:text-white"></i>
969 </span>
970 </span>
971 </div>
972
973 <div class="swiper-button-next tw:w-12 tw:h-12">
974 <span class="sticker sticker-circle hcm-bg-capable tw:bg-green tw:w-full tw:h-full">
975 <span class="sticker-overlay">
976 <i class="fas fa-chevron-right fa-2x tw:text-white"></i>
977 </span>
978 </span>
979 </div>
980
981 <div class="swiper-wrapper tw:h-full">
982 <#list images as pic>
983 <div class="swiper-slide tw:h-full">
984 <img data-src="${d40.getPrefix(pic, 1920, '')}" loading="lazy" class="lazyload tw:h-full tw:object-contain tw:mx-auto" alt="immagine ${pic?index}">
985 </div>
986 </#list>
987 </div>
988 </div>
989
990 <#-- thumbnails -->
991 <div id="thumbnail-swiper" class="swiper-container" thumbsSlider="">
992 <div class="swiper-wrapper">
993 <#list images as pic>
994 <div class="swiper-slide">
995 <img data-src="${d40.getPrefix(pic, 300, '')}" loading="lazy" class="lazyload tw:object-cover tw:cursor-pointer tw:h-full tw:w-full" alt="immagine ${pic?index}">
996 </div>
997 </#list>
998 </div>
999 </div>
1000 </div>
1001 </div>
1002 </div>
1003 </div>
1004 </#if>
1005
1006 <#-- MAPPA -->
1007 <template v-if="detail != null">
1008 <div v-if="detail.latitudine != null && detail.longitudine != null" class="tw:mt-30 d-none">
1009 <div class="container tw:mb-7">
1010 <div class="row tw:justify-between">
1011 <div class="col-auto">
1012 <p class="tw:inline tw:align-middle tw:text-dark tw:font-heading tw:font-light tw:text-2xl tw:uppercase lg:tw:text-4xl">
1013 <span class="tw:text-dark tw:font-heading tw:font-extrabold tw:text-2xl tw:uppercase lg:tw:text-4xl">${d40.getLabel("dove")}</span>
1014 ${d40.getLabel("ci_troviamo")}
1015 </p>
1016 </div>
1017 <div class="col-auto">
1018 <a :href="'https://maps.google.com/?q=' + detail.latitudine + ',' + detail.longitudine" class="btn btn-link tw:text-dark tw:font-heading tw:font-bold tw:text-lg tw:uppercase tw:px-0 lg:tw:px-4" target="_blank">
1019 ${d40.getLabel("apri_maps")}
1020 </a>
1021 </div>
1022 </div>
1023 </div>
1024
1025 <div id="suggesto-map" class="monochrome-map" style="height: 700px;"></div>
1026 </div>
1027 </template>
1028
1029
1030 <#else>
1031 <div class="row">
1032 <div class="col-12">
1033 <p class="tw:text-dark tw:text-lg tw:py-10 tw:mb-0">${d40.getLabel("impossibile_trovare_contenuto")}</p>
1034 </div>
1035 </div>
1036 </#if>
1037</section>
1038
1039<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/components/securityV2.js"></script>
1040<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/components/initVueApp.js"></script>
1041
1042<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/mixins/js/favorites.js"></script>
1043<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/mixins/js/share.js"></script>
1044<script src="https://s3-eu-west-1.amazonaws.com/mkspresstage.suggesto.eu/filters/currency.js"></script>
1045
1046<script>
1047 var ${d40.portletNamespace}_custom_hook = {
1048 data: {
1049 debugMode: true,
1050 map: null,
1051 detail: null,
1052 item: {
1053 id: "${id}",
1054 contentJSON: {
1055 denominazione: "",
1056 description: "",
1057 geoRef: "",
1058 previewPicture: "",
1059 www: "",
1060 viewUrl: window.location.href
1061 }
1062 },
1063 error: false,
1064 gallery: null,
1065 thumbnails: null,
1066 lightbox: null
1067 },
1068 created(){
1069 moment.locale(navigator.language.split("-")[0]);
1070
1071 <#if doc?has_content>
1072 var res = ${doc};
1073 <#else>
1074 var res = null;
1075 </#if>
1076
1077 if(res != null && this.item.id != "000000"){
1078 this.detail = res;
1079 this.detail.gallery = [];
1080
1081 <#list images as galleryImg>
1082 this.detail.gallery.push("${galleryImg}");
1083 </#list>
1084
1085 this.item.denominazione = this.detail.denominazione;
1086 this.item.assetCategoryIds = this.detail.assetCategoryIds;
1087 this.item.www = window.location.href;
1088 this.item.geoRef = [
1089 this.detail.latitudine,
1090 this.detail.longitudine
1091 ];
1092 }else{
1093 this.error = true;
1094 }
1095
1096 this.loading = false;
1097 },
1098 mounted(){
1099 var that = this;
1100
1101 if(this.detail != null){
1102 if(this.detail.latitudine != null && this.detail.longitudine != null){
1103 this.buildMap();
1104 }
1105 }
1106
1107 if(${(images?has_content)?c}){
1108 this.initGallery();
1109
1110 $("#lightbox-modal").on("shown.bs.modal", function(e){
1111 that.lightbox.update();
1112 that.thumbnails.update();
1113 that.lightbox.slideTo($(e.relatedTarget).data("slider"));
1114 that.lightbox.update();
1115 });
1116
1117 $("#lightbox-modal .swiper-wrapper").on("click", function(e){
1118 if($(e.target).attr("class").includes("swiper-slide")){
1119 $("#lightbox-modal").modal("hide");
1120 }
1121 });
1122 }
1123 },
1124 computed: {
1125 hasPrezzi: function(){
1126 const availableLodgings = [
1127 "singola",
1128 "doppia",
1129 "tripla",
1130 "quattro_letti",
1131 "pensione_completa",
1132 "monolocale_1giorno",
1133 "monolocale_1settimana",
1134 "bilocale_1giorno",
1135 "bilocale_1settimana",
1136 "plurilocale_1giorno",
1137 "plurilocale_1settimana",
1138 ];
1139
1140 var validLodgings = 0;
1141
1142 Object.keys(this.detail).forEach((prop) => {
1143 if(prop.includes("stagione")){
1144 if(availableLodgings.includes(prop.split("_alta_stagione")[0]) || availableLodgings.includes(prop.split("_bassa_stagione")[0])){
1145 if(this.detail[prop] != null){
1146 validLodgings++;
1147 }
1148 }
1149 }
1150 });
1151
1152 return validLodgings > 0;
1153 }
1154 },
1155 methods: {
1156 decodeHtml: function(htmlStr){
1157 var txt = document.createElement("textarea");
1158 txt.innerHTML = htmlStr;
1159 return txt.value;
1160 },
1161 sanitize: function(text){
1162 var elem = document.createElement('textarea');
1163 elem.innerHTML = text;
1164 return elem.value;
1165 },
1166 fixProtocol: function(url){
1167 return "http://" + url;
1168 },
1169 customEncode: function(str){
1170 return encodeURIComponent(str.replaceAll("{", "%7B").replaceAll("}", "%7D"));
1171 },
1172 buildMap: function(){
1173 var layers = [],
1174 markers = [],
1175 map = new SuggestoMap("suggesto-map");
1176
1177 if(this.detail != null){
1178 var marker = {
1179 group: "1",
1180 latlng: [parseFloat(this.detail.latitudine), parseFloat(this.detail.longitudine)],
1181 value: "",
1182 type: "svgNumIcon",
1183 size: "10",
1184 color: "#7eba27",
1185 html: ""
1186 };
1187
1188 markers.push(marker);
1189 }
1190
1191 var mapData = {
1192 tilelayer: "osm",
1193 gestureHandling: true,
1194 fitBounds: false,
1195 mapcenter: [parseFloat(this.detail.latitudine), parseFloat(this.detail.longitudine)],
1196 zoom: 14,
1197 markersFilter: "*",
1198 markers: markers,
1199 layers: layers
1200 };
1201
1202 console.log("mapData is: ", mapData);
1203
1204 map.sm.createMap(mapData);
1205
1206 this.map = map;
1207 },
1208 initGallery: function(){
1209 this.gallery = new Swiper("#gallery .swiper-container", {
1210 slidesPerView: 1,
1211 spaceBetween: 25,
1212 centerSlides: true,
1213 centerInsufficientSlides: true,
1214 navigation: {
1215 prevEl: ".btn-prev",
1216 nextEl: ".btn-next",
1217 },
1218 breakpoints: {
1219 768: {
1220 slidesPerView: 2,
1221 spaceBetween: 25,
1222 },
1223 992: {
1224 slidesPerView: 3,
1225 spaceBetween: 25,
1226 },
1227 },
1228 });
1229
1230 this.thumbnails = new Swiper("#thumbnail-swiper", {
1231 spaceBetween: 10,
1232 slidesPerView: 2,
1233 centerInsufficientSlides: true,
1234 freeMode: true,
1235 watchSlidesVisibility: true,
1236 watchSlidesProgress: true,
1237 breakpoints: {
1238 768: {
1239 slidesPerView: 3
1240 },
1241 992: {
1242 slidesPerView: 4
1243 },
1244 1200: {
1245 slidesPerView: 5
1246 }
1247 },
1248 });
1249
1250 this.lightbox = new Swiper("#lightbox-swiper", {
1251 spaceBetween: 10,
1252 autoHeight: true,
1253 observer: true,
1254 observeSlideChildren: true,
1255 keyboard: {
1256 enabled: true
1257 },
1258 navigation: {
1259 nextEl: ".swiper-button-next",
1260 prevEl: ".swiper-button-prev"
1261 },
1262 thumbs: {
1263 swiper: this.thumbnails
1264 }
1265 });
1266 },
1267 customShare: function(type, title, description, image = ""){
1268 if(type == "facebook"){
1269 var winHeight = 450,
1270 winWidth = 600,
1271 winTop = window.screen.height / 2 - winHeight / 2,
1272 winLeft = window.screen.width / 2 - winWidth / 2,
1273 params = "scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=" + winWidth + ",height=" + winHeight + ",left=" + winLeft + ",top=" + winTop,
1274 link = "http://www.facebook.com/sharer.php?s=100&p[title]=" + this.customEncode(title) + "&p[summary]=" + this.customEncode(description) + "&p[url]=" + window.location.href + "&p[images][0]=" + image;
1275
1276 window.open(link, "Facebook", params);
1277 }
1278
1279 if(type == "twitter"){
1280 var link = "https://twitter.com/intent/tweet?text=" + this.customEncode(title) + "&url=" + this.customEncode(window.location.href);
1281
1282 window.open(link, "_blank").focus();
1283 }
1284
1285 if(type == "pinterest"){
1286 var link = "https://pinterest.com/pin/create/button/?url=" + this.customEncode(window.location.href) + "&description=" + this.customEncode(title);
1287
1288 window.open(link, "_blank").focus();
1289 }
1290
1291 if(type == "whatsapp"){
1292 var link = "https://wa.me?text=" + this.customEncode(title + ": " + window.location.href);
1293
1294 window.open(link, "_blank").focus();
1295 }
1296
1297 if(type == "telegram"){
1298 var link = "https://t.me/share/url?url=" + this.customEncode(window.location.href) + "&text=" + this.customEncode(title);
1299
1300 window.open(link, "_blank").focus();
1301 }
1302
1303 if(type == "print"){
1304 window.print();
1305 }
1306
1307 if(type == "link"){
1308 this.legacyShare();
1309 }
1310 }
1311 }
1312 }
1313
1314 document.addEventListener("DOMContentLoaded", function (){
1315 var ${d40.portletNamespace}_vueApp = initVueApp(
1316 "#${d40.portletNamespace}",
1317 "${d40.portletNamespace}",
1318 [d40_favorites, d40_share, ${d40.portletNamespace}_custom_hook]
1319 );
1320 });
1321
1322 <#attempt>
1323 var structureEmail = "${result.getJSONObject('data').getJSONObject('response').getJSONArray('docs').get(0).getString('email')}";
1324 <#recover>
1325 var structureEmail = "bianco@cuneoholiday.com";
1326 </#attempt>
1327</script>