An error occurred while processing the template.
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> ${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>