Page source: |
1: #********************************************************************
2: DO NOT MODIFY THIS FILE DIRECTLY - DEVIN SMITH
3:
4: This file is a direct duplicate of the schedule-networked-template
5: Any changes required should be made tot he other file and then
6: duplicated manually to this file.
7: ********************************************************************#
8:
9: ## PICK UP OPTIONS
10: $website.include("options")
11: #set ($options = $request.getAttribute("options"))
12:
13: #* BEGIN TABLE STYLE OPTIONS ***************#
14: #set($tableHelperClass = "")
15: #if ($options.get("table_bordered") != false) #set($tableHelperClass = "$tableHelperClass table-bordered") #end
16: #if ($options.get("table_head_dark") == true) #set($tableHelperClass = "$tableHelperClass thead-dark") #end
17: #if ($options.get("table_hover") != false) #set($tableHelperClass = "$tableHelperClass table-hover") #end
18: #* END TABLE STYLES OPTIONS ****************#
19:
20: ## CONFERENCE TEAM LINKING
21: #set ($confmemberIDs = $page.teamIDs)
22:
23: #set ($isPrinterFriendly = false)
24: #if ($request.getParameter("dec") == "printer-decorator")
25: #set ($isPrinterFriendly = true)
26: #end
27:
28: ## NEXT EVENT COUNTDOWN
29: #set ($showEventCountdown = true)
30: #if ($options.get("schedule_show_eventcountdown") == "false")
31: #set ($showEventCountdown = false)
32: #end
33:
34: #set ($showLeaders = true)
35: #if ($options.get("schedule_show_leaders") == "no")
36: #set ($showLeaders = false)
37: #end
38: #if ($request.getParameter("showLeaders") == true)
39: #set ($showLeaders = true)
40: #elseif ($request.getParameter("showLeaders") == false)
41: #set ($showLeaders = false)
42: #end
43:
44: #set ($showTeamLeadersCarousel = false)
45: #if ($options.get("schedule_show_team_leader_carousel") == "yes")
46: #set ($showTeamLeadersCarousel = true)
47: #end
48:
49: #set ($showRelatedArticles = false)
50: #if ($options.get("schedule_network_articles") == "yes")
51: #set ($showRelatedArticles = true)
52: #end
53:
54: #set ($leaderSportsMapped = ["basketball","soccer","volleyball","baseball","softball","hockey","lacrosse","waterpolo","football"])
55:
56: #if ($showLeaders)
57: $website.include("${page.sectionPage.url}/roster?tmpl=roster-headshots-template")
58: #set ($rosterHeadshots = $!request.getAttribute("roster_headshots"))
59: #end
60:
61: #set ($isTeamSchedule = false)
62: #if ($schedule.team.length() > 0) ## ?teamId=
63: #set ($isTeamSchedule = true)
64: #end
65:
66: #set ($isSharedMeet = false)
67: #if ($schedule.team.length() == 0 && !$schedule.numericResults && !$page.contentType.equals('loki/schedule'))
68: #set ($isSharedMeet = true)
69: #end
70:
71: #set ($linksAbbreviations = { "Preview": "PR", "Box Score": "BX", "Results": "RE", "Recap": "RC", "Live stats": "LS", "Video": "V", "Audio": "A", "Photos": "PH", "Tickets": "T", "Directions": "DR" })
72: #set ($linksOrder = ["LS", "VI", "BS", "RC", "RE", "GA", "AU", "DI", "TI", "PR", "LI"])
73: #set ($excludeLinksWhenEventIsFinished = ["LS", "DI", "TI", "PR"])
74: #set ($excludeLinksWhenEventIsLive = ["DI", "TI", "PR"])
75:
76: #set ($restrictLinks = true)
77: #if ($options.get("schedule_restrict_links") == false)
78: #set ($restrictLinks = false)
79: #end
80:
81: #set ($showLinkIcons = true)
82: #if ($request.getParameter("showLinkIcons") == false)
83: #set ($showLinkIcons = false)
84: #end
85:
86: #set ($abbreviatedLinks = false)
87: #if ($request.getParameter("abbreviatedLinks") == true)
88: #set ($abbreviatedLinks = true)
89: #end
90:
91: #set ($showVsAt = true)
92: #if ($options.get("schedule_hide_vs_at") == true)
93: #set ($showVsAt = false)
94: #end
95:
96: #set ($showTeamStats = true)
97: #if ($options.get("schedule_hide_team_stats") == true)
98: #set ($showTeamStats = false)
99: #end
100:
101: #set ($showExhibitionGames = true)
102: #if ($options.get("schedule_hide_exhibition_events") == true)
103: #set ($showExhibitionGames = false)
104: #end
105:
106: #set ($showSpotOnAddToCal = false)
107: #if ($options.get("schedule_show_spoton_add_to_cal") == "show")
108: #if ($options.get('stanza_code').length() > 0)
109: #set ($showSpotOnAddToCal = true)
110: #set ($stanzaCode = $options.get('stanza_code').toLowerCase())
111: #end
112: #end
113:
114: #set ($showTeamLogo = false)
115: #if ($options.get("schedule_show_team_logo") == "show" && !$isPrinterFriendly)
116: #set ($showTeamLogo = true)
117: #end
118:
119: #set ($includeTimeZone = true)
120: #if ($options.get('calendarIncludeTimeZone').length() > 0)
121: #set ($includeTimeZone = $options.get('calendarIncludeTimeZone').toLowerCase())
122: #end
123:
124: #set ($enhancedLayout = false)
125: #set ($scheduleLayout = "standard")
126: #set ($scheduleView = "list")
127: #if ($options.get("schedule_enhanced_layout") == "yes" && !$isPrinterFriendly)
128: #set ($enhancedLayout = true)
129: #set ($scheduleLayout = "enhanced")
130: #set ($scheduleView = "cards")
131: #end
132:
133: #set ($resultFormat = "AP1")
134: #if ($options.get("schedule_result_format").equals("L, 1-2")) ## whether to show $event.APResult or $event.AP2Result
135: #set ($resultFormat = "AP2")
136: #end
137:
138: #set ($scheduleNextEventScroll = false)
139: #if ($options.get("schedule_next_event_scroll") && $options.get("schedule_next_event_scroll") == true)
140: #set ($scheduleNextEventScroll = true)
141: #end
142:
143: #set($groupMonths = true)
144: #set($groupDates = false)
145: #set($currentMonthFirst = false)
146:
147: #* Defines if schedules events should be grouped by dates into callapsible panels *#
148: #if(!$isTeamSchedule) ## Conference
149: #set($groupDates = true)
150: #end
151:
152: #if ($options.get("schedule_group_by_months") == false)
153: #set($groupMonths = false)
154: #end
155: #if ($options.get("schedule_group_by_dates") == false)
156: #set($groupDates = false)
157: #end
158:
159: #if ($options.get("schedule_current_month_first") == true)
160: #set($currentMonthFirst = true)
161: #end
162:
163: $request.setAttribute("scheduleNextEvent", false)
164: $request.setAttribute("scheduleLastEvent", $event.id)
165:
166: #set ($dateFormat = "EEE. d")
167:
168: #if ($options.get("schedule_date_format").equals("Thu. 3"))
169: #set ($dateFormat = "EEE. d")
170: #elseif ($options.get("schedule_date_format").equals("Mar. 15"))
171: #set ($dateFormat = "MMM dd")
172: #elseif ($options.get("schedule_date_format").equals("Mar. 15, 2013"))
173: #set ($dateFormat = "MMM dd, yyyy")
174: #elseif ($options.get("schedule_date_format").equals("March 15, 2013"))
175: #set ($dateFormat = "MMMM dd, yyyy")
176: #elseif ($options.get("schedule_date_format").equals("March 15"))
177: #set ($dateFormat = "MMMM dd")
178: #elseif ($options.get("schedule_date_format").equals("03/15/2013"))
179: #set ($dateFormat = "MM/dd/yyyy")
180: #elseif ($options.get("schedule_date_format").equals("03/15"))
181: #set ($dateFormat = "MM/dd")
182: #elseif ($options.get("schedule_date_format").equals("Thursday, March 15, 2013"))
183: #set ($dateFormat = "EEEE, MMMM dd, yyyy")
184: #elseif ($options.get("schedule_date_format").equals("Thursday, Mar. 15, 2013"))
185: #set ($dateFormat = "EEEE, MMM dd, yyyy")
186: #elseif ($options.get("schedule_date_format").equals("Thursday, March 15"))
187: #set ($dateFormat = "EEEE, MMMM dd")
188: #elseif ($options.get("schedule_date_format").equals("Thursday, Mar. 15"))
189: #set ($dateFormat = "EEEE, MMM dd")
190: #elseif ($options.get("schedule_date_format").equals("Thu., March 15"))
191: #set ($dateFormat = "EEE., MMMM dd")
192: #elseif ($options.get("schedule_date_format").equals("Thu., Mar. 15"))
193: #set ($dateFormat = "EEE., MMM dd")
194: #end
195:
196: #set ($confNotation = "*")
197: #set ($divisionNotation = "^")
198: #set ($exhibitionNotation = "#")
199: #set ($postseasonNotation = "%")
200: #set ($multipleLeadersNotation = "+")
201:
202: #if (!$enhancedLayout)
203: #set ($scheduleLayout = 1)
204: #if ($tool.math.toInteger($options.get("schedule_default_layout")) > 1)
205: #set ($scheduleLayout = $tool.math.toInteger($options.get("schedule_default_layout")))
206: #end
207:
208: ## SET DEFAULT LABELS AND FIELDS FOR NUMERIC vs. NON-NUMERIC SCHEDULES
209: #if ($isTeamSchedule)
210: #if ($schedule.numericResults) ## team h2h
211: #if ($scheduleLayout == 1)
212: #set ($scheduleFields = ["date", "opponent+neutralsite", "result", "status", "notes", "links"])
213: #set ($scheduleLabels = ["Date", "Opponent", "Result", "Status", "Notes", "Links"])
214: #elseif ($scheduleLayout == 2)
215: #set ($scheduleFields = ["date", "opponent+neutralsite", "result", "status", "notes", "links"])
216: #set ($scheduleLabels = ["Date", "Opponent", "Result", "Status", "Notes", "Links"])
217: #elseif ($scheduleLayout == 3)
218: #set ($scheduleFields = ["date", "opponent", "result", "status", "notes+neutralsite", "links"])
219: #set ($scheduleLabels = ["Date", "Opponent", "Result", "Status", "Notes", "Links"])
220: #end
221: #else
222: #if ($scheduleLayout == 1)
223: #set ($scheduleFields = ["date", "opponent+neutralsite", "status", "team_away_result", "notes", "links"])
224: #set ($scheduleLabels = ["Date", "Event", "Status", "Result", "Notes", "Links"])
225: #elseif ($scheduleLayout == 2)
226: #set ($scheduleFields = ["date", "opponent", "status", "team_away_result", "notes+neutralsite", "links"])
227: #set ($scheduleLabels = ["Date", "Event", "Status", "Result", "Notes", "Links"])
228: #elseif ($scheduleLayout == 3)
229: #set ($scheduleFields = ["date", "opponent+neutralsite","status", "team_away_result", "notes", "links"])
230: #set ($scheduleLabels = ["Date", "Event", "Status", "Result", "Notes", "Links"])
231: #end
232: #end
233: #else ## CONFERENCE VIEW
234: #if($schedule.numericResults) ## conf h2h
235: #set ($scheduleFields = ["date", "team_away+team_away_result", "team_home+team_home_result", "notes+neutralsite", "status", "links"])
236: #set ($scheduleLabels = ["Date", "Away", "Home", "Notes", "Status", "Links"])
237: #else
238: #set ($scheduleFields = ["date", "team_away+team_away_result", "neutralsite", "notes", "links"])
239: #set ($scheduleLabels = ["Date", "Team", "Event", "Notes", "Links"])
240: #end
241: #end
242:
243: ## Remove dates from the array is they are present and groupDates is true.
244: #if ($groupDates)
245: #set ($filteredFields = "")
246: #foreach ($field in $scheduleFields)
247: #if ($field != "date")
248: #set ($filteredFields = "$filteredFields$field,")
249: #end
250: #end
251: #set ($scheduleFields = [])
252: #foreach ($f in $filteredFields.split(","))
253: #set ($temp = $scheduleFields.add($f))
254: #end
255:
256: #set ($filteredLabels = "")
257: #foreach ($label in $scheduleLabels)
258: #if ($label != "Date")
259: #set ($filteredLabels = "$filteredLabels$label,")
260: #end
261: #end
262: #set ($scheduleLabels = [])
263: #foreach ($l in $filteredLabels.split(","))
264: #set ($temp = $scheduleLabels.add($l))
265: #end
266: #end
267: ## End date removal
268:
269: ## SET FIELDS AND LABELS FROM OPTIONS IF AVAILABLE AND SANITIZE THEM
270: #if (!$options.get("schedule_fields").isEmpty() && !$options.get("schedule_labels").isEmpty())
271: #set ($optionFields = $options.get("schedule_fields"))
272: #set ($optionFields = $optionFields.split(","))
273: #foreach ($field in $optionFields)
274: #set ($field = $field.trim())
275: $tool.list.set($optionFields, $tool.math.sub($velocityCount, 1), $field)
276: #end
277:
278: #set ($optionLabels = $options.get("schedule_labels"))
279: #set ($optionLabels = $optionLabels.split(","))
280: #foreach ($label in $optionLabels)
281: #set ($label = $label.trim())
282: #if ($label.equals("-"))
283: #set ($label = " ")
284: #end
285: $tool.list.set($optionLabels, $tool.math.sub($velocityCount, 1), $label)
286: #end
287:
288: #if ($tool.list.size($optionFields) == $tool.list.size($optionLabels))
289: #set ($scheduleFields = $optionFields)
290: #set ($scheduleLabels = $optionLabels)
291: #end
292: #end
293: #end
294:
295: ## MACROS
296: #macro (printPageTitle)
297: #if ($page.title.length() > 0)
298: #if ($schedule.team.length() > 0 && $page.teams.size() > 1)
299: #set ($pageTitle = "${page.title} - ${schedule.team}")
300: #else
301: #set ($pageTitle = $page.title)
302: #end
303: <h1>$pageTitle</h1>
304: $!request.setAttribute("pageTitle", "${pageTitle}")
305: #end
306: $!request.setAttribute("pageDescription", "${pageTitle} - Record: $schedule.Record")
307:
308: #end ## printPageTitle
309:
310: #macro (printEventTypesFilter)
311: #if ($eventTypes.size() > 1)
312: #set ($id = "filter-by-type")
313: <div class="schedule-filter flex-grow-1">
314: <div class="input-group">
315: <span class="input-group-text" id="${id}-group-text">Type</span>
316: <select class="form-control type-filter form-select" aria-describedby="${id}-group-text" id="$id" data-filter="true" aria-label="Filter events by selecting an event type from the list">
317: <option value="all">All</option>
318: #if ($eventTypes.contains("conference"))
319: <option value="conf">Conference</option>
320: #end
321: #if ($eventTypes.contains("division"))
322: <option value="division">Division</option>
323: #end
324: #if ($eventTypes.contains("exhibition"))
325: <option value="exhibition">Exhibition</option>
326: #end
327: #if ($eventTypes.contains("postseason"))
328: <option value="postseason">Post Season</option>
329: #end
330: </select>
331: </div>
332: </div>
333: #end
334: #end ## printEventTypesFilter
335:
336: #macro (printVenueFilter)
337: #if (($isSharedMeet || $isTeamSchedule) && $eventVenues.size() > 1)
338: #set ($id = "filter-by-venue")
339: <div class="schedule-filter flex-grow-1">
340: <div class="input-group">
341: <span class="input-group-text" id="${id}-group-text">Venue</span>
342: <select class="form-control venue-filter form-select" aria-describedby="${id}-group-text" id="$id" data-filter="true" aria-label="Filter events by selecting a venue from the list">
343: <option value="all">All</option>
344: #if ($eventVenues.contains("home"))
345: <option value="home">Home Games</option>
346: #end
347: #if ($eventVenues.contains("away"))
348: <option value="away">Away Games</option>
349: #end
350: #if ($eventVenues.contains("neutral"))
351: <option value="neutral">Neutral Games</option>
352: #end
353: </select>
354: </div>
355: </div>
356: #end
357: #end ## printVenueFilter
358:
359: #macro (printArchiveFilter)
360: $!request.setAttribute("pageObj", $page)
361: ## INCLUDE NAVBAR FOR SEASON ARCHIVES
362: #set ($legacyArchiveFilter = false)
363: #set ($legacyArchiveFilter = $options.get("legacy_archive_filter") == true)
364:
365: ## legacy archive filter uses a navbar to power the season switcher
366: #if ($legacyArchiveFilter)
367: $website.include("navbar-schedule-archive?tmpl=schedule-archive-list-template")
368: #set ($archiveEntries = $request.getAttribute("schedule_archives"))
369: #if ($archiveEntries.size() > 0)
370: <div class="schedule-filter col-12 col-sm-6 col-md-auto flex-grow-1">
371: <div class="input-group">
372: <span class="input-group-text" id="filter-by-season-group-text">Season</span>
373: <select class="form-control season-filter form-select" onchange="location=this.value" aria-describedby="filter-by-season-group-text" id="filter-by-season" aria-label="Change the season by selecting an option from the list">
374: #foreach ($entry in $archiveEntries)
375: #if ($entry.label.length() > 0 && $entry.targetURL.length() > 0)
376: <option value="$entry.targetURL" #if ($entry.targetURL.equals($page.url)) selected="selected" #end>$entry.label</option>
377: #end
378: #end
379: </select>
380: </div>
381: </div>
382: #end
383: #else
384: $website.include("conf-season-filter-template")
385: #end
386: #end ## printArchiveFilter
387:
388: #macro (printFilters)
389: <div class="page-filters schedule-filters d-print-none">
390: <div class="btn-toolbar d-flex justify-content-between gap-3" role="toolbar" aria-label="Schedule tool bar">
391: <div class="m-0" role="group" aria-label="Print friendly version">
392: <a href="${page.url}?dec=printer-decorator" class="btn btn-link border text-decoration-none text-nowrap"><span class="fa fa-print"></span> Print</a>
393: #if ($showSpotOnAddToCal)
394: <div class="d-inline-block spoton-add-to-cal"><a class="spoton-it btn btn-link border text-decoration-none" data-size="medium" href="https://stanza.co/schedules"><span class="far fa-calendar-alt"></span> Add to calendar</a></div>
395: #end
396: </div>
397: #printArchiveFilter()
398: #printEventTypesFilter()
399: #printVenueFilter()
400:
401: </div>
402: </div>
403: #end ## printFilters
404:
405: #macro (printSubscribeLinks)
406: #if($schedule.events.size() > 0)
407: <div class="subscribe-links p-3 my-3 border">
408: <div class="btn-group me-auto">
409: <a class="btn btn-sm btn-outline-primary" href="$icalURL"><span class="far fa-calendar-alt"></span> <strong>iCalendar</strong></a> ## iCalendar
410: <a class="btn btn-sm btn-outline-primary" href="$rssURL"><span class="fas fa-rss"></span> <strong>RSS Feed</strong></a> ## RSS
411: </div>
412: </div>
413: #end
414: #end
415:
416: #macro (printPostSchedule)
417: #set ($schedulePostURL = "${page.url}-post")
418: #if ($website.exists($schedulePostURL))
419: <div class="schedule-post">$website.include($schedulePostURL)</div>
420: #end
421: #end
422:
423: #macro (printLegends)
424: <div class="notations d-flex flex-column flex-md-row align-items-center justify-content-center align-items-md-start justify-content-md-start gap-3 flex-wrap my-3 small text-muted">
425: #if($enhancedLayout)
426: <div class="event-legend-venue p-2 px-3 border rounded">
427: <div class="d-flex align-items-center justify-content-center align-items-md-start justify-content-md-start flex-wrap gap-3">
428: #if ($eventVenues.contains("home"))
429: <div class="card-venue-icon home home-color-indicator">
430: <span class="fa-solid fa-circle fa-sm" aria-hidden="true"></span>
431: Home
432: </div>
433: #end
434: #if ($eventVenues.contains("away"))
435: <div class="card-venue-icon away away-color-indicator">
436: <span class="fa-solid fa-circle fa-sm" aria-hidden="true"></span>
437: Away
438: </div>
439: #end
440: #if ($eventVenues.contains("neutral"))
441: <div class="card-venue-icon neutral neutral-color-indicator">
442: <span class="fa-solid fa-circle fa-sm" aria-hidden="true"></span>
443: Neutral
444: </div>
445: #end
446: </div>
447: </div>
448: #end
449:
450: <div class="event-legend-type p-2 px-3 rounded">
451: <div class="d-flex align-items-center justify-content-center align-items-md-start justify-content-md-start flex-wrap gap-3">
452: #if ($eventTypes.contains("exhibition"))
453: <div class="exhibition"><strong>$exhibitionNotation</strong> <span>Exhibition</span></div>
454: #end
455: #if ($eventTypes.contains("conference"))
456: <div class="conf"><strong>$confNotation</strong> <span>Conference</span></div>
457: #end
458: #if ($eventTypes.contains("division"))
459: <div class="division"><strong>$divisionNotation</strong> <span>Division</span></div>
460: #end
461: #if ($eventTypes.contains("postseason"))
462: <div class="postseason"><strong>$postseasonNotation</strong> <span>Postseason</span></div>
463: #end
464: #if ($eventVenues.contains("home") && $isTeamSchedule)
465: <div class="home"><strong><span>Home events in bold</span></strong></div>
466: #end
467: </div>
468: </div>
469:
470: </div>
471: #end ## printLegends
472:
473: #macro (printLinkAriaLabel $event $link $linkTypeCounter)
474: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
475: #if ($event.neutralSite.length() > 0 || $event.home)
476: #set ($vsOrAt = "vs.")
477: #else
478: #set ($vsOrAt = "at")
479: #end
480: #if ($event.teams.size() > 1)
481: #set ($ariaLabel = "${ariaLabel} ${event.teams.get(0).name} ${vsOrAt} ${event.teams.get(1).name}:")
482: #elseif ($event.teams.size() == 1)
483: #set ($ariaLabel = "${ariaLabel} ${event.teams.get(0).name}:")
484: #end
485: #if ($event.neutralSite.length() > 0)
486: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
487: #end
488: #set ($ariaLabel = "${ariaLabel} ${link.name}")
489: #if ($linkTypeCounter > 1)
490: #set ($ariaLabel = "${ariaLabel} link ${linkTypeCounter}")
491: #end
492: aria-label="$ariaLabel"
493: #end
494:
495: #macro (printEventLink $link $class)
496: #set ($linkText = $link.name)
497: #if ($abbreviatedLinks)
498: #if ($link.mapType == "LI" || "$!link.siteCustomSettings.abbreviatedTitle" != "")
499: #set ($linkText = "LI")
500: #if("$!link.siteCustomSettings.abbreviatedTitle" != "")
501: #set ($linkText = $link.siteCustomSettings.abbreviatedTitle)
502: #end
503: #else
504: #foreach ($l in $linksAbbreviations.entrySet())
505: #if ($link.name.equalsIgnoreCase($l.key))
506: #set ($linkText = $l.value)
507: #end
508: #end
509: #end
510: #end
511:
512: <a #printLinkAriaLabel($event, $link, $linkTypeCounter) href="$link.url" #if ($website.isExternalLink($link.url)) target="_blank" #end class="${class} d-print-none">
513: #if ($showLinkIcons)
514: #if ($link.mapType == "GA") ##gallery
515: <span class="far fa-sm fa-images"></span>
516: #elseif ($link.mapType == "TI") ##tickets
517: <span class="fas fa-sm fa-ticket-alt"></span>
518: #elseif($link.mapType == "RC") ##recap
519: <span class="fa fa-sm fa-share"></span>
520: #elseif($link.mapType == "PR") ##preview
521: <span class="far fa-sm fa-eye"></span>
522: #elseif($link.mapType == "LS") ##live stats
523: <span class="fas fa-sm fa fa-eye"></span>
524: #elseif($link.mapType == "VI") ##video
525: <span class="fa fa-sm fa-video-camera"></span>
526: #elseif($link.mapType == "AU") ## audio
527: <span class="fas fa-sm fa-headphones-alt"></span>
528: #elseif($link.mapType == "DI") ##directions
529: <span class="fas fa-sm fa-directions"></span>
530: #elseif($link.mapType == "BS") ##box scores
531: <span class="far fa-sm fa-chart-bar"></span>
532: #elseif($link.mapType == "RE") ##results
533: <span class="fa fa-sm fa-calculator"></span>
534: #elseif($link.mapType == "LI") ##custom link
535: <span class="fa fa-sm fa-external-link"></span>
536: #end
537: <span class="text d-md-none d-lg-inline-block">$linkText</span>
538: #else
539: <span class="text">$linkText</span>
540: #end
541: </a>
542: #end
543:
544: #macro (printEventLinks $event $class)
545: #set ($eventLinks = $event.links)
546:
547: #set ($isFinished = false)
548: #if ($event.statusCode >= 0 || ($event.statusCode == -3 && $now.time >= ($event.date.time + (1000*60*60*24)))) ## -3 is reported for event sports
549: #set ($isFinished = true)
550: #end
551:
552: #if ($restrictLinks && ($event.inProgress || $isFinished))
553: #set ($eventLinks = [])
554: #foreach ($link in $event.links)
555: #if ($event.inProgress && !$excludeLinksWhenEventIsLive.contains($link.mapType))
556: #set ($ignoreme = $eventLinks.add($link))
557: #elseif ($isFinished && !$excludeLinksWhenEventIsFinished.contains($link.mapType))
558: #set ($ignoreme = $eventLinks.add($link))
559: #end
560: #end
561: #end
562:
563: #foreach ($mapType in $linksOrder)
564: #foreach ($link in $eventLinks)
565: #if ($mapType == $link.mapType)
566: #printEventLink($link, "link $class")
567: #end
568: #end
569: #end
570:
571: #end ## printEventLinks
572:
573: #macro (printEventButtons $event)
574: #set ($eventLinks = $event.links)
575:
576: #set ($isFinished = false)
577: #if ($event.statusCode >= 0 || ($event.statusCode == -3 && $now.time >= ($event.date.time + (1000*60*60*24)))) ## -3 is reported for event sports
578: #set ($isFinished = true)
579: #end
580:
581: #if ($restrictLinks && ($event.inProgress || $isFinished))
582: #set ($eventLinks = [])
583: #foreach ($link in $event.links)
584: #if ($event.inProgress && !$excludeLinksWhenEventIsLive.contains($link.mapType))
585: #set ($ignoreme = $eventLinks.add($link))
586: #elseif ($isFinished && !$excludeLinksWhenEventIsFinished.contains($link.mapType))
587: #set ($ignoreme = $eventLinks.add($link))
588: #end
589: #end
590: #end
591:
592: #set ($linksCounter = 0)
593: <div class="list-group list-group-horizontal-md w-100">
594: #foreach ($mapType in $linksOrder)
595: #set ($linkTypeCounter = 0)
596:
597: #foreach ($link in $eventLinks)
598: #if ($mapType == $link.mapType)
599: #printEventLink($link, "link text-nowrap")
600: #end
601: #end
602:
603: #end
604: </div>
605: #end ## printEventButtons
606:
607: #macro (printEventCardLinks $event)
608:
609: #set ($isFinished = false)
610: #if ($event.statusCode >= 0 || ($event.statusCode == -3 && $now.time >= ($event.date.time + (1000*60*60*24)))) ## -3 is reported for event sports
611: #set ($isFinished = true)
612: #end
613:
614: #if ($restrictLinks && ($event.inProgress || $isFinished))
615: #set ($eventLinks = [])
616: #foreach ($link in $event.links)
617: #if ($event.inProgress && !$excludeLinksWhenEventIsLive.contains($link.mapType))
618: #set ($ignoreme = $eventLinks.add($link))
619: #elseif ($isFinished && !$excludeLinksWhenEventIsFinished.contains($link.mapType))
620: #set ($ignoreme = $eventLinks.add($link))
621: #end
622: #end
623: #else
624: #set ($eventLinks = $event.links)
625: #end
626:
627: #set ($linksCounter = 0)
628: #foreach ($mapType in $linksOrder)
629: #set ($linkTypeCounter = 0)
630: #foreach ($link in $eventLinks)
631: #if ($mapType == $link.mapType)
632: #printEventLink($link, "link list-inline-item text-decoration-none")
633: #end
634: #end
635:
636: #end
637: #end ## printEventCardLinks
638:
639: #macro(neCounter $event)
640: <div class="events-countdown d-flex flex-column justify-content-center w-100">
641: <div class="counter-details">
642: <div class="counter-details-inner">
643: #set ($countdownDateServer = $tool.timeZone.shift($event.date, $event.localTimeZone, $tool.timeZone.systemTimeZone))
644: #set ($countdownDate = $formatter.formatDate($countdownDateServer, "yyyy-MM-dd+HH:mm:ss+z"))
645: $website.includeAgain("component-countdown-digits-template?date=${countdownDate}")
646: </div>
647: </div>
648: </div>
649: #end
650:
651: #macro (printNotation $title $notation)
652: <span class="notation small text-muted" title="$title">$notation</span>
653: #end
654:
655: #macro (printNotations $event)
656: #if ($event.conference) #printNotation("Conference", $confNotation) #end
657: #if ($event.division) #printNotation("Division", $divisionNotation) #end
658: #if (!$event.overall) #printNotation("Do not count in overall record", $exhibitionNotation) #end
659: #if ($event.postseason) #printNotation("Post season", $postseasonNotation) #end
660: #end
661:
662: #macro (printTeamLogoSetWidth $team $width)
663: #if ($showTeamLogo && $team.teamId.length() > 0)
664: <span class="event-logo logo-placeholder">
665: <img src="${website.teamLogo($team.teamId)}" alt="$team.name team logo" style="max-width:${width}px; max-height:${width}px" class="#if ($enhancedLayout)img-thumbnail border-0#end" />
666: </span>
667: #end
668: #end
669:
670: #macro (printTeamName $team)
671: #if ($team.name.length() > 0)
672: #if ($confmemberIDs.contains($team.teamId) && $page.teams.size() > 1 && !$isTeamSchedule)
673: <a href="${page.url}?teamId=${team.teamId}" class="text-decoration-none $page.teams.size()" title="${team.name}">
674: <span class="team-name">$team.name</span>
675: </a>
676: #else
677: <span class="team-name" title="${team.name}">$team.name</span>
678: #end
679: #end
680: #end
681:
682: #macro (printAPResult $event)
683: #if ($resultFormat.equals("AP1"))
684: #set ($APResult = $event.APResult)
685: #elseif ($resultFormat.equals("AP2"))
686: #set ($APResult = $event.AP2Result)
687: #end
688:
689: #if (!$event.inProgress && $APResult.length() > 0)
690: #if ($APResult.startsWith("W, "))
691: $APResult.replace("W, ", '<span class="text-success" data-context="result">W</span><span class="fw-normal">,</span> ')
692: #elseif ($APResult.startsWith("L, "))
693: $APResult.replace("L, ", '<span class="text-danger" data-context="result">L</span><span class="fw-normal">,</span> ')
694: #else
695: $APResult
696: #end
697: #else
698: $event.result
699: #end
700: #end
701:
702: #macro (printEventStatus $event)
703: #if ($includeTimeZone)
704: #if ($includeTimeZone.contains('local'))
705: $formatter.formatStatus($event).setTimeFormat("h:mm a z").useEventTimeZone()
706: #else
707: $formatter.formatStatus($event).setTimeFormat("h:mm a z")
708: #end
709: #else
710: $formatter.formatStatus($event)
711: #end
712: #end
713:
714: #macro (printEventNeutralSite $event)
715: #if ($event.neutralSite.length() > 0)
716: @ $event.neutralSite
717: #end
718: #end
719:
720: #macro (printEventNotes $event)
721: #if ($event.notes.length() > 0)
722: $event.notes
723: #end
724: #end
725:
726: #macro (printBoxscoreRecapUrl $event)
727: #set ($boxscoreURL = "")
728: #set ($recapURL = "")
729: #foreach ($link in $event.links)
730: #if ($boxscoreURL.length() == 0 && $link.url.endsWith(".xml") && $link.mapType == "BS" && !$website.isExternalLink($link.url))
731: data-boxscore="$link.url"
732: #elseif ($link.mapType == "RC" && $recapURL.length() == 0 && !$website.isExternalLink($link.url))
733: data-recap="$link.url"
734: #end
735: #end
736: #end
737:
738: #macro (printTeamListImage $src $alt $class)
739: #set ($src = "${src}?max_height=576&max_width=576&crop=1")
740: <div class="ratio ratio-1x1">
741: <span class="align-content-center">
742: <img src="${src}" alt="${alt}" class="${class}" />
743: </span>
744: </div>
745: #end
746:
747: #macro (printImage $src $alt $class)
748: #set ($src = "${src}?max_height=576&max_width=576&crop=1")
749: <div class="ratio ratio-1x1 rounded-circle overflow-hidden img-thumbnail">
750: <span class="align-content-center">
751: <img src="${src}" alt="${alt}" class="${class}" />
752: </span>
753: </div>
754: #end
755:
756: #macro (printSharedMeet)
757: #set ($teams = $tool.sorter.sort($page.teams.entrySet(), "value"))
758: #set ($teamsThreshold = 20)
759:
760: #if ($teams.size() > $teamsThreshold)
761: #set ($teamsByAlphabets = {})
762: #foreach ($team in $teams)
763: #set ($firstLetter = $team.value.charAt(0))
764: #set ($arr = [])
765: #if ($teamsByAlphabets.containsKey($firstLetter))
766: #set ($arr = $teamsByAlphabets.get($firstLetter))
767: #end
768: #set ($bool = $arr.add($team))
769: #set ($val = $teamsByAlphabets.put($firstLetter, $arr))
770: #end
771:
772: <ul class="team-alphabets">
773: #foreach ($alphabet in $teamsByAlphabets.entrySet())
774: <li><a href="#${alphabet.key}">$alphabet.key</a></li>
775: #end
776: </ul>
777:
778: <div class="team-list clearfix">
779: <div class="col">
780: #foreach ($obj in $teamsByAlphabets.entrySet())
781: #if ($velocityCount == 8 || $velocityCount == 15)
782: </div><div class="col">
783: #end
784: #set ($teamList = $obj.value)
785: <ul>
786: <li class="title" id="${obj.key}">$obj.key</li>
787: #foreach ($team in $teamList)
788: <li><a href="${page.url}?teamId=${team.key}">$team.value</a></li>
789: #end
790: </ul>
791: #end
792: </div>
793: </div>
794: #else ## less than threshold
795: #if ($teams.size() == 0)
796: <div class="alert alert-secondary" role="alert">
797: There are no teams that match this criteria. Please check back soon!
798: </div>
799: #else
800: <div class="team-list p-3 p-lg-5 border">
801: <div class="fs-5 text-center mb-3">Available Team Schedules</div>
802: <div class="btn-toolbar d-flex justify-content-center align-items-center gap-2 mb-3">
803: #foreach ($team in $teams)
804: <div>
805: <a href="${page.url}?teamId=${team.key}" class="btn btn-link border-0 text-decoration-none">
806: <span class="d-flex justify-content-start align-items-center gap-2">
807: <span class="img-mw-3" style="width:3rem;">
808: #printTeamListImage($website.teamLogo($!{team.key}), ${team.value}, "img-fluid")
809: </span>
810: </span>
811: </a>
812: </div>
813: #end
814: </div>
815: <div class="btn-toolbar d-flex justify-content-center align-items-center gap-2">
816: #foreach ($team in $teams)
817: <a href="${page.url}?teamId=${team.key}" class="btn btn-link border text-decoration-none">
818: $team.value
819: </a>
820: #end
821: </div>
822: </div>
823: #*
824: <div class="team-list">
825: <div class="row row-cols-2 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-6 g-3">
826: #foreach ($team in $teams)
827: <div class="cards col">
828: <div class="card position-relative">
829: <div class="card-body d-flex flex-column gap-2">
830: <div class="card-team-logo text-center w-100">
831: <div class="d-flex flex-column align-items-center justify-content-center">
832: <div style="width:5rem;">
833: #printTeamListImage($website.teamLogo($!{team.key}), ${team.value}, "img-fluid")
834: </div>
835: </div>
836: </div>
837: <div class="card-title entry-title fw-bold mb-0 text-center">
838: <a href="${page.url}?teamId=${team.key}" class="stretched-link">$team.value</a>
839: </div>
840: </div>
841: </div>
842: </div>
843: #end
844: </div>
845: </div>
846:
847: *#
848: #end
849: #end ## teams threshold
850: #end ## printSharedMeet
851:
852: #set($statClass = "flex-fill text-center border-bottom border-end p-2 p-lg-3 col-4 col-sm-3 col-md-4 col-lg-auto")
853:
854: #macro (printStat $label $val)
855: <li class="$statClass">
856: <div class="d-flex flex-column justify-content-center align-items-center h-100">
857: <div class="small text-uppercase text-muted">$label</div>
858: <div class="fs-5 lh-1 text-nowrap fw-bold">$val</div>
859: </div>
860: </li>
861: #end
862:
863: #macro (printStatGraph $label $val)
864: <li class="$statClass">
865: <div class="d-flex flex-column justify-content-center align-items-center h-100 proj-progress-card">
866: <div class="small text-uppercase fw-normal">$label</div>
867: <div class="fs-5 lh-1 text-nowrap fw-bold">$formatter.formatNumber($val, "#.000")</div>
868:
869: #set ($percent = $tool.math.mul($val, 100))
870: <div class="progress mt-2 w-75">
871: <div class="progress-bar bg-primary" role="progressbar" style="width: $formatter.formatNumber($percent, 1)%;" aria-valuenow="$formatter.formatNumber($percent, 1)" aria-valuemin="0" aria-valuemax="100"></div>
872: </div>
873: </div>
874: </li>
875: #end
876:
877: #macro (printEventCountdown)
878: ## NEXT EVENT COUNTDOWN
879: #if ($showEventCountdown)
880:
881:
882: #set ($currentDate = $now)
883: #set ($dateFormat = "MMM dd")
884: #set ($dayFormat = "EEEE")
885:
886: #set ($eventList = [])
887:
888: ## filter out exhibition events and count the number of previous and upcoming events
889: #foreach ($event in $schedule.events)
890: #if ($event.date && ($event.overall || !$hideExhibition) && !$event.cancelled && !$event.postponed)
891: #set ($eventServerDate = $tool.timeZone.shift($event.date, $event.localTimeZone, $tool.timeZone.systemTimeZone))
892: #if (!$eventServerDate.before($currentDate))
893: #set ($val = $eventList.add($event))
894: #end
895: #end
896: #end
897:
898: #if ($eventList.size() > 0)
899: #printNextEventList($eventList)
900: $request.setAttribute("scheduleNextEvent", false) ## resetting this to false ensures the schedule will feature a next event if present.
901: #end
902: #end
903: #end
904:
905: #macro(eventDate $event)
906: ## conversion of a date into string and back to date sets the time to 00:00
907: #set ($today = $formatter.formatDate($now, "MMMM dd yyyy"))
908: #set ($today = $tool.date.format("MMMM dd yyyy", $today))
909: #set ($date = $tool.date.format("MMMM dd yyyy", $event.date))
910: #if($date.equals($today))
911: Today
912: #else
913: $formatter.formatDate($event.date, "${dateFormat}")
914: #end
915: #end
916:
917: #macro (printTeamStats)
918: #if ($schedule.numericResults && $isTeamSchedule)
919: #set ($number = $schedule.Record.winPercentage)
920: #set ($confnumber = $schedule.conferenceRecord.winPercentage)
921:
922: <ul class="team-stats list-unstyled d-flex flex-wrap justify-content-center align-items-stretch border-top border-start">
923: #printStat("Overall", $schedule.Record)
924: #printStatGraph("PCT", $number)
925: #printStat("Conf", $schedule.ConferenceRecord)
926: #printStatGraph("C.PCT", $confnumber)
927: #set ($streak = $schedule.streak.toString().replace('Lost ', '<span data-context="result">L</span>').replace('Won ', '<span data-context="result">W</span>'))
928: #printStat("Streak", $streak)
929: #printStat("Home", $schedule.homeRecord)
930: #printStat("Away", $schedule.awayRecord)
931: #printStat("Neutral", $schedule.neutralRecord)
932: </ul> ## team-stats
933: #end
934: #end ## printTeamStats
935:
936: #macro (liveEventIndicator)
937: <div class="next-event-header fw-bold d-flex align-items-center justify-content-start gap-2">
938: <span class="fa fa-circle fa-sm fa-beat-fade text-primary" aria-hidden="true"></span>
939: <span>#printEventStatus($event)</span>
940: </div>
941: #end
942:
943: #macro (nextEventIndicator)
944: <div class="next-event-header fw-bold d-flex align-items-center justify-content-start gap-2">
945: <span class="fa-regular fa-bell"></span>
946: <span class="text">Next Event</span>
947: </div>
948: #end
949:
950: #macro (printTeamEventForNextEvent $event)
951: <div class="card-header">
952: <div class="next-event-header fw-bold d-flex align-items-center justify-content-center gap-2">
953: <span class="text">Next Event</span>
954: </div>
955: </div>
956: <div class="card-body">
957: <div class="d-flex flex-column justify-content-center align-items-center gap-2">
958: <div class="d-flex flex-column flex-md-row justify-content-center align-items-center gap-3 w-100">
959: <div class="text-start flex-grow-1 flex-shrink-1 w-100">
960: <div class="d-flex flex-column flex-md-row justify-content-center align-items-center gap-2 gap-md-3">
961: #if ($showTeamLogo && $event.opponent.teamId.length() > 0)
962: <div class="logo-aside-container">
963: <div class="lac-placeholder bg-primary border rounded p-2">
964: #printTeamLogoSetWidth($event.opponent, 72)
965: </div>
966: </div>
967: #end
968: <div class="flex-grow-1">
969: <div class="d-flex flex-column align-items-center align-items-md-start justify-content-center gap-1">
970: <div class="event-opponent d-flex align-items-center justify-content-center gap-2 fs-5">
971: #printLocationIcon($event)
972: <span class="event-opponent-name mb-0 fw-bold align-middle">#printTeamName($event.opponent)</span>
973: #printNotations($event)
974: </div>
975: <div class="event-dateinfo">
976: <div class="d-flex align-items-center justify-content-start gap-3">
977: <div class="date d-flex align-items-center justify-content-center gap-1">
978: <span class="fa fa-calendar-o fa-sm text-muted" aria-hidden="true"></span>
979: <span>#eventDate($event)</span>
980: </div>
981: <div class="status d-flex align-items-center justify-content-center gap-1">
982: <span class="fa-regular fa-clock fa-sm text-muted" aria-hidden="true"></span>
983: <span>#printEventStatus($event)</span>
984: </div>
985: </div>
986: </div>
987: #if ($event.neutralSite.length() > 0)
988: <div class="event-neutralsite small text-muted text-center text-md-start">#printEventNeutralSite($event)</div>
989: #end
990: </div>
991: </div>
992: </div>
993: </div>
994: <div class="text-md-right flex-grow-1 flex-shrink-1 w-100">
995: <div class="d-flex flex-column flex-md-row align-items-center flex-nowrap justify-content-end gap-3">
996: #neCounter($event)
997: </div>
998: </div>
999: </div>
1000: <div class="details d-flex flex-wrap gap-3 align-items-center justify-content-center w-100">
1001: #if ($event.notes.length() > 0)
1002: <div class="event-notes small text-muted text-center">#printEventNotes($event)</div>
1003: #end
1004: </div>
1005: </div>
1006: </div>
1007: #if($event.links.size() > 0)
1008: <div class="card-footer small">
1009: <div class="event-controls d-flex flex-column flex-md-row align-items-md-center justify-content-center gap-3 ">
1010: <div class="event-links list-inline d-flex align-items-center justify-content-center gap-3 flex-wrap flex-grow-1">
1011: #printEventCardLinks($event)
1012: </div>
1013: </div>
1014: </div>
1015: #end
1016: #end ## printTeamEventForNextEvent
1017:
1018: #macro (printConfEventForNextEvent $event)
1019: #set ($awayTeam = $event.teams.get(0))
1020: #set ($homeTeam = $event.teams.get(1))
1021:
1022: #set ($awayClass = "away")
1023: #set ($homeClass = "home")
1024:
1025: #if ($awayTeam.winner)
1026: #set ($awayClass = "${awayClass} winner")
1027: #set ($homeClass = "${homeClass} loser")
1028: #elseif ($homeTeam.winner)
1029: #set ($awayClass = "${awayClass} loser")
1030: #set ($homeClass = "${homeClass} winner")
1031: #end
1032:
1033: <div class="card-header">
1034: <div class="next-event-header fw-bold d-flex align-items-center justify-content-center gap-2">
1035: <span class="text">Next Event</span>
1036: </div>
1037: </div>
1038: <div class="card-body">
1039: <div class="d-flex flex-column justify-content-center align-items-center gap-2">
1040: <div class="d-flex flex-column flex-md-row justify-content-center align-items-center gap-3 w-100">
1041: <div class="text-start flex-grow-1 w-100">
1042: <div class="d-flex flex-column flex-md-row justify-content-center align-items-center gap-2 gap-md-3">
1043: #if ($showTeamLogo && ($awayTeam.teamId.length() > 0 || $homeTeam.teamId.length() > 0))
1044: <div class="logo-aside-container conference-logo">
1045: <div class="d-flex flex-row flex-nowrap align-items-center justify-content-center gap-2">
1046: #if ($awayTeam.teamId.length() > 0)
1047: <div class="lac-placeholder bg-primary border rounded p-2">
1048: #printTeamLogoSetWidth($awayTeam, 84)
1049: </div>
1050: #end
1051: #if ($homeTeam.teamId.length() > 0)
1052: <div class="lac-placeholder bg-primary border rounded p-2">
1053: #printTeamLogoSetWidth($homeTeam, 84)
1054: </div>
1055: #end
1056: </div>
1057: </div>
1058: #end
1059:
1060: <div class="flex-grow-1">
1061: <div class="d-flex flex-column align-items-center align-items-md-start justify-content-center gap-1">
1062: <div class="event-home-team d-flex flex-column align-items-center align-items-md-start justify-content-center justify-content-md-start gap-0 fs-5 w-100">
1063: <div class="event-team-name away-team d-flex align-items-center justify-content-center gap-2">
1064: <span class="event-opponent-name mb-0 fw-bold align-middle">#printTeamName($awayTeam)</span>
1065: </div>
1066: <div class="event-team-name home-team d-flex align-items-center justify-content-center justify-content-md-start gap-2">
1067: #printLocationIcon($event)
1068: <span class="event-opponent-name mb-0 fw-bold align-middle">#printTeamName($homeTeam)</span>
1069: #printNotations($event)
1070: </div>
1071: </div>
1072: <div class="event-dateinfo">
1073: <div class="d-flex align-items-center justify-content-start gap-3">
1074: <div class="date d-flex align-items-center justify-content-center gap-1">
1075: <span class="fa fa-calendar-o fa-sm text-muted" aria-hidden="true"></span>
1076: <span>#eventDate($event)</span>
1077: </div>
1078: <div class="status d-flex align-items-center justify-content-center gap-1">
1079: <span class="fa-regular fa-clock fa-sm text-muted" aria-hidden="true"></span>
1080: <span>#printEventStatus($event)</span>
1081: </div>
1082: </div>
1083: </div>
1084: #if ($event.neutralSite.length() > 0)
1085: <div class="event-neutralsite small text-muted text-center text-md-start">#printEventNeutralSite($event)</div>
1086: #end
1087: </div>
1088: </div>
1089: </div>
1090: </div>
1091: <div class="text-md-right flex-grow-1 flex-shrink-1 w-100">
1092: <div class="d-flex flex-column flex-md-row align-items-center flex-nowrap justify-content-end gap-3">
1093: #neCounter($event)
1094: </div>
1095: </div>
1096: </div>
1097: <div class="details d-flex flex-wrap gap-3 align-items-center justify-content-center w-100">
1098: #if ($event.notes.length() > 0)
1099: <div class="event-notes small text-muted text-center">#printEventNotes($event)</div>
1100: #end
1101: </div>
1102: </div>
1103: </div>
1104: #if($event.links.size() > 0 || $eventOverview)
1105: <div class="card-footer small">
1106: <div class="event-controls d-flex flex-column flex-md-row align-items-md-center justify-content-center gap-3 ">
1107: <div class="event-links list-inline d-flex align-items-center justify-content-center gap-3 flex-wrap flex-grow-1">
1108: #printEventCardLinks($event)
1109: </div>
1110: </div>
1111: </div>
1112: #end
1113:
1114: #end ## printConferenceEventForNextEvent
1115:
1116: #macro (printTeamEvent $event)
1117: #if ($eventClass.contains("schedule-next-event-indicator"))
1118: <div class="card-header">
1119: #nextEventIndicator()
1120: </div>
1121: #elseif ($eventClass.contains("in-progress"))
1122: <div class="card-header">
1123: #liveEventIndicator()
1124: </div>
1125: #end
1126: #if($eventClass.contains("has-recap"))
1127: #set ($eventOverview = true)
1128: #end
1129: <div class="card-body">
1130: <div class="d-flex flex-column flex-md-row justify-content-center align-items-center gap-3">
1131: <div class="text-start flex-grow-1 flex-shrink-1 w-100">
1132: <div class="d-flex flex-column flex-md-row justify-content-center align-items-center gap-2">
1133: #if ($showTeamLogo && $event.opponent.teamId.length() > 0)
1134: <div class="logo-aside-container">
1135: #printTeamLogoSetWidth($event.opponent, 72)
1136: </div>
1137: #end
1138: <div class="flex-grow-1">
1139: <div class="d-flex flex-column align-items-center align-items-md-start justify-content-center gap-2">
1140: <div class="event-opponent d-flex align-items-center justify-content-center gap-2 fs-5">
1141: #printLocationIcon($event)
1142: <span class="event-opponent-name mb-0 #if(($event.home && $event.neutralSite.length() == 0) && $isTeamSchedule)fw-bold#end align-middle">#printTeamName($event.opponent)</span>
1143: #printNotations($event)
1144: </div>
1145: <div class="event-dateinfo">
1146: <div class="d-flex align-items-center justify-content-start gap-3">
1147: <div class="date d-flex align-items-center justify-content-center gap-1">
1148: <span class="fa fa-calendar-o fa-sm text-muted" aria-hidden="true"></span>
1149: <span>#eventDate($event)</span>
1150: </div>
1151: <div class="status d-flex align-items-center justify-content-center gap-1">
1152: <span class="fa-regular fa-clock fa-sm text-muted" aria-hidden="true"></span>
1153: <span>#printEventStatus($event)</span>
1154: </div>
1155: </div>
1156: </div>
1157: #if ($event.neutralSite.length() > 0)
1158: <div class="event-neutralsite small text-muted text-center text-md-start">#printEventNeutralSite($event)</div>
1159: #end
1160: </div>
1161: </div>
1162: </div>
1163: </div>
1164: <div class="text-md-right flex-grow-1 flex-shrink-1 w-100">
1165: <div class="d-flex flex-column flex-md-row align-items-center flex-nowrap justify-content-end gap-3">
1166: ## Link Processing
1167: #set($boxscoreURL = "")
1168: #foreach ($link in $event.links)
1169: #if ($link.url.endsWith(".xml") && $link.mapType == "BS" && !$website.isExternalLink($link.url))
1170: #set($boxscoreURL = $link.url)
1171: #end
1172: #end
1173: #if($leaderSportsMapped.contains($sport.replace("women's ", "").replace("men's ", "")))
1174: #if ($showLeaders && $rosterHeadshots.size() > 0 && ($boxscoreURL.length() > 0))
1175: <div class="text-md-center">
1176: <div class="game-leaders d-none d-md-flex align-items-center justify-content-start">
1177: $website.include("${boxscoreURL}?tmpl=schedule-game-leaders-template&teamId=${schedule.teamId}")
1178: </div>
1179: </div>
1180: #end
1181: #end
1182: <div class="text-md-center flex-grow-1">
1183: <div class="d-flex flex-column align-items-center align-items-md-end justify-content-center gap-1">
1184: <div class="event-result fw-bold text-nowrap fs-5">#printAPResult($event)</div>
1185: <div class="details d-flex flex-wrap gap-3 align-items-center justify-content-center justify-content-md-start">
1186: <div class="event-notes small text-muted text-center text-md-end">#printEventNotes($event)</div>
1187: </div>
1188: </div>
1189: </div>
1190: </div>
1191: </div>
1192: </div>
1193: </div>
1194: #if($event.links.size() > 0 || $eventOverview)
1195: <div class="card-footer small">
1196: <div class="event-controls d-flex flex-column flex-md-row align-items-md-center justify-content-center gap-3 ">
1197: <div class="event-links list-inline d-flex align-items-center justify-content-center justify-content-md-start gap-3 flex-wrap flex-grow-1">
1198: #printEventCardLinks($event)
1199: </div>
1200: #if($eventOverview)
1201: <div class="event-overview d-none d-md-flex overflow-hidden border-start me-n3 mt-n2 mb-n2">
1202: <a class="btn d-block btn-link event-overview-toggle w-100" aria-label="Event Overview"><span class="fa-regular fa-plus"></span></a>
1203: </div>
1204: #end
1205: </div>
1206: </div>
1207: #end
1208:
1209: #end ## printTeamEvent
1210:
1211: #macro (printConfEvent $event)
1212: #set ($awayTeam = $event.teams.get(0))
1213: #set ($homeTeam = $event.teams.get(1))
1214:
1215: #set ($awayClass = "away")
1216: #set ($homeClass = "home")
1217:
1218: #if ($awayTeam.winner)
1219: #set ($awayClass = "${awayClass} winner")
1220: #set ($homeClass = "${homeClass} loser")
1221: #elseif ($homeTeam.winner)
1222: #set ($awayClass = "${awayClass} loser")
1223: #set ($homeClass = "${homeClass} winner")
1224: #end
1225:
1226: #if ($eventClass.contains("schedule-next-event-indicator"))
1227: <div class="card-header">
1228: #nextEventIndicator()
1229: </div>
1230: #elseif ($eventClass.contains("in-progress"))
1231: <div class="card-header">
1232: #liveEventIndicator()
1233: </div>
1234: #end
1235:
1236: #if($eventClass.contains("has-recap"))
1237: #set ($eventOverview = true)
1238: #end
1239:
1240: <div class="card-body">
1241: <div class="d-flex flex-column flex-md-row justify-content-center align-items-center gap-3">
1242: <div class="text-start flex-grow-1 w-100">
1243: <div class="d-flex flex-row justify-content-center align-items-center gap-2 #if($awayTeam.winner) fw-bold #end">
1244: #if ($showTeamLogo && $awayTeam.teamId.length() > 0)
1245: <div class="logo-aside-container">
1246: #printTeamLogoSetWidth($awayTeam, 40)
1247: </div>
1248: #end
1249: <div class="flex-grow-1 text-start">
1250: <div class="d-flex flex-column align-items-start justify-content-center gap-1">
1251: <div class="event-team-name away-team d-flex align-items-center justify-content-center gap-2">
1252: <span class="event-opponent-name mb-0 align-middle">#printTeamName($awayTeam)</span>
1253: #printNotations($event)
1254: </div>
1255: </div>
1256: </div>
1257: <div class="flex-shrink-1">
1258: #if($awayTeam.winner)<span class="fa-solid fa-sm fa-caret-right"></span>#end ${awayTeam.result}
1259: </div>
1260: </div>
1261: <div class="d-flex flex-row justify-content-center align-items-center gap-2 #if($homeTeam.winner) fw-bold #end">
1262: #if ($showTeamLogo && $homeTeam.teamId.length() > 0)
1263: <div class="logo-aside-container">
1264: #printTeamLogoSetWidth($homeTeam, 40)
1265: </div>
1266: #end
1267: <div class="flex-grow-1 text-start">
1268: <div class="d-flex flex-column align-items-start justify-content-centergap-1">
1269: <div class="event-team-name home-team d-flex align-items-center justify-content-center gap-2">
1270: <span class="event-opponent-name mb-0 align-middle">#printTeamName($homeTeam)</span>
1271: #printNotations($event)
1272: </div>
1273: </div>
1274: </div>
1275: <div class="flex-shrink-1">
1276: #if($homeTeam.winner)<span class="fa-solid fa-sm fa-caret-right"></span>#end ${homeTeam.result}
1277: </div>
1278: </div>
1279: </div>
1280: <div class="text-md-right flex-shrink-1 col-md-6 col-lg-4">
1281: <div class="d-flex flex-column align-items-center align-items-md-end justify-content-center gap-1 text-center text-md-end">
1282: <div class="event-dateinfo">
1283: <div class="d-flex flex-column align-items-center justify-content-start align-items-lg-end justify-content-lg-end gap-2">
1284: <div class="date d-flex align-items-center justify-content-center gap-1">
1285: <span class="fa fa-calendar-o fa-sm text-muted" aria-hidden="true"></span>
1286: <span>#eventDate($event)</span>
1287: </div>
1288: <div class="status d-flex align-items-center justify-content-center gap-1">
1289: <span class="fa-regular fa-clock fa-sm text-muted" aria-hidden="true"></span>
1290: <span>#printEventStatus($event)</span>
1291: </div>
1292: </div>
1293: </div>
1294: #if ($event.neutralSite.length() > 0)
1295: <div class="event-neutralsite small text-muted text-center text-md-end">#printEventNeutralSite($event)</div>
1296: #end
1297: <div class="details d-flex flex-wrap gap-3 align-items-center justify-content-center justify-content-md-start">
1298: <div class="event-notes small text-muted text-center text-md-end">#printEventNotes($event)</div>
1299: </div>
1300: #if($leaderSportsMapped.contains($sport.replace("women's ", "").replace("men's ", "")))
1301: #if ($showLeaders && $rosterHeadshots.size() > 0 && ($boxscoreURL.length() > 0))
1302: <div class="game-leaders d-none d-md-flex align-items-center justify-content-center justify-content-lg-end">
1303: $website.include("${boxscoreURL}?tmpl=schedule-game-leaders-template&teamId=${schedule.teamId}")
1304: </div>
1305: #end
1306: #end
1307: </div>
1308: </div>
1309: </div>
1310: </div>
1311: #if($event.links.size() > 0 || $eventOverview)
1312: <div class="card-footer small">
1313: <div class="event-controls d-flex flex-column flex-md-row align-items-md-center justify-content-center gap-3 ">
1314: <div class="event-links list-inline d-flex align-items-center justify-content-center justify-content-md-start gap-3 flex-wrap flex-grow-1">
1315: #printEventCardLinks($event)
1316: </div>
1317: #if($eventOverview)
1318: <div class="event-overview d-none d-md-flex overflow-hidden border-start me-n3 mt-n2 mb-n2">
1319: <a class="btn d-block btn-link event-overview-toggle w-100" aria-label="Event Overview"><span class="fa-regular fa-plus"></span></a>
1320: </div>
1321: #end
1322: </div>
1323: </div>
1324: #end
1325:
1326: #end ## printConferenceEvent
1327:
1328: #macro (printLocationIcon $event)
1329: #if ($event.neutralSite.length() > 0 || $event.home)
1330: <span class="event-location-badge m-0 align-middle text-muted small">vs</span>
1331: #else
1332: <span class="event-location-badge m-0 align-middle text-muted small">at</span>
1333: #end
1334: #end
1335:
1336: #macro(buildEventClass $event)
1337: #set($class = "event-row")
1338:
1339: ## Location
1340: #if ($event.neutralSite.length() > 0)
1341: #set($class = "${class} neutral")
1342: #elseif ($event.home)
1343: #set($class = "${class} home")
1344: #else
1345: #set($class = "${class} away")
1346: #end
1347:
1348: ## Metadata Flags
1349: #if ($event.inProgress)
1350: #set($class = "${class} in-progress")
1351: #end
1352: #if ($event.conference)
1353: #set($class = "${class} conf")
1354: #end
1355: #if ($event.postseason)
1356: #set($class = "${class} postseason")
1357: #end
1358: #if ($event.division)
1359: #set($class = "${class} division")
1360: #end
1361: #if (!$event.overall)
1362: #set($class = "${class} exhibition")
1363: #end
1364:
1365: ## Schedule Status
1366: #if ($event.statusCode < 0 && !$event.inProgress)
1367: #if ($event.date && !$event.date.before($now))
1368: #if (!$request.getAttribute("scheduleNextEvent"))
1369: #set($class = "${class} upcoming schedule-next-event-indicator")
1370: $request.setAttribute("scheduleNextEvent", true)
1371: #else
1372: #set($class = "${class} upcoming")
1373: #end
1374: #end
1375: #else
1376: #set($class = "${class} result")
1377: #end
1378:
1379: ## Link Processing
1380: #set($boxscoreURL = "")
1381: #set($recapURL = "")
1382: #foreach ($link in $event.links)
1383: #if ($link.url.endsWith(".xml") && $link.mapType == "BS" && !$website.isExternalLink($link.url))
1384: #set($boxscoreURL = $link.url)
1385: #elseif ($link.mapType == "RC" && !$website.isExternalLink($link.url))
1386: #set($recapURL = $link.url)
1387: #end
1388: #end
1389:
1390: #if (($boxscoreURL && $boxscoreURL.length() > 0) || ($recapURL && $recapURL.length() > 0))
1391: #set($class = "${class} has-recap")
1392: #end
1393:
1394: #if ($recapURL && $recapURL.length() > 0)
1395: #set($class = "${class} has-links")
1396: #end
1397: $request.setAttribute("eventClass", $class)
1398: #end
1399:
1400: #macro (printEvents $evt $border)
1401: #if(!$border)
1402: #set($border = false)
1403: #end
1404:
1405: #if ($enhancedLayout)
1406: #printCards($evt, $border)
1407: #else
1408: #printTable($evt, $border)
1409: #end
1410: #end
1411:
1412: #macro (printCollapsibleMonths $evts)
1413: #set ($lastDate = "")
1414: #set ($lastTournament = "")
1415: #set ($eventsByMonth = {})
1416:
1417: ## Group events by month
1418: #foreach($event in $evts)
1419: #set($monthKey = $formatter.formatDate($event.date, "MMMM"))
1420: #if (!$eventsByMonth.containsKey($monthKey))
1421: #set($discard = $eventsByMonth.put($monthKey, []))
1422: #end
1423: #set($discard = $eventsByMonth.get($monthKey).add($event))
1424: #end
1425:
1426: ## Sort months chronologically
1427: #set($monthOrder = [])
1428: #foreach($monthName in $eventsByMonth.keySet())
1429: #set($firstEventDate = $eventsByMonth.get($monthName).get(0).date)
1430: #set($eventYear = $formatter.formatDate($firstEventDate, "yyyy"))
1431: #set($dateString = "1 $monthName $eventYear")
1432: #set($monthDate = $dateTool.get($dateString))
1433: #set($discard = $monthOrder.add({"name": $monthName, "date": $monthDate}))
1434: #end
1435: #set($monthOrder = $tool.sorter.sort($monthOrder, "date"))
1436:
1437: ## Prepare output ordering
1438: #set($outputMonthOrder = [])
1439: #set($expandMonth = "")
1440: #set($currentMonthName = $formatter.formatDate($now, "MMMM"))
1441: #set($currentYear = $formatter.formatDate($now, "yyyy"))
1442: #set($currentMonthDate = $dateTool.get("1 $currentMonthName $currentYear"))
1443:
1444: #if($currentMonthFirst)
1445: #set($mostRecent = {})
1446: #set($found = false)
1447: #foreach($m in $monthOrder)
1448: #if(!$found)
1449: #foreach($e in $eventsByMonth.get($m.name))
1450: #if($e.date.after($now) || $e.date.equals($now))
1451: #set($mostRecent = $m)
1452: #set($expandMonth = $m.name)
1453: #set($found = true)
1454: #break
1455: #end
1456: #end
1457: #end
1458: #end
1459:
1460: ## If no upcoming/current event found, fall back to last month safely
1461: #if(!$found)
1462: #set($mostRecent = {})
1463: #foreach($m in $monthOrder)
1464: #set($mostRecent = $m)
1465: #end
1466: #if($mostRecent.name)
1467: #set($expandMonth = $mostRecent.name)
1468: #end
1469: #end
1470:
1471: ## Add most recent month first
1472: #if($mostRecent.name)
1473: #set($discard = $outputMonthOrder.add($mostRecent))
1474: #end
1475:
1476: ## Add Completed Marker only before first past month
1477: #set($addedCompletedMarker = false)
1478: #foreach($m in $monthOrder)
1479: #if($m.name != $mostRecent.name)
1480: #set($monthEvents = $eventsByMonth.get($m.name))
1481: #set($monthStatus = "month-past")
1482: #foreach($e in $monthEvents)
1483: #if($e.date.after($now))
1484: #set($monthStatus = "month-upcoming")
1485: #break
1486: #elseif($e.date.equals($now))
1487: #set($monthStatus = "month-current")
1488: #break
1489: #end
1490: #end
1491: #if(!$addedCompletedMarker && $monthStatus == "month-past")
1492: #set($discard = $outputMonthOrder.add({"name": "COMPLETED_MARKER"}))
1493: #set($addedCompletedMarker = true)
1494: #end
1495: #set($discard = $outputMonthOrder.add($m))
1496: #end
1497: #end
1498: #else
1499: ## Normal chronological list (currentMonthFirst = false)
1500: #set($addedCompletedMarker = false)
1501: #set($foundCurrentOrUpcoming = false)
1502: #foreach($m in $monthOrder)
1503: #set($monthEvents = $eventsByMonth.get($m.name))
1504: #set($monthStatus = "month-past")
1505: #foreach($e in $monthEvents)
1506: #if($e.date.after($now))
1507: #set($monthStatus = "month-upcoming")
1508: #set($foundCurrentOrUpcoming = true)
1509: #break
1510: #elseif($e.date.equals($now))
1511: #set($monthStatus = "month-current")
1512: #set($foundCurrentOrUpcoming = true)
1513: #break
1514: #end
1515: #end
1516: #if(!$addedCompletedMarker && $monthStatus == "month-past")
1517: #set($discard = $outputMonthOrder.add({"name": "COMPLETED_MARKER"}))
1518: #set($addedCompletedMarker = true)
1519: #end
1520: #set($discard = $outputMonthOrder.add($m))
1521: #end
1522:
1523: ## Decide which month to expand: first upcoming/current or fallback to last past
1524: #set($expandMonth = "")
1525: #set($foundExpand = false)
1526: #foreach($m in $monthOrder)
1527: #set($monthEvents = $eventsByMonth.get($m.name))
1528: #set($monthStatus = "month-past")
1529: #foreach($e in $monthEvents)
1530: #if($e.date.after($now))
1531: #set($monthStatus = "month-upcoming")
1532: #break
1533: #elseif($e.date.equals($now))
1534: #set($monthStatus = "month-current")
1535: #break
1536: #end
1537: #end
1538: #if(!$foundExpand && ($monthStatus == "month-current" || $monthStatus == "month-upcoming"))
1539: #set($expandMonth = $m.name)
1540: #set($foundExpand = true)
1541: #end
1542: #end
1543: ## If none found (all past), expand last month
1544: #if(!$foundExpand && $monthOrder.size() > 0)
1545: #set($lastMonth = {})
1546: #foreach($m in $monthOrder)
1547: #set($lastMonth = $m)
1548: #end
1549: #if($lastMonth.name)
1550: #set($expandMonth = $lastMonth.name)
1551: #end
1552: #end
1553: #end
1554:
1555: #foreach($m in $outputMonthOrder)
1556: #if($m.name == "COMPLETED_MARKER")
1557: #if($currentMonthFirst)
1558: <div class="completed-months-heading small text-muted rounded text-center">
1559: <span class="fa-solid fa-sm fa-dash"></span> Previous Months <span class="fa-solid fa-sm fa-dash"></span>
1560: </div>
1561: #end
1562: #else
1563: #set($month = $m.name)
1564: #set($monthEvents = $eventsByMonth.get($month))
1565: #set($eventCount = $monthEvents.size())
1566: #set($isExpanded = false)
1567: #if($month == $expandMonth || $isPrinterFriendly)
1568: #set($isExpanded = true)
1569: #end
1570:
1571: #set($collapseClass = "")
1572: #set($ariaExpanded = "false")
1573: #if($isExpanded)
1574: #set($collapseClass = "show")
1575: #set($ariaExpanded = "true")
1576: #end
1577:
1578: ## Determine month status
1579: #set($monthStatus = "month-past")
1580: #foreach($e in $monthEvents)
1581: #if($e.date.after($now))
1582: #set($monthStatus = "month-upcoming")
1583: #break
1584: #elseif($e.date.equals($now))
1585: #set($monthStatus = "month-current")
1586: #break
1587: #end
1588: #end
1589:
1590: <div class="section-event-month $month.toLowerCase() $monthStatus">
1591: <a class="toggle-month text-decoration-none" aria-label="Open/Close $month Calendar" data-bs-toggle="collapse" href="#$month.toLowerCase()-collapse" role="button" aria-expanded="$ariaExpanded" aria-controls="$month.toLowerCase()-collapse">
1592: <span class="d-block section-header rounded text-white bg-primary p-2 px-3 position-relative">
1593: <span class="d-flex flex-row justify-content-start justify-content-between gap-3">
1594: <span class="month-heading flex-grow-1 fw-bold">
1595: <span class="month-title">$month</span>
1596: </span>
1597: <span class="month-heading-control flex-shrink-1 small">
1598: <span class="month-count small">$eventCount event#if($eventCount > 1)s#end</span>
1599: </span>
1600: <span class="toggle-month-indicator opacity-3">
1601: <span class="fa fa-solid fa-sm fa-chevron-up"></span>
1602: </span>
1603: </span>
1604: </span>
1605: </a>
1606: <div class="collapse navbar-collapse $collapseClass" id="$month.toLowerCase()-collapse">
1607: <div class="event-month-list d-flex flex-column gap-3 mt-3">
1608: #if ($groupDates)
1609: #printCollapsibleDates($monthEvents, true)
1610: #else
1611: #printEvents($monthEvents, true)
1612: #end
1613: </div>
1614: </div>
1615: </div>
1616: #end
1617: #end
1618:
1619: #end
1620:
1621:
1622: #macro (printCollapsibleDates $evt, $border)
1623: #if(!$border)
1624: #set($border = false)
1625: #end
1626: ## GROUP EVENTS BY MONTH
1627: #set($eventsByDate = {})
1628: #foreach($event in $evt)
1629: #set($dateKey = $formatter.formatDate($event.date, "${dateFormat}"))
1630: #if (!$eventsByDate.containsKey($dateKey))
1631: #set($eval = $eventsByDate.put($dateKey, []))
1632: #end
1633: #set($eval = $eventsByDate.get($dateKey).add($event))
1634: #end
1635:
1636: <div class="section-event-group-dates d-flex flex-column gap-3">
1637: #foreach($date in $eventsByDate.keySet())
1638: #set($dateEvents = $eventsByDate.get($date))
1639: #set($eventCount = $dateEvents.size())
1640:
1641: <div class="card #if($groupDates)border-0 rounded-0#end section-event-date" data-date="$date">
1642: <div class="card-header px-2">
1643: <div class="d-flex flex-row justify-content-start justify-content-between">
1644: <div class="date-heading flex-grow-1">
1645: <div class="d-flex align-items-center justify-content-start gap-2">
1646: <span class="fa fa-calendar-o fa-sm text-muted" aria-hidden="true"></span>
1647: <span class="date-title fw-bold">$date</span>
1648: </div>
1649: </div>
1650: <div class="date-heading-control flex-shrink-1 small">
1651: <span class="date-count small opacity-75">$eventCount event#if($eventCount > 1)s#end</span>
1652: </div>
1653: </div>
1654: </div>
1655: <div class="card-body event-date-list #if($groupDates)px-0 rounded-0#end">
1656: <div class="d-flex align-items-center justify-content-center gap-3 flex-column">
1657: #printEvents($dateEvents, $border)
1658: </div>
1659: </div>
1660: </div>
1661: #end
1662: </div>
1663: #end
1664:
1665: #macro (printTableDateCards $evt)
1666:
1667: ## GROUP EVENTS BY MONTH
1668: #set($eventsByDate = {})
1669: #foreach($event in $evt)
1670: #set($dateKey = $formatter.formatDate($event.date, "${dateFormat}"))
1671: #if (!$eventsByDate.containsKey($dateKey))
1672: #set($eval = $eventsByDate.put($dateKey, []))
1673: #end
1674: #set($eval = $eventsByDate.get($dateKey).add($event))
1675: #end
1676:
1677: <div class="section-event-group-dates d-flex flex-column gap-3">
1678: #foreach($date in $eventsByDate.keySet())
1679: #set($dateEvents = $eventsByDate.get($date))
1680: #set($eventCount = $dateEvents.size())
1681:
1682: <div class="card border section-event-date" data-date="$date">
1683: <div class="card-header px-2">
1684: <div class="d-flex flex-row justify-content-start justify-content-between">
1685: <div class="date-heading flex-grow-1">
1686: <div class="d-flex align-items-center justify-content-start gap-2">
1687: <span class="fa fa-calendar-o fa-sm text-muted" aria-hidden="true"></span>
1688: <span class="date-title fw-bold">$date</span>
1689: </div>
1690: </div>
1691: <div class="date-heading-control flex-shrink-1 small">
1692: <span class="date-count small opacity-75">$eventCount event#if($eventCount > 1)s#end</span>
1693: </div>
1694: </div>
1695: </div>
1696: <div class="card-body event-date-list">
1697: #printTable($dateEvents)
1698: </div>
1699: </div>
1700: #end
1701: </div>
1702: #end
1703:
1704: #macro (printNextEventList $evt)
1705: #if ($evt.size() > 0)
1706: #set ($eventObject = {})
1707: #set ($eventList = $tool.sorter.sort($evt, "date"))
1708: #set ($val = $eventObject.put('nextevent', $evt.get(0)))
1709: <div class="nextevent-list d-flex flex-column gap-3 d-print-none">
1710: #foreach($event in $eventObject)
1711: #buildEventClass($event)
1712: #set($eventClass = $request.getAttribute("eventClass"))
1713:
1714: #printNextEventCard($evt)
1715: #end
1716: </div>
1717: #end
1718: #end
1719:
1720: #macro (printNextEventCard $evt)
1721: <div class="card w-100 ${eventClass} bg-primary text-white" #printBoxscoreRecapUrl($event)>
1722: #if ($isTeamSchedule || $event.teams.size() == 1)
1723: #printTeamEventForNextEvent($event)
1724: #elseif ($event.teams.size() == 2) ## conference schedule with head-to-head events
1725: #printConfEventForNextEvent($event)
1726: #end
1727: </div>
1728: #end
1729:
1730: #macro (printCards $evt $border)
1731: #foreach($event in $evt)
1732:
1733: #if ($isTeamSchedule)
1734: #set ($theDate = $formatter.formatDate($event.date, "MMMM"))
1735: #else
1736: #set ($theDate = $formatter.formatDate($event.date, "EEEE, MMMM dd, yyyy"))
1737: #end
1738:
1739: #if (!$lastDate.equals($theDate))
1740: #set ($lastTournament = "") ## force clear of tournament name being held because the month/date needs to be closed as well.
1741: #end
1742: #set ($lastDate = $theDate)
1743:
1744: #if($schedule.includeTournamentLabels)
1745: #if($!schedule.tournamentEvent.get($event.eventId))
1746: #if($lastTournament.length() > 0 && $schedule.tournamentEvent.get($event.eventId) != $lastTournament)
1747: </div> ## CLEAR PREVIOUS TOURNAMENT IS THIS TOURNAMENT IS DIFFERENT
1748: #set ($lastTournament = "")
1749: #end
1750:
1751: #if($lastTournament.length() == 0 || !$lastTournament.equals($schedule.tournamentEvent.get($event.eventId)))
1752: <div class="event-group-tournament d-flex flex-column gap-3 pb-3 border-5 border-secondary">
1753: #end
1754:
1755: #if(!$lastTournament.equals($schedule.tournamentEvent.get($event.eventId)))
1756: <div class="event-tournament section-tournament-header rounded text-white bg-secondary p-2 px-3">$schedule.tournamentEvent.get($event.eventId)</div>
1757: #end
1758:
1759: #set ($lastTournament = $schedule.tournamentEvent.get($event.eventId))
1760: #else
1761: #if($lastTournament.length() > 0)
1762: </div> ## must close all open tournament div if next event is not part of a tournament
1763: #set ($lastTournament = "")
1764: #end
1765: #end
1766: #end
1767:
1768: #buildEventClass($event)
1769: #set($eventClass = $request.getAttribute("eventClass"))
1770:
1771: #set ($sport = $event.sport.toLowerCase())
1772: #if ($showLeaders && $rosterHeadshots.size() > 0 && $leaderSportsMapped.contains($sport.replace("women's ", "").replace("men's ", "")))
1773: #set ($eventClass = "${eventClass} has-leaders")
1774: #else
1775: #set ($eventClass = "${eventClass} no-leaders")
1776: #end
1777:
1778: <div class="card w-100 ${eventClass}" #printBoxscoreRecapUrl($event)>
1779: #if ($isTeamSchedule || $event.teams.size() == 1)
1780: #printTeamEvent($event)
1781: #elseif ($event.teams.size() == 2) ## conference schedule with head-to-head events
1782: #printConfEvent($event)
1783: #end
1784: </div>
1785:
1786: #if($schedule.includeTournamentLabels)
1787: #if($foreach.last && $lastTournament.length() > 0) </div> #end
1788: #end
1789: #end
1790: #end
1791:
1792:
1793: #macro (printTable $evt)
1794: $request.setAttribute("icl-dataTables-script", true)
1795:
1796: <div class="table-responsive table-responsive-via-datatables mb-3 w-100">
1797: <table class="table ${tableHelperClass} small w-100">
1798: <thead>
1799: <tr>
1800: #set ($colCount = 0)
1801: #foreach ($label in $scheduleLabels)
1802: #set ($class = "")
1803: #if($label.toLowerCase().contains("date"))
1804: #set ($class = "${class} table-active")
1805: #elseif($label.toLowerCase().contains("away") || $label.toLowerCase().contains("home"))
1806: #set ($class = "${class} col-12 col-md-4 col-lg-3 w-25")
1807: #elseif($label.toLowerCase().contains("opponent") || $label.toLowerCase().contains("opponent+neutralsite"))
1808: #set ($class = "${class} col-12 col-md-4 col-lg-3 w-25")
1809: #elseif($label.toLowerCase().contains("links"))
1810: #set ($class = "${class} col-12 col-md-4 col-lg-3 w-25")
1811: #elseif($label.toLowerCase().contains("notes"))
1812: #set ($class = "${class} col-12 col-md-4 col-lg-3 w-25")
1813: #elseif($label.toLowerCase().contains("status"))
1814: #set ($class = "${class} w-1")
1815: #end
1816: #if (!$tool.list.get($scheduleFields, $tool.math.sub($velocityCount, 1)).startsWith("_"))
1817: <th class="${class}" data-field-name="${label.toLowerCase()}">$label</th>
1818: #set ($colCount = $colCount + 1)
1819: #end
1820: #end
1821: </tr>
1822: </thead>
1823: #set ($lastdate = "")
1824: #set ($lastMonth = "")
1825: #set ($counter = 0)
1826: <tbody class="event-group">
1827: #foreach ($event in $evt)
1828: #set ($formattedDate = $formatter.formatDate($event.date, $dateFormat))
1829: #set ($theDate = $formatter.formatDate($event.date, "MMMM dd yyyy"))
1830: #set ($theMonth = $formatter.formatDate($event.date, "MMMM"))
1831:
1832: #set ($counter = $counter + 1)
1833:
1834: #buildEventClass($event)
1835: #set($eventClass = $request.getAttribute("eventClass"))
1836:
1837: #if ($scheduleFields.contains("_date") && !$lastDate.equals($theDate))
1838: <tr class="${eventClass} date-title"><td colspan="${colCount}">$formattedDate</td></tr>
1839:
1840: ## EVENTS ARE GROUPED WHEN HERE SO RESET COUNTER BACK TO 0
1841: #set ($counter = 0)
1842: #end
1843:
1844:
1845: <tr class="${eventClass}" #if ($event.inProgress) title="In Progress" #end>
1846: #foreach ($field in $scheduleFields)
1847:
1848: ## DATE
1849: #if ($field.equals("date"))
1850: <td class="date w-1 table-active align-middle #if ($event.home) fw-bold #end">
1851: <div class="nowrap d-block">
1852: #if (!$lastDate.equals($theDate)) $formattedDate #else #end
1853: </div>
1854: </td>
1855: #end
1856:
1857: ## OPPONENT
1858: #if ($field.equals("opponent") || $field.equals("opponent+neutralsite"))
1859: <td class="team opponent align-middle text-center text-lg-start">
1860: <div class="team-opponent-wrapper d-flex flex-column align-items-center justify-content-center align-items-lg-start justify-content-lg-start gap-0">
1861: <div class="w-100 d-flex flex-column flex-lg-row align-items-center align-items-lg-center justify-content-center justify-content-lg-start gap-1">
1862: #printTeamLogoSetWidth($event.opponent, 32)
1863: <div class="flex-grow-1">
1864: #if ($showVsAt)
1865: #printLocationIcon($event)
1866: #end
1867: <span class="#if ($event.home) fw-bold #end">#printTeamName($event.opponent)</span>
1868: </div>
1869: </div>
1870: #if ($field.equals("opponent+neutralsite") && $event.neutralSite.length() > 0)
1871: <span class="neutralsite text-muted small">@ $event.neutralSite</span>
1872: #end
1873:
1874: #if ($eventClass.contains("next") && $groupMonths.equals(true))
1875: <span class="event-location-badge badge bg-dark m-0 me-1 align-middle nowrap small">
1876: <span class="fa-solid fa-bullhorn fw-normal" aria-hidden="true"></span> <span class="fw-normal">Next Event</span>
1877: </span>
1878: #end
1879: </div>
1880: </td>
1881: #end
1882:
1883: ## RESULT
1884: #if ($field.equals("result") || $field.equals("result+status"))
1885: <td class="result align-middle #if($event.home) fw-bold #end">
1886: <div class="d-flex align-items-center justify-content-center justify-content-lg-between gap-2 flex-nowrap w-100">
1887: <span class="text-nowrap">#printAPResult($event)</span>
1888: #if ($field.equals("result+status"))
1889: #if ($eventClass.contains("in-progress"))
1890: <span class="fa fa-circle fa-sm fa-beat-fade text-primary" aria-hidden="true"></span>
1891: #end
1892: <span class="text-nowrap #if ($event.home) fw-bold #end">#printEventStatus($event)</span>
1893: #end
1894: </div>
1895: </td>
1896: #end
1897:
1898: ## TEAM AWAY
1899: #if ($field.equals("team_away") || $field.equals("team_away+team_away_result"))
1900: #set ($class = "team awayteam align-middle ")
1901: #if ($field.equals("team_away+team_away_result"))
1902: #set ($class = "${class} teamresult")
1903: #end
1904: <td class="$class">
1905: #if ($event.teams.size() > 0)
1906: #set ($awayTeam = $event.teams.get(0))
1907: <div class="d-flex align-items-center justify-content-center justify-content-md-start gap-2 flex-nowrap #if ($awayTeam.winner) fw-bold #end">
1908: #printTeamLogoSetWidth($awayTeam, 32)
1909: <span class="flex-grow-1">#printTeamName($awayTeam)</span>
1910:
1911: #if ($field.equals("team_away+team_away_result") && $awayTeam.result.length() > 0)
1912: #if ($awayTeam.winner)
1913: <span class="result winner"><span class="fa-solid fa-sm fa-caret-right" aria-hidden="true"></span> $awayTeam.result</span>
1914: #else
1915: <span class="result">$awayTeam.result</span>
1916: #end
1917: #end
1918: </div>
1919: #else
1920:
1921: #end
1922: </td>
1923: #end
1924:
1925: ## TEAM AWAY RESULT
1926: #if ($field.equals("team_away_result"))
1927: #set ($class = "e_result align-middle e_awayresult")
1928: #if ($event.teams.size() > 0 && $event.teams.get(0).winner)
1929: #set ($class = "${class} winner")
1930: #end
1931: <td class="${class}">
1932: #if ($event.teams.size() > 0 && $event.teams.get(0).result.length() > 0)
1933: <span class="text-nowrap #if ($event.teams.get(0).winner) fw-bold #end">
1934: #if ($event.teams.get(0).winner) <span class="fa-solid fa-sm fa-caret-right" aria-hidden="true"></span> #end
1935: $event.teams.get(0).result
1936: </span>
1937: #else
1938: #end
1939: </td>
1940: #end
1941:
1942: ## TEAM HOME
1943: #if ($field.equals("team_home") || $field.equals("team_home+team_home_result"))
1944: #set ($class = "team align-middle hometeam")
1945: #if ($field.equals("team_home+team_home_result"))
1946: #set ($class = "${class} teamresult")
1947: #end
1948: <td class="$class">
1949: #if ($event.teams.size() > 1)
1950: #set ($homeTeam = $event.teams.get(1))
1951: <div class="d-flex align-items-center justify-content-center justify-content-md-start gap-2 flex-nowrap #if ($homeTeam.winner) fw-bold #end">
1952: #printTeamLogoSetWidth($homeTeam, 32)
1953: <span class="flex-grow-1">#printTeamName($homeTeam)</span>
1954:
1955: #if ($field.equals("team_home+team_home_result") && $homeTeam.result.length() > 0)
1956: #if ($homeTeam.winner)
1957: <span class="result winner"><span class="fa-solid fa-sm fa-caret-right" aria-hidden="true"></span> $homeTeam.result</span>
1958: #else
1959: <span class="result">$homeTeam.result</span>
1960: #end
1961: #end
1962: </div>
1963: #else
1964:
1965: #end
1966: </td>
1967: #end
1968:
1969: ## TEAM HOME RESULT
1970: #if ($field.equals("team_home_result"))
1971: #set ($class = "result align-middle homeresult")
1972: #if ($event.teams.size() > 1 && $event.teams.get(1).winner)
1973: #set ($class = "${class} winner")
1974: #end
1975: <td class="$class">
1976: #if ($event.teams.size() > 1 && $event.teams.get(1).result.length() > 0)
1977: <span class="text-nowrap #if ($event.teams.get(1).winner) fw-bold #end">
1978: #if ($event.teams.get(1).winner) <span class="fa-solid fa-sm fa-caret-right" aria-hidden="true"></span> #end
1979: $event.teams.get(1).result
1980: </span>
1981: #else
1982: #end
1983: </td>
1984: #end
1985:
1986: ## BOTH TEAMS AND THEIR RESULT
1987: #if ($field.equals("teams+result"))
1988: <td class="e_teams_result align-middle">
1989: #foreach ($team in $event.teams)
1990: #if ($velocityCount == 1)
1991: #printNotations($event)
1992: #end
1993:
1994: #if ($velocityCount > 1) #end
1995:
1996: #printTeamLogoSetWidth($team, 32)
1997: #printTeamName($team)
1998:
1999: #if ($team.result.length() > 0) <span class="text-nowrap">$team.result</span> #end
2000: #end
2001: </td>
2002: #end
2003:
2004: ## STATUS
2005: #if ($field.equals("status"))
2006: <td class="status align-middle">
2007: <div class="d-flex align-items-center justify-content-center justify-content-lg-between gap-2 flex-nowrap w-100">
2008: #if ($eventClass.contains("in-progress"))
2009: <span class="fa fa-circle fa-sm fa-beat-fade text-primary" aria-hidden="true"></span>
2010: #end
2011: <span class="text-nowrap #if ($event.home) fw-bold #end">#printEventStatus($event)</span>
2012: #printNotations($event)
2013: </div>
2014: </td>
2015: #end
2016:
2017: ## LINKS (SAME ROW)
2018: #if ($field.equals("links"))
2019: <td class="links align-middle">
2020: <div class="list-inline d-flex align-items-center justify-content-start flex-wrap gap-2">
2021: #printEventLinks($event, "list-inline-item text-decoration-none m-0 text-nowrap")
2022: $wiki.event($event)
2023: </div>
2024: </td>
2025: #end
2026: ## NOTES (SAME ROW)
2027: #if ($field.equals("notes") || $field.equals("notes+neutralsite"))
2028: <td class="notes text-muted small align-middle">
2029: <div class="d-flex align-items-center justify-content-center justify-content-lg-start gap-2">
2030: $!event.notes #if ($field.equals("notes+neutralsite") && $event.neutralSite.length() > 0) @ $event.neutralSite #end
2031: </div>
2032: </td>
2033: #end
2034:
2035: ## NEUTRALSITE
2036: #if ($field.equals("neutralsite"))
2037: <td class="e_neutralsite align-middle">
2038: #if ($event.neutralSite.length() > 0)
2039: ## DISPLAY THE @ CHARACTER ONLY FOR HEAD-TO-HEAD SCHEDULES (non numeric schedules sometimes use neutralSite field for event name)
2040: #if ($schedule.numericResults) @ #end $event.neutralSite
2041: #else
2042:
2043: #end
2044: </td>
2045: #end
2046:
2047: ## VENUE+LOCATION
2048: #if ($field.equals("venue+location"))
2049: <td class="e_venue">
2050: #if ($event.venue.length() > 0)
2051: <div class="">$event.venue</div>
2052: #end
2053: #if ($event.address.length() > 0)
2054: <div class="address-formatted">
2055: #if($event.address.length() > 0 && $event.city.length() > 0 && $event.stateCountry.length() > 0 && $event.zipCode.length() > 0)
2056: <a target="_blank" href="http://maps.google.com/maps?q=$!event.address.replace(' ','+'),+$!event.city.replace(' ','+'),+$!event.stateCountry+$!event.zipCode">
2057: $!event.address, $!event.city, $!event.stateCountry $!event.zipCode
2058: </a>
2059: #else
2060: $!event.address, $!event.city, $!event.stateCountry $!event.zipCode
2061: #end
2062: </div>
2063: #end
2064: </td>
2065: #end
2066:
2067: ## VENUE
2068: #if ($field.equals("venue"))
2069: <td class="e_venue align-middle">
2070: #if ($event.venue.length() > 0)
2071: $event.venue
2072: #end
2073: </td>
2074: #end
2075:
2076: ## VENUE
2077: #if ($field.equals("location"))
2078: <td class="e_location align-middle">
2079: #if ($event.address.length() > 0)
2080: <div class="address-formatted">
2081: #if($event.address.length() > 0 && $event.city.length() > 0 && $event.stateCountry.length() > 0 && $event.zipCode.length() > 0)
2082: <a target="_blank" href="http://maps.google.com/maps?q=$!event.address.replace(' ','+'),+$!event.city.replace(' ','+'),+$!event.stateCountry+$!event.zipCode">
2083: $!event.address, $!event.city, $!event.stateCountry $!event.zipCode
2084: </a>
2085: #else
2086: $!event.address, $!event.city, $!event.stateCountry $!event.zipCode
2087: #end
2088: </div>
2089: #end
2090: </td>
2091: #end
2092:
2093: #end ## fields loop
2094: </tr>
2095:
2096: #foreach ($field in $scheduleFields)
2097: ## NOTES (NEW ROW)
2098: #if (($field.equals("_notes") && $event.notes.length() > 0) || ($field.equals("_notes+neutralsite") && ($event.notes.length() > 0 || $event.neutralSite.length() > 0)))
2099: <tr class="${eventClass}" #if ($event.inProgress) title="In Progress" #end>
2100: <td class="py-1 align-middle"> </td>
2101: <td colspan="${tool.math.sub($colCount, 1)}" class="notes py-1 text-muted small align-middle">$!event.notes #if ($field.equals("_notes+neutralsite") && $event.neutralSite.length() > 0) @ $event.neutralSite #end</td>
2102: </tr>
2103: #end
2104:
2105: ## LINKS (NEW ROW)
2106: #if ($field.equals("_links") && $event.links.size() > 0)
2107: <tr class="${eventClass}" #if ($event.inProgress) title="In Progress" #end>
2108: <td class="py-1 align-middle"> </td>
2109: <td colspan="${tool.math.sub($colCount, 1)}" class="links py-1 small align-middle">
2110: #printEventLinks($event, "btn btn-outline-primary btn-sm")
2111: $wiki.event($event)
2112: </td>
2113: </tr>
2114: #end
2115:
2116: ## NEUTRAL SITE (NEW ROW)
2117: #if ($field.equals("_neutralsite") && $event.neutralSite.length() > 0)
2118: <tr class="${eventClass}" #if ($event.inProgress) title="In Progress" #end>
2119: <td class="py-1 align-middle"> </td>
2120: <td colspan="${tool.math.sub($colCount, 1)}" class="neutralsite py-1 small align-middle">#if ($schedule.numericResults) @ #end $event.neutralSite</td>
2121: </tr>
2122: #end
2123: #end ## fields loop
2124:
2125: #set ($lastDate = $theDate)
2126: #end ## EVENTS LOOP
2127: </tbody>
2128: </table>
2129: </div>
2130: #end
2131:
2132: #macro (printSchedule $evts)
2133: #if($evts.size() == 0)
2134: <div class="alert alert-secondary" role="alert">
2135: No events are currently scheduled. Please check back soon!
2136: </div>
2137: #else
2138: <div class="schedule-inner#if ($enhancedLayout)-enhanced #end d-flex flex-column flex-md-row mb-3">
2139: <div class="schedule-events-data flex-grow-1">
2140: <div class="section-event-group event-group d-flex flex-column gap-3">
2141: #if($groupMonths)
2142: #printCollapsibleMonths($evts)
2143: #else
2144: #printEvents($evts, false)
2145: #end
2146: </div>
2147: </div>
2148: #if ($showTeamLeadersCarousel || $showRelatedArticles)
2149: <div id="sidebar" class="flex-shrink-1 col-md-4 p-md-2 col-lg-3 p-lg-3">
2150: #if ($rosterHeadshots.size() > 0 && $showTeamLeadersCarousel)
2151: $website.include("${page.sectionPage.url}/leaders?tmpl=stats-leader-carousel-template")
2152: #end
2153: #if ($showRelatedArticles)
2154: $website.include("${page.sectionPage.url}/news?tmpl=related-articles-template")
2155: #end
2156: </div>
2157: #end
2158: </div>
2159: #end
2160: #end
2161:
2162: ## END MACROS
2163:
2164: #set ($events = [])
2165: #set ($eventTypes = [])
2166: #set ($eventVenues = [])
2167:
2168: #foreach ($event in $schedule.events)
2169: #set ($addEvent = false)
2170:
2171: #if ($event.date && ($event.overall || $showExhibitionGames))
2172: #set ($ignoreme = $events.add($event))
2173:
2174: #if ($event.postseason && !$eventTypes.contains("postseason"))
2175: #set ($bool = $eventTypes.add("postseason"))
2176: #end
2177:
2178: #if ($event.conference && !$eventTypes.contains("conference"))
2179: #set ($bool = $eventTypes.add("conference"))
2180: #end
2181:
2182: #if ($event.division && !$eventTypes.contains("division"))
2183: #set ($bool = $eventTypes.add("division"))
2184: #end
2185:
2186: #if (!$event.overall && !$eventTypes.contains("exhibition"))
2187: #set ($bool = $eventTypes.add("exhibition"))
2188: #end
2189:
2190: #if ($event.neutralSite.length() > 0 && !$eventVenues.contains("neutral"))
2191: #set ($bool = $eventVenues.add("neutral"))
2192: #elseif ($event.home && !$eventVenues.contains("home"))
2193: #set ($bool = $eventVenues.add("home"))
2194: #else
2195: #if (!$eventVenues.contains("away"))
2196: #set ($bool = $eventVenues.add("away"))
2197: #end
2198: #end
2199: #end
2200: #end
2201:
2202: <div class="page-content schedule-content" data-team-schedule="$isTeamSchedule" data-schedule-type-h2h="$schedule.numericResults" data-schedule-view="${scheduleView}" data-schedule-layout="${scheduleLayout}" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/schedule-layout.js">
2203: $wiki
2204:
2205: #set ($scheduleNoteURL = "${page.url}-note")
2206: #if ($website.exists($scheduleNoteURL))
2207: $website.include($scheduleNoteURL)
2208: #end
2209:
2210: <div class="page-content-header d-flex flex-column align-items-center gap-3 mb-3">
2211: #printPageTitle()
2212: #printFilters()
2213: #printTeamStats()
2214: #printEventCountdown()
2215: </div>
2216:
2217: #if ($isSharedMeet)
2218: #printSharedMeet()
2219: #else
2220: #printSchedule($events)
2221: #end
2222:
2223: #printPostSchedule()
2224:
2225: #printLegends()
2226:
2227: #set ($scheduleFooterURL = "${page.url}-footer")
2228: #if ($website.exists($scheduleFooterURL))
2229: <div class="schedule-footer">$website.include($scheduleFooterURL)</div>
2230: #end
2231:
2232: #printSubscribeLinks()
2233:
2234: $sfs $wiki $rss
2235: </div>
2236:
2237: #if ($website.ads.isAdvertisingEnabled('SCHEDULE'))
2238: $website.includeAgain("global-adserver-slots?adSlot=schedule")
2239: #end
2240:
2241: #if ($request.getParameter("ajax").equals("true"))
2242: $!request.setAttribute("decorator", "")
2243: #end
2244:
2245: #if ($request.getAttribute("scheduleNextEvent") && $scheduleNextEventScroll)
2246: <script>
2247: $(document).ready(function() {
2248: setTimeout(function() {
2249: let nextEventPos = $(".schedule-next-event-indicator").offset().top;
2250: let headerHeight = 0;
2251: if ($("header.sticky-top").outerHeight() > 0) {
2252: headerHeight = $("header.sticky-top").outerHeight();
2253: nextEventPos = nextEventPos - headerHeight;
2254: }
2255: $("html, body").animate({scrollTop: nextEventPos}, 500, 'swing');
2256: }, 2000);
2257: });
2258: </script>
2259: #end
2260:
2261: #if (!$enhancedLayout)
2262: <script>
2263: document.addEventListener('DOMContentLoaded', function () {
2264: document.querySelectorAll('.collapse').forEach(function (panel) {
2265: panel.addEventListener('shown.bs.collapse', function () {
2266: const tables = panel.querySelectorAll('table.dataTable');
2267:
2268: tables.forEach(function (tableEl) {
2269: const $table = $(tableEl);
2270:
2271: // If the table hasn't been initialized, initialize it
2272: if (!$table.data('dataTableInitialized')) {
2273: if (typeof window.initDataTable === 'function') {
2274: window.initDataTable($table);
2275: } else {
2276: console.warn('initDataTable function is not available');
2277: }
2278: } else {
2279: $table.DataTable().columns.adjust().draw();
2280: }
2281: });
2282: });
2283: });
2284: });
2285: </script>
2286: #end
2287:
2288: #if ($showSpotOnAddToCal)
2289: <script>
2290: (function (id) {
2291: if (document.getElementById(id)) return;
2292: var so = document.createElement('script'); so.id = id; so.async = true;
2293: so.src = 'https://dff2h0hbfv6w4.cloudfront.net/scripts/presto.js';
2294: var s = document.getElementsByTagName('script')[0];
2295: s.parentNode.insertBefore(so, s);
2296: })('spoton-script');
2297: </script>
2298: #end
|