An error occurred while processing the template.
Java method "jdk.proxy67.$Proxy628.getArticleContent(long, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay)" threw an exception when invoked on jdk.proxy67.$Proxy628 object "com.liferay.journal.service.impl.JournalArticleServiceImpl@12473c12"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: bannerConsultorContent = journalArtic... [in template "176139#176179#1006595" at line 221, column 5]
----
1<#assign
2 journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleService")
3 assetCategoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryService")
4 categories = assetCategoryService.getCategories("com.liferay.journal.model.JournalArticle", .vars['reserved-article-id'].data?number)
5 categoriesString = ""
6/>
7
8<#list categories as category>
9 <#assign categoriesString += category.getTitle(locale)>
10 <#if !category?is_last>
11 <#assign categoriesString += " · ">
12 </#if>
13</#list>
14
15<section id="cabecera" class="cabecera_5">
16 <#if (imageFirstNew.getData())?? && imageFirstNew.getData() != "">
17 <img class="background_image" alt="${imageFirstNew.getAttribute("alt")}" data-fileentryid="${imageFirstNew.getAttribute("fileEntryId")}" src="${imageFirstNew.getData()}" />
18 </#if>
19 <div class="background_degra"></div>
20 <div class="content_head">
21 <div class="titular">
22 <#if (titleAgenda.getData())?? && titleAgenda.getData() != "">
23 <h1 class="medium_title">${titleAgenda.getData()}</h1>
24 </#if>
25 <#if (subtitleAgenda.getData())?? && subtitleAgenda.getData() != "">
26 <p class="date">${subtitleAgenda.getData()}</p>
27 </#if>
28 <div class="add_info">
29 <#assign dateInitial_Data = getterUtil.getString(dateInitial.getData())>
30 <#assign dateFin_Data = getterUtil.getString(dateFin.getData())>
31 <#if validator.isNotNull(dateInitial_Data) && validator.isNotNull(dateFin_Data)>
32 <#assign dateInitial_DateObj = dateUtil.parseDate("yyyy-MM-dd", dateInitial_Data, locale)>
33 <#assign dateFin_DateObj = dateUtil.parseDate("yyyy-MM-dd", dateFin_Data, locale)>
34 <p class="category">${dateUtil.getDate(dateInitial_DateObj, "dd MMM yyyy", locale)} - ${dateUtil.getDate(dateFin_DateObj, "dd MMM yyyy", locale)}</p>
35 </#if>
36 <div class="languages">
37 <p>Add to your calendar
38 <a id="outlook" role="button">Outlook</a> /
39 <a id="google" role="button">Google</a> /
40 <a id="apple" role="button">Apple</a></p>
41 </div>
42 <#if traslatedUrl?? && traslatedUrl.getData() != "" && traslatedUrl.getSiblings()?has_content>
43 <div class="languages">
44 <img src="/documents/176177/179195/idioma.png/f401554d-c635-40ae-c73a-c6cbb47d8d89?t=1737644561098" alt="">
45 <p>Content available in:
46 <#assign isFirstLanguage = true>
47 <#list traslatedUrl.getSiblings() as cur_traslatedUrl>
48 <#if (cur_traslatedUrl.getData())??>
49 <#if !isFirstLanguage> / </#if>
50 <a href="${cur_traslatedUrl.getData()}">${cur_traslatedUrl.traslatedLanguage.getData()}</a>
51 <#assign isFirstLanguage = false>
52 </#if>
53 </#list>
54 </div>
55 </#if>
56 </div>
57 </div>
58 <#if (summaryAgenda.getData())?? && summaryAgenda.getData() != "">
59 <div class="summary">
60 ${summaryAgenda.getData()}
61 </div>
62 </#if>
63 <#if (textLinkAgenda.urlLinkAgenda.getData())?? && textLinkAgenda.urlLinkAgenda.getData() != "" && (textLinkAgenda.getData())?? && textLinkAgenda.getData() != "">
64 <a href="${textLinkAgenda.urlLinkAgenda.getData()}" class="btn_red" <#if !textLinkAgenda.urlLinkAgenda.getData()?contains('catalonia.com')> target="_blank" title="Open new window"</#if> >${textLinkAgenda.getData()}</a>
65 </#if>
66 <div class="separator"></div>
67 </div>
68</section>
69
70<#if (contentAgenda.getData())?? && contentAgenda.getData() != "">
71 <section class="content_new container">
72 <div class="content_text">
73 ${contentAgenda.getData()}
74 </div>
75 </section>
76</#if>
77
78<#if titleSectionCards?exists>
79 <#if (titleSectionCards.titleSliderCard.getData())?? && titleSectionCards.titleSliderCard.getData() != "">
80 <section class="type_card_21 container-fluid plans-container--slider">
81 <!-- Titular sección -->
82 <div class="content_type_4">
83 <div class="line_red"></div>
84 <#if (titleSectionCards.getData())?? && titleSectionCards.getData() != "">
85 <div class="titular">
86 <h2 class="big_title">${titleSectionCards.getData()}</h2>
87 </div>
88 </#if>
89 </div>
90
91 <!--Carousel-->
92 <div class="carrusel_card_big">
93 <#if (titleSectionCards.titleSliderCard.getSiblings()?size > 1)>
94 <button type="button" class="left-arrow">
95 <span class="fas fa-arrow-circle-left" aria-hidden="true"></span>
96 <span class="sr-only">Previous</span>
97 </button>
98 <button type="button" class="right-arrow">
99 <span class="fas fa-arrow-circle-right" aria-hidden="true"></span>
100 <span class="sr-only">Next</span>
101 </button>
102 </#if>
103
104 <#if titleSectionCards.titleSliderCard.getSiblings()?has_content>
105 <ul class="list_cards">
106 <#list titleSectionCards.titleSliderCard.getSiblings() as cur_titleSectionCards_titleSliderCard>
107 <li class="item">
108 <div class="content_card">
109 <#if (cur_titleSectionCards_titleSliderCard.getChild('imageSliderCard').getData())?? && cur_titleSectionCards_titleSliderCard.getChild('imageSliderCard').getData() != "">
110 <div class="image">
111 <img alt="${cur_titleSectionCards_titleSliderCard.getChild('imageSliderCard').getAttribute("alt")}" src="${cur_titleSectionCards_titleSliderCard.getChild('imageSliderCard').getData()}" data-fileentryid="${cur_titleSectionCards_titleSliderCard.getChild('imageSliderCard').getAttribute("fileEntryId")}" />
112 </div>
113 </#if>
114
115 <div class="content">
116 <#if (cur_titleSectionCards_titleSliderCard.getData())?? && cur_titleSectionCards_titleSliderCard.getData() != "">
117 <h3 class="title">${cur_titleSectionCards_titleSliderCard.getData()}</h3>
118 </#if>
119 <#if (cur_titleSectionCards_titleSliderCard.getChild('contentSliderCard').getData())?? && cur_titleSectionCards_titleSliderCard.getChild('contentSliderCard').getData() != "">
120 <div class="content_text">
121 ${cur_titleSectionCards_titleSliderCard.getChild('contentSliderCard').getData()}
122 </div>
123 </#if>
124 <#if (cur_titleSectionCards_titleSliderCard.getChild('urlLinkSliderCard').getData())?? && cur_titleSectionCards_titleSliderCard.getChild('urlLinkSliderCard').getData() != "" && (cur_titleSectionCards_titleSliderCard.getChild('textLinkSliderCard').getData())?? && cur_titleSectionCards_titleSliderCard.getChild('textLinkSliderCard').getData() != "">
125 <a href="${cur_titleSectionCards_titleSliderCard.getChild('urlLinkSliderCard').getData()}" class="btn_all_blue" <#if !cur_titleSectionCards_titleSliderCard.getChild('urlLinkSliderCard').getData()?contains('catalonia.com')> target="_blank" title="Open new window"</#if> >${cur_titleSectionCards_titleSliderCard.getChild('textLinkSliderCard').getData()}</a>
126 </#if>
127 </div>
128 </div>
129 </li>
130 </#list>
131 </ul>
132 </#if>
133 </div>
134 </section>
135 </#if>
136</#if>
137
138<#if (titleMoreInfo.getData())?? && titleMoreInfo.getData() != "" && (titleMoreInfo.descriptionMoreInfo.getData())?? && titleMoreInfo.descriptionMoreInfo.getData() != "">
139 <section class="second_menu_2 container-fluid">
140 <div class="bloque">
141 <div class="image">
142 <img src="/documents/176177/179195/more-info.png" alt="">
143 </div>
144 <div class="text">
145 <#if (titleMoreInfo.getData())??>
146 <h2 class="title">${titleMoreInfo.getData()}</h2>
147 </#if>
148 <#if (titleMoreInfo.descriptionMoreInfo.getData())??>
149 <div class="content_text">
150 ${titleMoreInfo.descriptionMoreInfo.getData()}
151 </div>
152 </#if>
153 </div>
154 </div>
155 </section>
156</#if>
157
158<#if (titlePeople.namePeople.getData())?? && titlePeople.namePeople.getData() != "">
159 <#if titlePeople.namePeople.getSiblings()?has_content>
160 <section class="type_card_9 gray">
161 <div class="content_type_4">
162 <div class="line_red"></div>
163 <#if (titlePeople.getData())??>
164 <div class="titular">
165 <h2 class="big_title">${titlePeople.getData()}</h2>
166 </div>
167 </#if>
168 <#if (titlePeople.descriptionPeople.getData())??>
169 <div class="content_text">
170 ${titlePeople.descriptionPeople.getData()}
171 </div>
172 </#if>
173 </div>
174 <div class="container">
175 <ul class="list_item row">
176 <#list titlePeople.namePeople.getSiblings() as cur_titlePeople_namePeople>
177 <li class="item col-12 col-md-4">
178 <div class="bloque">
179 <div class="titular">
180 <#if (cur_titlePeople_namePeople.getData())??>
181 <h3 class="title">${cur_titlePeople_namePeople.getData()}</h3>
182 </#if>
183 <#if (cur_titlePeople_namePeople.getChild('logoPeople').getData())?? && cur_titlePeople_namePeople.getChild('logoPeople').getData() != "">
184 <img class="logo" alt="${cur_titlePeople_namePeople.getChild('logoPeople').getAttribute("alt")}" src="${cur_titlePeople_namePeople.getChild('logoPeople').getData()}" data-fileentryid="${cur_titlePeople_namePeople.getChild('logoPeople').getAttribute("fileEntryId")}" />
185 </#if>
186
187 <#--<ul class="share_rrss">
188 <li>
189 <a href="#"><i class="fas fa-envelope"></i><span class="sr-only">Compartir en Twitter</span></a>
190 </li>
191 <li>
192 <a href="#"><i class="fab fa-twitter"></i><span class="sr-only">Compartir en Twitter</span></a>
193 </li>
194 <li>
195 <a href="#"><i class="fab fa-linkedin"></i><span class="sr-only">Compartir en Twitter</span></a>
196 </li>
197 </ul>-->
198
199 </div>
200 <#if (cur_titlePeople_namePeople.getChild('subdescriptionPeople').getData())??>
201 <div class="content_text">
202 ${cur_titlePeople_namePeople.getChild('subdescriptionPeople').getData()}
203 </div>
204 </#if>
205 <#if (cur_titlePeople_namePeople.getChild('urlPeople').getData())?? && cur_titlePeople_namePeople.getChild('urlPeople').getData() != "" && (cur_titlePeople_namePeople.getChild('linkPeople').getData())?? && cur_titlePeople_namePeople.getChild('linkPeople').getData() != "">
206 <a href="${cur_titlePeople_namePeople.getChild('urlPeople').getData()}" class="btn_all_blue" <#if !cur_titlePeople_namePeople.getChild('urlPeople').getData()?contains('catalonia.com')> target="_blank" title="Open new window"</#if> >${cur_titlePeople_namePeople.getChild('linkPeople').getData()}<i class="fas fa-arrow-right" aria-hidden="true"></i></a>
207 </#if>
208 </div>
209 </li>
210 </#list>
211 </ul>
212 </div>
213 </section>
214 </#if>
215</#if>
216
217
218<#if (bannerConsultor.getData())?? && bannerConsultor.getData() != "">
219 <#assign bannerConsultorJSON = jsonFactoryUtil.createJSONObject(bannerConsultor.getData())
220
221 bannerConsultorContent = journalArticleService.getArticleContent(groupId, (bannerConsultorJSON.classPK?number - 2)?c, themeDisplay.getLanguageId(), null, themeDisplay)
222
223 />
224
225 ${bannerConsultorContent}
226</#if>
227
228<#if (titleMoreEvento.imageMoreEvento.getData())?? && titleMoreEvento.imageMoreEvento.getData() != "" && (titleMoreEvento.getData())?? && titleMoreEvento.getData() != "" || (titleMoreEvento.imageMoreEvento.getData())?? && titleMoreEvento.imageMoreEvento.getData() != "" && (titleMoreEvento.descriptionMoreEvento.getData())?? && titleMoreEvento.descriptionMoreEvento.getData() != "">
229 <section class="content_type_7 space container-fluid">
230 <#if (titleMoreEvento.imageMoreEvento.getData())?? && titleMoreEvento.imageMoreEvento.getData() != "">
231 <img class="background_image" alt="${titleMoreEvento.imageMoreEvento.getAttribute("alt")}" data-fileentryid="${titleMoreEvento.imageMoreEvento.getAttribute("fileEntryId")}" src="${titleMoreEvento.imageMoreEvento.getData()}" />
232 </#if>
233 <div class="bloque">
234 <#if (titleMoreEvento.getData())??>
235 <h2 class="big_title">${htmlUtil.unescape(titleMoreEvento.getData())}<span class="dest_blue">.</span></h2>
236 </#if>
237 <#if (titleMoreEvento.logoMoreEvento.getData())?? && titleMoreEvento.logoMoreEvento.getData() != "">
238 <div class="logo">
239 <img alt="${titleMoreEvento.logoMoreEvento.getAttribute("alt")}" src="${titleMoreEvento.logoMoreEvento.getData()}" data-fileentryid="${titleMoreEvento.logoMoreEvento.getAttribute("fileEntryId")}" />
240 </div>
241 </#if>
242 <#if (titleMoreEvento.nameMoreEvento.getData())??>
243 <p class="subtitle">${titleMoreEvento.nameMoreEvento.getData()}</p>
244 </#if>
245 <#if (titleMoreEvento.descriptionMoreEvento.getData())??>
246 <div class="content_text">
247 ${titleMoreEvento.descriptionMoreEvento.getData()}
248 </div>
249 </#if>
250 <#if (titleMoreEvento.locationMoreEvento.getData())??>
251 <p class="text_dest"><i class="fas fa-map-marker-alt" aria-hidden="true"></i> ${titleMoreEvento.locationMoreEvento.getData()}</p>
252 </#if>
253 <#if (titleMoreEvento.urlMoreEvento.getData())?? && titleMoreEvento.urlMoreEvento.getData() != "" && (titleMoreEvento.linkMoreEvento.getData())?? && titleMoreEvento.linkMoreEvento.getData() != "">
254 <a href="${titleMoreEvento.urlMoreEvento.getData()}" class="btn_blue" <#if !titleMoreEvento.urlMoreEvento.getData()?contains('catalonia.com')> target="_blank" title="Open new window"</#if> >${titleMoreEvento.linkMoreEvento.getData()}</a>
255 </#if>
256 </div>
257 </section>
258</#if>
259
260<#if (infoRelated.subtitleRelated.getData())?? && infoRelated.subtitleRelated.getData() != "">
261 <#if infoRelated.subtitleRelated.getSiblings()?has_content>
262 <section class="type_card_5 <#if infoRelated.subtitleRelated.getSiblings()?size == 1>one</#if> container">
263 <div class="content_type_4">
264 <div class="line_red"></div>
265 <div class="titular">
266 <h2 class="big_title"><span class="hand">Discover</span> our <span class="dest_blue">services.</span></h2>
267 </div>
268 <#if (infoRelated.descriptionRelated.getData())?? && infoRelated.descriptionRelated.getData() != "">
269 <div class="content_text">
270 ${infoRelated.descriptionRelated.getData()}
271 </div>
272 </#if>
273 </div>
274 <#if infoRelated.subtitleRelated.getSiblings()?has_content>
275
276 <#if infoRelated.subtitleRelated.getSiblings()?size == 1>
277 <div class="list_item row">
278 <div class="item col-12 col-md-4">
279 <div class="bloque">
280 <#if (infoRelated.subtitleRelated.iconRelated.getData())?? && infoRelated.subtitleRelated.iconRelated.getData() != "">
281 <img class="icon" alt="${infoRelated.subtitleRelated.iconRelated.getAttribute("alt")}" src="${infoRelated.subtitleRelated.iconRelated.getData()}" data-fileentryid="${infoRelated.subtitleRelated.iconRelated.getAttribute("fileEntryId")}" />
282 </#if>
283 <div>
284 <#if (infoRelated.subtitleRelated.getData())?? && infoRelated.subtitleRelated.getData() != "">
285 <#if (infoRelated.getData())?? && infoRelated.getData() != "">
286 <h3 class="small_title">${infoRelated.subtitleRelated.getData()}</h3>
287 <#else>
288 <h2 class="small_title">${infoRelated.subtitleRelated.getData()}</h2>
289 </#if>
290 </#if>
291 <#if (infoRelated.subtitleRelated.subdescriptionRelated.getData())?? && infoRelated.subtitleRelated.subdescriptionRelated.getData() != "">
292 <div class="content_text">
293 ${infoRelated.subtitleRelated.subdescriptionRelated.getData()}
294 </div>
295 </#if>
296 <#if (infoRelated.subtitleRelated.textLinkRelated.getData())?? && infoRelated.subtitleRelated.textLinkRelated.getData() != "" && (infoRelated.subtitleRelated.urlLinkRelated.getData())?? && infoRelated.subtitleRelated.urlLinkRelated.getData() != "">
297 <a href="${infoRelated.subtitleRelated.urlLinkRelated.getData()}" class="btn_blue" <#if !infoRelated.subtitleRelated.urlLinkRelated.getData()?contains('catalonia.com')> target="_blank" title="Open new window"</#if> >${infoRelated.subtitleRelated.textLinkRelated.getData()}</a>
298 </#if>
299 </div>
300 </div>
301 </div>
302 </div>
303
304 <#elseif infoRelated.subtitleRelated.getSiblings()?size gte 6>
305 <ul class="list_item row">
306 <#list infoRelated.subtitleRelated.getSiblings() as cur_infoRelated_subtitleRelated>
307 <li class="item col-12 col-md-6 col-lg-3">
308 <div class="bloque">
309 <#if (cur_infoRelated_subtitleRelated.getChild('iconRelated').getData())?? && cur_infoRelated_subtitleRelated.getChild('iconRelated').getData() != "">
310 <img class="icon" alt="${cur_infoRelated_subtitleRelated.getChild('iconRelated').getAttribute("alt")}" src="${cur_infoRelated_subtitleRelated.getChild('iconRelated').getData()}" data-fileentryid="${cur_infoRelated_subtitleRelated.getChild('iconRelated').getAttribute("fileEntryId")}" />
311 </#if>
312 <div>
313 <#if (cur_infoRelated_subtitleRelated.getData())?? && cur_infoRelated_subtitleRelated.getData() != "">
314 <#if (infoRelated.getData())?? && infoRelated.getData() != "">
315 <h3 class="small_title">${cur_infoRelated_subtitleRelated.getData()}</h3>
316 <#else>
317 <h2 class="small_title">${cur_infoRelated_subtitleRelated.getData()}</h2>
318 </#if>
319 </#if>
320 <#if (cur_infoRelated_subtitleRelated.subdescriptionRelated.getData())?? && cur_infoRelated_subtitleRelated.subdescriptionRelated.getData() != "">
321 <div class="content_text">
322 ${cur_infoRelated_subtitleRelated.subdescriptionRelated.getData()}
323 </div>
324 </#if>
325 <#if (cur_infoRelated_subtitleRelated.textLinkRelated.getData())?? && cur_infoRelated_subtitleRelated.textLinkRelated.getData() != "" && (cur_infoRelated_subtitleRelated.urlLinkRelated.getData())?? && cur_infoRelated_subtitleRelated.urlLinkRelated.getData() != "">
326 <a href="${cur_infoRelated_subtitleRelated.urlLinkRelated.getData()}" class="btn_blue" <#if !cur_infoRelated_subtitleRelated.urlLinkRelated.getData()?contains('catalonia.com')> target="_blank" title="Open new window"</#if> >${cur_infoRelated_subtitleRelated.textLinkRelated.getData()}</a>
327 </#if>
328 </div>
329 </div>
330 </li>
331 </#list>
332 </ul>
333
334 <#else>
335 <ul class="list_item row">
336 <#list infoRelated.subtitleRelated.getSiblings() as cur_infoRelated_subtitleRelated>
337 <li class="item col-12 col-md-4">
338 <div class="bloque">
339 <#if (cur_infoRelated_subtitleRelated.getChild('iconRelated').getData())?? && cur_infoRelated_subtitleRelated.getChild('iconRelated').getData() != "">
340 <img class="icon" alt="${cur_infoRelated_subtitleRelated.getChild('iconRelated').getAttribute("alt")}" src="${cur_infoRelated_subtitleRelated.getChild('iconRelated').getData()}" data-fileentryid="${cur_infoRelated_subtitleRelated.getChild('iconRelated').getAttribute("fileEntryId")}" />
341 </#if>
342 <div>
343 <#if (cur_infoRelated_subtitleRelated.getData())?? && cur_infoRelated_subtitleRelated.getData() != "">
344 <#if (infoRelated.getData())?? && infoRelated.getData() != "">
345 <h3 class="small_title">${cur_infoRelated_subtitleRelated.getData()}</h3>
346 <#else>
347 <h2 class="small_title">${cur_infoRelated_subtitleRelated.getData()}</h2>
348 </#if>
349 </#if>
350 <#if (cur_infoRelated_subtitleRelated.subdescriptionRelated.getData())?? && cur_infoRelated_subtitleRelated.subdescriptionRelated.getData() != "">
351 <div class="content_text">
352 ${cur_infoRelated_subtitleRelated.subdescriptionRelated.getData()}
353 </div>
354 </#if>
355 <#if (cur_infoRelated_subtitleRelated.textLinkRelated.getData())?? && cur_infoRelated_subtitleRelated.textLinkRelated.getData() != "" && (cur_infoRelated_subtitleRelated.urlLinkRelated.getData())?? && cur_infoRelated_subtitleRelated.urlLinkRelated.getData() != "">
356 <a href="${cur_infoRelated_subtitleRelated.urlLinkRelated.getData()}" class="btn_blue" <#if !cur_infoRelated_subtitleRelated.urlLinkRelated.getData()?contains('catalonia.com')> target="_blank" title="Open new window"</#if> >${cur_infoRelated_subtitleRelated.textLinkRelated.getData()}</a>
357 </#if>
358 </div>
359 </div>
360 </li>
361 </#list>
362 </ul>
363 </#if>
364 </#if>
365 </section>
366 </#if>
367</#if>
368
369<#if (bannerSector.getData())?? && bannerSector.getData() != "">
370 <#assign bannerSectorJSON = jsonFactoryUtil.createJSONObject(bannerSector.getData())
371
372 bannerSectorContent = journalArticleService.getArticleContent(groupId, (bannerSectorJSON.classPK?number - 2)?c, themeDisplay.getLanguageId(), null, themeDisplay)
373
374 />
375 ${bannerSectorContent}
376</#if>
377
378<script>
379 function isBrowser() {
380 try {return this === window;} catch(e) {return false;}
381 }
382
383 function checkIfiOS() {
384 if (isBrowser())
385 if ((/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))
386 return true;
387 else
388 return false;
389 else
390 return false;
391 }
392
393 var data = { "name": "${titleAgenda.getData()}", "description": "${summaryAgenda.getData()}", "startDate": "${dateUtil.getDate(dateInitial_DateObj, "yyyy-MM-dd", locale)}", "endDate": "${dateUtil.getDate(dateFin_DateObj, "yyyy-MM-dd", locale)}", "location": "${titleMoreInfo.descriptionMoreInfo.getData()}" };
394
395 jQuery("#outlook").click(function() {
396 let url = 'https://outlook.live.com/calendar/0/deeplink/compose?path=%2Fcalendar%2Faction%2Fcompose&rru=addevent';
397
398 let formattedDate = generateTime(data, 'delimiters', 'microsoft');
399 url += '&startdt=' + formattedDate['start'] + '&enddt=' + formattedDate['end'];
400
401 if (formattedDate['allday'])
402 url += '&allday=true';
403
404 if (data['name'] != null && data['name'] != '')
405 url += '&subject=' + encodeURIComponent(data['name']);
406
407 if (data['location'] != null && data['location'] != '')
408 url += '&location=' + encodeURIComponent(data['location']);
409
410 if (data['description'] != null && data['description'] != '')
411 url += '&body=' + encodeURIComponent(data['description'].replace(/\n/g, '<br>'));
412
413 window.open(url, '_blank').focus();
414 });
415
416 jQuery("#google").click(function() {
417 let url = 'https://calendar.google.com/calendar/render?action=TEMPLATE';
418 let formattedDate = generateTime('clean', 'google');
419 url += '&dates=' + formattedDate['start'] + '%2F' + formattedDate['end'];
420
421 if (data['name'] != null && data['name'] != '')
422 url += '&text=' + encodeURIComponent(data['name']);
423
424 if (data['location'] != null && data['location'] != '') {
425 url += '&location=' + encodeURIComponent(data['location']);
426 if (checkIfiOS()) { // Workaround for location bug in iOS for google calendar
427 if (data['description'] == null || data['description'] == '') {
428 data['description'] = '';
429 } else {
430 data['description'] += '<br><br>';
431 }
432
433 data['description'] += '📍: ' + data['location'];
434 }
435 }
436
437 if (data['description'] != null && data['description'] != '')
438 url += '&details=' + encodeURIComponent(data['description']);
439
440 window.open(url, '_blank').focus();
441 });
442
443 jQuery("#apple").click(function() {
444 let now = new Date();
445 now = now.toISOString().replace(/\..../g, '').replace(/[^a-z0-9]/gi, '');
446 let formattedDate = generateTime('clean', 'ical');
447 let timeslot = '';
448
449 if (formattedDate['allday'])
450 timeslot = ';VALUE=DATE';
451
452 let ics_lines = ["BEGIN:VCALENDAR", "VERSION:2.0", "CALSCALE:GREGORIAN", "BEGIN:VEVENT", "DTSTAMP:" + formattedDate['start'], "DTSTART" + timeslot + ":" + formattedDate['start'], "DTEND" + timeslot + ":" + formattedDate['end'], "SUMMARY:" + data['name']];
453
454 if (data['description'] != null && data['description'] != '')
455 ics_lines.push("DESCRIPTION:" + data['description'].replace(/\n/g, '\\n'));
456
457 if (data['location'] != null && data['location'] != '')
458 ics_lines.push("LOCATION:" + data['location']);
459
460 ics_lines.push("STATUS:CONFIRMED", "LAST-MODIFIED:" + now, "SEQUENCE:0", "END:VEVENT","END:VCALENDAR");
461 let dlurl = 'data:text/calendar;charset=utf-8,' + encodeURIComponent(ics_lines.join('\r\n'));
462
463 try {
464 if (!window.ActiveXObject) {
465 let save = document.createElement('a');
466 save.href = dlurl;
467 save.target = '_blank';
468 save.download = data['iCalFileName'] || 'event-to-save-in-my-calendar';
469 let evt = new MouseEvent('click', {
470 'view': window,
471 'bubbles': true,
472 'cancelable': false
473 });
474 save.dispatchEvent(evt);
475 (window.URL || window.webkitURL).revokeObjectURL(save.href);
476 }
477 } catch (e) {
478 console.error(e);
479 }
480 });
481
482 function generateTime(style = 'delimiters', targetCal = 'general') {
483 let startDate = data['startDate'].split('-');
484 let endDate = data['endDate'].split('-');
485 let start = '';
486 let end = '';
487
488 allday = true;
489 start = new Date(Date.UTC(startDate[0], startDate[1] - 1, startDate[2]));
490 let breakStart = start.toISOString().replace(/T(.+)Z/g, '');
491 end = new Date(Date.UTC(endDate[0], endDate[1] - 1, endDate[2]));
492
493 if (targetCal == 'google' || targetCal == 'microsoft' || targetCal == 'ical')
494 end.setDate(end.getDate() + 1);
495
496 let breakEnd = end.toISOString().replace(/T(.+)Z/g, '');
497
498 if (style == 'clean') {
499 breakStart = breakStart.replace(/\-/g, '');
500 breakEnd = breakEnd.replace(/\-/g, '');
501 }
502
503 start = breakStart;
504 end = breakEnd;
505
506 let returnObject = { 'start': start, 'end': end, 'allday': true };
507 return returnObject;
508 }
509
510 document.addEventListener('DOMContentLoaded', function () {
511 const listCards = document.querySelector('.type_card_21 .list_cards');
512 const items = document.querySelectorAll('.type_card_21 .list_cards .item');
513 const leftArrow = document.querySelector('.left-arrow');
514 const rightArrow = document.querySelector('.right-arrow');
515
516 let currentIndex = 0; // Índice del elemento activo
517
518 function updateCarousel() {
519 // Resetear todas las tarjetas
520 items.forEach((item, index) => {
521 item.classList.remove('active', 'side');
522 item.style.transform = ''; // Reiniciar la transformación
523 });
524
525 // Asignar clase 'active' al elemento central
526 const currentItem = items[currentIndex];
527 currentItem.classList.add('active');
528
529 // Asignar clase 'side' al elemento anterior (si existe)
530 if (currentIndex > 0) {
531 const prevItem = items[currentIndex - 1];
532 prevItem.classList.add('side');
533 }
534
535 // Asignar clase 'side' al siguiente elemento (si existe)
536 if (currentIndex < items.length - 1) {
537 const nextItem = items[currentIndex + 1];
538 nextItem.classList.add('side');
539 }
540
541 // Usar requestAnimationFrame para asegurar que los elementos están disponibles y visibles
542 requestAnimationFrame(() => {
543 const offset = -currentItem.offsetLeft + (listCards.clientWidth - currentItem.clientWidth) / 2;
544 listCards.style.transform = 'translateX(' + offset + 'px)';
545 });
546 }
547
548 // Evento para el botón izquierdo
549 leftArrow.addEventListener('click', function () {
550 if (currentIndex > 0) {
551 currentIndex--;
552 updateCarousel();
553 }
554 });
555
556 // Evento para el botón derecho
557 rightArrow.addEventListener('click', function () {
558 if (currentIndex < items.length - 1) {
559 currentIndex++;
560 updateCarousel();
561 }
562 });
563
564 // Configuración inicial
565 updateCarousel();
566 });
567</script>