El mar de las mil y una historias - Camarote Sea View
España, Islas Baleares, Italia y Francia (Costa Pacífica) - () -
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> (cur_itinerariosFieldset_itinerarioFieldset.servicesFieldset.getSiblings()?first).serviceName [in template "22199663357539#32811#120972" at line 56, column 139]
----
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 cur_itinerariosFieldset_itinerari... [in template "22199663357539#32811#120972" at line 56, column 45]
----
1<section class="mp-max-width-section mp-mt-0">
2 <div class="mp-detail-hotel__wrapper">
3 <#if (description.getData())?has_content>
4 <div class="description__wrapper">
5 <#if !hideDescriptionSubtitle?has_content || !getterUtil.getBoolean(hideDescriptionSubtitle.getData())>
6 <b>Descripción</b>
7 </#if>
8
9 <div>
10
11 ${description.getData()}
12
13 </div>
14
15 </div>
16 </#if>
17
18 <div class="collection-description__wrapper">
19 <#if itinerariosFieldset?has_content && itinerariosFieldset.itinerariosTitle.getData()?has_content>
20
21 <section class="itinerary">
22 <div class="itinerary__left">
23 <p class="itinerary__left__title">${itinerariosFieldset.itinerariosTitle.getData()!""}</p>
24 <div class="itinerary__left__accordions">
25
26 <#if itinerariosFieldset.itinerarioFieldset.getSiblings()?has_content>
27 <#list itinerariosFieldset.itinerarioFieldset.getSiblings() as cur_itinerariosFieldset_itinerarioFieldset>
28 <article class="accordion <#if (cur_itinerariosFieldset_itinerarioFieldset?index > 0)> accordion-closed</#if>">
29 <p class="accordion__header">
30 <button class="accordion__header__btn" aria-expanded="<#if (cur_itinerariosFieldset_itinerarioFieldset?index > 0)>false<#else>true</#if>"
31 aria-controls="accordion-panel-${cur_itinerariosFieldset_itinerarioFieldset?index}"
32 id="accordion-button-${cur_itinerariosFieldset_itinerarioFieldset?index}">
33 <span class="accordion__header__btn__day">
34 <#if (cur_itinerariosFieldset_itinerarioFieldset.itinerarioDay.getData())?has_content>
35 ${cur_itinerariosFieldset_itinerarioFieldset.itinerarioDay.getData()} →
36 </#if>
37 <#if (cur_itinerariosFieldset_itinerarioFieldset.itinerarioTitle.getData())?has_content>
38 ${cur_itinerariosFieldset_itinerarioFieldset.itinerarioTitle.getData()}
39 </#if>
40
41 </span>
42 <span class="accordion__header__btn__icon">
43 <svg width="20" height="20" viewBox="0 0 12 8" data-icon="chevron-down">
44
45 <use xlink:href="#ai:local:chevron-down"></use>
46
47 </svg>
48 </span>
49 </button>
50 </p>
51
52 <div class="<#if (cur_itinerariosFieldset_itinerarioFieldset?index > 0)>accordion__content accordion-closed<#else>accordion__content accordion-open</#if>" role="region"
53 id="accordion-panel-${cur_itinerariosFieldset_itinerarioFieldset?index}"
54 aria-labelledby="accordion-button-${cur_itinerariosFieldset_itinerarioFieldset?index}">
55
56 <#if cur_itinerariosFieldset_itinerarioFieldset.servicesFieldset.getSiblings()?has_content && (cur_itinerariosFieldset_itinerarioFieldset.servicesFieldset.getSiblings()?first).serviceName.getData()?has_content>
57 <div class="accordion__content__services">
58 <#list cur_itinerariosFieldset_itinerarioFieldset.servicesFieldset.getSiblings() as cur_servicesFieldset>
59 <#if (cur_servicesFieldset.serviceName.getData())?has_content>
60 <span class="accordion__content__services__item">
61
62 <#if (cur_servicesFieldset.iconSelector.getData())?has_content>
63 <img src="/documents/d/guest/${cur_servicesFieldset.iconSelector.getData()}" >
64 </#if>
65
66 ${cur_servicesFieldset.serviceName.getData()}
67 </span>
68 </#if>
69 </#list>
70 </div>
71 </#if>
72
73
74 <#if (cur_itinerariosFieldset_itinerarioFieldset.itinerarioDescription.getData())?has_content>
75 ${cur_itinerariosFieldset_itinerarioFieldset.itinerarioDescription.getData()}
76 </#if>
77 </div>
78 </article>
79 </#list>
80 </#if>
81
82 </div>
83 <div class="itinerary__left__buttons">
84 <#if itinerariosFieldset.buttonsFieldset.button1Text.getData()?has_content && code.getData()?has_content>
85 <a href="/itinerario?code=${code.getData()!""}" class="button button--primary" target="_blank">
86 <span class="content-center">
87 <svg width="15" height="15" viewBox="0 0 16 16" data-icon="download">
88
89 <symbol id="ai:local:download">
90 <path fill="currentColor"
91 d="m8 11.789-4.27-4.27 1.055-1.084L7.25 8.9V.5h1.5v8.4l2.465-2.465 1.054 1.084L8 11.79ZM2.308 15.5c-.505 0-.933-.175-1.283-.525A1.745 1.745 0 0 1 .5 13.692v-2.711H2v2.711c0 .077.032.148.096.212a.294.294 0 0 0 .212.096h11.384a.294.294 0 0 0 .212-.096.294.294 0 0 0 .096-.212v-2.711h1.5v2.711c0 .505-.175.933-.525 1.283-.35.35-.778.525-1.283.525H2.308Z"/>
92 </symbol>
93 <use xlink:href="#ai:local:download"></use>
94
95 </svg>
96 ${itinerariosFieldset.buttonsFieldset.button1Text.getData()!""}
97
98 </span>
99 </a>
100 </#if>
101 <#if itinerariosFieldset.buttonsFieldset.button2Link.getData()?has_content>
102 <a href="${itinerariosFieldset.buttonsFieldset.button2Link.getData()!""}" class="button button--terciary">
103 <span class="content-center">
104 ${itinerariosFieldset.buttonsFieldset.button2Text.getData()}
105 </span>
106 </a>
107 </#if>
108 </div>
109 </div>
110 <#if (itinerariosFieldset.itinerarioImage.getData())?has_content>
111 <img class="itinerary__map" alt="${itinerariosFieldset.itinerarioImage.getAttribute("alt")}" data-fileentryid="${itinerariosFieldset.itinerarioImage.getAttribute("fileEntryId")}" src="${itinerariosFieldset.itinerarioImage.getData()}" />
112 </#if>
113 <div class="itinerary__buttons">
114 <#if itinerariosFieldset.buttonsFieldset.button1Text.getData()?has_content && code.getData()?has_content>
115
116 <a href="/itinerario?code=${code.getData()!""}" class="button button--primary" target="_blank">
117 <span class="content-center">
118 <svg width="15" height="15" viewBox="0 0 16 16" data-icon="download">
119
120 <use xlink:href="#ai:local:download"></use>
121
122 </svg> ${itinerariosFieldset.buttonsFieldset.button1Text.getData()!""}
123 </span>
124 </a>
125 </#if>
126 <#if itinerariosFieldset.buttonsFieldset.button2Link.getData()?has_content>
127 <a href="${itinerariosFieldset.buttonsFieldset.button2Link.getData()!""}" class="button button--terciary">
128 <span class="content-center">
129 ${itinerariosFieldset.buttonsFieldset.button2Text.getData()}
130 </span>
131 </a>
132 </#if>
133
134 </div>
135 </section>
136
137 <script>
138 const accordion = document.querySelectorAll(".accordion");
139 const accordionButton = document.querySelectorAll(".accordion__header__btn");
140 const accordionContent = document.querySelectorAll(".accordion__content");
141 const accordionChevron = document.querySelectorAll(".accordion__header__btn__icon");
142
143 for (let i = 0; i < accordion.length; i++) {
144 accordionButton[i].addEventListener("click", () => {
145 if (accordionContent[i].classList.contains("accordion-closed")) {
146 accordionContent[i].classList.remove("accordion-closed");
147 accordion[i].classList.remove("accordion-closed");
148 accordionContent[i].classList.add("accordion-open");
149 accordionChevron[i].classList.add("chevron-rotated");
150 accordionButton[i].setAttribute("aria-expanded", true);
151 } else {
152 accordionContent[i].classList.remove("accordion-open");
153 accordionContent[i].classList.add("accordion-closed");
154 accordionChevron[i].classList.remove("chevron-rotated");
155 accordion[i].classList.add("accordion-closed");
156 accordionButton[i].setAttribute("aria-expanded", false);
157 }
158 });
159 }
160 </script>
161 </#if>
162 <#if (hotelsFieldset)?has_content && hotelsFieldset.hotelsFieldsetTitle.getData()?has_content>
163
164
165 <section class="planned-hotels-card">
166 <h2 class="planned-hotels-card__title">${hotelsFieldset.hotelsFieldsetTitle.getData()!""}</h2>
167 <div class="planned-hotels-card__content">
168 <#if hotelsFieldset.hotelsGroupFieldset.getSiblings()?has_content>
169 <#list hotelsFieldset.hotelsGroupFieldset.getSiblings() as cur_hotelsFieldset_hotelsGroupFieldset>
170
171
172 <article class="planned-hotel-list">
173 <div class="planned-hotel-list__header">
174 <p class="planned-hotel-list__header__title">${cur_hotelsFieldset_hotelsGroupFieldset.groupTitle.getData()!""}</p>
175 </div>
176 <div class="planned-hotel-list__items">
177 <#if hotelsFieldset.hotelsGroupFieldset.hotelFieldset.getSiblings()?has_content>
178 <#list cur_hotelsFieldset_hotelsGroupFieldset.hotelFieldset.getSiblings() as cur_hotelsFieldset_hotelsGroupFieldset_hotelFieldset>
179 <div class="planned-hotel-card">
180
181 <div class="planned-hotel-card__content">
182 <#if (cur_hotelsFieldset_hotelsGroupFieldset_hotelFieldset.hotelImage.getData())?has_content>
183 <img class="planned-hotel-card__img" alt="${cur_hotelsFieldset_hotelsGroupFieldset_hotelFieldset.hotelImage.getAttribute("alt")}" data-fileentryid="${cur_hotelsFieldset_hotelsGroupFieldset_hotelFieldset.hotelImage.getAttribute("fileEntryId")}" src="${hotelsFieldset.hotelsGroupFieldset.hotelFieldset.hotelImage.getData()}" />
184 </#if>
185 <h4 class="planned-hotel-card__content__title ">
186 ${cur_hotelsFieldset_hotelsGroupFieldset_hotelFieldset.hotelName.getData()!""}
187 </h4>
188 <#assign stars = 0>
189 <#if (cur_hotelsFieldset_hotelsGroupFieldset_hotelFieldset.hotelStars.getData())?has_content>
190 <#assign stars = cur_hotelsFieldset_hotelsGroupFieldset_hotelFieldset.hotelStars.getData()?split("*")[0]?number>
191 </#if>
192 <#if (stars > 0)>
193 <div class="planned-hotel-card__content__stars" aria-label="${stars} estrellas" class="planned-hotel-card__content__stars__star">
194 <#list 1..stars as i>
195 <svg width="15" height="15" viewBox="0 0 16 16" data-icon="star" style="color: var(--mp-yellow);">
196 <symbol id="ai:local:star">
197 <path fill="currentColor"
198 d="m8 12.689-3.89 2.346a.72.72 0 0 1-.436.107.79.79 0 0 1-.396-.147.84.84 0 0 1-.273-.332.648.648 0 0 1-.03-.453l1.032-4.417L.573 6.82a.737.737 0 0 1-.245-.388.702.702 0 0 1 .027-.428.845.845 0 0 1 .233-.34.807.807 0 0 1 .416-.171l4.532-.396L7.296.925a.68.68 0 0 1 .291-.344.819.819 0 0 1 .825 0 .68.68 0 0 1 .291.344l1.76 4.172 4.533.396a.807.807 0 0 1 .415.172.846.846 0 0 1 .233.34.703.703 0 0 1 .028.427.737.737 0 0 1-.245.388l-3.435 2.973 1.033 4.417a.648.648 0 0 1-.031.453.839.839 0 0 1-.273.332.79.79 0 0 1-.396.147.72.72 0 0 1-.435-.107L8 12.689Z"></path>
199 </symbol>
200 <use xlink:href="#ai:local:star"></use>
201 </svg>
202
203 </#list>
204 </div>
205 </#if>
206 </div>
207 </div>
208 </#list>
209 </#if>
210 </div>
211 </article>
212 </#list>
213 </#if>
214
215 </div>
216 </section>
217 </#if>
218 <#if (travelInfoFieldset)?has_content && (travelInfoFieldset.includedComponentTitle.getData()?has_content || travelInfoFieldset.notIncludedComponentTitle.getData()?has_content)>
219 <section class="included-container">
220 <#if travelInfoFieldset.includedComponentTitle.getData()?has_content>
221 <article class="included-container__content">
222 <p class="included-container__content__title">${travelInfoFieldset.includedComponentTitle.getData()!""}</p>
223 <div class="included-container__content__items">
224 <#if travelInfoFieldset.includedComponentItem.getSiblings()?has_content>
225 <#list travelInfoFieldset.includedComponentItem.getSiblings() as cur_travelInfoFieldset_includedComponentItem>
226 <#if (cur_travelInfoFieldset_includedComponentItem.getData())?has_content>
227
228 <div class="included-container__content__items__item">
229 <svg width="20" height="20" viewBox="0 0 20 21" data-icon="check">
230
231 <symbol id="ai:local:check">
232 <mask id="a" width="20" height="21" x="0" y="0" maskUnits="userSpaceOnUse"
233 style="mask-type:alpha">
234 <path fill="#D9D9D9" d="M0 .063h20v20H0z"/>
235 </mask>
236 <g fill="none" mask="url(#a)">
237 <path fill="#007787"
238 d="m7.957 15.062-4.75-4.75 1.188-1.188 3.562 3.563 7.646-7.646 1.187 1.188-8.833 8.833Z"/>
239 </g>
240 </symbol>
241 <use xlink:href="#ai:local:check"></use>
242
243 </svg>
244 <p>${cur_travelInfoFieldset_includedComponentItem.getData()}</p>
245 </div>
246 </#if>
247 </#list>
248 </#if>
249
250 </div>
251 <#if (travelInfoFieldset.includedComponentDescription.getData())??>
252 <div class="included.containter__content__description">
253 ${travelInfoFieldset.includedComponentDescription.getData()}
254 </div>
255 </#if>
256 </article>
257 </#if>
258 <#if travelInfoFieldset.notIncludedComponentTitle.getData()?has_content>
259 <article class="included-container__content">
260 <p class="included-container__content__title">${travelInfoFieldset.notIncludedComponentTitle.getData()}</p>
261 <div class="included-container__content__items">
262 <#if travelInfoFieldset.notIncludedComponentItem.getSiblings()?has_content>
263 <#list travelInfoFieldset.notIncludedComponentItem.getSiblings() as cur_travelInfoFieldset_notIncludedComponentItem>
264 <#if (cur_travelInfoFieldset_notIncludedComponentItem.getData())?has_content>
265
266 <div class="included-container__content__items__item">
267 <svg width="11" height="11" viewBox="0 0 18 19" data-icon="close">
268
269 <symbol id="ai:local:close">
270 <path fill="currentColor"
271 d="M1.534 18.372.129 16.967 7.596 9.5.129 2.033 1.534.628 9 8.095 16.467.628l1.405 1.405L10.406 9.5l7.466 7.467-1.405 1.405-7.466-7.467-7.467 7.467Z"/>
272 </symbol>
273 <use xlink:href="#ai:local:close"></use>
274
275 </svg>
276 <p>${cur_travelInfoFieldset_notIncludedComponentItem.getData()}</p>
277 </div>
278 </#if>
279 </#list>
280 </#if>
281 </div>
282 <#if (travelInfoFieldset.notIncludedComponentDescription.getData())??>
283 <div class="included.containter__content__description">${travelInfoFieldset.notIncludedComponentDescription.getData()}</div>
284 </#if>
285 </article>
286 </#if>
287 </section>
288 </#if>
289 </div>
290
291
292 <#if amenitiesFieldset.getSiblings()?has_content && (amenitiesFieldset.getSiblings()?first?has_content)>
293 <#assign firstAmenityElement = amenitiesFieldset.getSiblings()?first>
294 <#if firstAmenityElement?has_content && firstAmenityElement.amenityName.getData()?has_content>
295 <div class="services__wrapper">
296 <b>Servicios</b>
297 <ul>
298 <#list amenitiesFieldset.getSiblings() as cur_amenitiesFieldset>
299 <#if (cur_amenitiesFieldset.amenityName.getData())?has_content>
300 <li class="amenities_wrapper <#if (cur_amenitiesFieldset?index >= 6)>d-none</#if>">
301 <#if (cur_amenitiesFieldset.amenityImage.getData())?? && cur_amenitiesFieldset.amenityImage.getData() != "">
302 <img alt="${cur_amenitiesFieldset.amenityImage.getAttribute("alt")}"
303 data-fileentryid="${cur_amenitiesFieldset.amenityImage.getAttribute("fileEntryId")}"
304 src="${cur_amenitiesFieldset.amenityImage.getData()}"/>
305 </#if>
306 ${cur_amenitiesFieldset.amenityName.getData()}
307 </li>
308 </#if>
309 </#list>
310 </ul>
311 <#if (amenitiesFieldset.getSiblings()?size > 6)>
312 <a href="#" class="button button--none" id="amenities_button" onclick="showAmenities(event)">
313 Ver todos los servicios
314 </a>
315 </#if>
316 </div>
317 </#if>
318 </#if>
319 <#if facilitiesFieldset.getSiblings()?has_content && (facilitiesFieldset.getSiblings()?first.facilityName.getData()?has_content)>
320 <#assign firstFacilityElement = facilitiesFieldset.getSiblings()?first>
321 <#if firstFacilityElement?has_content && firstFacilityElement.facilityName.getData()?has_content>
322 <div class="services__wrapper">
323 <b>Instalaciones</b>
324 <ul>
325 <#list facilitiesFieldset.getSiblings() as cur_facilitiesFieldset>
326 <#if (cur_facilitiesFieldset.facilityName.getData())?has_content>
327 <li class="facilities_wrapper <#if (cur_facilitiesFieldset?index >= 6)>d-none</#if>">
328 <#if (cur_facilitiesFieldset.facilityImage.getData())?? && cur_facilitiesFieldset.facilityImage.getData() != "">
329 <img alt="${cur_facilitiesFieldset.facilityImage.getAttribute("alt")}"
330 data-fileentryid="${cur_facilitiesFieldset.facilityImage.getAttribute("fileEntryId")}"
331 src="${cur_facilitiesFieldset.facilityImage.getData()}"/>
332 </#if>
333 ${cur_facilitiesFieldset.facilityName.getData()}
334 </li>
335 </#if>
336 </#list>
337 </ul>
338 <#if (facilitiesFieldset.getSiblings()?size > 6)>
339 <a href="#" class="button button--none" id="facilities_button" onclick="showFacilities(event)">
340 Ver todas las instalaciones
341 </a>
342 </#if>
343 </div>
344 </#if>
345 </#if>
346 </div>
347</section>
348<script>
349 function showAmenities(e) {
350 e.preventDefault();
351 const amenities = document.querySelectorAll(".amenities_wrapper")
352 amenities.forEach(amenity => amenity.classList.remove("d-none"))
353 const amenitiesButton = document.querySelector("#amenities_button")
354 amenitiesButton.classList.add("d-none")
355 }
356
357 function showFacilities(e) {
358 e.preventDefault();
359 const facilities = document.querySelectorAll(".facilities_wrapper")
360 facilities.forEach(amenity => amenity.classList.remove("d-none"))
361 const facilitiesButton = document.querySelector("#facilities_button")
362 facilitiesButton.classList.add("d-none")
363 }
364</script>