-

S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> title  [in template "20155#20195#1501272" at line 634, column 202]

----
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: ${title}  [in template "20155#20195#1501272" at line 634, column 200]
----
1<#assign imagesFolder = themeDisplay.getPathThemeImages()> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
3<#assign currentURL = request.getRequestURL() /> 
4<#assign isFundacio = false> 
5<#if currentURL?contains("fundacio")> 
6	<#assign isFundacio = true> 
7</#if> 
8 
9<#function miliSeconds dateString firstDate> 
10	<#assign params = dateString?split(":")> 
11	 
12	<#if params?size == 2> 
13		<#assign param1 = params[0]> 
14		<#assign param2 = params[1]> 
15		<#assign param1 = getterUtil.getLong(param1)*3600000> 
16		<#assign param2 = getterUtil.getLong(param2)*60000> 
17		<#assign finalMilSec = param1 + param2> 
18		<#assign finalMilSecLong = getterUtil.getLong(finalMilSec)> 
19		<#assign resultLong = firstDate + finalMilSecLong> 
20		 
21		<#return resultLong> 
22	</#if> 
23</#function> 
24 
25<#--  header-image  --> 
26 
27<#if upperImage?? && upperImage.getData()?has_content> 
28	<div class="header-image"> 
29		<img src="${upperImage.getData()}" <#if upperImageAlt?? && upperImageAlt.getData()?has_content>alt="${upperImageAlt.getData()}"</#if>> 
30	</div> 
31</#if> 
32 
33 
34<#--  breadcrumbs  
35 
36<div class="full-body__container breadcrumbs" style="float: unset; margin-right: auto; padding-bottom: 22px; padding-top: 22px;"> 
37	<p class="breadcrumbs__title"><@liferay.language key='header.breadcrumbs.text' />:</p> 
38	<#if liferay_portlet?has_content><@liferay.breadcrumbs /></#if> 
39</div>  --> 
40 
41 
42<#-- TITOL I SUBTITOL  --> 
43 
44<#if titleGlobal?? && titleGlobal.getData()?has_content || subtitleGlobal?? && subtitleGlobal.getData()?has_content> 
45	<div class="full-body__container basicav2-titol-subtitol"> 
46		<#if titleGlobal?? && titleGlobal.getData()?has_content><h1>${titleGlobal.getData()}</h1></#if> 
47		<#if subtitleGlobal?? && subtitleGlobal.getData()?has_content><p>${subtitleGlobal.getData()}</p></#if> 
48	</div> 
49</#if> 
50 
51 
52<#--  bloc-info-agenda  --> 
53 
54<#if blocInfoAgenda?? && ((blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?has_content) || (blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()?has_content) || (blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()?has_content)) && (!blocInfoAgenda.hideBlocInfoAgenda?? || !getterUtil.getBoolean(blocInfoAgenda.hideBlocInfoAgenda.getData()))> 
55	<div class="full-body__container bloc-info-agenda"> 
56		<div class="bloc-info-agenda-elements"> 
57			<#if blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?has_content> 
58				<div class="bloc-info-agenda-element"> 
59					<#if blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda.getData()?has_content> 
60						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda.getData()}"> 
61					<#else> 
62						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/calendar.svg"> 
63					</#if> 
64					<#if blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda.getData()?has_content && getterUtil.getBoolean(blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda.getData())> 
65						<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.when"/> <b><@liferay.language key='label.bloc.novetatagenda.from' /> ${blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}</b></p></div> 
66					<#else> 
67						<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.when"/> <b>${blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}<#if blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda.getData()?has_content> <@liferay.language key="label.bloc.novetatagenda.to"/> ${blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}</#if></b></p></div> 
68					</#if> 
69				</div> 
70				<hr> 
71			</#if> 
72			<#if blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()?has_content> 
73				<div class="bloc-info-agenda-element"> 
74					<#if blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda.getData()?has_content> 
75						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda.getData()}"> 
76					<#else> 
77						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/location_on.svg"> 
78					</#if> 
79					<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.where"/> <b>${blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()}</b></p></div> 
80				</div> 
81				<hr> 
82			</#if> 
83			<#if blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()?has_content> 
84				<div class="bloc-info-agenda-element"> 
85					<#if blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda.getData()?has_content> 
86						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda.getData()}"> 
87					<#else> 
88						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/ticket.svg"> 
89					</#if> 
90					<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.acces"/> <b>${blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()}</b></p></div> 
91				</div> 
92			</#if> 
93		</div> 
94		<#if blocInfoAgenda.textBottomBlocInfoAgenda?? && blocInfoAgenda.textBottomBlocInfoAgenda.getData()?has_content> 
95			<div class="bloc-info-agenda-bottom"> 
96				<span>${blocInfoAgenda.textBottomBlocInfoAgenda.getData()}</span> 
97			</div> 
98		</#if> 
99	</div> 
100</#if> 
101 
102<#--  text-center  --> 
103 
104<#if textCenter?? && textCenter.getData()?has_content> 
105	<div class="full-body__container text-center-basic"> 
106		${textCenter.getData()} 
107	</div> 
108</#if> 
109 
110 
111<#--  image-center  --> 
112 
113<#if imageCenter?? && imageCenter.getData()?has_content> 
114	<div class="full-body__container image-center-basic"> 
115		<img src="${imageCenter.getData()}"> 
116	</div> 
117</#if> 
118 
119 
120<#--  TEXT-CARRUSEL-IMATGES  --> 
121 
122<#if textCarruselImatges1?? && 0 < textCarruselImatges1.elementsFieldSet.getSiblings()?size && textCarruselImatges1.elementsFieldSet.getSiblings()[0].elementsFieldSetFieldSet.image?? && textCarruselImatges1.elementsFieldSet.getSiblings()[0].elementsFieldSetFieldSet.image.getData()?has_content && (!textCarruselImatges1.hideTextCarruselImatges?? || !getterUtil.getBoolean(textCarruselImatges1.hideTextCarruselImatges.getData()))> 
123	<#assign entriesMapList = []> 
124	<#foreach elem in textCarruselImatges1.elementsFieldSet.getSiblings()> 
125		<#if elem.elementsFieldSetFieldSet.order?has_content> 
126			<#assign currentOrder = elem.elementsFieldSetFieldSet.order.getData()> 
127		</#if> 
128		<#if !currentOrder?has_content || currentOrder == "null"> 
129			<#assign currentOrder = "99"> 
130		</#if> 
131		<#assign currEntryMap = {"entry" : elem.elementsFieldSetFieldSet , "order" : currentOrder?number}> 
132		<#assign entriesMapList = entriesMapList + [currEntryMap]> 
133	</#foreach> 
134 
135	<#assign sortedEntriesMapList = entriesMapList?sort_by("order")> 
136	<#assign sortedEntriesRootElems = []> 
137 
138	<#foreach currEntryMap in sortedEntriesMapList> 
139		<#assign sortedEntriesRootElems = sortedEntriesRootElems + [currEntryMap.entry]> 
140	</#foreach> 
141 
142	<#assign leftContent = ""> 
143	<#if textCarruselImatges1.titleHeader?? && textCarruselImatges1.titleHeader.getData()?has_content && textCarruselImatges1.descHeader?? && textCarruselImatges1.descHeader?has_content> 
144		<#assign leftContent = "true"> 
145	</#if> 
146 
147	<div class="full-body__container hero-carousel-new hero-carousel hero-carousel--super hero-carousel-banner-alt <#if !leftContent?has_content>hero-carousel-banner-solo</#if>"> 
148		<#if leftContent?has_content> 
149			<div class="hero-carousel__container-banner"> 
150				<h2 class="hero-carousel-banner-alt-title"> 
151					${textCarruselImatges1.titleHeader.getData()} 
152				</h2> 
153				<p class="hero-carousel-banner-alt-desc"> 
154					${textCarruselImatges1.descHeader.getData()} 
155				</p> 
156			</div> 
157		</#if> 
158		<div aria-live="polite" aria-atomic="false" aria-relevant="all" class="slick-list draggable"> 
159			<div class="hero-carousel__container js-carousel-banner-al_1 is-playing" 
160				data-prev-text='<@liferay.language key="label.carousel.prev"/>' 
161				data-next-text='<@liferay.language key="label.carousel.next"/>' 
162				data-pagination-text='<@liferay.language key="label.carousel.outstanding"/>' 
163				data-stop-text='<@liferay.language key="label.carousel.pause"/>' 
164				data-play-text='<@liferay.language key="label.carousel.start"/>'> 
165				<#if sortedEntriesRootElems?has_content>				 
166					<#foreach element in sortedEntriesRootElems> 
167						<div class="hero hero--super"> 
168							<div class="hero__container"> 
169								<#if element.typeLink.getData() == "video"> 
170								<a href="#" onclick='showVideoModalBanner(`${element.External_Link.getData()}`);return false;' class="hero__link" <#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if>> 
171								<#else> 
172								<a class="hero__link"  
173									<#if element.typeLink.getData() == "extern">  
174										href="${element.External_Link.getData()}" target="_blank" title="<@liferay.language key="label.externalLink.title"/>"  
175									<#elseif element.typeLink.getData() == "intern" && element.Internal_Link?? && element.Internal_Link.getFriendlyUrl()?has_content>  
176										href="${element.Internal_Link.getFriendlyUrl()}" target="_self"  
177										<#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if>  
178									<#elseif element.typeLink.getData() == "intern" && element.External_Link?? && element.External_Link.getData()?has_content>  
179										href="${element.External_Link.getData()}" target="_self"  
180										<#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if>  
181									</#if> 
182
183								</#if> 
184									<div class="hero__media <#if (!element.titleElem?? || !element.titleElem.getData()?has_content) && (!element.descElem?? || !element.descElem.getData()?has_content)>hero__media-no-fade</#if>"> 
185										<#if element.typeLink.getData() == "video"> 
186											<div class="hero__media-video__container"> 
187												<span class="hero__media-video__img"> 
188												</span> 
189											</div> 
190										</#if> 
191										<img class="hero__image hero__image-new lazyload" data-src="${element.image.getData()}" <#if element.altImage?? && element.altImage.getData()?has_content>alt="${element.altImage.getData()}"</#if>> 
192									</div> 
193									<div class="hero__content white__banner"> 
194										<p class="hero__title" > 
195											${element.titleElem.getData()} 
196										</p> 
197										<p class="hero__desc-alt" > 
198											${element.descElem.getData()} 
199										</p> 
200									</div> 
201								</a> 
202							</div> 
203						</div> 
204					</#foreach> 
205				</#if> 
206			</div> 
207		</div> 
208	</div> 
209 
210	<div class="dialog"> 
211		<div id="carrusel-banner-video" class="u-hidden"> 
212			<div class="dialog__body dialog__body--jotmbe" id="carrusel-banner-video-content"> 
213			</div> 
214		</div> 
215	</div> 
216	<script type="text/javascript"> 
217		initSliderCarruselBanner1(); 
218 
219		function initSliderCarruselBanner1() { 
220			if($(".js-carousel-banner-al_1").hasClass('slick-initialized')) { 
221				$(".js-carousel-banner-al_1").slick("unslick"); 
222
223			$('.js-carousel-banner-al_1 .slick-toggle-play').remove(); 
224			$('.js-carousel-banner-al_1').slick({ 
225				slidesToShow: 1, 
226				arrows: true, 
227				draggable: true, 
228				infinite: false, 
229				variableWidth: false, 
230				autoplaySpeed: 4000, 
231				dots: true, 
232				nextArrow: '<button type="button" class="slick-next"><img class="slick-next__icon slick-next__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-next-black.svg" alt=\'<@liferay.language key="label.next"/>\'/><img class="slick-next__icon slick-next__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-next-gray.svg" alt=\'<@liferay.language key="label.next"/>\'/></button>', 
233				prevArrow: '<button type="button" class="slick-prev"><img class="slick-prev__icon slick-prev__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-prev-black.svg" alt=\'<@liferay.language key="label.prev"/>\'/><img class="slick-prev__icon slick-prev__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-prev-gray.svg" alt=\'<@liferay.language key="label.prev"/>\'/></button>', 
234				responsive: [ 
235
236						breakpoint: 767, 
237						settings: { 
238							slidesToShow: 1, 
239							arrows: false, 
240							variableWidth: true, 
241							dots: true 
242
243
244
245			}).each(function () { 
246				var carousel = $(this), 
247				toggleButton, 
248				toggleIcon; 
249 
250				carousel.find('.slick-next__icon').attr({ 
251					'alt': carousel.data('next-text') 
252				}); 
253 
254				carousel.find('.slick-prev__icon').attr({ 
255					'alt': carousel.data('prev-text') 
256				}); 
257			}); 
258 
259			if ($('.hero-carousel__container .hero').length == 1) { 
260				$('.hero-carousel__container .slick-toggle-play').hide(); 
261
262 
263			$('.slick-cloned[aria-describedby]').removeAttr('aria-describedby'); 
264			if($(".js-carousel-banner-al_1 .slick-dots").length > 0) { 
265				setDotsPositionBanner1(); 
266
267
268 
269		function showVideoModalBanner(link) { 
270			const start = link.indexOf("v=") + 2; 
271			const end = start + 2 + 11; 
272 
273			TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog-video-iframe", "carrusel-banner-video", "", "Modal-"); 
274			$('#carrusel-banner-video-content').html('<iframe class="home-carrusel-video-iframe" src="https://www.youtube.com/embed/'+link.substring(start, end)+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'); 
275
276		function setDotsPositionBanner1() { 
277			$(".js-carousel-banner-al_1 .slick-dots").appendTo($(".js-carousel-banner-al_1").parent()); 
278
279 
280		window.addEventListener('resize', function(event){ 
281			const width  = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
282			if($(".js-carousel-banner-al_1 .slick-dots").length > 0 && width > 768) { 
283				setDotsPositionBanner1(); 
284
285		});    
286 
287	</script> 
288</#if> 
289 
290 
291<#--  BASICA-TITOL-TEXT  --> 
292 
293<#if basicaTitolText?? && 0 < basicaTitolText.elementsBasica.getSiblings()?size && (basicaTitolText.elementsBasica.getSiblings()[0].titleBasica.getData()?has_content || basicaTitolText.elementsBasica.getSiblings()[0].contentBasica.getData()?has_content) && (!basicaTitolText.hideBasicaTitolText?? || !getterUtil.getBoolean(basicaTitolText.hideBasicaTitolText.getData()))> 
294	<div class="full-body__container basica-titol-text"> 
295		<#foreach elem in basicaTitolText.elementsBasica.getSiblings()> 
296			<div class="basica-titol-text-wrapper"> 
297				<#if elem.titleBasica?? && elem.titleBasica.getData()?has_content><h2 class="">${elem.titleBasica.getData()}</h2></#if> 
298				<#if elem.contentBasica?? && elem.contentBasica.getData()?has_content><div class="basica-titol-text-content">${elem.contentBasica.getData()}</div></#if> 
299			</div> 
300			<#foreach subelem in elem.subelementsBasica.getSiblings()> 
301				<div class="basica-titol-text-wrapper"> 
302					<#if subelem.subelementTitleBasica?? && subelem.subelementTitleBasica.getData()?has_content><h3>${subelem.subelementTitleBasica.getData()}</h3></#if> 
303					<#if subelem.subelementContentBasica?? && subelem.subelementContentBasica.getData()?has_content><div class="basica-titol-text-content">${subelem.subelementContentBasica.getData()}</div></#if> 
304				</div> 
305			</#foreach> 
306		</#foreach> 
307	</div> 
308</#if> 
309 
310 
311<#--  bloc-detall-agenda  --> 
312 
313<#if detallAgenda?? && (!detallAgenda.hideDetallAgenda?? || !getterUtil.getBoolean(detallAgenda.hideDetallAgenda.getData()))> 
314    <#assign hasElementDetallAgenda = false> 
315    <#if detallAgenda.elementsDetallAgenda??  
316          && detallAgenda.elementsDetallAgenda.getSiblings()??  
317          && (detallAgenda.elementsDetallAgenda.getSiblings()?size > 0)> 
318        <#assign firstSibling = detallAgenda.elementsDetallAgenda.getSiblings()[0]> 
319        <#if (firstSibling.titleDetallAgenda?? && firstSibling.titleDetallAgenda.getData()?has_content)  
320              || (firstSibling.contentDetallAgenda?? && firstSibling.contentDetallAgenda.getData()?has_content)> 
321            <#assign hasElementDetallAgenda = true> 
322        </#if> 
323    </#if> 
324     
325    <div class="full-body__container detall-agenda" <#if !hasElementDetallAgenda>style="margin-top:0;"</#if>> 
326		<#if detallAgenda.elementsDetallAgenda.getSiblings()??> 
327			<#assign siblings = detallAgenda.elementsDetallAgenda.getSiblings()> 
328			<#if siblings?size gt 0> 
329				<#foreach elem in siblings> 
330					<div class="detall-agenda-wrapper"> 
331						<#if elem.titleDetallAgenda?? && elem.titleDetallAgenda.getData()?has_content> 
332							<h2 class="">${elem.titleDetallAgenda.getData()}</h2> 
333						</#if> 
334						<#if elem.contentDetallAgenda?? && elem.contentDetallAgenda.getData()?has_content> 
335							<div class="detall-agenda-content">${elem.contentDetallAgenda.getData()}</div> 
336						</#if> 
337					</div> 
338				</#foreach> 
339			</#if> 
340		</#if> 
341 
342         
343        <#if detallAgenda.buttonsDetallAgenda??  
344              && detallAgenda.buttonsDetallAgenda.getSiblings()??  
345              && (detallAgenda.buttonsDetallAgenda.getSiblings()?size > 0) 
346              && detallAgenda.buttonsDetallAgenda.getSiblings()[0].linkTextDetallAgenda??  
347              && detallAgenda.buttonsDetallAgenda.getSiblings()[0].linkTextDetallAgenda.getData()?has_content> 
348            <div class="detall-agenda-buttons-wrapper"> 
349                <#foreach subelem in detallAgenda.buttonsDetallAgenda.getSiblings()> 
350                    <a title="<#if subelem.accessibleTitleButtons?? && subelem.accessibleTitleButtons.getData()?has_content>${subelem.accessibleTitleButtons.getData()}</#if>"  
351                       type="button"  
352                       class="button button--a"  
353                       <#if subelem.linkTypeDetallAgenda.getData() == "extern"  
354                             && subelem.External_LinkDetallAgenda??  
355                             && subelem.External_LinkDetallAgenda.getData()?has_content>  
356                           href="${subelem.External_LinkDetallAgenda.getData()}"  
357                           rel="external"  
358                           target="_blank"  
359                       <#elseif subelem.linkTypeDetallAgenda.getData() == "intern"  
360                             && subelem.Internal_LinkDetallAgenda??  
361                             && subelem.Internal_LinkDetallAgenda.getFriendlyUrl()?has_content>  
362                           href="${subelem.Internal_LinkDetallAgenda.getFriendlyUrl()}"  
363                           target="_self"   
364                       <#elseif subelem.linkTypeDetallAgenda.getData() == "intern"  
365                             && subelem.External_LinkDetallAgenda??  
366                             && subelem.External_LinkDetallAgenda.getData()?has_content>  
367                           href="${subelem.External_LinkDetallAgenda.getData()}"  
368                           target="_self"  
369                       </#if>> 
370                        <span class="button__label">${subelem.linkTextDetallAgenda.getData()}</span> 
371                    </a> 
372                </#foreach> 
373            </div> 
374        </#if> 
375    </div> 
376</#if> 
377 
378 
379 
380 
381<#--  DT_PP_TITULO_VIDEO  --> 
382 
383<#if stPpVideo?? && stPpVideo.linkFieldSet.link.getData()?has_content && (!stPpVideo.hideStPpVideo?? || !getterUtil.getBoolean(stPpVideo.hideStPpVideo.getData()))> 
384	<style> 
385		.points-video__video-cover.no_video::after{ 
386			background: none; 
387
388	</style> 
389	<#assign hasLink = false> 
390	<#if stPpVideo.linkHeader?? && stPpVideo.linkHeader.getData()?has_content && stPpVideo.linkHeaderText?? && stPpVideo.linkHeaderText.getData()?has_content> 
391		<#assign hasLink = true> 
392	</#if> 
393	<section class="points-video bg-gray pt-56"> 
394		<div class="main__container"> 
395			<div class="full-body"> 
396				<div class="full-body__container points-video__header-extra-container"> 
397					<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()?has_content && stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()?trim?has_content> 
398						<a name="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()}" id="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()}"> 
399						</a> 
400					</#if> 
401					<#if stPpVideo.titol?? && stPpVideo.titol.getData()?has_content> 
402						<div class="points-video__header"> 
403							<div class="points-video__header-extra" <#if !hasLink>style="justify-content: center; margin-right: 0;"</#if>> 
404								<h2 class="points-video__title"> 
405								${stPpVideo.titol.getData()}</h2> 
406								<#if hasLink> 
407									<a class="points-video__subtitle-link" href="${stPpVideo.linkHeader.getData()}">${stPpVideo.linkHeaderText.getData()}</a> 
408								</#if> 
409							</div> 
410							<p class="points-video__description" <#if !hasLink>style="text-align: center; max-width: 100%;"</#if>> 
411							${stPpVideo.descriptiu.getData()}</p> 
412						</div> 
413					</#if> 
414					 
415					<div class="points-video__video-item cookieconsent-optin-marketing media-unit__content" id="marketingCookies"> 
416						<#if stPpVideo.linkFieldSet.link.getData()?has_content> 
417							<#assign start = stPpVideo.linkFieldSet.link.getData()?index_of("v=") + 2> 
418							<#--13 because v= + 11 char for youtube ids 
419							--> 
420							<#assign end = start + 11> 
421							<a href="${stPpVideo.linkFieldSet.link.getData()}" class="points-video__video-stPpVideo.linkFieldSet.link" title="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}" 
422								rel="dialog-video" data-video="${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}"> 
423								<div class="points-video__video-cover" style="background-image: url(${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()});"> 
424									<img src="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()}" alt="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideoFieldSetFieldSet.alt.getData()}" class="points-video__video-image"> 
425								</div> 
426								<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()?has_content> 
427									<p class="points-video__caption"> 
428									${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}</p> 
429								</#if> 
430							</a> 
431						<#else> 
432							<a class="points-video__video-link" title="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}"> 
433								<div class="points-video__video-cover no_video" style="background-image: url(${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()});"> 
434									<img src="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()}" alt="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideoFieldSetFieldSet.alt.getData()}" class="points-video__video-image"> 
435								</div> 
436								<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()?has_content> 
437									<p class="points-video__caption"> 
438									${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}</p> 
439								</#if> 
440							</a> 
441							 
442						</#if> 
443					</div> 
444					<div class='cookieconsent-optout-marketing media-unit__content'> 
445						<@liferay.language key="cookiebot.youtube.no-marketing"/> 
446					</div> 
447					<#if hasLink> 
448						<a class="points-video__subtitle-link-mobile" href="${stPpVideo.linkHeader.getData()}">${stPpVideo.linkHeaderText.getData()}</a> 
449					</#if> 
450				</div> 
451			</div> 
452		</div> 
453	</section> 
454	<section class="video-dialog js__video-dialog u-hidden <#if stPpVideo.linkFieldSet.link?? && stPpVideo.linkFieldSet.link.getData()?has_content>${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}</#if>"> 
455		<div class="u-hidden" id="fragment-show-video"> 
456			<div class="video-dialog__panel"> 
457				<header class="video-dialog__header"> 
458					<button class="video-dialog__close js__video-dialog-close"> 
459					Cerrar</button> 
460				</header> 
461				<div class="video-dialog__content"> 
462					<div class="video-dialog__inner js__video-dialog-container"> 
463						<iframe data-cookieconsent="marketing" data-cookieblock-src="https://www.youtube.com/embed/${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}" frameborder="0" class="video-dialog__media" allow="encrypted-media" allowfullscreen=""> 
464						</iframe> 
465					</div> 
466				</div> 
467			</div> 
468		</div> 
469		<div class="video-dialog__overlay js__video-dialog-close"> 
470		</div> 
471	</section> 
472</#if> 
473 
474 
475<#--  TEXT-CARRUSEL-IMATGES-ALT  --> 
476 
477<#if textCarruselImatges2?? && 0 < textCarruselImatges2.elementsFieldSetAlt.getSiblings()?size && textCarruselImatges2.elementsFieldSetAlt.getSiblings()[0].elementsFieldSetFieldSetAlt.imageAlt?? && textCarruselImatges2.elementsFieldSetAlt.getSiblings()[0].elementsFieldSetFieldSetAlt.imageAlt.getData()?has_content && (!textCarruselImatges2.hideTextCarruselImatgesAlt?? || !getterUtil.getBoolean(textCarruselImatges2.hideTextCarruselImatgesAlt.getData()))> 
478	<#assign imagesFolder = themeDisplay.getPathThemeImages()> 
479 
480	<#assign entriesMapList = []> 
481	<#foreach elem in textCarruselImatges2.elementsFieldSetAlt.getSiblings()> 
482		<#if elem.elementsFieldSetFieldSetAlt.order?has_content> 
483			<#assign currentOrder = elem.elementsFieldSetFieldSetAlt.order.getData()> 
484		</#if> 
485		<#if !currentOrder?has_content || currentOrder == "null"> 
486			<#assign currentOrder = "99"> 
487		</#if> 
488		<#assign currEntryMap = {"entry" : elem.elementsFieldSetFieldSetAlt , "order" : currentOrder?number}> 
489		<#assign entriesMapList = entriesMapList + [currEntryMap]> 
490	</#foreach> 
491 
492	<#assign sortedEntriesMapList = entriesMapList?sort_by("order")> 
493	<#assign sortedEntriesRootElems = []> 
494 
495	<#foreach currEntryMap in sortedEntriesMapList> 
496		<#assign sortedEntriesRootElems = sortedEntriesRootElems + [currEntryMap.entry]> 
497	</#foreach> 
498 
499	<#assign leftContent = ""> 
500	<#if textCarruselImatges2.titleHeaderAlt?? && textCarruselImatges2.titleHeaderAlt.getData()?has_content && textCarruselImatges2.descHeaderAlt?? && textCarruselImatges2.descHeaderAlt?has_content> 
501		<#assign leftContent = "true"> 
502	</#if> 
503 
504	<div class="full-body__container hero-carousel-new hero-carousel hero-carousel--super hero-carousel-banner-alt <#if !leftContent?has_content>hero-carousel-banner-solo</#if>"> 
505		<#if leftContent?has_content> 
506			<div class="hero-carousel__container-banner"> 
507				<h2 class="hero-carousel-banner-alt-title"> 
508					${textCarruselImatges2.titleHeaderAlt.getData()} 
509				</h2> 
510				<p class="hero-carousel-banner-alt-desc"> 
511					${textCarruselImatges2.descHeaderAlt.getData()} 
512				</p> 
513			</div> 
514		</#if> 
515		<div aria-live="polite" aria-atomic="false" aria-relevant="all" class="slick-list draggable"> 
516			<div class="hero-carousel__container js-carousel-banner-al_alt is-playing" 
517				data-prev-text='<@liferay.language key="label.carousel.prev"/>' 
518				data-next-text='<@liferay.language key="label.carousel.next"/>' 
519				data-pagination-text='<@liferay.language key="label.carousel.outstanding"/>' 
520				data-stop-text='<@liferay.language key="label.carousel.pause"/>' 
521				data-play-text='<@liferay.language key="label.carousel.start"/>'> 
522				<#if sortedEntriesRootElems?has_content>				 
523					<#foreach element in sortedEntriesRootElems> 
524						<div class="hero hero--super"> 
525							<div class="hero__container"> 
526								<#if element.typeLinkAlt.getData() == "video"> 
527									<a href="#" onclick='showVideoModalBanner(`${element.External_LinkAlt.getData()}`);return false;' class="hero__link"  
528										<#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content> 
529											title="${element.titleLinkAlt.getData()}" 
530										</#if> 
531
532								<#else> 
533									<a class="hero__link"  
534										<#if element.typeLinkAlt.getData() == "extern">  
535											href="${element.External_LinkAlt.getData()}" target="_blank" title="<@liferay.language key="label.externalLink.title"/>"  
536										<#elseif element.typeLinkAlt.getData() == "intern" && element.Internal_LinkAlt?? && element.Internal_LinkAlt.getFriendlyUrl()?has_content>  
537											href="${element.Internal_LinkAlt.getFriendlyUrl()}" target="_self"  
538											<#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content>title="${element.titleLinkAlt.getData()}"</#if>  
539										<#elseif element.typeLinkAlt.getData() == "intern" && element.External_LinkAlt?? && element.External_LinkAlt.getData()?has_content>  
540											href="${element.External_LinkAlt.getData()}" target="_self"  
541											<#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content>title="${element.titleLinkAlt.getData()}"</#if>  
542										</#if> 
543
544								</#if> 
545									<div class="hero__media <#if (!element.titleElemAlt?? || !element.titleElemAlt.getData()?has_content) && (!element.descElemAlt?? || !element.descElemAlt.getData()?has_content)>hero__media-no-fade</#if>"> 
546										<#if element.typeLinkAlt.getData() == "video"> 
547											<div class="hero__media-video__container"> 
548												<span class="hero__media-video__img"> 
549												</span> 
550											</div> 
551										</#if> 
552										<img class="hero__image hero__image-new lazyload" data-src="${element.imageAlt.getData()}" <#if element.altImage?? && element.altImage.getData()?has_content>alt="${element.altImage.getData()}"</#if>> 
553									</div> 
554									<div class="hero__content white__banner"> 
555										<p class="hero__title" > 
556											${element.titleElemAlt.getData()} 
557										</p> 
558										<p class="hero__desc-alt" > 
559											${element.descElemAlt.getData()} 
560										</p> 
561									</div> 
562								</a> 
563							</div> 
564						</div> 
565					</#foreach> 
566				</#if> 
567			</div> 
568		</div> 
569	</div> 
570 
571	<div class="dialog"> 
572		<div id="carrusel-banner-video" class="u-hidden"> 
573			<div class="dialog__body dialog__body--jotmbe" id="carrusel-banner-video-content"> 
574			</div> 
575		</div> 
576	</div> 
577	<script type="text/javascript"> 
578		initSliderCarruselBanner2(); 
579 
580		function initSliderCarruselBanner2() { 
581			if($(".js-carousel-banner-al_alt").hasClass('slick-initialized')) { 
582				$(".js-carousel-banner-al_alt").slick("unslick"); 
583
584			$('.js-carousel-banner-al_alt .slick-toggle-play').remove(); 
585			$('.js-carousel-banner-al_alt').slick({ 
586				slidesToShow: 1, 
587				arrows: true, 
588				draggable: true, 
589				infinite: false, 
590				variableWidth: false, 
591				autoplaySpeed: 4000, 
592				dots: true, 
593				nextArrow: '<button type="button" class="slick-next"><img class="slick-next__icon slick-next__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-next-black.svg" alt=\'<@liferay.language key="label.next"/>\'/><img class="slick-next__icon slick-next__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-next-gray.svg" alt=\'<@liferay.language key="label.next"/>\'/></button>', 
594				prevArrow: '<button type="button" class="slick-prev"><img class="slick-prev__icon slick-prev__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-prev-black.svg" alt=\'<@liferay.language key="label.prev"/>\'/><img class="slick-prev__icon slick-prev__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-prev-gray.svg" alt=\'<@liferay.language key="label.prev"/>\'/></button>', 
595				responsive: [ 
596
597						breakpoint: 767, 
598						settings: { 
599							slidesToShow: 1, 
600							arrows: false, 
601							variableWidth: true, 
602							dots: true 
603
604
605
606			}).each(function () { 
607				var carousel = $(this), 
608				toggleButton, 
609				toggleIcon; 
610 
611				carousel.find('.slick-next__icon').attr({ 
612					'alt': carousel.data('next-text') 
613				}); 
614 
615				carousel.find('.slick-prev__icon').attr({ 
616					'alt': carousel.data('prev-text') 
617				}); 
618			}); 
619 
620			if ($('.hero-carousel__container .hero').length == 1) { 
621				$('.hero-carousel__container .slick-toggle-play').hide(); 
622
623 
624			$('.slick-cloned[aria-describedby]').removeAttr('aria-describedby'); 
625			if($(".js-carousel-banner-al_alt .slick-dots").length > 0) { 
626				setDotsPositionBanner2(); 
627
628
629 
630		function showVideoModalBanner2(link) { 
631			const start = link.indexOf("v=") + 2; 
632			const end = start + 2 + 11; 
633 
634			TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog-video-iframe", "carrusel-banner-video", "", "Modal-${title}"); 
635			$('#carrusel-banner-video-content').html('<iframe class="home-carrusel-video-iframe" src="https://www.youtube.com/embed/'+link.substring(start, end)+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'); 
636
637		function setDotsPositionBanner2() { 
638			$(".js-carousel-banner-al_alt .slick-dots").appendTo($(".js-carousel-banner-al_alt").parent()); 
639
640 
641		window.addEventListener('resize', function(event){ 
642			const width  = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
643			if($(".js-carousel-banner-al_alt .slick-dots").length > 0 && width > 768) { 
644				setDotsPositionBanner2(); 
645
646		});    
647 
648	</script> 
649</#if> 
650 
651 
652<#--  CARRUSEL-TRES-CARD  --> 
653 
654<#if referencesFieldSet?? && 0 < referencesFieldSet.getSiblings()?size && referencesFieldSet.getSiblings()[0].referenceId.getData()?has_content && (!hideTresCards?? || !getterUtil.getBoolean(hideTresCards.getData()))> 
655	<#assign colorClass = "" /> 
656	<#assign fullBody = "" /> 
657	<#if fondoColorCarruselCards?? && fondoColorCarruselCards.getData()??> 
658		<#if fondoColorCarruselCards.getData()=="blanc"> 
659			<#assign colorClass = "hola-bcn-carrusel-standard--white" /> 
660			<#assign fullBody = "full-body__container" /> 
661		<#else> 
662			<#assign colorClass = "hola-bcn-carrusel-standard--gray" /> 
663			<#assign fullBody = "full-body__container" /> 
664		</#if> 
665	</#if> 
666 
667	<section class="hola-bcn-carrusel-standard ${colorClass}"> 
668		<div class="hola-bcn-carrusel-standard-cont-ext hola-bcn-carrusel-standard-cont-ext-extra hola-bcn-carrusel-standard-cont-ext-flex ${fullBody}"> 
669			<div class="hola-bcn-carrusel-standard--container"> 
670				<div class="hola-bcn-carrusel-standard--outer"> 
671						<div class="hola-bcn-carrusel-standard_new-header"> 
672							<h2 class="title title--1 hola-bcn-carrusel-standard__title hola-bcn-carrusel-standard__title_new"> 
673							<#if titleCarruselCards?? && titleCarruselCards.getData()?has_content> 
674                ${titleCarruselCards.getData()} 
675              <#else> 
676                <@liferay.language key="title.carrusel.cards.default" /> 
677              </#if> 
678							</h2> 
679							<p class="hola-bcn-carrusel-standard__intro-text">${subtitleCarruselCards.getData()}</p> 
680						</div> 
681					<ul id="result-list" class="hola-bcn-carrusel-standard__items js__hola-bcn-standard-slider"> 
682						<#assign tmbGroupId = 20182> 
683						<#assign fundacioGroupId = 79790> 
684						<#list referencesFieldSet.getSiblings() as element> 
685							<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
686							<#assign articleId = element.referenceId.getData()> 
687							<#assign groupId = getterUtil.getLong(groupId)> 
688							<#attempt> 
689								<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, articleId) /> 
690							<#recover> 
691								<#if groupId == tmbGroupId> 
692									<#assign groupId = fundacioGroupId> 
693								<#else> 
694									<#assign groupId = tmbGroupId> 
695								</#if> 
696								<#attempt> 
697									<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, articleId)!> 
698								<#recover> 
699									<#assign journalArticle = ""> 
700								</#attempt> 
701							</#attempt> 
702							<#if journalArticle?has_content && journalArticle != ""> 
703								<#assign document = saxReaderUtil.read(journalArticle.getContent())> 
704								<#assign rootElement = document.getRootElement()> 
705 
706								<#assign resourceprimKey = journalArticle.getResourcePrimKey()> 
707								<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourceprimKey)> 
708								<#assign assetRenderer = assetEntry.getAssetRenderer()> 
709								<#assign articleURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, "")> 
710								<#assign articleFriendlyURL = assetRenderer.getUrlTitle()> 
711								<#assign newwindow = ""> 
712								<#if !articleURL?has_content> 
713									<#assign newwindow = "target='_blank'"> 
714									<#if !isFundacio> 
715										<#if currentURL?contains("pre3")> 
716											<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
717										<#else> 
718											<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
719										</#if> 
720									<#else> 
721										<#if currentURL?contains("pre3")> 
722											<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
723										<#else> 
724											<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
725										</#if> 
726									</#if> 
727								</#if> 
728 
729								<#assign title = ""> 
730								<#assign titleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='titleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
731								<#if titleSel.selectSingleNode(rootElement)?has_content> 
732									<#assign title = titleSel.selectSingleNode(rootElement).getStringValue()> 
733								</#if> 
734								 
735								<#assign subtitle = ""> 
736								<#assign subtitleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='subtitleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
737								<#if subtitleSel.selectSingleNode(rootElement)?has_content> 
738									<#assign subtitle = subtitleSel.selectSingleNode(rootElement).getStringValue()> 
739								</#if> 
740 
741								<#assign initDateNovetatAgenda = ""> 
742								<#assign fromInitDateNovetatAgenda = ""> 
743								<#assign endDateNovetatAgenda = ""> 
744								<#assign whereNovetatAgenda = ""> 
745								<#assign novetatAgendaSel = rootElement.selectSingleNode("dynamic-element[@field-reference='blocInfoAgenda']")!""> 
746								<#if novetatAgendaSel?has_content> 
747									<#assign dateNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whenBlocInfoAgenda']")!""> 
748 
749									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
750										<#assign initDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
751									</#if> 
752 
753									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
754										<#assign fromInitDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
755									</#if> 
756 
757									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
758										<#assign endDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
759									</#if> 
760 
761									<#assign whereNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whereBlocInfoAgenda']")!""> 
762									<#if whereNovetatAgendaSelSel?has_content && whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
763										<#assign whereNovetatAgenda = whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
764									</#if> 
765								</#if> 
766 
767								<#assign typeNovetatAgenda = ""> 
768								<#assign typeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='typeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
769								<#if typeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
770									<#assign typeNovetatAgenda = typeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
771								</#if> 
772 
773								<#assign filterNovetatAgenda = ""> 
774								<#assign filterNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='filterNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
775								<#if filterNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
776									<#assign filterNovetatAgenda = filterNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
777								</#if> 
778								 
779								<#assign imageNovetatAgenda = ""> 
780								<#assign imageNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='imageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
781								<#if imageNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
782									<#assign image = imageNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
783									<#assign imageUuid = jsonFactoryUtil.createJSONObject(image).uuid!""> 
784									<#assign imageNovetatAgenda = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + groupId + "/" + imageUuid> 
785								</#if> 
786 
787								<#assign imageAltNovetatAgenda = ""> 
788								<#assign imageAltNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='altImageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
789								<#if imageAltNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
790									<#assign imageAltNovetatAgenda = imageAltNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
791								</#if> 
792 
793								<#assign pubDateNovetatAgenda = ""> 
794								<#assign pubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
795								<#if pubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
796									<#assign pubDateNovetatAgenda = pubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
797								</#if> 
798 
799								<#assign pubTimeNovetatAgenda = ""> 
800								<#assign pubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
801								<#if pubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
802									<#assign pubTimeNovetatAgenda = pubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
803								</#if> 
804 
805								<#assign despubDateNovetatAgenda = ""> 
806								<#assign despubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
807								<#if despubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
808									<#assign despubDateNovetatAgenda = despubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
809								</#if> 
810 
811								<#assign despubTimeNovetatAgenda = ""> 
812								<#assign despubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
813								<#if despubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
814									<#assign despubTimeNovetatAgenda = despubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
815								</#if> 
816 
817								<#assign isExpiredNovetatAgenda = ""> 
818								<#assign isExpiredNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='isExpiredNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
819								<#if isExpiredNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
820									<#assign isExpiredNovetatAgenda = isExpiredNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
821								</#if> 
822 
823								<#assign isPublishedNA = false> 
824								<#if (pubDateNovetatAgenda?has_content)> 
825									<#if pubTimeNovetatAgenda?has_content> 
826										<#assign timeActDate = pubTimeNovetatAgenda?date["HH:mm"]> 
827										<#assign timeActFormat = timeActDate?string["HH:mm"]> 
828									<#else> 
829										<#assign timeActDate = ""> 
830										<#assign timeActFormat = ""> 
831									</#if> 
832									<#attempt>	 
833										<#assign dataAct = pubDateNovetatAgenda?date["yyyy-MM-dd"]> 
834										 
835										<#if timeActFormat?has_content && timeActFormat != ""> 
836											<#assign dataActMil = miliSeconds(timeActFormat dataAct?long)> 
837											<#assign dataAct = dateUtil.newDate(getterUtil.getLong(dataActMil))> 
838										</#if> 
839										<#assign dataActMil = dataAct?long> 
840										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
841										<#assign isPublishedNA = (dataActMil - now ) < 0 /> 
842									<#recover> 
843									</#attempt> 
844								</#if> 
845 
846								<#assign isDespublishedNA = false> 
847								<#if (despubDateNovetatAgenda?has_content)> 
848									<#if despubTimeNovetatAgenda?has_content> 
849										<#assign timeExpDate = despubTimeNovetatAgenda?date["HH:mm"]> 
850										<#assign timeExpFormat = timeExpDate?string["HH:mm"]> 
851									<#else> 
852										<#assign timeExpDate = ""> 
853										<#assign timeExpFormat = ""> 
854									</#if> 
855									<#attempt> 
856										<#assign dataExp = despubDateNovetatAgenda?date["yyyy-MM-dd"]> 
857										 
858										<#if timeExpFormat?has_content && timeExpFormat != ""> 
859											<#assign dataExpMil = miliSeconds(timeExpFormat dataExp?long)> 
860											<#assign dataExp = dateUtil.newDate(getterUtil.getLong(dataExpMil))> 
861										</#if> 
862										<#assign dataExpMil = dataExp?long> 
863										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
864										<#assign isDespublishedNA = (dataExpMil - now) < 0 /> 
865									<#recover> 
866									</#attempt> 
867								</#if> 
868 
869								<#assign isExpiredNA = false> 
870								<#if journalArticle.expirationDate??> 
871									<#assign dataExp = journalArticle.expirationDate?datetime> 
872									<#attempt> 
873										<#assign dataExpMil = dataExp?long> 
874										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
875										<#assign isExpiredNA = (dataExpMil - now) < 0 /> 
876									<#recover> 
877									</#attempt> 
878								</#if> 
879 
880								<#assign showNovetatAgenda = false> 
881								<#if typeNovetatAgenda?has_content && typeNovetatAgenda == "1"> 
882									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && !isDespublishedNA && isExpiredNovetatAgenda != "true"> 
883								<#else> 
884									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && isExpiredNovetatAgenda != "true"> 
885								</#if> 
886 
887								<#if showNovetatAgenda> 
888									<#if title?has_content> 
889										<li class="hola-bcn-carrusel-standard_new-li"> 
890											<a ${newwindow} class="hola-bcn-carrusel-standard_new <#if isDespublishedNA>hola-bcn-carrusel-standard_new-finished</#if>" href="${articleURL}"> 
891												<div class="hola-bcn-carrusel-standard__card-cover"> 
892													<div class="hola-bcn-carrusel-standard__card-cover-filter"></div> 
893													<img class="hola-bcn-carrusel-standard__image" src="${imageNovetatAgenda}" <#if imageAltNovetatAgenda?has_content>alt="${imageAltNovetatAgenda}"<#else>alt=""</#if>> 
894													<div class="hola-bcn-carrusel-standard-finished-text" <#if isDespublishedNA>style="display: block;"</#if>> 
895														<span><@liferay.language key='label.bloc.novetatagenda.finished' /></span> 
896													</div> 
897													<#if filterNovetatAgenda?has_content> 
898														<div class="hola-bcn-carrusel-standard-highlight"> 
899															<span><@liferay.language key='label.bloc.novetatagenda.filter.${filterNovetatAgenda}' /></span> 
900														</div> 
901													</#if> 
902												</div> 
903												<div class="hola-bcn-carrusel-standard-container"> 
904													<div> 
905														<h3 class="hola-bcn-carrusel-standard__card-title"> 
906															${title} 
907															<#if newwindow?? && newwindow?has_content> 
908																<span class="icon-external-black" alt="Enllaç extern" title="(Obre una nova finestra)"></span> 
909															</#if> 
910														</h3> 
911														<span class="hola-bcn-carrusel-standard__card-description"> 
912															${subtitle} 
913														</span> 
914													</div> 
915													<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content || (whereNovetatAgenda?has_content)> 
916														<div class="hola-bcn-carrusel-standard_bottom-extra"> 
917															<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content> 
918																<div class="hola-bcn-carrusel-standard-date"> 
919																	<#if fromInitDateNovetatAgenda == "true"> 
920																		<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> <@liferay.language key='label.bloc.novetatagenda.from' /> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</span> 
921																	<#else> 
922																		<#if initDateNovetatAgenda?has_content && !endDateNovetatAgenda?has_content> 
923																			<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</span> 
924																		<#else> 
925																			<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> <@liferay.language key='label.bloc.novetatagenda.from' /> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}<#if endDateNovetatAgenda?has_content> <@liferay.language key='label.bloc.novetatagenda.to' /> ${endDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</#if></span> 
926																		</#if> 
927																	</#if> 
928																</div> 
929															</#if> 
930															<#if whereNovetatAgenda?has_content> 
931																<div class="hola-bcn-carrusel-standard-where"> 
932																	<span><b><@liferay.language key='label.bloc.novetatagenda.where' /> <span class="hola-bcn-carrusel-standard-where-inner">${whereNovetatAgenda}</span></b></span> 
933																</div> 
934															</#if> 
935														</div> 
936													</#if> 
937												</div> 
938											</a> 
939										</li> 
940									</#if> 
941								</#if> 
942							</#if> 
943						</#list> 
944					</ul> 
945				</div> 
946			</div> 
947		</div> 
948	</section> 
949 
950	<script type="text/javascript"> 
951 
952		$(document).ready(function() { 
953			initSliderBcnStandard(); 
954		}); 
955 
956		function initSliderBcnStandard() { 
957			if($(".js__hola-bcn-standard-slider").hasClass('slick-initialized')) { 
958				$(".js__hola-bcn-standard-slider").slick("unslick"); 
959
960 
961			$('.js__hola-bcn-standard-slider').slick({ 
962				slidesToShow: 3, 
963				slidesToScroll: 1, 
964				arrows: false, 
965				dots: false, 
966				draggable: false, 
967				infinite: false, 
968				responsive: [ 
969
970						breakpoint: 767, 
971						settings: { 
972							variableWidth: true, 
973							slidesToShow: 1, 
974							slidesToScroll: 1, 
975							arrows: false, 
976							dots: true, 
977							draggable: true, 
978							infinite: true 
979
980
981
982			}); 
983
984 
985	</script> 
986</#if> 
Tornar a dalt

Confirmes que vols eliminar ’{0}’ dels teus favorits?

Recorda que perdràs l’alerta que et permet rebre informació de les alteracions que es produeixen en aquesta línia

Has afegit la línia ’{0}’ als teus favorits

Pots activar una alerta per tal de rebre a la teva adreça electrònica o al mòbil informació actualitzada sobre les alteracions programades per a aquesta línia:

No has activat cap alerta

Confirmes que vols desactivar les alertes dels teus favorits?

Aquesta acció silenciarà temporalment totes les alertes que tens configurades, fins que decideixis tornar-les a activar.

Has afegit la parada ’{0}’ als teus favorits

Canvia el nom de la parada per identificar-la d’una manera més fàcil

Pots activar una alerta per tal de rebre a la teva adreça electrònica o al mòbil informació actualitzada sobre les alteracions programades per a aquesta línia::

No has activat cap alerta

Registra’t

Registra’t ara i gaudeix de tots els avantatges de JoTMBé

  • Una experiència web personalitzada

  • Configura alertes per a les teves línies, parades i estacions favorites

  • Agilitza les teves cerques mitjançant els teus llocs i trajectes

  • Guanya premis i recompenses amb el Programa de Punts

O bé introdueix les teves dades

Contrasenya molt dèbil

Contrasenya dèbil
Contrasenya bàsica
Contrasenya segura
Contrasenya molt segura
Requisits mínims de la teva contrasenya:
- Ha de contenir un mínim de 8 caràcters
- Ha de ser diferent del nom d’usuari
- Ha de ser poc habitual, no vulnerable

Ja gairebé està!

Confirma la teva adreça electrònica

Hem enviat un correu electrònic a l’adreça per tal que puguis activar el teu compte d’usuari.

No has rebut el correu electrònic?
Torna a enviar-me’l

Condicions del servei

Ja tens compte? Inicia la sessió

Encara no has triat cap contrasenya. Hem enviat un correu electrònic a emaildeusuari@gmail.com mitjançant el qual ho podràs fer.

Has {0} una alerta

Recorda que pots configurar les alertes de les teves línies, parades i estacions favorites des de la secció Els meus favorits

label.jotmbe.modal.confirm-a2.title

Si també vols rebre les alteracions de circulació de la línia, cal que l’afegeixis als teus favorits
Recorda que pots gestionar les alertes des de la secció teus favorits

Has eliminat la {0} ’{1}’ dels teus favorits

Recorda que pots gestionar les alertes des de la secció Els meus favorits

Has eliminat el teu compte d’usuari

Has modificat el teu perfil

Has modificat les teves dades d’accés

Recorda que el proper cop que accedeixis a JoTMBé ho hauràs de fer amb les dades noves

T’hem enviat un correu electrònic per restablir la teva contrasenya a l’adreça electrònica {0}

Has modificat la teva contrasenya d’accés

Ja estàs registrat com a usuari nou de JoTMBé

Ja pots guardar llocs i trajectes i afegir línies, parades i estacions com a favorites. Així guanyaràs agilitat a l’hora de fer les teves cerques i rebràs només aquella informació que t’interessa.

Has eliminat aquest lloc dels teus llocs

Recorda que pots gestionar els teus llocs i trajectes des de la secció Llocs i trajectes

Has eliminat aquest trajecte dels teus trajectes

Recorda que pots gestionar els teus llocs i trajectes des de la secció Llocs i trajectes

Restablir contrasenya

Has oblidat la teva contrasenya?
Introdueix l’adreça electrònica associada al teu compte i t’enviarem un enllaç perquè puguis restablir la teva contrasenya.

Confirmes que desitges eliminar ’{0}’ dels teus favorits?

Recorda que perdràs l’alerta que et permet rebre informació de les alteracions que es produeixen en aquesta línia.

Confirmes que vols eliminar el teu compte d’usuari?

Recorda que perdràs tota la informació relativa al compte i no podràs rebre informació actualitzada ni agilitzar les teves cerques.

Confirmes que vols eliminar aquesta adreça dels teus llocs?

Recorda que perdràs la possibilitat de dur a terme cerques d’una manera més àgil amb aquest lloc

Confirmes que vols eliminar aquest trajecte dels teus trajectes?

Recorda que perdràs la possibilitat de dur a terme cerques d’una manera més àgil amb aquest trajecte

Confirmes que vols eliminar aquesta adreça dels teus llocs?

Recorda que perdràs la possibilitat de dur a terme cerques d’una manera més àgil amb aquest lloc

Confirmes que vols eliminar aquest trajecte dels teus trajectes?

Recorda que perdràs la possibilitat de dur a terme cerques d’una manera més àgil amb aquest trajecte

Confirmes que desitges eliminar ’{0}’ dels teus favorits?

Has afegit la parada ’{0}’ als teus favorits

Recorda que si també vols rebre les alteracions de circulació de la línia, cal que l’afegeixis als teus favorits.


No has activat cap alerta

Guarda llocs per agilitzar les teves cerques

Introdueix un àlies com "casa" o "feina"

Registre d'activitats d'aquest tractament

Guarda llocs per agilitzar les teves cerques

Lloc

Error

Introdueix un àlies com "casa" o "feina"

Registre d'activitats d'aquest tractament

Has afegit la parada ’{0}’ als teus favorits

Recorda que si també vols rebre les alteracions de circulació de la línia, cal que l’afegeixis als teus favorits.


No has activat cap alerta

Guarda llocs per agilitzar les teves cerques

Lloc

Error

Introdueix un àlies com "casa" o "feina"

Registre d'activitats d'aquest tractament

Guarda trajectes per agilitzar les teves cerques

Introdueix un àlies com "casa" o "feina"

Registre d'activitats d'aquest tractament

Guarda els teus llocs i trajectes per agilitzar les teves cerques

Lloc

Error

Introdueix un àlies com "casa" o "feina"

Lloc

Error

Introdueix un àlies com "casa" o "feina"

Trajecte

Des de Carrer dels Penitents 7, Barcelona

Fins a Plaça de Catalunya 4, Barcelona

Introdueix un àlies com "casa" o "feina"

Registre d'activitats d'aquest tractament

Has afegit la parada ’{0}’ als teus favorits

No s’ha pogut modificar la configuració en les notificacions.

A causa d’un problema de comunicació amb el servidor de TMB, no s’han pogut guardar els canvis duts a terme a la configuració de les notificacions. Intenta-ho més tard i disculpa les molèsties.

S’ha produït un error

A causa d’un problema de comunicació amb el servidor de TMB, no s’han pogut guardar els canvis duts a terme a la configuració de les notificacions. Intenta-ho més tard i disculpa les molèsties.

Descarrega’t TMB App

L’app que es porta