Publications Office of the EU
April 2024 - TED reusers workshops
DisplayCustomHeader
Издател на активи
Възникна грешка при обработка на шаблона.
The following has evaluated to null or missing:
==> entry.getAssetRenderer().getArticle  [in template "10157#10197#11339629" at line 16, column 46]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign docXml = saxReaderUtil.read(e...  [in template "10157#10197#11339629" at line 16, column 9]
----
1<#assign liferay_ui = PortletJspTagLibs["/META-INF/liferay-ui.tld"] />  
2<#assign liferay_portlet = PortalJspTagLibs["/META-INF/liferay-portlet-ext.tld"] /> 
3 
4<#assign finalEntries = [] /> 
5<#assign entriesBySessionTheme = [] /> 
6<#assign entriesByDateAndTrack = [] /> 
7<#assign entriesByDateAndTrackOrdered = [] /> 
8<#assign lastDate = "1900-01-01" /> 
9<#assign lastTrack = '' /> 
10<#assign lastST = '' /> 
11<#assign lastT = '' /> 
12 
13<#list entries as entry> 
14	<#assign entry = entry /> 
15 
16	<#assign docXml = saxReaderUtil.read(entry.getAssetRenderer().getArticle().getContent()) /> 
17	 
18	<#assign track = docXml.valueOf("//dynamic-element[@name='Track']/dynamic-content/text()") /> 
19	<#assign sessionDate = docXml.valueOf("//dynamic-element[@name='Dateey1h']/dynamic-content/text()") /> 
20	<#assign sessionTheme = docXml.valueOf("//dynamic-element[@name='SessionTheme']/dynamic-content/text()") /> 
21	<#assign time = docXml.valueOf("//dynamic-element[@name='Time']/dynamic-content/text()") /> 
22	<#assign contentHTML = docXml.valueOf("//dynamic-element[@name='ContentHTML']/dynamic-content/text()") /> 
23	<#assign longDescription = docXml.valueOf("//dynamic-element[@name='LongDescription']/dynamic-content/text()") /> 
24	<#assign locationURL = docXml.valueOf("//dynamic-element[@name='LocationURL']/dynamic-content/text()") /> 
25	 
26	 
27	<#assign trackOrder = docXml.valueOf("//dynamic-element[@name='TrackOrder']/dynamic-content/text()") /> 
28	<#assign parallelTracks = docXml.valueOf("//dynamic-element[@name='ParallelTracks']/dynamic-content/text()") /> 
29	<#assign sessionThemeOrder = trackOrder + docXml.valueOf("//dynamic-element[@name='SessionThemeOrder']/dynamic-content/text()") /> 
30	<#assign displaySessionThemeName = docXml.valueOf("//dynamic-element[@name='DisplaySessionThemeName']/dynamic-content/text()") />  
31	<#assign displayTime = docXml.valueOf("//dynamic-element[@name='DisplayTime']/dynamic-content/text()") /> 
32	<#assign displayTrackName = docXml.valueOf("//dynamic-element[@name='DisplayTrackName']/dynamic-content/text()") /> 
33	<#assign timeReplacementBadge = docXml.valueOf("//dynamic-element[@name='TimeReplacementBadge']/dynamic-content/text()") /> 
34	<#assign sessionType = docXml.valueOf("//dynamic-element[@name='SessionType']/dynamic-content/text()") /> 
35	<#assign sessionTitle = docXml.valueOf("//dynamic-element[@name='SessionTitle']/dynamic-content/text()") /> 
36	<#assign locationURLLabel = docXml.valueOf("//dynamic-element[@name='LocationURLLabel']/dynamic-content/text()") /> 
37	 
38	<#assign participantName = docXml.valueOf("//dynamic-element[@name='ParticipantName']/dynamic-content/text()") /> 
39	<#assign participantJobTitle = docXml.valueOf("//dynamic-element[@name='ParticipantJobTitle']/dynamic-content/text()") /> 
40	<#assign participantPhoto = docXml.valueOf("//dynamic-element[@name='ParticipantPhoto']/dynamic-content/text()") /> 
41	 
42	 
43	<#assign participantList = docXml.selectNodes("//dynamic-element[@name='ParticipantNameFieldSet']")  />  
44		 
45	<#assign itr = 1  />  
46	 
47	<#assign participants = [] /> 
48	<#assign participantName = [] /> 
49	<#assign participantJobTitle = [] /> 
50	<#assign participantPhoto = [] /> 
51	<#list participantList as participant> 
52		<#assign participantNameVal = participant.valueOf("//dynamic-element[@name='ParticipantNameFieldSet']["+itr+"]/dynamic-element[@name='ParticipantName']/dynamic-content/text()") /> 
53		<#assign participantName = participantName + [{ 
54			"participantNameVal":participantNameVal, 
55			"indexParticipant":itr 
56			}] />	 
57		 
58		<#assign participantJobTitleVal = "" /> 
59		<#assign participantJobTitleVal = participant.valueOf("//dynamic-element[@name='ParticipantNameFieldSet']["+itr+"]/dynamic-element[@name='ParticipantJobTitle']/dynamic-content/text()") /> 
60		<#if participantPhotoVal?has_content> 
61			<#assign participantJobTitle = participantJobTitle + [{ 
62			"participantJobTitleVal":participantJobTitleVal, 
63			"indexParticipant":itr 
64			}] />	 
65		</#if> 
66		 
67		<#assign participantPhotoVal = participant.valueOf("//dynamic-element[@name='ParticipantNameFieldSet']["+itr+"]/dynamic-element[@name='ParticipantPhoto']/dynamic-content/text()") /> 
68		<#assign urlJsonBannerImg = ""> 
69		<#if participantPhotoVal?has_content> 
70			<#assign jsonParticipantPhotoImg = jsonFactoryUtil.createJSONObject(participantPhotoVal)> 
71			<#if jsonParticipantPhotoImg.groupId?has_content && jsonParticipantPhotoImg.fileEntryId?has_content && jsonParticipantPhotoImg.name?has_content && jsonParticipantPhotoImg.uuid?has_content> 
72				<#assign urlJsonBannerImg = "/documents/"+ jsonParticipantPhotoImg.groupId +"/" +jsonParticipantPhotoImg.fileEntryId +"/"+ jsonParticipantPhotoImg.name +"/"+jsonParticipantPhotoImg.uuid > 
73			</#if> 
74		</#if> 
75		<#assign participantPhoto = participantPhoto + [{ 
76			"participantPhotoVal":urlJsonBannerImg, 
77			"indexParticipant":itr 
78		}] /> 
79		 
80		<#assign participants = participants + [{ 
81			"participantNameVal":participantNameVal, 
82			"participantJobTitleVal":participantJobTitleVal, 
83			"participantPhotoVal":urlJsonBannerImg, 
84			"indexParticipant":itr 
85			}] />	 
86 
87		<#assign itr = itr + 1  />  
88	</#list> 
89	 
90	 
91	<#assign buttonsLinksHTML = docXml.valueOf("//dynamic-element[@name='ButtonsLinksHTML']/dynamic-content/text()") /> 
92	 
93	<#assign entriesByDateAndTrackOrdered = entriesByDateAndTrackOrdered + [{ 
94		"sessionDate":sessionDate,  
95		"track":track,  
96		"sessionTheme":sessionTheme,  
97		"time":time,  
98		"contentHTML":contentHTML,  
99		"longDescription":longDescription,  
100		"locationURL":locationURL,  
101		"trackOrder":trackOrder,  
102		"parallelTracks":parallelTracks,  
103		"sessionThemeOrder":sessionThemeOrder,  
104		"displaySessionThemeName":displaySessionThemeName,  
105		"displayTime":displayTime,  
106		"timeReplacementBadge":timeReplacementBadge, 
107		"sessionType":sessionType,  
108		"sessionTitle":sessionTitle,  
109		"locationURLLabel":locationURLLabel,  
110		"participants":participants, 
111		"buttonsLinksHTML":buttonsLinksHTML, 
112		"displayTrackName":displayTrackName 
113		}] /> 
114	 
115 
116	<#assign lastDate = sessionDate /> 
117	<#assign lastTrack = track /> 
118	<#assign lastST = sessionTheme /> 
119	<#assign lastT = time /> 
120</#list> 
121<#assign entriesByDateAndTrackOrdered = entriesByDateAndTrackOrdered + [ 
122		{"sessionDate":sessionDate, "track":track, "sessionTheme":sessionTheme, "time":time, 
123		"contentHTML":"control",  
124		"longDescription":"control",  
125		"locationURL":"control",  
126		"trackOrder":"control", "parallelTracks":parallelTracks, "sessionThemeOrder":"control", "displaySessionThemeName":displaySessionThemeName, "displayTime":displayTime, "timeReplacementBadge":timeReplacementBadge, 
127		"sessionType":sessionType, "sessionTitle":sessionTitle, "locationURLLabel":locationURLLabel,  
128		"participants":participants, "buttonsLinksHTML":buttonsLinksHTML, 
129		"displayTrackName":displayTrackName} 
130			 
131	]  /> 
132<#assign entriesByDateAndTrackOrdered = entriesByDateAndTrackOrdered + [ 
133		{"sessionDate":sessionDate, "track":track, "sessionTheme":sessionTheme, "time":"control", "contentHTML":"control", 
134		"longDescription":"control",  "locationURL":"control",  
135		"trackOrder":"control", "parallelTracks":parallelTracks, "sessionThemeOrder":"control", "displaySessionThemeName":displaySessionThemeName, "displayTime":displayTime, "timeReplacementBadge":timeReplacementBadge, 
136		"sessionType":sessionType, "sessionTitle":sessionTitle, "locationURLLabel":locationURLLabel,   
137		"participants":participants, "buttonsLinksHTML":buttonsLinksHTML, 
138		"displayTrackName":displayTrackName} 
139			 
140	]  /> 
141<#assign entriesByDateAndTrackOrdered = entriesByDateAndTrackOrdered + [ 
142		{"sessionDate":sessionDate, "track":track, "sessionTheme":"control", "time":"control", "contentHTML":"control", 
143		"longDescription":"control",  "locationURL":"control",  
144		"trackOrder":"control", "parallelTracks":parallelTracks, "sessionThemeOrder":"control", "displaySessionThemeName":displaySessionThemeName, "displayTime":displayTime, "timeReplacementBadge":timeReplacementBadge, 
145		"sessionType":sessionType, "sessionTitle":sessionTitle, "locationURLLabel":locationURLLabel,   
146		"participants":participants, "buttonsLinksHTML":buttonsLinksHTML, 
147		"displayTrackName":displayTrackName} 
148			 
149	]  /> 
150<#assign entriesByDateAndTrackOrdered = entriesByDateAndTrackOrdered + [ 
151		{"sessionDate":sessionDate, "track":"control", "sessionTheme":"control", "time":"control", "contentHTML":"control", 
152		"longDescription":"control",  "locationURL":"control",  
153		"trackOrder":"control", "parallelTracks":parallelTracks, "sessionThemeOrder":"control", "displaySessionThemeName":displaySessionThemeName, "displayTime":displayTime, "timeReplacementBadge":timeReplacementBadge, 
154		"sessionType":sessionType, "sessionTitle":sessionTitle, "locationURLLabel":locationURLLabel,   
155		"participants":participants, "buttonsLinksHTML":buttonsLinksHTML, 
156		"displayTrackName":displayTrackName} 
157			 
158	]  /> 
159<#assign entriesByDateAndTrackOrdered = entriesByDateAndTrackOrdered + [ 
160		{"sessionDate":"control", "track":"control", "sessionTheme":"control", "time":"control", "contentHTML":"control", 
161		"longDescription":"control",  "locationURL":"control",  
162		"trackOrder":"control", "parallelTracks":parallelTracks, "sessionThemeOrder":"control", "displaySessionThemeName":displaySessionThemeName, "displayTime":displayTime, "timeReplacementBadge":timeReplacementBadge, 
163		"sessionType":sessionType, "sessionTitle":sessionTitle, "locationURLLabel":locationURLLabel,   
164		"participants":participants, "buttonsLinksHTML":buttonsLinksHTML, 
165		"displayTrackName":displayTrackName} 
166			 
167	]  /> 
168 
169<#assign dataNull = "1900-01-01" /> 
170<#assign lastDate = dataNull /> 
171 
172<#assign lastSessionTheme = '' /> 
173<#assign sessionThemeChanged = false /> 
174<#assign sessionThemeCounter = 0 /> 
175<#assign lastTime = '' /> 
176<#assign lastTrack = '' /> 
177 
178<#assign finalEntries = [] /> 
179<#assign entriesBySessionTheme = [] /> 
180 
181<#list entriesByDateAndTrackOrdered as entryDT> 
182	<#if lastDate != entryDT.sessionDate || (lastDate == entryDT.sessionDate && entryDT.trackOrder != lastTrack) || entryDT?index == entriesByDateAndTrackOrdered?size-1> 
183	 
184		<#if entryDT?index !=0> 
185		 
186			<#if entryDT?index == entriesByDateAndTrackOrdered?size-1 > 
187				<#assign entriesByDateAndTrack = entriesByDateAndTrack + [{ 
188					"sessionDate":entryDT.sessionDate,  
189					"track":entryDT.track,  
190					"sessionTheme":entryDT.sessionTheme,  
191					"time":entryDT.time,  
192					"contentHTML":entryDT.contentHTML,  
193					"longDescription":entryDT.longDescription,  
194					"locationURL":entryDT.locationURL,  
195					"trackOrder":entryDT.trackOrder,  
196					"parallelTracks":entryDT.parallelTracks,  
197					"sessionThemeOrder":entryDT.sessionThemeOrder,  
198					"displaySessionThemeName":entryDT.displaySessionThemeName,  
199					"displayTime":entryDT.displayTime,  
200					"timeReplacementBadge":entryDT.timeReplacementBadge, 
201					"sessionType":entryDT.sessionType,  
202					"sessionTitle":entryDT.sessionTitle,  
203					"locationURLLabel":entryDT.locationURLLabel,   
204					"participants":entryDT.participants, 
205					"buttonsLinksHTML":entryDT.buttonsLinksHTML, 
206					"displayTrackName":entryDT.displayTrackName 
207					}]   /> 
208			</#if >			 
209		 
210			<#list entriesByDateAndTrack?sort_by("sessionThemeOrder") as entrySession> 
211				 
212				<#if lastSessionTheme != entrySession.sessionThemeOrder || (entrySession?index == entriesByDateAndTrack?size-1  && false)> 
213					 
214				 
215					<#if entrySession?index == entriesByDateAndTrack?size-1  && entryDT?index == entriesByDateAndTrackOrdered?size-1 && false> 
216						<#assign entriesBySessionTheme = entriesBySessionTheme + [{ 
217							"sessionDate":entrySession.sessionDate,  
218							"track":entrySession.track,  
219							"sessionTheme":entrySession.sessionTheme,  
220							"time":entrySession.time,  
221							"contentHTML":entrySession.contentHTML,  
222							"longDescription":entrySession.longDescription,  
223							"locationURL":entrySession.locationURL,  
224							"trackOrder":entrySession.trackOrder,  
225							"parallelTracks":entrySession.parallelTracks,  
226							"sessionThemeOrder":entrySession.sessionThemeOrder,  
227							"displaySessionThemeName":entrySession.displaySessionThemeName,  
228							"displayTime":entrySession.displayTime,  
229							"timeReplacementBadge":entrySession.timeReplacementBadge, 
230							"sessionType":entrySession.sessionType,  
231							"sessionTitle":entrySession.sessionTitle,  
232							"locationURLLabel":entrySession.locationURLLabel,   
233							"participants":entrySession.participants, 
234							"buttonsLinksHTML":entrySession.buttonsLinksHTML, 
235							"displayTrackName":entrySession.displayTrackName 
236							}]  /> 
237					</#if > 
238					 
239					<#assign lastSessionTheme = entrySession.sessionThemeOrder /> 
240						 
241						<#list entriesBySessionTheme?sort_by("time") as entryTime > 
242							<#if entryTime.contentHTML != "control"> 
243							<#assign finalEntries = finalEntries + [{ 
244								"sessionDate":entryTime.sessionDate,  
245								"track":entryTime.track,  
246								"sessionTheme":entryTime.sessionTheme,  
247								"time":entryTime.time,  
248								"contentHTML":entryTime.contentHTML,  
249								"longDescription":entryTime.longDescription,  
250								"locationURL":entryTime.locationURL,  
251								"trackOrder":entryTime.trackOrder,  
252								"parallelTracks":entryTime.parallelTracks,  
253								"sessionThemeOrder":entryTime.sessionThemeOrder,  
254								"displaySessionThemeName":entryTime.displaySessionThemeName,  
255								"displayTime":entryTime.displayTime,  
256								"timeReplacementBadge":entryTime.timeReplacementBadge, 
257								"sessionType":entryTime.sessionType,  
258								"sessionTitle":entryTime.sessionTitle,  
259								"locationURLLabel":entryTime.locationURLLabel,  
260								"participants":entryTime.participants, 
261								"buttonsLinksHTML":entryTime.buttonsLinksHTML, 
262								"displayTrackName":entryTime.displayTrackName 
263								}]  />	 
264							 
265							</#if> 
266						</#list > 
267					 
268					<#assign entriesBySessionTheme = [] /> 
269					 
270				<#else> 
271				</#if> 
272				 
273					<#assign entriesBySessionTheme = entriesBySessionTheme + [{ 
274						"sessionDate":entrySession.sessionDate,  
275						"track":entrySession.track,  
276						"sessionTheme":entrySession.sessionTheme,  
277						"time":entrySession.time,  
278						"contentHTML":entrySession.contentHTML,  
279						"longDescription":entrySession.longDescription,  
280						"locationURL":entrySession.locationURL,  
281						"trackOrder":entrySession.trackOrder,  
282						"parallelTracks":entrySession.parallelTracks,  
283						"sessionThemeOrder":entrySession.sessionThemeOrder,  
284						"displaySessionThemeName":entrySession.displaySessionThemeName,  
285						"displayTime":entrySession.displayTime,  
286						"timeReplacementBadge":entrySession.timeReplacementBadge, 
287						"sessionType":entrySession.sessionType,  
288						"sessionTitle":entrySession.sessionTitle,  
289						"locationURLLabel":entrySession.locationURLLabel,   
290						"participants":entrySession.participants, 
291						"buttonsLinksHTML":entrySession.buttonsLinksHTML, 
292						"displayTrackName":entrySession.displayTrackName 
293						}]  /> 
294				 
295			</#list> 
296		</#if> 
297		 
298		<#assign entriesByDateAndTrack = [] /> 
299	<#else>		 
300			 
301	</#if > 
302	 
303	<#assign entriesByDateAndTrack = entriesByDateAndTrack + [{ 
304		"sessionDate":entryDT.sessionDate,  
305		"track":entryDT.track,  
306		"sessionTheme":entryDT.sessionTheme,  
307		"time":entryDT.time,  
308		"contentHTML":entryDT.contentHTML,  
309		"longDescription":entryDT.longDescription,  
310		"locationURL":entryDT.locationURL,  
311		"trackOrder":entryDT.trackOrder,  
312		"parallelTracks":entryDT.parallelTracks,  
313		"sessionThemeOrder":entryDT.sessionThemeOrder,  
314		"displaySessionThemeName":entryDT.displaySessionThemeName,  
315		"displayTime":entryDT.displayTime,  
316		"timeReplacementBadge":entryDT.timeReplacementBadge, 
317		"sessionType":entryDT.sessionType,  
318		"sessionTitle":entryDT.sessionTitle,  
319		"locationURLLabel":entryDT.locationURLLabel,   
320		"participants":entryDT.participants, 
321		"buttonsLinksHTML":entryDT.buttonsLinksHTML, 
322		"displayTrackName":entryDT.displayTrackName 
323		}]   /> 
324	 
325 
326	<#assign lastDate = entryDT.sessionDate /> 
327	<#assign lastTrack = entryDT.trackOrder />	 
328	 
329</#list>	 
330 
331<style> 
332.event-date-container.active { 
333	display:block; 
334
335.event-date-container { 
336	display:none; 
337
338.event-date-container:after { 
339    content: "."; 
340    display: block; 
341    clear: both; 
342    visibility: hidden; 
343    line-height: 0; 
344    height: 0; 
345
346 
347 
348.event-date-link-container h2 a{ 
349	width: 100%; 
350
351.event-date-link-container { 
352    padding: var(--gs-base-spacing-2xs) 2px var(--gs-base-spacing-2xs) 2px; 
353    display: inline-block; 
354
355/* 
356h2.event-date-tab { 
357    width: max-content; 
358    padding: 10px 16px; 
359    background: #F0F4FB; 
360    border-radius: 4px; 
361    font-family: 'Arial'; 
362    font-style: normal; 
363    font-weight: 700; 
364    font-size: 18px !important; 
365    margin-bottom: 0 !important; 
366    line-height: 21px !important; 
367    text-align: center; 
368    color: #3366CC; 
369    border: 2px solid #F0F4FB; 
370
371 
372.event-date-tab.active { 
373	background: var(--gs-base-color-white); 
374    border: 2px solid #3366CC; 
375    border-radius: 4px; 
376
377 
378*/ 
379 
380.gcss-op h2.event-date-tab { 
381    margin-bottom: var(--gs-base-spacing-0) !important; 
382
383.event-date-link-container a { 
384	text-decoration: unset!important; 
385
386</style> 
387 
388 
389<script type="text/javascript"> 
390 
391function toogleToolboxTab(tab) { 
392 
393		var selectedTab = tab.parentElement; 
394		var selectedTabNumber = selectedTab.getAttribute("menu-item-number"); 
395 
396 
397		var contentTabContainer = document.querySelector(".event-date-content-container"); 
398		var contentTab = document.querySelector(".event-date-content-container #date-content-"+selectedTabNumber); 
399 
400		/*var activateCurrentTab = true; 
401		if(selectedTab.classList.contains("active") && contentTab.classList.contains("active")){ 
402			activateCurrentTab = false; 
403		} */ 
404		 
405		//remove active from previus tab 
406		if(document.querySelector(".event-date-tab.active")){ 
407			document.querySelector(".event-date-tab.active a").classList.add("gs-btn-sec-f"); 
408			document.querySelector(".event-date-tab.active a").classList.remove("gs-btn-sec"); 
409			document.querySelector(".event-date-tab.active").classList.remove("active"); 
410
411		if(contentTabContainer.querySelector(".event-date-container.active")){ 
412			contentTabContainer.querySelector(".event-date-container.active").classList.remove("active"); 
413			if(document.querySelector(".ls-agenda-complete")) { 
414				document.querySelector(".ls-agenda-complete").classList.remove("active"); 
415
416			 
417		//if(document.querySelector("html.has-tool-box-component-isg-active")) { 
418		//	document.querySelector("html.has-tool-box-component-isg-active").classList.remove("has-tool-box-component-isg-active"); 
419		//} ????? 
420			 
421			contentTabContainer.classList.remove("active"); 
422			localStorage.setItem("activeAgendaMenuItem", ""); 
423
424 
425		//add active on current tab 
426		//if(activateCurrentTab){ 
427			selectedTab.classList.add("active"); 
428			document.querySelector(".event-date-tab.active > a").setAttribute("tabindex", "0"); 
429			document.querySelector(".event-date-tab.active a").classList.remove("gs-btn-sec-f"); 
430			document.querySelector(".event-date-tab.active a").classList.add("gs-btn-sec"); 
431			contentTab.classList.add("active"); 
432			contentTabContainer.classList.add("active"); 
433			document.querySelector(".ls-agenda-complete").classList.add("active"); 
434			//document.querySelector("html").classList.add("has-tool-box-component-isg-active");?? 
435 
436			//added to bypass a liferay bug that does not add a space between classes 
437		 
438		//	var classListValue = document.querySelector('html').classList.value.replace("has-tool-box-component-isg-active", " has-tool-box-component-isg-active "); 
439		//	document.querySelector('html').classList.value = classListValue; ??? 
440 
441			localStorage.setItem("activeAgendaMenuItem", selectedTabNumber); 
442	//	} 
443		 
444		//if(document.querySelector(".opportal-site-navigation-vertical-collapse-desktop .active.selected")) { 
445			//document.querySelector(".opportal-site-navigation-vertical-collapse-desktop .active.selected").scrollIntoView(); 
446		//} 
447		//if(document.querySelector("#isgSearchResults .selected")) { 
448		//	document.querySelector("#isgSearchResults .selected").scrollIntoView(); 
449		//} 
450		//if(document.querySelector(".has-index-highlight")) { 
451		//	document.querySelector(".has-index-highlight").scrollIntoView(); 
452		//} ?? 
453	}  
454</script> 
455 
456<div class="gcss-op">  
457<div style="align-items: start;" class=" ls-agenda-complete">  
458	 
459	<div class="event-date-links-container" role="tablist" aria-label="Event Complete Agenda Menu"> 
460	 
461	<#assign tabNumber = 0 /> 
462	<#list finalEntries as entryCustom> 
463		<#assign entry = entryCustom /> 
464		 
465		<#if entryCustom?index == 0> 
466			<#assign eventDate = entry.sessionDate> 
467			<#assign lastEventDate = entry.sessionDate> 
468			<div class="event-date-link-container"> 
469			<#assign dateY = entry.sessionDate?datetime("yyyy-MM-dd")> 
470			<#assign dateY = dateY?date /> 
471			<h2 class="event-date-tab active"  
472				menu-item-number=${tabNumber}> 
473				<a aria-label="" 
474				class="gs-btn gs-btn-sec-f" 
475				href="javascript:void(0);" onclick="toogleToolboxTab(this)"			 
476				role="tab" 
477				aria-selected="false" 
478                aria-controls="date-content-${tabNumber}" 
479				id="date-tab-${tabNumber}" 
480				tabindex="-1"								 
481			><span>${dateY?string["dd MMMM yyyy"]}</span> </a> </h2> 
482		</#if> 
483		<#if lastEventDate != entry.sessionDate> 
484			<#assign lastEventDate = entry.sessionDate> 
485			<#assign tabNumber = tabNumber + 1 /> 
486			</div> 
487			<div class="event-date-link-container" > 
488			<#assign dateY = entry.sessionDate?datetime("yyyy-MM-dd")> 
489			<#assign dateY = dateY?date /> 
490			<h2 class="event-date-tab"  
491				menu-item-number=${tabNumber}> 
492				<a aria-label="" 
493				class="gs-btn gs-btn-sec-f" 
494				href="javascript:void(0);" onclick="toogleToolboxTab(this)"			 
495				role="tab" 
496				aria-selected="false" 
497                aria-controls="date-content-${tabNumber}" 
498				id="date-tab-${tabNumber}" 
499				tabindex="-1" 
500			><span>${dateY?string["dd MMMM yyyy"]}</span></a> </h2> 
501		</#if> 
502		<#if entryCustom?index == finalEntries?size-1> 
503			<#assign lastEventDate = entry.sessionDate> 
504			</div> 
505		</#if>	 
506	</#list> 
507	</div> 
508	 
509	<div class="event-date-content-container"> 
510	<#assign tabNumber = 0 /> 
511	<#list finalEntries as entryCustom> 
512		<#assign entry = entryCustom /> 
513		<#assign numberOfParalelTracks = "" /> 
514		 
515		<#if entry.parallelTracks?has_content> 
516			<#assign numberOfParalelTracks = 0 /> 
517			<#list entry.parallelTracks?split(";") as x> 
518				<#assign numberOfParalelTracks = numberOfParalelTracks + 1 /> 
519			</#list> 
520		</#if> 
521		 
522		 
523		<#-- date div openers -->	 
524		<#if entryCustom?index == 0> 
525			<#assign eventDate = entry.sessionDate> 
526			<#assign lastEventDate = entry.sessionDate> 
527			<div class="event-date-container active" id="date-content-${tabNumber}" menu-item-number=${tabNumber} 
528				role="tabpanel" 
529				tabindex="0" 
530				aria-labelledby="date-tab-${tabNumber}" 
531
532			<#assign dateY = entry.sessionDate?datetime("yyyy-MM-dd") /> 
533			<#assign dateY = dateY?date /> 
534			<div class="event-custom-portlet-date-container" > 
535	            <@liferay_portlet["runtime"]  
536					portletName="com_liferay_journal_content_web_portlet_JournalContentPortlet"  
537					instanceId=dateY?string["ddMMyy"] /> 
538			</div> 
539			 
540		</#if> 
541		<#if lastEventDate != entry.sessionDate> 
542			<#assign lastEventDate = entry.sessionDate> 
543				<#assign tabNumber = tabNumber + 1 />	 
544					</div><#-- also close st div --> 
545				 
546				</div><#-- also close track div --> 
547				 
548			</div> 
549			<div class="event-date-container" id="date-content-${tabNumber}" menu-item-number=${tabNumber} 
550				role="tabpanel" 
551				tabindex="0" 
552				aria-labelledby="date-tab-${tabNumber}" 
553 
554
555			<#assign dateY = entry.sessionDate?datetime("yyyy-MM-dd") /> 
556			<#assign dateY = dateY?date /> 
557			<div class="event-custom-portlet-date-container" > 
558	            <@liferay_portlet["runtime"]  
559					portletName="com_liferay_journal_content_web_portlet_JournalContentPortlet"  
560					instanceId=dateY?string["ddMMyy"] /> 
561			</div> 
562			 
563				<#assign lastTrackOrder = entry.trackOrder> <#-- also set lastTrackOrder --> 
564				<div class="event-track-container ${numberOfParalelTracks?has_content?then('parallel-tracks-'+numberOfParalelTracks,'')} ${(numberOfParalelTracks?has_content || (entry.displayTrackName?has_content && entry.displayTrackName == "true"))?then('','track-has-no-padding')}"> <#-- also open track div --> 
565					<#if entry.displayTrackName?has_content && entry.displayTrackName == "true"> 
566						<h3>${entry.track}</h3> 
567					</#if> 
568				 
569					<#assign lastSTOrder = entry.sessionThemeOrder> <#-- also set lastSTOrder --> 
570					<div class="event-sessiontheme-container gs-card rounded"> <#-- also open st div --> 
571					<#if entry.displaySessionThemeName?has_content && entry.displaySessionThemeName == "true"> 
572						<#assign hIndex = 4> 
573						<#if !(entry.displayTrackName?has_content && entry.displayTrackName == "true")> 
574							<#assign hIndex = 3> 
575						</#if> 
576						<h${hIndex}>${entry.sessionTheme}</h${hIndex}> 
577					</#if> 
578		</#if> 
579		 
580		<#-- track div openers -->	 
581		<#if entryCustom?index == 0> 
582			<#assign lastTrackOrder = entry.trackOrder> 
583			<div class="event-track-container  ${numberOfParalelTracks?has_content?then('parallel-tracks-'+numberOfParalelTracks,'')} ${(numberOfParalelTracks?has_content || (entry.displayTrackName?has_content && entry.displayTrackName == "true"))?then('','track-has-no-padding')}"> 
584			<#if entry.displayTrackName?has_content && entry.displayTrackName == "true"> 
585				<h3>${entry.track}</h3> 
586			</#if>	 
587		</#if>	 
588		<#if lastTrackOrder != entry.trackOrder>  
589			<#assign lastTrackOrder = entry.trackOrder> 
590			 
591				</div><#-- also close st div --> 
592			 
593			</div> 
594			<div class="event-track-container ${numberOfParalelTracks?has_content?then('parallel-tracks-'+numberOfParalelTracks,'')} ${(numberOfParalelTracks?has_content || (entry.displayTrackName?has_content && entry.displayTrackName == "true"))?then('','track-has-no-padding')}"> 
595				<#if entry.displayTrackName?has_content && entry.displayTrackName == "true"> 
596					<h3>${entry.track}</h3> 
597				</#if> 
598			 
599				<#assign lastSTOrder = entry.sessionThemeOrder> <#-- also set lastSTOrder --> 
600				<div class="event-sessiontheme-container gs-card rounded"> <#-- also open st div --> 
601				<#if entry.displaySessionThemeName?has_content && entry.displaySessionThemeName == "true"> 
602					<#assign hIndex = 4> 
603					<#if !(entry.displayTrackName?has_content && entry.displayTrackName == "true")> 
604						<#assign hIndex = 3> 
605					</#if> 
606					<h${hIndex}>${entry.sessionTheme}</h${hIndex}> 
607				</#if> 
608			 
609		</#if>	 
610			 
611		<#-- session theme div openers -->	 
612		<#if entryCustom?index == 0> 
613			<#assign lastSTOrder = entry.sessionThemeOrder> 
614			<div class="event-sessiontheme-container gs-card rounded"> 
615			<#if entry.displaySessionThemeName?has_content && entry.displaySessionThemeName == "true"> 
616				<#assign hIndex = 4> 
617				<#if !(entry.displayTrackName?has_content && entry.displayTrackName == "true")> 
618					<#assign hIndex = 3> 
619				</#if> 
620				<h${hIndex}>${entry.sessionTheme}</h${hIndex}> 
621			</#if> 
622			 
623		</#if>	 
624		<#if lastSTOrder != entry.sessionThemeOrder>  
625			<#assign lastSTOrder = entry.sessionThemeOrder> 
626			</div> 
627			<div class="event-sessiontheme-container gs-card rounded"> 
628			<#if entry.displaySessionThemeName?has_content && entry.displaySessionThemeName == "true"> 
629				<#assign hIndex = 4> 
630				<#if !(entry.displayTrackName?has_content && entry.displayTrackName == "true")> 
631					<#assign hIndex = 3> 
632				</#if> 
633				<h${hIndex}>${entry.sessionTheme}</h${hIndex}> 
634			</#if> 
635		</#if> 
636		 
637		<div class="gs-card-body"> 
638		<div class="gs-card-body-padding"> 
639			<#assign hIndex = 3> 
640			<#if entry.displaySessionThemeName?has_content && entry.displaySessionThemeName == "true"> 
641				<#assign hIndex = hIndex + 1>	 
642			</#if> 
643			<#if entry.displayTrackName?has_content && entry.displayTrackName == "true"> 
644				<#assign hIndex = hIndex + 1> 
645			</#if> 
646			<#if entry.displayTime?has_content && entry.displayTime == "true"> 
647				<h${hIndex} class="session-time">${entry.time}</h${hIndex}> 
648			<#else> 
649				<h${hIndex} class="session-time ls-time-unknown">${entry.timeReplacementBadge}</h${hIndex}> 
650			</#if> 
651             
652			<#if entry.sessionType?has_content >  
653			<p style="margin-bottom: var(--gs-base-spacing-xs);"><span class="ls-badge">${entry.sessionType}</span></p> 
654            </#if> 
655			 
656			<#assign hIndex = hIndex + 1> 
657			<h${hIndex} class="session-title"> 
658				<#if entry.longDescription?has_content> 
659					<a href="#" onclick="gsOpenModal(this)" class="" role="button" data-toggle="modal" data-target="#modal-example${entryCustom?index}"  aria-label="${entry.sessionTitle}">${entry.sessionTitle}</a> 
660				<#else> 
661					${entry.sessionTitle} 
662				</#if> 
663			</h${hIndex}>  
664			 
665			 
666			 
667			 <div class="for-op-editors"> 
668				<#assign dateY = entry.sessionDate?datetime("yyyy-MM-dd") /> 
669				<#assign dateY = dateY?date /> 
670				date: ${dateY?string["dd MMMM yyyy"]} <br> 
671				trackOrder: ${entry.trackOrder} <br> 
672				sessionThemeOrder: ${entry.sessionThemeOrder} <br> 
673				time: ${entry.time}  
674			</div>   
675			 
676			 
677			 
678			<#-- @claudiu, add another field in the structure, to be used when clicking the link in the title. --> 
679			<#-- @claudiu, the content for this, has to be replaced with the modal (after you confirm with Alvaro) --> 
680             
681			<#if entry.locationURL?has_content >  
682			 
683			<p class="sr-only">Location for ${entry.sessionTitle}</p> 
684			<div class="ls-location"> 
685                <strong>${entry.locationURLLabel} </strong>&nbsp;${entry.locationURL} <#-- a span may be needed for locationURL to style? -->	 
686            </div> 
687			</#if> 
688			 
689			<#if entry.contentHTML?has_content >  
690            <div class="ls-content"> 
691                <p>${entry.contentHTML}</p> 
692            </div> 
693			</#if> 
694 
695			<#if entry.participants?has_content && (entry.participants[0].participantNameVal != '' || entry.participants[0].participantJobTitleVal != '')>  
696			<div class="ls-participant-group"> 
697                <p class="sr-only">Participants</p> 
698				 
699				<#list entry.participants as participant> 
700					<div class="ls-participant"> 
701						<div class="ls-participant-img"> 
702							<#if participant.participantPhotoVal?has_content >  
703								<img src="${participant.participantPhotoVal}" alt=""> 
704							<#else> 
705								<img src="https://op.europa.eu/documents/7946710/11230830/participant-demo-no-photo.png/940c23f2-ecfb-01e4-839b-933b352f90b8" alt="">  <#-- to be decided with Alvaro about the default image --> 
706							</#if> 
707						</div> 
708						<div class="ls-participant-details"> 
709							<p class="ls-participant-name"><strong>${participant.participantNameVal}</strong></p> 
710							<#-- maybe change the label for participantJobTitleVal to participant description and remove the other 2 fields? @claudiu, can you validate with Alvaro? --> 
711							<p class="ls-participant-professional">${participant.participantJobTitleVal}  <#-- ${participant.participantInstitutionVal} ${participant.participantCompanyVal} --></p> 
712						</div> 
713					</div>					 
714				</#list> 
715			</div> 
716			</#if> 
717			 
718			<#if entry.buttonsLinksHTML?has_content >  
719            <div class="ls-btn-wrapper"> 
720				${entry.buttonsLinksHTML} 
721            </div> 
722			</#if> 
723        </div> 
724        </div> 
725			<#if entry.longDescription?has_content> 
726				<div id="modal-example${entryCustom?index}" aria-hidden="true" aria-labelledby="modal-title-example" class="modal op-modal fade" role="dialog" style="display: none;" tabindex="-1"> 
727					<div class="modal-dialog" role="document"> 
728						<div class="modal-content"> 
729							<div class="gs-modal-header-wrapper"> 
730								<h2 id="modal-title-example">${entry.sessionTitle}</h2> 
731								<a role="button" class="gs-btn gs-btn-ghost" href="#" aria-label="Close" data-dismiss="modal" style="justify-self: end;"> 
732									<i class="gs-icon-close" aria-hidden="true"></i> 
733								</a> 
734							</div> 
735 
736							<div class="gs-modal-body"> 
737								${entry.longDescription} 
738							</div> 
739						</div> 
740					</div> 
741				</div> 
742			</#if> 
743		 
744		<#if entryCustom?index == finalEntries?size-1> 
745					</div> <#-- also close st div --> 
746				</div> <#-- also close track div --> 
747			</div> <#-- also close date div --> 
748		</#if>	 
749	</#list> 
750	</div> 
751</div> 
752</div> 
753<script> 
754	var activeTabNumber = window.location.href.split("#")[1]; 
755	if(!activeTabNumber){ 
756		activeTabNumber="0"; 
757
758	tabToBeActivated = document.querySelector('.event-date-tab[menu-item-number="'+activeTabNumber+'"] a'); 
759	toogleToolboxTab(tabToBeActivated); 
760</script> 
761 
762 
763<style> 
764.for-op-editors{ 
765	color: red; 
766	font-size: 10; 
767
768.for-op-editors{ 
769	display: none; 
770
771.has-control-menu.controls-visible .for-op-editors{ 
772	display: block; 
773
774 
775</style> 
776 
777 
778 <script> 
779window.addEventListener("DOMContentLoaded", () => { 
780	 
781	const tabs = document.querySelectorAll('.ls-agenda-complete [role="tab"]'); 
782	const tabList = document.querySelector('.ls-agenda-complete [role="tablist"]'); 
783 
784	// Add a click event handler to each tab 
785	tabs.forEach((tab) => { 
786		tab.addEventListener("click", changeTabs); 
787	}); 
788 
789	// Enable arrow navigation between tabs in the tab list 
790	let tabFocus = 0; 
791 
792	tabList.addEventListener("keydown", (e) => { 
793		// Move right 
794		if (e.keyCode === 37 || e.keyCode === 38 || e.keyCode === 39 || e.keyCode === 40) { 
795			tabs[tabFocus].setAttribute("tabindex", -1); 
796			if (e.keyCode === 39 || e.keyCode === 40) { 
797				tabFocus++; 
798				// If we're at the end, go to the start 
799				if (tabFocus >= tabs.length) { 
800					tabFocus = 0; 
801
802				// Move left 
803			} else if (e.keyCode === 37 || e.keyCode === 38) { 
804				tabFocus--; 
805				// If we're at the start, move to the end 
806				if (tabFocus < 0) { 
807					tabFocus = tabs.length - 1; 
808
809
810 
811			tabs[tabFocus].setAttribute("tabindex", 0); 
812			tabs[tabFocus].focus(); 
813
814	}); 
815}); 
816 
817function changeTabs(e) { 
818	 
819	const target = e.target; 
820	const parent = target.parentNode; 
821	const grandparent = parent.parentNode; 
822 
823	// Remove all current selected tabs 
824	parent 
825			.querySelectorAll('[aria-selected="true"]') 
826			.forEach((t) => t.setAttribute("aria-selected", false)); 
827 
828	// Set this tab as selected 
829	target.setAttribute("aria-selected", true); 
830 
831	// Hide all tab panels 
832	/*grandparent 
833			.querySelectorAll('[role="tabpanel"]') 
834			.forEach((p) => p.setAttribute("hidden", true));*/ 
835 
836	// Show the selected panel 
837	/*grandparent.parentNode 
838			.querySelector() //target.getAttribute("aria-controls" // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/tab_role 
839			.removeAttribute("hidden");*/ 
840
841 
842</script> 
843 
844<style> 
845/* css below is from Alvaro demo */ 
846/* Reset from gcss-op */ 
847.gcss-op .ls-agenda-complete h3, 
848.gcss-op .ls-agenda-complete h4, 
849.gcss-op .ls-agenda-complete .gs-card h3, 
850.gcss-op .ls-agenda-complete .gs-card h4, 
851.gcss-op .ls-agenda-complete .gs-card h5, 
852.gcss-op .ls-agenda-complete .gs-card h6 { 
853  max-width: unset; 
854
855:root { 
856  --ls-max-width-session-content: 600px; 
857
858 
859 
860/* Session wrapper */ 
861.gcss-op .ls-agenda-complete .gs-card .gs-card-body { 
862    border-bottom: 1px solid var(--gs-base-color-gray-20); 
863
864.gcss-op .ls-agenda-complete .gs-card .gs-card-body:last-child { 
865    border-bottom: none; 
866
867 
868/* Session content max-width */ 
869.gcss-op .ls-agenda-complete .gs-card .gs-card-body h5, 
870.gcss-op .ls-agenda-complete .gs-card .gs-card-body h6, 
871.gcss-op .ls-agenda-complete .gs-card .gs-card-body p, 
872.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-content, 
873.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-participant-group { 
874    max-width: var(--ls-max-width-session-content); 
875
876 
877/* Session time  
878.gcss-op .ls-agenda-complete .gs-card h5 { 
879    font-size: var(--gs-base-font-size-m)!important; 
880    margin-bottom: var(--gs-base-spacing-s)!important; 
881    // Improvements  
882    padding: var(--gs-base-spacing-2xs) var(--gs-base-spacing-xs); 
883    background-color: var(--gs-base-color-gray-10); 
884    display: inline-block; 
885    border-radius: 4px; 
886
887 
888 
889.gcss-op .ls-agenda-complete .gs-card h5.ls-time-unknown { 
890    color: var(--gs-base-color-publications-120); 
891    background-color: var(--gs-base-color-publications-10); 
892    font-weight: var(--gs-base-font-weight-default); 
893
894*/ 
895 
896/* Session theme header */ 
897.gcss-op .ls-agenda-complete .gs-card h2.ls-card-header, 
898.gcss-op .ls-agenda-complete .gs-card h3.ls-card-header, 
899.gcss-op .ls-agenda-complete .gs-card h4.ls-card-header, 
900.gcss-op .ls-agenda-complete .gs-card h5.ls-card-header, 
901.gcss-op .ls-agenda-complete .gs-card h6.ls-card-header { 
902  font-size: var(--gs-base-font-size-m)!important; 
903  line-height: var(--gs-base-line-height-s)!important; 
904  color: var(--gs-base-color-gray-100)!important; 
905  border-bottom: 2px solid var(--gs-base-color-gray-100); 
906  padding: var(--gs-base-spacing-s) var(--gs-base-spacing-m); 
907  margin:var(--gs-base-spacing-0) !important; 
908
909 
910/* Session heading */ 
911.gcss-op .ls-agenda-complete .gs-card h6 { 
912    font-size: var(--gs-base-font-size-xl)!important; 
913    margin-top: var(--gs-base-spacing-0)!important; 
914    margin-bottom: var(--gs-base-spacing-2xs)!important; 
915
916 
917/* Session card content */ 
918.gcss-op .ls-agenda-complete .gs-card .ls-location { 
919    color:var(--gs-base-color-gray-100); 
920	/*font-weight: 700;*/ /* removed for PORTALMSP-3599 Location/URL formating - point 2*/ 
921	font-size: var(--gs-base-font-size-m); 
922	line-height: 26px; 
923	padding: var(--gs-base-spacing-2xs) var(--gs-base-spacing-0) var(--gs-base-spacing-2xs) var(--gs-base-spacing-0); 
924
925.gcss-op .ls-agenda-complete .gs-card .ls-location p { 
926    color:var(--gs-base-color-gray-100); 
927
928 
929.gcss-op .ls-agenda-complete .gs-card .ls-content { 
930    margin-top:var(--gs-base-spacing-m); 
931
932 
933/* Remove extra margin bottom from last element in session wrapper */ 
934.gcss-op .ls-agenda-complete .gs-card .gs-card-body h6:last-child, 
935.gcss-op .ls-agenda-complete .gs-card .gs-card-body p.ls-location:last-child, 
936.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-content p:last-child { 
937    margin-bottom: var(--gs-base-spacing-0)!important; 
938
939 
940 
941/* Session buttons and links section */ 
942.gcss-op .ls-agenda-complete .gs-card .ls-btn-wrapper { 
943    margin-top: var(--gs-base-spacing-m)!important; 
944
945.gcss-op .ls-agenda-complete .gs-card .ls-btn-wrapper .gs-btn { 
946    margin-right: var(--gs-base-spacing-xs); 
947	margin-bottom: var(--gs-base-spacing-xs)!important; /*PORTALMSP-3625 Button spacing and alignment - point 1*/ 
948
949 
950.gcss-op .ls-agenda-complete .gs-card .ls-btn-wrapper a {     
951	margin-right: var(--gs-base-spacing-s); 
952}  /*PORTALMSP-3625 Button spacing and alignment - point 2*/ 
953 
954/*** Session badges ***/ 
955.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-badge  { 
956    border-radius: 3px; 
957    display: inline-flex; 
958    align-items: center; 
959    justify-content: center; 
960    line-height: var(--gs-base-line-height-xs); 
961    /* Modify by type or size */ 
962    padding: var(--gs-base-spacing-2xs) var(--gs-base-spacing-2xs); 
963    border:  1px solid var(--gs-base-color-gray-20); 
964    color: var(--gs-base-color-gray-75); 
965    font-size: var(--gs-base-font-size-s); 
966
967 
968 
969 
970 
971/* Participants */ 
972 
973.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-participant-group { 
974    margin-top: var(--gs-base-spacing-m); 
975
976 
977.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-participant { 
978    display: flex; 
979    align-items: center; 
980    margin-bottom: var(--gs-base-spacing-s); 
981    max-width: calc(var(--ls-max-width-session-content) - 120px); 
982
983.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-participant-group .ls-participant:last-child { 
984    margin-bottom: var(--gs-base-spacing-0); 
985
986 
987.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-participant-group .ls-participant-img { 
988    width:72px; 
989    height:72px; 
990    margin: var(--gs-base-spacing-0) var(--gs-base-spacing-m) 0 0; 
991    overflow: hidden; 
992    border-radius:50%; 
993
994.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-participant-group .ls-participant-details { 
995    flex: 1; 
996
997 
998/* Participant name and professional details */ 
999.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-participant-group .ls-participant-name { 
1000    color:var(--gs-base-color-gray-100); 
1001    line-height:var(--gs-base-line-height-s)!important; 
1002    margin-bottom:var(--gs-base-spacing-2xs); 
1003
1004.gcss-op .ls-agenda-complete .gs-card .gs-card-body .ls-participant-group .ls-participant-professional { 
1005    font-size: var(--gs-base-font-size-sp-15)!important; 
1006    margin-bottom: var(--gs-base-spacing-0); 
1007
1008 
1009.gs-btn { 
1010	width:max-content !important; 
1011
1012 
1013/* Link underline style 
1014THIS LINK STYLE WILL BE INCLUDED IN gcss-op, 
1015DO NOT INCLUDE IT IN THE ASSET PUBLISHER */ 
1016 
1017/*.gcss-op .ls-agenda-complete .gs-card .gs-card-body a { 
1018    text-underline-offset: 0.1em!important; 
1019    text-decoration-thickness: 0.078rem!important; 
1020} */ /* Removed for PORTALMSP-3600 CSS: Feedback 1 point3 */ 
1021</style> 
1022 
1023 
1024 
1025<style> 
1026.event-date-container{ 
1027	padding:5px; 
1028
1029.event-track-container{ 
1030	padding: var(--gs-base-spacing-xs); 
1031	background: var(--gs-base-color-gray-5); 
1032    border-radius: 4px; 
1033
1034.event-track-container.track-has-no-padding{ 
1035	padding: var(--gs-base-spacing-0); 
1036
1037 
1038.event-track-container > h3{ 
1039    font-size: var(--gs-base-font-size-l) !important; 
1040    padding: var(--gs-base-spacing-2xs) 0px var(--gs-base-spacing-xs) 0px;  
1041    margin: var(--gs-base-spacing-0) !important; 
1042    line-height: var(--gs-base-line-height-s) !important; 
1043    text-align: center; 
1044    color: var(--gs-base-color-gray-100)!important; 
1045
1046 
1047 
1048.event-sessiontheme-container{ 
1049	border: 3px solid var(--gs-base-color-gray-20); 
1050	padding:5px; 
1051	margin-top: var(--gs-base-spacing-l); 
1052
1053.event-sessiontheme-container:first-child, 
1054.event-track-container>h3 + .event-sessiontheme-container{ 
1055	margin-top: var(--gs-base-spacing-0); 
1056
1057 
1058 
1059.event-sessiontheme-container > h4 { 
1060    font-size: var(--gs-base-font-size-xl); 
1061    padding: var(--gs-base-spacing-2xs) var(--gs-base-spacing-0) var(--gs-base-spacing-2xs) var(--gs-base-spacing-0); 
1062    line-height: 23px; 
1063    text-decoration-line: underline; 
1064    color: var(--gs-base-color-link-100); 
1065    margin: var(--gs-base-spacing-0) !important; 
1066
1067.event-sessiontheme-container > h3 { 
1068	font-size: var(--gs-base-font-size-m) !important; 
1069	line-height: 26px; 
1070	color: var(--gs-base-color-gray-75); 
1071	padding: var(--gs-base-spacing-0) var(--gs-base-spacing-0) var(--gs-base-spacing-2xs) var(--gs-base-spacing-0); 
1072	text-align:left; 
1073	margin: var(--gs-base-spacing-0) !important; 
1074
1075.event-track-container > .event-sessiontheme-container > h3, 
1076.event-track-container > .event-sessiontheme-container > h4{ 
1077	color: var(--gs-base-color-gray-100)!important; 
1078	font-size: var(--gs-base-font-size-m) !important; 
1079	line-height: 26px !important; 
1080	text-decoration: unset; 
1081	text-align: center; 
1082	padding: var(--gs-base-spacing-xs) var(--gs-base-spacing-m) var(--gs-base-spacing-xs) var(--gs-base-spacing-m); 
1083	border-bottom: 2px solid var(--gs-base-color-gray-100); 
1084
1085 
1086.event-track-container > .event-sessiontheme-container .session-time{ 
1087    font-size: var(--gs-base-font-size-m)!important; 
1088    color: var(--gs-base-color-gray-100)!important; 
1089    margin-bottom: var(--gs-base-spacing-s)!important; 
1090    padding: var(--gs-base-spacing-2xs) var(--gs-base-spacing-xs); 
1091    background-color: var(--gs-base-color-gray-10); 
1092    display: inline-block; 
1093    border-radius: 4px; 
1094
1095.event-track-container > .event-sessiontheme-container .session-time.ls-time-unknown { 
1096    color: var(--gs-base-color-publications-120)!important; 
1097    background-color: var(--gs-base-color-publications-10); 
1098    font-weight: var(--gs-base-font-weight-default); 
1099	padding: var(--gs-base-spacing-2xs) var(--gs-base-spacing-xs); 
1100	border-radius: 4px; 
1101	width: fit-content; 
1102
1103 
1104.event-track-container > .event-sessiontheme-container .session-title{ 
1105	margin: var(--gs-base-spacing-0) !important; 
1106    font-weight: var(--gs-base-font-weight-heading); 
1107    font-size: var(--gs-base-font-size-xl)!important; 
1108    /*line-height: 23px !important;*/ 
1109    color: var(--gs-base-color-gray-100)!important; 
1110
1111 
1112/*.event-track-container > .event-sessiontheme-container .session-title a{ 
1113	color: #3366CC; 
1114	text-decoration: underline; 
1115} */ /* Removed for PORTALMSP-3600 CSS: Feedback 1 point2 */  
1116 
1117 
1118 
1119 
1120 
1121.event-sessiontheme-container.gs-card.rounded{ 
1122	padding: var(--gs-base-spacing-0); 
1123
1124 
1125 
1126 
1127.event-sessiontheme-container .ls-badge { 
1128    font-size: var(--gs-base-font-size-xs) !important; 
1129    line-height: 15px !important; 
1130    color: var(--gs-base-color-gray-100) !important; 
1131    border: 1px solid var(--gs-base-color-gray-60) !important; 
1132    border-radius: 4px !important; 
1133    padding: 2px var(--gs-base-spacing-2xs) !important; 
1134
1135 
1136.event-sessiontheme-container .gs-card-body .ls-location, 
1137.event-sessiontheme-container .gs-card-body .ls-location *{ 
1138	font-size: var(--gs-base-font-size-m); 
1139	line-height: 26px; 
1140
1141.event-sessiontheme-container .gs-card-body .ls-location *, 
1142.event-sessiontheme-container .gs-card-body .ls-btn-wrapper *{ 
1143	display: inline-block; 
1144
1145 
1146.ls-participant .ls-participant-name { 
1147    font-size: var(--gs-base-font-size-m); 
1148
1149.gs-card-body{ 
1150	padding: var(--gs-base-spacing-m) !important; 
1151
1152 
1153.event-session-theme{ 
1154	background: var(--gs-base-color-white); 
1155	border: 1px solid var(--gs-base-color-gray-20); 
1156	box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.2); 
1157	border-radius: 4px; 
1158
1159.event-session-theme-title{ 
1160
1161 
1162.event-session:not(:first-child){ 
1163	border-top: 1px solid var(--gs-base-color-gray-20); 
1164
1165 
1166.ls-participant-img img { 
1167    width: 100%; 
1168    height: auto; 
1169
1170 
1171.gcss-op .modal h2 { 
1172    text-overflow: initial; 
1173    white-space: initial; 
1174
1175 
1176 
1177 
1178.event-date-links-container { 
1179	/* display: inline-block; */ 
1180    margin-bottom: var(--gs-base-spacing-m); 
1181    text-align: center; 
1182    /* width: 100% !important; 
1183    display: inline-flex; 
1184    margin-bottom: 24px; */ 
1185
1186 
1187 
1188 
1189.event-track-container{ 
1190	float: left; 
1191	width: 100%; 
1192	margin-left: var(--gs-base-spacing-0); 
1193	margin-bottom: var(--gs-base-spacing-l); 
1194
1195 
1196.event-track-container.parallel-tracks-3{ 
1197	width: calc((100% - 32px) / 3); 
1198    float: left; 
1199     
1200
1201 
1202.event-track-container.parallel-tracks-2{ 
1203    width: calc((100% - 16px) / 2); 
1204    float: left; 
1205     
1206
1207 
1208.event-date-container .parallel-tracks-3 + .parallel-tracks-3, 
1209.event-date-container .parallel-tracks-2 + .parallel-tracks-2 { 
1210	margin-left: var(--gs-base-spacing-m); 
1211
1212 
1213 
1214@media (max-width: 768px) { 
1215	.event-date-links-container { 
1216   	 	width: 100% !important; 
1217   	 	text-align: center; 
1218    	display: inline-block !important; 
1219    	margin-bottom: var(--gs-base-spacing-l); 
1220
1221 
1222	.event-date-link-container { 
1223    	padding: 0; 
1224    	flex: 1; 
1225    	display: inline-block; 
1226    	margin-bottom: var(--gs-base-spacing-xs);  
1227
1228	 
1229	.event-track-container.parallel-tracks-3 { 
1230        width: calc((100% - 48px) / 2); 
1231        float: left; 
1232
1233
1234 
1235@media (max-width: 576px) { 
1236    .event-date-links-container { 
1237        display: inline-grid !important; 
1238        margin-bottom: var(--gs-base-spacing-l); 
1239
1240     
1241	.event-track-container  { 
1242		width: 100% !important; 
1243    	margin-left: var(--gs-base-spacing-0) !important; 
1244		margin-right: var(--gs-base-spacing-0); 
1245    	padding: var(--gs-base-spacing-0) !important; 
1246
1247
1248 
1249</style> 
1250				 
1251<script> 
1252// Function to format a date to "DD MMMM YYYY" manually 
1253function formatDate(date) { 
1254    var day = String(date.getDate()).padStart(2, '0'); 
1255    var month = date.toLocaleString('default', { month: 'long' }); 
1256    var year = date.getFullYear(); 
1257    return day + ' ' + month + ' ' + year; 
1258
1259 
1260// Get today's date 
1261var today = new Date(); 
1262var formattedToday = formatDate(today); 
1263 
1264// Select all the date spans 
1265var dateSpans = document.querySelectorAll('.event-date-link-container .event-date-tab span'); 
1266 
1267// Check if any of the selected dates is today 
1268dateSpans.forEach(function(span) { 
1269    if (span.textContent.trim() === formattedToday) { 
1270		span.parentElement.click(); 
1271
1272}); 
1273</script>