El mar de las mil y una historias - Camarote Balcón

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>