-

46ª La Cursa El Corte Inglés

¡Te explicamos cómo llegar!

Cuando: 10.05.2026


Dónde: Desde la avenida Diagonal


Si participas en la La Cursa El Corte Inglés, llega en transporte público. En TMB te llevamos.

Recomendamos acceder al punto de salida en metro, en las estaciones Maria Cristina y Palau Reial de la línea 3.

Dispones de Cómo llegar para encontrar otras opciones de transporte.

Próximamente informaremos sobre las afectaciones en el servicio de bus y las recomendaciones de transporte.

Hasta primera hora de la tarde del domingo 11 de mayo, recomendamos usar el metro como medio de transporte principal. La amplitud del recorrido y la duración la carrera provocarán alteraciones en el servicio a varias líneas de autobús.

Billete de transporte

Para esta edición, TMB ha colaborado con 30.000 billetes sencillos para la promoción del transporte público.

 

TMB, con los grandes eventos de la ciudad

Desde su primera edición en el año 1986, La Cursa El Corte Inglés es una de las más conocidas y consolidadas de la ciudad. En la edición de este año, los 40.000 corredores que participarán de forma gratuita recorrerán 10 km por las principales calles de Barcelona.

TMB, como principal operador de transporte público de Barcelona y su área metropolitana, trabaja en el impacto que una celebración de esta magnitud puede tener en la red de transporte. Además, también se involucra de forma activa con los eventos, estando presente de forma latente y colaborando a nivel logístico y de marca.

Abre La tienda TMB

Estrenamos la nueva tienda física en la estación de metro de Sagrada Familia

En la nueva tienda física en la estación de metro de Sagrada Familia (L2 y L5), TMB ha puesto a la venta una selección de productos oficiales con el objetivo de acercar a los usuarios y usuarias los valores de TMB y sus servicios de movilidad: metro, autobús, teleférico y bus turístico.

Este establecimiento se suma a la Hola Barcelona Store, en la estación de Catalunya, donde se comercializan productos sobre los servicios de transporte turístico que ofrece TMB.

¡El producto oficial de la marca TMB ya está a tu alcance!

TMB pone a la venta producto oficial de la marca para acercar los valores corporativos a la ciudadanía y transmitir el orgullo de un transporte público que es referente en Europa. El objetivo, por tanto, es ir más allá de la experiencia de viaje y convertir el transporte público en un icono urbano.

Con la apertura de La tienda TMB, Barcelona se suma a otras ciudades europeas con reconocidas marcas de sus operadores de transporte público, como Londres y Madrid.

En la tienda encontrarás camisetas, bolsas de tela, libretas y otros artículos inspirados en las redes de bus y metro. Estos productos cuentan con símbolos de la movilidad en Barcelona, como la M de metro, la B de bus, el mapa de la red del suburbano, las líneas de metro, el Teleférico de Montjuïc o el Barcelona Bus Turístic.

En esta primera fase, la tienda vende una pequeña selección de productos para testar los gustos y preferencias de los usuarios y usuarias y, a partir de ahí, se valorará la incorporación de nuevos tipos de productos al portafolio de la tienda y la apertura de nuevos establecimientos.

¡Ven a visitarnos!

Ubicación:

La tienda TMB se encuentra en el vestíbulo de la línea 5 de la estación Sagrada Família.

Horarios:

  • Laborables y sábados: de 10 a 14 h y de 16 a 20 h.
  • Vísperas de festivo: de 10 a 14 h.
  • Cerrado los domingos  los festivos inersemanales en la ciudad de Barcelona.

Un viaje inmersivo por los 100 años del metro

Vive el presente, el pasado y el futuro de la historia del metro en realidad virtual.

Cuando: 30.12.2025 a 31.03.2026


Dónde: Espacio Mercè Sala


Acceso: Validando el título de transporte

Para conmemorar el centenario del Metro de Barcelona, te invitamos a vivir una experiencia de realidad virtual multiusuario que te permitirá recorrer la historia, el presente y el futuro de la red del suburbano.

Con gafas de realidad virtual y en grupos de hasta 10 personas, revivirás cien años de metro, descubrirás las fortalezas del servicio actual e imaginarás cómo será el metro del futuro.

Esta actividad es gratuita y está dirigida a mayores de 10 años.

Antes de emprender el viaje debes saber...

Ubicación:

Espacio Mercè Sala, en la estación Diagonal.

Fechas:

La experiencia estará disponible del 30 de diciembre al 31 de marzo de 2026. 

Horario:

De lunes a domingo, de 10 a 20 h.

Información importante:

  • La duración de la actividad es de 10 minutos y se realizarán pases cada veinte minutos en grupos de 5 personas.
  • Con una sola reserva se pueden adquirir entradas para un máximo de 10 personas.
  • Una nueva solicitud de fecha anula la reserva anterior.
  • No se podrá acceder a la experiencia una vez comenzada, y será necesario gestionar una nueva reserva.

¿Qué te llevarás de esta experiencia?

  • Serás testigo de la importancia del desarrollo del transporte colectivo de metro para la evolución de una ciudad como Barcelona y su área metropolitana.
  • Conectarás con la memoria colectiva de las personas y los hitos más importantes ocurridos en la ciudad durante estos últimos cien años.
  • Descubrirás el vínculo entre la red de metro y el crecimiento de la ciudad a nivel urbanístico y poblacional, y el papel activo del metro en la cohesión del área metropolitana.
  • Conocerás más sobre la calidad de un servicio que ha sido pionero desde sus inicios.

Pruebas de idoneidad para tocar en el metro

Nueva convocatoria para los artistas aspirantes a actuar en la red del suburbano.

Cuando: 26.03.2026


Dónde: Estación Universitat


Acceso: Acceso validando el billete de transporte

Desde la Fundació TMB, la Asociación de Músicos de Calle (AMUC BCN) organizamos una edición más de estas pruebas de aptitud, en las que una cincuentena de intérpretes y formaciones serán evaluados para actuar en los puntos habilitados de la red de metro de Barcelona.

La prueba de idoneidad sigue la misma metodología de las ediciones anteriores: cada candidato deberá interpretar algunos temas escogidos al azar por los miembros del jurado a partir del repertorio presentado, formado por unas 20 canciones. El jurado valorará criterios como la calidad interpretativa y la variedad del repertorio, la originalidad y la riqueza creativa de la propuesta, así como la diversidad cultural, estilística e instrumental.

Si la evaluación del jurado es favorable, el músico obtendrá el carné de asociado de AMUC BCN y podrá participar en los proyectos de esta asociación, incluidas las actuaciones en el metro.

Día: 26 de marzo (de 9 a 20 h)
Lugar: estación Universitat (L2)

Nueva imagen de Música en el metro en su 25.º aniversario

Música en el metro busca convertir un espacio como el metro en una plataforma de promoción de nuevos talentos y de difusión de la música, y se ha convertido en todo un referente a nivel europeo.

El pasado mes de diciembre, el proyecto celebró los 25 años con una nueva identidad gráfica. El nuevo diseño presenta distintivos más grandes y visibles, con diferentes tonalidades y distintos perfiles de artistas.

La iniciativa también se rebautizó de forma más inclusiva desde la perspectiva de género: de Músicos del metro a Música en el metro

Estrenamos el mapa del metro con los puntos de música y un nuevo espacio web

Ahora, toda esta información está recogida en la sección dedicada al proyecto musical, que se ha renovado incorporando, además de la información básica del proyecto, la nueva imagen visual y un mapa de la red de puntos de música.


Actualmente, hay una cincuentena de puntos de música en la red del metro de Barcelona donde los artistas ofrecen actuaciones en directo en diferentes días de la semana. Para poder localizar los 50 puntos, se ha creado un mapa ampliable con las ubicaciones de los puntos de música en las distintas estaciones de la red de metro, disponible para descargar en dos formatos: PDF y JPG.

Día Internacional de las Mujeres en TMB

Impulsamos diversas iniciativas en torno a la presencia de la mujer en el transporte público.

Este 8 de marzo, como cada año, desde TMB hemos impulsado diversas iniciativas para destacar la presencia femenina tanto en el transporte público como en la sociedad. Las propuestas que encontrarás estos días en la red de metro se suman a todas las que desarrollamos de manera continuada.

Internamente, impulsamos el talento femenino desde la convicción de que una movilidad urbana eficiente, sostenible y segura solo es posible si también es inclusiva. Por eso trabajamos cada día para garantizar la igualdad de oportunidades y la no discriminación. Además, promovemos y potenciamos el talento de las mujeres en un sector tradicionalmente masculino con acciones de formación y sensibilización dirigidas a toda la plantilla.

Y también lo hacemos hacia afuera: trabajamos en red con entidades que nos ayudan a romper estereotipos de género y, a través de TMB Educa, impulsamos talleres que despiertan el interés por las disciplinas STEM y fomentan la diversidad con perspectiva de género.
Por todo ello, el compromiso de TMB con el Día Internacional de las Mujeres va mucho más allá de garantizar la movilidad en una jornada en la que la ciudad se tiñe de lila y las calles vibran con cánticos y consignas. TMB también forma parte del latido del 8 de marzo.

¡Descubre las propuestas que hemos preparado!

Intervención mural en la estación Espanya y en los centros de trabajo

Por un mundo en el que seamos socialmente iguales, humanamente diferentes y totalmente libres. Rosa Luxemburg (1871–1919).

Esta frase es la ganadora de la votación que la plantilla de TMB llevó a cabo en las semanas previas al 8M entre una selección de citas de célebres pensadoras feministas. Así pues, este lema de Rosa Luxemburg es el protagonista de la intervención mural que la artista Valerie Blanchard ha realizado en el pasillo de enlace entre las líneas 1 y 3 del metro en la estación de Espanya y que puedes ver a partir del 3 de marzo. La obra también tendrá presencia en los centros de trabajo de TMB.

 

Arte sonoro y visual en Passeig de Gràcia - hasta el 11 de marzo

La instalación interactiva ARS Gràcia, en la estación Passeig de Gràcia, también se suma a esta jornada, con una propuesta artística que evoca la sororidad. Cuando camines por el pasillo de enlace, déjate llevar por las luces y las melodías de los cubos, que te conducirán individualmente a formar parte de un todo. La propuesta sonora, en la que participan las voces de mujeres artistas de AMUC BCN, se inspira en dos mujeres relevantes: Susan McClary y Éliane Radigue.

 

Ante la violencia machista, ¡pide ayuda!

Cuando viajas con TMB, no estás sola. Tu seguridad es una prioridad y, entre todas y todos, podemos hacer del transporte público un espacio libre de violencias. El gesto de ayuda, utilizado internacionalmente para identificar de manera discreta a las mujeres que sufren violencia machista o que se encuentran en riesgo, puede ser determinante para activar una respuesta rápida y segura, también en espacios de movilidad como el transporte público.

Nuestros transportes están dotados de cámaras de videovigilancia tanto en la red de metro como en toda la flota de autobuses. Esto nos permite ver lo que está pasando en directo cuando un usuario pulsa el botón SOS y colaborar con las fuerzas de seguridad y los servicios de vigilancia. A efectos de seguridad, hemos mejorado la iluminación de las instalaciones de la red de metro.

Amplía la información en la página de la campaña.

 

Quiero mover el mundo

TMB se une a la campaña Quiero mover el mundo. El transporte público necesita más talento femenino, promovida por la Asociación de Transportes Públicos Urbanos Metropolitanos (ATUC).

Para visualizar este vídeo de YouTube, debes aceptar las cookies de marketing y de redes sociales. ¡Gracias!

El Maria Canals vuelve a bajar al metro

Cuando: 13.03.2026 a 25.03.2026


Dónde: Estación Diagonal


Acceso: Acceso validando el billete de transporte

La 71ª edición del Concurso Internacional de Música Maria Canals, que celebrará su sección oficial del 15 al 26 de marzo, vuelve a conectar la música con el transporte público con la instalación de un piano de media cola en el vestíbulo de la estación de metro de Diagonal de la L5 (accesos Rambla Catalunya o Rosselló / FGC).

El instrumento estará disponible para todas las personas que quieran tocarlo y, cada tarde, la estación acogerá recitales de una hora a cargo de corales y estudiantes de escuelas de música locales. En total, se ofrecerán 27 actuaciones pensadas para acercar la música a los usuarios del metro y llenar el espacio de un ambiente cultural único.

La Fundación TMB, a través del proyecto TMB Cultura, renueva un año más su colaboración tradicional con el OFF Concurso El Maria Canals porta cua, una iniciativa que instala más de un centenar de pianos de cola en espacios públicos de todo el territorio para fomentar la participación ciudadana y acercar la música al día a día.

Programación de conciertos

  • Sábado 14 de marzo
    • 11 - 13 h: Conservatori de Badalona
    • 19 - 20 h: Cor La Nau

 

  • Domingo 15 de marzo
    • 18 - 19 h: Associació Musical Músics de Gràcia y Giravolt

Lunes 16 de marzo

  • 18 - 19 h: Escola de Música Alegrededaltalt

 

  • Martes 17 de marzo
    • 14 - 15 h: Joan Carles (Música en el Metro)
    • 16 - 17 h: Conservatori Superior del Liceu

 

  • Miércoles 18 de marzo
    • 16 - 17 h: Conservatori Superior del Liceu
    • 18 - 19 h: Estudi Musical 143

 

  • Jueves 19 de marzo
    • 16 - 17 h: Conservatori Superior del Liceu
    • 18 - 19 h: EM Vibrant Barcelona
    • 20 - 21 h: Cor Roig Korai

 

  • Viernes 20 de marzo
    • 14.30 - 15.30 h: Cor Facultat Geografia i Història de la UB
    • 16 - 17 h: Conservatori Superior del Liceu
    • 19 - 20 h: Cor Gospel Optometrist

 

  • Sábado 21 de marzo
    • 18 - 19 h: Academia Marshall

 

  • Domingo 22 de marzo
    • 18 - 19 h: EM Ritme i So
    • 19 - 20 h: Cor Coral·lí

 

  • Lunes 23 de marzo
    • 16 - 17 h: Conservatori Superior del Liceu
    • 18 - 19 h: EM Academia Tort
    • 19 - 20 h: Cor Som Veus

 

  • Martes 24 de marzo
    • 11 - 12 h: Joan Carles (Música en el Metro)
    • 16 - 17 h: Conservatori Superior del Liceu
    • 20.30 - 21.30 h: Cor Twocats

 

  • Miércoles 25 de marzo
    • 16-17 h: Conservatori Superior del Liceu
    • 18-19 h: Cor Koralia BCN
    • 19 - 20 h: Cor Més enllà de la veu

Dos pianos en la estación durante quince días

El piano de media cola de esta edición 2026 se suma al piano de pared que ya está instalado en la misma estación de forma permanente desde la edición de 2025 y que invita a los pasajeros a aceptar el reto de detenerse, sentarse y hacer sonar sus teclas los 365 días del año.

Infórmate.

Zurich Marató Barcelona

¡Te explicamos cómo llegar!

Cuando: 15.03.2026


Dónde: Desde el Passeig de Gràcia


Si participas en la Zurich Marató Barcelona, llega en transporte público. En TMB te llevamos.

Recomendamos acceder al punto de salida en metro en las estaciones Catalunya (L1 y L3) y Passeig de Gràcia (L2, L3 y L4). También tienes la opción de llegar en FGC.

Dispones de la funcionalidad Cómo llegar para encontrar otras opciones de transporte.

Infórmate sobre las afectaciones al servicio de bus y las recomendaciones de transporte en el aviso de servicio específico.

Hasta primera hora de la tarde del domingo 15 de marzo, recomendamos usar el metro como medio de transporte principal. La amplitud del recorrido de la Maratón y la duración de la carrera provocarán alteraciones en el servicio de unas sesenta líneas de bus.

TMB, con los grandes eventos de la ciudad

La Zurich Maratón Barcelona es una de las carreras más importantes que se celebran anualmente en la ciudad.

Para esta edición, se han editado 32.000 billetes sencillos, que se incluyen en la bolsa del corredor.

TMB, como principal operador de transporte público de Barcelona y su área metropolitana, trabaja en el impacto que una celebración de esta magnitud puede tener en la red de transporte. Además, también se involucra de forma activa con los eventos, estando presente de forma latente y colaborando a nivel logístico y de marca.

¡Llega a la carrera a tiempo y sin sorpresas con TMB App!

Con TMB App tienes acceso a rutas y opciones de transporte público y bicicleta, puedes gestionar la T-mobilitat y hacer todas las consultas necesarias para organizar tus trayectos por Barcelona y su área metropolitana. Además, te permite revisar de manera ágil el estado de las líneas y paradas que más utilizas y localizar las estaciones y paradas cercanas gracias al nuevo escáner ddTag incorporado.

                                                          

 

¡Ven a tocar el piano a Diagonal!

Acogemos un piano de forma fija y acercamos la música a los usuarios.

Cuando: Desde 23.03.2025


Dónde: Estación Diagonal


Acceso: Acceso validando el billete de transporte

Transports Metropolitans de Barcelona (TMB), a través de su Fundación, colabora anualmente con el prestigioso Concurso de Piano Maria Canals.

En la edición de 2025 se celebraron los 70 años del concurso con una exposición bajo el título Maria Canals, un concurso con alma y el Centenario del metro. Aprovechando ambas celebraciones, las dos entidades iniciaron la experiencia de poner un piano en el vestíbulo de la L5 de la estación Diagonal.

Frente al Espacio Mercè Sala se instaló un piano de pared, que se ha mantenido de manera permanente.

Acercamos la música a todos los usuarios y usuarias

El piano invita a los pasajeros a aceptar el reto de detenerse, sentarse y hacer sonar sus teclas. 

 

Se ha producido un error al procesar 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> 

En el metro, viaja con tu perro con responsabilidad

Te informamos de cómo viajar correctamente con tu perro, por su seguridad y por la del resto de usuarios.

Cuando viajes con tu perro en el metro, recuerda llevarlo siempre atado con una correa no extensible a una distancia inferior a 50 cm de ti, y equipado con bozal.

También es importante que, por su seguridad, no lo subas por las escaleras mecánicas, ya que podría sufrir un accidente. Utilizad siempre las escaleras fijas.

Te informamos de todos los detalles.

Viajad en las franjas horarias permitidas

  • Los perros pueden acceder al metro de 5:00 a 7:00 h, de 9:00 a 17:00 h y a partir de las 19:30 h en los días laborables entre el 11 de septiembre y el 24 de junio.
  • Los fines de semana, los festivos y todos los días del periodo estival (comprendido entre el 24 de junio y el 11 de septiembre), pueden acceder sin limitación horaria.
  • En momentos de gran aglomeración de personas y cuando la seguridad de los usuarios y de los propios animales lo requiera, TMB puede limitar la admisión de los perros.

Antes de viajar con tu perro debes saber...

  • La persona responsable del comportamiento del animal es quien lo lleva. Por lo tanto, debes asegurarte de que no se produzca ninguna situación de peligro o molestia para el resto de usuarios. También debes evitar obstruir los pasillos o las puertas, tanto en los vestíbulos y pasillos como en los trenes.
  • La persona que lleva al perro es responsable de los daños o perjuicios que este pueda causar, tanto a los usuarios como a la empresa. La persona propietaria del perro es responsable subsidiaria.
  • Si no se respetan las condiciones establecidas para el acceso de perros al metro, la persona que lo lleva puede incurrir, según las circunstancias, en una infracción grave o leve, de conformidad con los artículos 64.s) o 65.p) de la Ley 4/2006, de 31 de marzo, ferroviaria.
  • Los perros solo pueden usar los ascensores y las escaleras fijas. 
  • No se permite que ocupen asientos.

Viajar con tu perro es tu responsabilidad

  • La persona responsable de la actitud del animal es la persona que lo lleva. Por tanto, debes vigilar que no se produzca ninguna situación de peligro o de molestia al resto de usuarios. También debes evitar obstruir los pasajes o las puertas tanto en los vestíbulos y pasillos como en los trenes. 
  • La persona que lleva al perro es la responsable de los daños o perjuicios que el perro pueda ocasionar tanto a los usuarios como a la empresa. La persona propietaria del perro es responsable subsidiaria. 
  • Si no se respetan las condiciones establecidas para el acceso de perros al metro, la persona que lo lleva puede cometer, según las circunstancias, una infracción grave o leve, de conformidad con los artículos 64.s) o 65.p) de la Ley 4/2006, de 31 de marzo, ferroviaria.

Hyundai Mitja Marató Barcelona

¡Te explicamos cómo llegar!

Cuando: 15.02.2026


Dónde: Parc de la Ciutadella


Si participas en la Hyundai Mitja Marató Barcelona, llega con transporte público. En TMB te llevamos.

Recomendamos acceder al punto de salida en metro. Puedes hacerlo desde las estaciones Arc de Triomf (L1) y Ciutadella - Vila Olímpica (L4).

Conoce las afetaciones en el servicio de bus en el aviso específico.

Consulta Cómo llegar para otras opciones de transporte.

¡Importante! Ten en cuenta que las carreras de gran magnitud ocasionan afectaciones al transporte de superficie de la ciudad. Consulta el estado de la red de transporte público antes de salir de casa.

TMB, con los grandes eventos de la ciudad

La Hyundai Mitja Marató Barcelona, es una de las carreras más importantes que se celebran anualmente en la ciudad.

Para esta edición, se han editado 36.000 billetes sencillos, que se incluyen en la bolsa del corredor.

TMB, como principal operador de transporte público de Barcelona y su área metropolitana, trabaja en el impacto que una celebración de esta magnitud puede tener en la red de transporte. Además, también se implica de forma activa con los eventos, estando presente de forma latente y colaborando a nivel logístico y de marca.

 

¡Llega a la carrera a tiempo y sin sorpresas con TMB App!

Con TMB App tienes acceso a rutas y opciones de transporte público y bicicleta, puedes gestionar la T-mobilitat y hacer todas las consultas necesarias para organizar tus trayectos por Barcelona y su área metropolitana. Además, te permite revisar de manera ágil el estado de las líneas y paradas que más utilizas y localizar las estaciones y paradas cercanas gracias al nuevo escáner ddTag incorporado.

                                                          


 

Siempre estamos

El metro y los buses cuentan con cámaras de videovigilancia en tiempo real para que viajes con seguridad.

Gracias a los sistemas de videovigilancia, los profesionales de TMB velan por tu seguridad durante todas las horas del servicio, tanto en metro como en bus.

Videovigilancia en el metro

La red de metro cuenta con casi 10.000 cámaras que están repartidas por trenes y estaciones y también en cocheras, talleres y otras dependencias de TMB.

Estas cámaras permiten ver lo que está sucediendo en directo cuando un usuario pulsa el botón SOS o el de información en un tren o en una estación. Las imágenes captadas por estos dispositivos de videovigilancia se reciben en el Centro de Control de Metro y en el Centro de Seguridad y Protección Civil.

Videovigilancia en el bus

La red de bus dispone de más de 4.500 cámaras que actualmente cubren prácticamente todo el servicio regular de la flota.

Este sistema de videovigilancia permite al Centro de Control de Seguridad de Bus visualizar en tiempo real imágenes del interior de los vehículos, así como descargar al momento cualquiera de las grabaciones.

Imágenes a disposición de los cuerpos de seguridad

Las imágenes captadas por estos dispositivos de videovigilancia, tanto de la red de bus como la de metro, quedan grabadas y pueden ser revisadas cuando los Mossos d'Esquadra u otros cuerpos de seguridad lo requieran.

En las escaleras mecánicas evita accidentes

Seguir las normas de uso es fundamental para garantizar la seguridad propia y la de los demás

Cómo utlitzar correctamente las escaleras mecánicas

En la red de metro de TMB, los accidentes por atrapamiento en escaleras mecánicas son uno de los peligros más habituales, especialmente si no se toman las precauciones adecuadas.

Las escaleras mecánicas del metro nos ayudan a movernos más rápidamente, mejoran la accesibilidad y facilitan la movilidad en horas de máxima afluencia. Sin embargo, su uso incorrecto genera situaciones peligrosas que ponen en riesgo la seguridad de todos los usuarios.

Travel carefully and avoid damage

Las incidencias por atrapamiento en escaleras mecánicas en la red de metro suelen producirse accidentalmente al invadir la zona amarilla de los peldaños. Objetos como el propio calzado o la ropa de los usuarios quedan atrapados, pero también hay otros accidentes que pueden ser muy graves y que son fruto de un mal uso de las instalaciones: acciones como utilizar las escaleras con perros sin llevarlos en brazos están totalmente prohibidas, o acceder con objetos grandes como maletas, cochecitos de bebé o carros de la compra que invaden la zona amarilla señalizada, pueden obstruir el mecanismo de las escaleras y aumentar no solo el riesgo de atrapamientos, sino también de caídas.

Es importante que sigas las normas básicas y que antes de subir a las escaleras compruebes que no llevas nada que pueda quedar atrapado en los laterales o en las esquinas de los peldaños, como bolsos grandes, cinturones, ropa voluminosa, vestidos o túnicas largas, bufandas y similares. Y si vas con tu perro, recuerda: sube por las escaleras de piedra, no solo por tu seguridad, sino por la seguridad de tu mascota.

Evita el riesgo de accidente en las puertas del metro

Prohibido entrar o salir desde el inicio del aviso sonoro o luminoso de cierre de puertas.

Cuando se inicia el aviso de cierre de puertas en el metro, es una señal clara de que debemos detenernos y actuar con precaución. Respetarlo no es opcional, sino imprescindible para garantizar la seguridad de todos los viajeros.

Las personas que intentan entrar o salir del vagón en el último segundo se exponen al riesgo de quedar atrapadas entre las puertas y sufrir accidentes graves. Además, pueden provocar afectaciones en la circulación de los trenes, ya que un retraso por culpa de una puerta bloqueada puede generar una reacción en cadena que afecte a todo el servicio.

Cuando hacemos caso a los avisos, ayudamos a mantener la fluidez del transporte público y evitamos accidentes que podrían afectar a decenas de personas. La seguridad comienza por uno mismo.

Cuando oigas o veas el aviso de cierre de puertas, detente

  • No sostengas las puertas cuando se estén cerrando.
  • No te apoyes en las puertas.
  • Presta atención a la distancia entre el andén y el tren. 
  • Deja salir antes de entrar a los vagones.

Ante la violencia machista, ¡pide ayuda!

Te explicamos cómo pedir ayuda cuando te encuentres con situaciones machistas en los transportes de TMB.

Cómo pedir ayuda en el metro y en el bus

El gesto de ayuda, utilizado internacionalmente para identificar de manera discreta a las mujeres que sufren violencia machista o que se encuentran en riesgo, puede ser determinante para activar una respuesta rápida y segura, también en espacios de movilidad como el transporte público.

  • Cuando viajes en metro, tienes a tu alcance los botones SOS dentro de todas las instalaciones. También puedes dirigirte a los Puntos TMB y contactar directamente con nuestro personal, que está preparado para ayudarte.
  • En tus trayectos en bus, si te encuentras ante una situación de violencia machista, avisa inmediatamente a nuestro personal, que activará el protocolo de asistencia.

Recuerda que siempre puedes llamar directamente al número de emergencias 112 o a los servicios de atención 24h contra la violencia machista: 900 900 120 y 016.

 

Cuando viajas con TMB, no estás sola

Nuestros transportes están dotados de cámaras de videovigilancia tanto en la red de metro —con casi 10.000 cámaras— como en toda la flota de autobuses, una medida que permite ver lo que está ocurriendo en directo cuando un usuario pulsa el botón SOS en un vehículo o en una estación, así como colaborar con las fuerzas de seguridad y los servicios de vigilancia.

Por motivos de seguridad, hemos mejorado la iluminación de las instalaciones de la red de metro. También formamos a nuestro personal para atenderte cuando lo necesites. Actuamos bajo el lema #xarxavioleta y aplicamos una política de tolerancia cero frente a las violencias machistas.

No lo dudes y pide ayuda. ¡Alza la voz contra la violencia machista!

Tu seguridad es una prioridad y, entre todas y todos, podemos hacer del transporte público un espacio libre de violencias.

En TMB, tolerancia cero ante las conductas de violencia machista

En TMB trabajamos para prevenir y actuar ante cualquier situación de violencia machista. Como compañía responsable, estamos al lado de las víctimas y nos posicionamos firmemente contra cualquier persona agresora. Al mismo tiempo, apelamos a la respuesta de la ciudadanía, porque todas y todos somos necesarios en la lucha contra las violencias machistas y la seguridad es una corresponsabilidad colectiva.

Decálogo de TMB para la prevención de las violencias machistas:

  1. TMB manifiesta su firme compromiso por la igualdad real y efectiva entre hombres y mujeres.
  2. TMB se obliga a promover un comportamiento respetuoso y tranquilo en las redes de transporte público, fomentando una convivencia pacífica entre las personas usuarias.
  3. TMB se compromete a adoptar las medidas adecuadas para evitar cualquier forma de discriminación por razón de sexo sobre las personas usuarias de sus redes de transporte.
  4. TMB declara su absoluto rechazo hacia cualquier comportamiento contrario a la libertad, la dignidad y la integridad física y psíquica de las personas usuarias, así como de cualquier otra persona vinculada a las redes de transporte público.
  5. TMB confirma su intención de seguir desarrollando acciones de sensibilización y concienciación para combatir cualquier manifestación ofensiva hacia el sexo de las personas durante la experiencia de viaje.
  6. TMB expresa su contundente desaprobación de gestos, miradas e insinuaciones de forma lasciva o intimidatoria entre personas usuarias del metro o de los autobuses, con independencia de su aspecto físico o vestimenta.
  7. TMB apuesta por la escucha activa de todas aquellas mujeres que se sientan acosadas sexualmente o por razón de su sexo, así como de aquellas que tengan indicios de este tipo de conductas no deseadas.
  8. TMB reafirma su voluntad de seguir reforzando las acciones preventivas y de abordaje de las violencias machistas para proteger a las mujeres usuarias de las redes de metro y autobuses.
  9. TMB explicita su voluntad de trabajar conjuntamente con los agentes y autoridades competentes para la elaboración de un protocolo de actuación contra las violencias machistas, a fin de asegurar que las redes de transporte público sean entornos de movilidad seguros, respetuosos y confortables para todas las personas.
  10. TMB asume la responsabilidad de dar a conocer por todas las vías posibles el contenido de este documento y su finalidad.
Se ha producido un error al procesar 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> 
Se ha producido un error al procesar 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> 
Se ha producido un error al procesar 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> 

Estrenamos la nueva línea X3 Paral·lel - L'Hospitalet (Av. Carrilet)

A partir del 26 de mayo, estrena la nueva línea que se incorpora a XPRESBus

Más rápida, mejor conectada y más directa

  • Una línea más rápida: con la línea de bus X3 XPRESBus Paral·lel - L'Hospitalet (Avda. Carrilet) de TMB ahorras tiempo, porque hace recorridos más ágiles, con una frecuencia de 20 minutos en laborables y 30 minutos en festivos.
  • Mejor conectada: aumentamos la conectividad entre Hospitalet y Barcelona con esta línea, ya que en el Paral·lel se puede enlazar con las líneas 2 y 3 de metro. Además, el X3 XPRESBus circula por zonas con menos aglomeración de tráfico, mejorando notablemente la movilidad del barrio de La Marina del Prat Vermell.
  • Más directa: la X3 XPRESBus te lleva directamente del Paral·lel a L'Hospitalet pasando por la montaña de Montjuïc, manteniendo la conexión con la Plaza de España.

XPRESBus

Trabajamos en la ampliación de la red de buses de TMB incorporando una nueva línea XPRESBus a las dos que actualmente ya están en servicio, así como a las líneas de proximidad, las convencionales y las de altas prestaciones.

XPRESBus es un concepto de líneas que nació en 2021 con el fin de ofrecer recorridos más rápidos y ágiles, mejorando conexiones y con buses sostenibles

Las líneas XPRESBus se identifican por el color negro, a diferencia del resto de líneas.

La primera línea de estas características fue la X1, que entró en servicio en septiembre de 2021 y conecta la plaza Francesc Macià con Glòries. La X2 - Prat XPRES, que conecta El Prat y Barcelona, entró en servicio en octubre de 2024.

Ahora damos un paso más: con la nueva línea X3 XPRESBus conectamos de la forma más rápida la zona de la Av. Carrilet de Hospitalet y el centro de Barcelona, ​​en el Paral·lel.

¡Estrenála a partir del 26 de mayo!

Infórmate en la página del proyecto de XPRESBus.

Se ha producido un error al procesar 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> 
Volver arriba

¿Confirmas que quieres eliminar '{0}' de tus favoritos?

Recuerda que perderás la alerta que te permite recibir información de las alteraciones que se producen en esta línea

Has añadido la línea '{0}' a tus favoritos

Puedes activar una alerta para recibir en tu correo electrónico o en el móvil la información actualizada sobre las alteraciones programadas para esta línea:

No has activado ninguna alerta

¿Confirmas que quieres desactivar las alertas de tus favoritos?

Esta acción silenciará temporalmente todas las alertas que tienes configuradas, hasta que decidas volverlas a activar.

Has añadido la parada '{0}' a tus favoritos

Cambia el nombre de la parada para identificarla más fácilmente

Puedes activar una alerta para recibir en tu correo electrónico o en el móvil la información actualizada sobre las alteraciones programadas para esta línea::

No has activado ninguna alerta

Registrarse

Regístrate ahora y disfruta de todas las ventajas de JoTMBé

  • Una experiencia web personalizada

  • Configura alertas para tus líneas, paradas y estaciones favoritas

  • Agiliza tus búsquedas mediante tus sitios y trayectos

  • Gana premios y recompensas con el Programa de Puntos

O bien introduce tus datos

Contraseña muy débil

Contraseña débil
Contraseña básica
Contraseña segura
Contraseña muy segura
Requisitos mínimos de tu contraseña:
- Debe contener un mínimo de 8 caracteres
- Debe ser distinta del nombre de usuario
- Debe ser poco habitual, no vulnerable

¡Ya casi está! Confirma tu dirección de correo electrónico

Confirma tu dirección de correo electrónico

Hemos enviado un correo electrónico a la dirección para que puedas activar tu cuenta de usuario.

¿No lo has recibido?
Vuelve a enviar el correo electrónico

Condiciones del servicio

¿Ya tienes cuenta? Inicia la sesión

Todavía no has elegido ninguna contraseña. Hemos enviado un correo electrónico a emaildeusuari@gmail.com a través del cual podrás hacerlo.

Has configurado una alerta

Recuerda que puedes gestionar las alertas desde la sección Mis favoritos

label.jotmbe.modal.confirm-a2.title

Si también quieres recibir las alteraciones de circulación de la línea, debes añadirla a tus favoritos
Recuerda que puedes gestionar las alertas desde las sección tus favoritos

Has eliminado la {0} '{1}' de tus favoritos

Recuerda que puedes gestionar las alertas desde la sección Mis favoritos

Has eliminado tu cuenta de usuario

Has modificado tu perfil

Has modificado tus datos de acceso

Recuerda que la próxima vez que accedas a JoTMBé deberás hacerlo con los datos nuevos

Te hemos enviado un correo electrónico para restablecer la contraseña a la dirección de correo electrónico {0}.

Has modificado tu contraseña de acceso

Ya estás registrado como usuario nuevo de JoTMBé

Ya puedes guardar lugares y trayectos y añadir líneas, paradas y estaciones como favoritas. Así ganarás agilidad a la hora de realizar tus búsquedas y recibirás solo aquella información que te interesa.

Has eliminado esta dirección de tus lugares

Recuerda que puedes gestionar tus sitios y trayectos desde la sección Lugares y trayectos

Has eliminado este trayecto de tus trayectos

Recuerda que puedes gestionar tus sitios y trayectos desde la sección Lugares y trayectos

Restablecer la contraseña

¿Has olvidado tu contraseña?
Introduce la dirección de correo electrónico asociada a tu cuenta y te mandaremos un enlace para que puedas restablecer tu contraseña

¿Confirmas que quieres eliminar '{0}' de tus favoritos?

Recuerda que perderás la alerta que te permite recibir información de las alteraciones que se producen en esta línea

¿Confirmas que quieres eliminar tu cuenta de usuario?

Recuerda que perderás toda la información relacionada con tu cuenta y no podrás recibir información actualizada ni agilizar tus búsquedas

¿Confirmas que quieres eliminar esta dirección de tus lugares?

Recuerda que perderás la posibilidad de realizar búsquedas de una forma más ágil con este lugar

¿Confirmas que quieres eliminar este trayecto de tus trayectos?

Recuerda que perderás la posibilidad de realizar búsquedas de una forma más ágil con este trayecto

¿Confirmas que quieres eliminar esta dirección de tus lugares?

Recuerda que perderás la posibilidad de llevar a cabo búsquedas de una forma más ágil con este lugar

¿Confirmas que quieres eliminar este trayecto de tus trayectos?

Recuerda que perderás la posibilidad de llevar a cabo búsquedas de una forma más ágil con este trayecto

¿Confirmas que quieres eliminar '{0}' de tus favoritos?

Has añadido la parada ’{0}’ a tus favoritos

Recuerda que si también quieres recibir las alteraciones de circulación de la línea, debes añadirla a tus favoritos.


No has activado ninguna alerta

Guarda lugares para agilizar tus búsquedas

Introduce un alias como "casa" o "trabajo"

Registro de actividades de este tratamiento

Guarda lugares para agilizar tus búsquedas

Lugar

Error

Introduce un alias como "casa" o "trabajo"

Registro de actividades de este tratamiento

Has añadido la parada ’{0}’ a tus favoritos

Recuerda que si también quieres recibir las alteraciones de circulación de la línea, debes añadirla a tus favoritos.


No has activado ninguna alerta

Guarda lugares para agilizar tus búsquedas

Lugar

Error

Introduce un alias como "casa" o "trabajo"

Registro de actividades de este tratamiento

Guarda trayectos para agilizar tus búsquedas

Introduce un alias como "casa" o "trabajo"

Registro de actividades de este tratamiento

Guarda tus lugares y trayectos para agilizar tus búsquedas

Lugar

Error

Introduce un alias como "casa" o "trabajo"

Lugar

Error

Introduce un alias como "casa" o "trabajo"

Trayecto

Desde Carrer dels Penitents 7, Barcelona

Hasta Plaça de Catalunya 4, Barcelona

Introduce un alias como "casa" o "trabajo"

Registro de actividades de este tratamiento

Has añadido la parada ’{0}’ a tus favoritos

No se ha podido modificar la configuración en las notificaciones.

Debido a un problema de la comunicación con el servidor de TMB, no se han podido guardar los cambios realizados en la configuración de las notificaciones. Inténtalo más tarde y disculpa las molestias.

Se ha producido un error

Debido a un problema de la comunicación con el servidor de TMB, no se han podido guardar los cambios realizados en la configuración de las notificaciones. Inténtalo más tarde y disculpa las molestias.

Descárgate TMB App

La app que se lleva