Page source: |
1: ## PICK UP OPTIONS
2: $website.include("options")
3: #set ($options = $request.getAttribute("options"))
4:
5: $request.setAttribute("icl-dataTables-script", true)
6: ## The above script is needed because several nested tables may appear in nested tabs
7:
8: #set ($locale = "en_us")
9: #set ($locale = $options.get("locale"))
10:
11: #set ($showConf = true)
12: #if ($options.get("stats_hide_conference") and $options.get("stats_hide_conference").equalsIgnoreCase("hide"))
13: #set ($showConf = false)
14: #end
15:
16: #set ($teamId = $attributes.get("teamId"))
17: #set ($stats = $splits.overall)
18:
19: #set ($pos = "")
20: #if ($sport.enumCode == 0) ## Football
21: #set ($pos = "off")
22: #elseif ($sport.enumCode == 2) ## Basketball
23: #set ($pos = "sh")
24: #elseif ($sport.enumCode == 3) ## Soccer
25: #set ($pos = "sc")
26: #elseif ($sport.enumCode == 9) ## Field Hockey
27: #set ($pos = "fielder")
28: #end
29:
30: #set ($posEsc = $formatter.escapeXml($request.getParameter("pos").toLowerCase()))
31: #if ($posEsc.length() > 0)
32: #set ($pos = $posEsc)
33: #end
34:
35: #if ($sport.enumCode == 9) ## Field Hockey
36: #if ($pos == "goalie")
37: #set ($pos = "fielder")
38: #end
39: #if ($pos == "gg")
40: #set ($pos = "kg")
41: #end
42: #end
43:
44: #set ($restriction = 0)
45: #set ($overallActive = true)
46: #set ($conferenceActive = false)
47: #set ($restrictionEsc = $formatter.escapeXml($request.getParameter("r")))
48: #if ($restrictionEsc.length() > 0 && $restrictionEsc.equals("1"))
49: #set ($restriction = 1)
50: #set ($overallActive = false)
51: #set ($conferenceActive = true)
52: #end
53:
54: #set ($summaryActive = false)
55: #set ($resultsActive = false)
56: #set ($statisticsActive = false)
57: #set ($profileEsc = $formatter.escapeXml($!request.getParameter("p")))
58: #if ($profileEsc == "summary")
59: #set ($summaryActive = true)
60: #elseif ($profileEsc == "results")
61: #set ($resultsActive = true)
62: #elseif ($profileEsc == "statistics")
63: #set ($statisticsActive = true)
64: #else
65: #set ($summaryActive = true)
66: #end
67:
68: #set ($resultFormat = "AP1")
69: #if ($options.get("schedule_result_format").equals("L, 1-2"))
70: #set ($resultFormat = "AP2")
71: #end
72:
73: #set ($view = "profile")
74: #if ($request.getParameter("view"))
75: #set ($view = $formatter.escapeXml($!request.getParameter("view")))
76: #end
77:
78: #if ($briefsCategoriesLabels)
79: #set($briefsCategoriesSeason = $briefsCategoriesLabels.get("Season"))
80: #set($firstCategoryPos = $briefsCategoriesSeason.keySet().iterator().next())
81: #end
82:
83: #set ($showRoster = false)
84: #if ($options.get("stats_show_roster") and $options.get("stats_show_roster").equalsIgnoreCase("yes"))
85: #set ($showRoster = true)
86: #end
87:
88: #set ($showAttendance = true)
89: #if ($options.get("stats_show_attendance") and $options.get("stats_show_attendance").equalsIgnoreCase("hide"))
90: #set ($showAttendance = false)
91: #end
92:
93: ## MACROS
94: #macro (printTableHeader $label $class)
95: <th class="text-uppercase $class">$label</th>
96: #end
97:
98: #macro (printResultAriaLabel $event)
99: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
100: #if ($event.neutralSite.length() > 0 || $event.home)
101: #set ($ariaLabel = "${ariaLabel} vs.")
102: #else
103: #set ($ariaLabel = "${ariaLabel} at")
104: #end
105: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
106: #if ($event.neutralSite.length() > 0)
107: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
108: #end
109: #set ($ariaLabel = "${ariaLabel} Box Score")
110: aria-label="$ariaLabel"
111: #end
112:
113: #macro (printBriefCategory $briefCatLabel $briefCatPos $r)
114: #if ($locale == "en_gb" && $briefCatLabel == "Defense")
115: #set ($briefCatLabel = "Defence")
116: #end
117:
118: #if ($lineupDefaultSorting && $lineupDefaultSorting.containsKey($briefCatPos))
119: #set ($sort = $lineupDefaultSorting.get($briefCatPos))
120: #end
121:
122: #if ($allowChooseSort)
123: #set ($sortEsc = $formatter.escapeXml($request.getParameter("sort")))
124: #if ($sortEsc.length() > 0)
125: #set ($sort = $sortEsc)
126: #end
127: #end
128:
129: #set ($url = "")
130: #set ($url = "${page.sectionPage.sectionPage.url}/players?teamId=${attributes.teamId}&view=lineup&sort=$!{sort}&pos=${briefCatPos}&r=${r}&ajax=true&requri=${request.requestURI}&tmpl=stats-bios-template&dec=")
131:
132: #if ($lineupMin && $lineupMin.containsKey($briefCatPos))
133: #set ($minStat = $lineupMin.get($briefCatPos))
134: #set ($url = $url + "&min=" + $minStat)
135: #end
136:
137: #if ($lineupFilters)
138: #if ($lineupFilters.containsKey("cs"))
139: #set($url = $url + "&cs=n")
140: #end
141:
142: #if ($lineupFilters.containsKey("skipBlank"))
143: #set($skipBlank = $lineupFilters.get("skipBlank"))
144:
145: #if ($skipBlank.contains($briefCatPos))
146: #set($url = $url + "&skipBlank=n")
147: #end
148: #end
149: #end
150:
151: <div class="mb-3">
152: <h5 class="sr-only">$briefCatLabel</h5>
153: <div class="tabbed-ajax-content" data-url="$url"></div>
154: ## $website.includeAgain($url)
155: </div>
156:
157: #end ## printBriefCategory
158:
159: #macro(printBriefCategories $r)
160: ## Set this for the inner page to pull something out
161:
162: #if ($r == 1)
163: #set ($restrictionLabel = "conf")
164: $!request.setAttribute("teamStats", $splits.conference)
165: #else
166: #set ($restrictionLabel = "overall")
167: $!request.setAttribute("teamStats", $splits.overall)
168: #end
169:
170: #if ($briefsCategoriesLabels)
171:
172: #set($allowChooseSort = false)
173:
174: #if ($lineupFilters && $lineupFilters.containsKey("allowChooseSort"))
175: #set ($allowChooseSort = true)
176: #end
177:
178: #if ($briefsCategoriesLabels.containsKey("Game"))
179: #set ($briefsCategoriesGame = $briefsCategoriesLabels.get("Game"))
180:
181: ## Print Game categories tables
182: ## Get the first Game category position
183: #set ($gamePos = $briefsCategoriesGame.keySet().iterator().next())
184:
185: ## GAME
186: <div #if ($gamePosActive) class="tab-pane active" #else class="tab-pane" #end id="lineup-${restrictionLabel}-game" role="tabpanel">
187: #printCategories($briefsCategoriesGame, "lineup", $restrictionLabel)
188: </div>
189:
190: ## Print the Season categories tables
191: #set ($briefsCategoriesSeason = $briefsCategoriesLabels.get("Season"))
192:
193: ## SEASON
194: <div #if ($seasonPosActive) class="tab-pane active" #else class="tab-pane" #end id="lineup-${restrictionLabel}-season" role="tabpanel">
195: #printCategories($briefsCategoriesSeason, "lineup", $restrictionLabel)
196: </div>
197:
198: ## Print the Minutes categories tables
199: #if ($briefsCategoriesLabels.containsKey("Minutes"))
200: #set($briefsCategoriesMinutes = $briefsCategoriesLabels.get("Minutes"))
201: #set($minutesPos = $briefsCategoriesMinutes.keySet().iterator().next())
202:
203: #set($showMinutesTab = false)
204: #if ($lineupMinTeam && $lineupMinTeam.containsKey($minutesPos))
205: #set($lineupMinOverallValues = $lineupMinTeam.get($minutesPos))
206:
207: #set($lineupMinOverallStat = $lineupMinOverallValues[0])
208: #set($lineupMinOverallMinVal = $lineupMinOverallValues[1])
209: #set($lineupMinOverallMinNumericValue = $tool.number.toNumber($lineupMinOverallMinVal))
210:
211: #if ($tool.math.round($splits.overall[$lineupMinOverallStat]) && $tool.math.round($splits.overall[$lineupMinOverallStat]) >= $lineupMinOverallMinNumericValue)
212: #set($showMinutesTab = true)
213: #end
214: #end
215:
216: #if ($showMinutesTab)
217: ## MINUTES
218: <div #if ($minutesPosActive) class="tab-pane active" #else class="tab-pane" #end id="lineup-${restrictionLabel}-minutes" role="tabpanel">
219: #foreach($briefsCatMinutes in $briefsCategoriesMinutes.entrySet())
220: #printBriefCategory($briefsCatMinutes.value, $briefsCatMinutes.key, $r)
221: #end
222: </div>
223: #end
224: #end ## end minutes
225: #else
226:
227: #set($briefsCategoriesSeason = $briefsCategoriesLabels.get("Season"))
228: #printCategories($briefsCategoriesSeason, 'season', $restrictionLabel)
229: #end
230:
231: #elseif ($lineupFilters)
232:
233: ## All of the supported sports has lineupFilters, so print it without matter it does not have briefs category, yeah voleyball is you :)
234: #set ($sort = $formatter.escapeXml($request.getParameter("sort")))
235: #set ($url = "../players?teamId=${attributes.teamId}&view=lineup&sort=$!{sort}&r=${r}&ajax=true&requri=${request.requestURI}")
236: <div class="tabbed-ajax-content" data-url="$url"></div>
237: #else
238: We do not support this sport
239: #end
240: #end ## printBriefCategories
241:
242: #macro (printCategories $briefCategoryLabels $v $restrictionLabel)
243: <div class="tab-container">
244: <div class="d-flex flex-row text-nowrap align-items-center justify-content-center">
245: <div class="secondary-tab-select-container flex-fill">
246: <select class="tab-nav-select-helper form-select" id="teaminfo-tabs-secondary-${v}-${restrictionLabel}-select" aria-label="Choose a stat group">
247: #foreach($label in $briefCategoryLabels.entrySet())
248: #set($catLabel = $label.value)
249: #if ($locale == "en_gb" && $catLabel == "Defense")
250: #set ($catLabel = "Defence")
251: #end
252:
253: ## This is thouroughly tested code to manage the default active tabbed content
254: #set ($selected = "")
255: #if($pos == $label.key || ($foreach.first && ($posEsc.empty || $briefCategoryLabels.containsKey($pos) == false)))
256: #set ($selected = "selected")
257: #end
258: <option value="#gamelog-${v}-${restrictionLabel}-${label.key}" ${selected}>${catLabel}</option>
259: #end
260: </select>
261: <script>
262: $('.tab-nav-select-helper').on('change', function(e) {
263: var id = $(this).val();
264: $('a[data-bs-target="' + id + '"]').tab('show');
265: });
266: </script>
267: </div>
268: </div>
269: <div class="tab-nav d-none">
270: <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3" id="teaminfo-tabs-secondary-${v}-${restrictionLabel}" role="tablist">
271: #foreach($label in $briefCategoryLabels.entrySet())
272: #set($catLabel = $label.value)
273: #if ($locale == "en_gb" && $catLabel == "Defense")
274: #set ($catLabel = "Defence")
275: #end
276:
277: #set ($active = "")
278: #if($pos == $label.key || ($foreach.first && ($posEsc.empty || $briefCategoryLabels.containsKey($pos) == false)))
279: #set ($active = "active")
280: #end
281:
282: #set ($aClass = "nav-link text-nowrap text-center")
283:
284: <li class="nav-item flex-fill flex-md-grow-0 flex-md-shrink-0">
285: <a class="${aClass} ${active}" href="${page.url}?view=${v}&pos=${label.key}" role="tab" data-bs-toggle="tab" data-bs-target="#gamelog-${v}-${restrictionLabel}-${label.key}">${catLabel}</a>
286: </li>
287: #end
288: </ul>
289: </div>
290: <div class="tab-content py-3">
291: #foreach ($briefCat in $briefCategoryLabels.entrySet())
292: #set ($classAttr = "tab-pane")
293:
294: #set ($active = "")
295: #if($pos == $briefCat.key || ($foreach.first && ($posEsc.empty || $briefCategoryLabels.containsKey($pos) == false)))
296: #set ($active = "active")
297: #end
298:
299: <div class="$classAttr $active" id="gamelog-${v}-${restrictionLabel}-${briefCat.key}" role="tabpanel">
300: #if ($v == "gamelog")
301: #gamelogData($briefCat.key)
302: #elseif ($v == "splits")
303: #splitsTeamNetworkData($briefCat.key)
304: #elseif ($v == "lineup" || $v == "season")
305: #printBriefCategory($briefCat.value, $briefCat.key, $r)
306: #end
307: </div>
308: #end
309: </div>
310: </div>
311: #end ## printCategories
312:
313: #macro (printSeasonGameMinutesTabs $r)
314: #if ($briefsCategoriesLabels.containsKey("Game"))
315: #set ($briefsCategoriesGame = $briefsCategoriesLabels.get("Game"))
316: #set ($gamePos = $briefsCategoriesGame.keySet().iterator().next())
317:
318: #set ($restrictionLabel = "overall")
319: #if ($r == 1)
320: #set ($restrictionLabel = "conf")
321: #end
322:
323: #set ($showMinutesTab = false)
324: #if ($briefsCategoriesLabels.containsKey("Minutes"))
325: #set ($briefsCategoriesMinutes = $briefsCategoriesLabels.get("Minutes"))
326: #set ($minutesPos = $briefsCategoriesMinutes.keySet().iterator().next())
327:
328: #if ($lineupMinTeam && $lineupMinTeam.containsKey($minutesPos))
329: #set ($lineupMinOverallValues = $lineupMinTeam.get($minutesPos))
330: #set ($lineupMinOverallStat = $lineupMinOverallValues[0])
331: #set ($lineupMinOverallMinVal = $lineupMinOverallValues[1])
332: #set ($lineupMinOverallMinNumericValue = $tool.number.toNumber($lineupMinOverallMinVal))
333:
334: #if ($tool.math.round($splits.overall[$lineupMinOverallStat]) && $tool.math.round($splits.overall[$lineupMinOverallStat]) >= $lineupMinOverallMinNumericValue)
335: #set($showMinutesTab = true)
336: #end
337: #end
338: #end
339: <div class="tab-container">
340: <div class="tab-nav">
341: #set($gamePosActive = false)
342: #set($seasonPosActive = false)
343: #set($minutesPosActive = false)
344:
345: #if($pos.equals($gamePos) || $pos.endsWith("g") || $pos.endsWith("gext"))
346: #set($gamePosActive = true)
347: #else
348: #if($showMinutesTab && $pos.equals($minutesPos))
349: #set($minutesPosActive = true)
350: #elseif($pos.equals($firstCategoryPos))
351: #set($seasonPosActive = true)
352: #end
353: #set($seasonPosActive = true)
354: #end
355:
356:
357: <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3" data-pos="$pos" data-gamePos="$pos.equals($gamePos)" data-firstCategoryPos="$pos.equals($firstCategoryPos)" data-minutesPos="$pos.equals($minutesPos)" id="teaminfo-tabs-secondary-minutes" role="tablist">
358: #printSubTab($gamePosActive, "${url}?view=lineup&r=${r}&pos=${gamePos}", "Game", "#lineup-${restrictionLabel}-game")
359: #printSubTab($seasonPosActive, "${url}?view=lineup&r=${r}&pos=${firstCategoryPos}", "Season", "#lineup-${restrictionLabel}-season")
360: #if ($showMinutesTab)
361: #printSubTab($minutesPosActive, "${url}?view=lineup&r=${r}&pos=${minutesPos}", "Minutes", "#lineup-${restrictionLabel}-minutes")
362: #end
363: </ul>
364: </div>
365: <div class="tab-content py-3">
366: #printBriefCategories($r)
367: </div>
368: </div>
369: #end
370: #end ## printSeasonGameMinutesTabs
371:
372: #macro (printTeamProfileTabs)
373: <div class="team-profile-contents">
374: <div class="d-flex flex-column flex-md-row justify-content-center gap-3">
375: <div class="column-a flex-grow-1">
376: <div class="d-flex flex-column justify-content-center gap-3">
377: <div class="tp-schedule-summary">
378: <div class="stat-table-heading h5">Schedule Summary</div>
379: <div class="stats-container table-responsive">
380: #set ($url = "${page.sectionPage.sectionPage.url}/schedule?teamId=${teamId}&tmpl=schedule-data-template&dec=")
381: <div class="tabbed-ajax-content" data-url="$url"></div>
382: </div>
383: </div>
384: <div class="tp-schedule-summary">
385: <div class="stat-table-heading h5">Recent Events</div>
386: <div class="stats-container table-responsive">#printRecentGames()</div>
387: </div>
388: </div>
389: </div>
390: <div class="column-b flex-grow-1">
391: <div class="tp-schedule-summary">
392: <div class="stat-table-heading h5">Team Statistics</div>
393: <div class="stats-container table-responsive">
394: #set ($url = "${page.sectionPage.sectionPage.url}/teams?tmpl=stats-teams-rank-template&rank=${teamId}&dec=")
395: <div class="tabbed-ajax-content" data-url="$url"></div>
396: </div>
397: </div>
398: </div>
399: </div>
400: </div>
401: #end ## printLineupTabs
402:
403: #macro (printLineupTabs)
404: <div class="tab-container">
405: <div class="tab-nav">
406: <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3" id="teaminfo-tabs-secondary-lineup" role="tablist">
407: #printSubTab($overallActive, "${url}?view=lineup&r=0&pos=${pos}", "Overall", "#lineup-overall-pane")
408: #if ($showConf)
409: #printSubTab($conferenceActive, "${url}?view=lineup&r=1&pos=${pos}", "Conference", "#lineup-conf-pane")
410: #end
411: </ul>
412: </div>
413: <div class="tab-content py-3">
414: <div class="tab-pane active" id="lineup-overall-pane" role="tabpanel">
415: #if ($briefsCategoriesLabels.containsKey("Game"))
416: #printSeasonGameMinutesTabs(0)
417: #else
418: #printBriefCategories(0)
419: #end
420: </div>
421: #if ($showConf)
422: <div class="tab-pane" id="lineup-conf-pane" role="tabpanel">
423: #if ($briefsCategoriesLabels.containsKey("Game"))
424: #printSeasonGameMinutesTabs(1)
425: #else
426: #printBriefCategories(1)
427: #end
428: </div>
429: #end
430: </div>
431: </div>
432: #end ## printLineupTabs
433:
434: #set($statClass = "flex-fill text-center border-bottom border-end p-2 p-lg-3 col-6 col-md-3 col-lg-auto")
435: #macro (printStat $label $val $fmt)
436: <li class="$statClass" data-val="$val" data-format="$fmt">
437: <div class="d-flex flex-column justify-content-center align-items-center h-100">
438: <div class="small text-uppercase text-muted">$label</div>
439: <div class="fs-4 lh-1 text-nowrap fw-bold">$formatter.formatNumber($val, $fmt)</div>
440: </div>
441: </li>
442: #end
443:
444: #macro (printStatGraph $label $val $fmt)
445: <li class="$statClass" data-val="$val" data-format="$fmt">
446: <div class="d-flex flex-column justify-content-center align-items-center h-100 proj-progress-card">
447: <div class="small text-uppercase text-muted">$label</div>
448: <div class="fs-4 lh-1 text-nowrap fw-bold">$formatter.formatNumber($val, $fmt)</div>
449: #set ($percent = $tool.math.mul($val, 100))
450: <div class="progress mt-2 w-100">
451: <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>
452: </div>
453: </div>
454: </li>
455: #end
456:
457: #macro (printHighlights)
458: #if ($highlights)
459: <div class="page-highlights d-print-none">
460: <ul class="team-stats my-3 list-unstyled d-flex flex-wrap justify-content-center align-items-stretch border-top border-start">
461: #foreach ($highlight in $highlights.keySet())
462: #set ($value = "-")
463: #set ($value = $stats.get($highlight))
464: #set ($value = $tool.math.toInteger($value.replace('-', '0')))
465: #if($formats.get($highlight).equals("#.000") || $formats.get($highlight).equals(".000"))
466: #printStatGraph("$!highlights.get($highlight).replace('-per game', '/g').replace('per game', '')", $!value, $formats.get($highlight))
467: #else
468: #printStat("$!highlights.get($highlight).replace('-per game', '/g').replace('per game', '')", $!value, $formats.get($highlight))
469: #end
470:
471: #end
472: </ul>
473: </div>
474: #end
475:
476: #end ## macro printHighlights
477: #macro (gamelogData $p)
478:
479: #set ($gamelogStats = $gamelogs.get($p))
480:
481: <table class="table table-hover table-light">
482: <thead class="thead-dark">
483: <tr>
484: #printTableHeader("Date", "w-1 text-start")
485: #printTableHeader("Opponent", "")
486: #printTableHeader("Score", "text-center")
487: #foreach ($gamelog in $gamelogStats)
488: #printTableHeader($gamelog, "text-center")
489: #end
490: </tr>
491: </thead>
492: #foreach ($event in $events)
493: <tr>
494: <td class="text-nowrap text-start">
495: $formatter.formatDate($event.event.date, "MMM d")
496: #if (!$event.event.overall)
497: #set ($atLeastOneNotOverall = true) #
498: #end
499: </td>
500: <td class="text-nowrap">
501: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
502: $event.event.opponent.name
503: </td>
504: <td class="text-nowrap text-center">
505: #if ($event.event.statusCode >= 0)
506: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
507: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
508: #else
509: ${event.event.APResult}
510: #end
511: #else
512: #end
513: </td>
514: #foreach ($gamelog in $gamelogStats.keySet())
515: #set ($value = "-")
516: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
517: <td class="text-center text-nowrap">$value</td>
518: #end
519: </tr>
520: #end
521: </table>
522: #end ## gamelogData
523:
524: #macro (printRecentGames)
525: <table class="table table-hover">
526: <thead class="thead-dark">
527: <tr>
528: #printTableHeader("Date", "w-1 text-end")
529: #printTableHeader("Opponent", "")
530: #printTableHeader("Result", " text-center")
531: </tr>
532: </thead>
533:
534: #set ($eventEnd = -1)
535: #foreach ($event in $events)
536: #if ($event.event.result.resolved)
537: #set ($eventEnd = $velocityCount)
538: #end
539: #end
540:
541: #set ($eventStart = $eventEnd - 9)
542: #if ($eventStart < 0) #set ($eventStart = 0) #end
543:
544: #foreach ($event in $events)
545: #set ($wlClass = "fw-normal")
546: #if ($event.event.winner.name.length() > 0)
547: #if ($event.event.winner.name == $event.event.us.name)
548: #set ($wlClass = "winner")
549: #else
550: #set ($wlClass = "loser text-muted")
551: #end
552: #end
553: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
554: <tr class="${wlClass}">
555: <td class="text-nowrap text-end"><span class="date">$formatter.formatDate($event.event.date, "M/d/yyyy")</span></td>
556: <td>
557: #if ($event.event.neutralSite.length() > 0) vs.
558: #elseif (!$event.event.home) at
559: #else ## nothing for a home game
560: #end
561: $event.event.opponent.name
562: </td>
563: <td class="text-center">
564: #if ($event.event.statusCode >= 0)
565: ## FORMATTED RESULT
566: #set ($formattedResult = "")
567:
568: #if ($resultFormat.equals("AP1"))
569: #set ($formattedResult = $event.event.APResult)
570: #elseif ($resultFormat.equals("AP2"))
571: #set ($formattedResult = $event.event.AP2Result)
572: #end
573:
574: #if ($formattedResult.startsWith("W, "))
575: #set ($formattedResult = $formattedResult.replace("W, ", '<span class="winner event-winner">W</span>, '))
576: #elseif ($formattedResult.startsWith("L, "))
577: #set ($formattedResult = $formattedResult.replace("L, ", '<span class="loser event-loser">L</span>, '))
578: #end
579:
580: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
581: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${formattedResult}</a>
582: #else
583: ${formattedResult}
584: #end
585: #else
586: -
587: #end
588: </td>
589: </tr>
590: #end
591: #end
592: </table>
593: #end ## printRecentGames
594:
595: #macro (splitTeamNetwork $statPosBriefs $label $stats)
596: <tr>
597: <th scope="row" class="fw-normal text-end">${label}</th>
598: #foreach ($brief in $statPosBriefs.keySet())
599: #set ($value = "-")
600: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
601: <td class="text-center text-nowrap">#if ($value.length() > 0) $value #else - #end</td>
602: #end
603: </tr>
604: #end ## split
605:
606: #macro (splitsTeamNetworkData $p)
607: #set ($statPosBriefs = $briefs.get($p))
608: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1))
609:
610: #if ($statPosBriefs.size() > 0)
611: <table class="table table-hover table-light">
612: <thead class="thead-dark">
613: <tr>
614: <th class="text-uppercase" aria-label="Title"> </th>
615: #foreach ($brief in $statPosBriefs)
616: #printTableHeader($brief, "text-center")
617: #end
618: </tr>
619: </thead>
620: #splitTeamNetwork($statPosBriefs, "Total", $splits.overall)
621: #if ($showConf)
622: #splitTeamNetwork($statPosBriefs, "Conference", $splits.conference)
623: #splitTeamNetwork($statPosBriefs, "Exhibition", $splits.exhibition)
624: #else
625: #splitTeamNetwork($statPosBriefs, "Exhibition", $splits.exhibition)
626: #end ## hide overall/conf
627:
628: <tr class="bg-transparent">
629: <td colspan="$colspan"> </td>
630: </tr>
631:
632: #splitTeamNetwork($statPosBriefs, "Home", $splits.home)
633: #splitTeamNetwork($statPosBriefs, "Away", $splits.away)
634: #splitTeamNetwork($statPosBriefs, "Neutral", $splits.neutral)
635:
636: <tr class="bg-transparent">
637: <td colspan="$colspan"> </td>
638: </tr>
639:
640: #foreach($gameResult in $gamesResults.entrySet())
641: #if ($gameResult.key == "wins")
642: #set ($splitGameResult = $splits.inWins)
643: #elseif ($gameResult.key == "losses")
644: #set ($splitGameResult = $splits.inLosses)
645: #elseif ($gameResult.key == "ties")
646: #set ($splitGameResult = $splits.inTies)
647: #end
648:
649: #splitTeamNetwork($statPosBriefs, $gameResult.value, $splitGameResult)
650: #end
651:
652: <tr class="bg-transparent">
653: <td colspan="$colspan"> </td>
654: </tr>
655:
656: #if ($monthsPlayed and $monthsPlayed.size() > 0)
657: #foreach($month in $monthsPlayed)
658: #if ($month == 'January')
659: #set ($splitMonth = $splits.january)
660: #elseif ($month == 'February')
661: #set ($splitMonth = $splits.february)
662: #elseif ($month == 'March')
663: #set($splitMonth = $splits.march)
664: #elseif ($month == 'April')
665: #set($splitMonth = $splits.april)
666: #elseif ($month == 'May')
667: #set ($splitMonth = $splits.may)
668: #elseif ($month == 'June')
669: #set ($splitMonth = $splits.june)
670: #elseif ($month == 'July')
671: #set($splitMonth = $splits.july)
672: #elseif ($month == 'August')
673: #set ($splitMonth = $splits.august)
674: #elseif ($month == 'September')
675: #set($splitMonth = $splits.september)
676: #elseif ($month == 'October')
677: #set($splitMonth = $splits.october)
678: #elseif ($month == 'November')
679: #set ($splitMonth = $splits.november)
680: #elseif ($month == 'December')
681: #set($splitMonth = $splits.december)
682: #end
683:
684: #splitTeamNetwork($statPosBriefs, $month, $splitMonth)
685: #end ## foreach
686: #end
687: </table>
688: #end
689: #end ## splitsTeamNetworkData
690:
691: #macro (printAttendance)
692: #if ($showAttendance)
693: <table class="table table-hover table-light">
694: <thead class="thead-dark">
695: <tr>
696: #printTableHeader("Date", "w-1 text-start")
697: #printTableHeader("Opponent", "")
698: #printTableHeader("Score", "text-center")
699: #printTableHeader("Attend", "text-center")
700: </tr>
701: </thead>
702: #set ($counter = 0)
703: #foreach ($event in $events)
704: <tr>
705: <td class="text-nowrap text-start">$formatter.formatDate($event.event.date, "MMM d")</td>
706: <td class="text-nowrap">
707: #if ($event.event.neutralSite.length() > 0) vs.
708: #elseif (!$event.event.home) at
709: #else ## nothing for a home game
710: #end
711: $event.event.opponent.name
712: </td>
713: <td class="text-nowrap text-center">
714: #if ($event.event.statusCode >= 0)
715: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
716: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
717: #else
718: ${event.event.result}
719: #end
720: #else #end
721: </td>
722: <td class="text-nowrap text-center">
723: #set ($value = "-")
724: #set ($value = $!formatter.formatNumber($event.stats.get('at'), $formats.get('at')))
725: #if ($value.length() > 0) $value #else - #end
726: </td>
727: </tr>
728: #end
729: </table>
730: #end ## showAttendance
731: #end
732:
733: #macro (printTab $viewParam $label)
734: #set ($classAttr = "nav-link text-nowrap text-center")
735: #if ($viewParam == $view)
736: #set ($classAttr = "${classAttr} active")
737: #end
738: <li class="nav-item flex-fill flex-md-grow-0 flex-md-shrink-0">
739: <a href="${page.url}?view=${viewParam}" class="$classAttr" role="tab" data-bs-toggle="tab" data-bs-target="#${viewParam}" aria-controls="$viewParam">$label</a>
740: </li>
741: #end
742:
743: #macro (printSubTab $active $url $label $target)
744: <li class="nav-item flex-fill flex-md-grow-0 flex-md-shrink-0">
745: <a class="nav-link text-nowrap text-center #if ($active) active #end" href="$url" role="tab" data-bs-toggle="tab" data-bs-target="$target">$label</a>
746: </li>
747: #end
748:
749: #macro (printPaneAttrs $viewParam)
750: #set ($classAttr = "tab-pane")
751: #if ($viewParam == $view)
752: #set ($classAttr = "tab-pane active")
753: #else
754: #set ($classAttr = "${classAttr} fade")
755: #end
756:
757: class="$classAttr" role="tabpanel" id="$viewParam"
758: #end
759:
760: #macro (printCoachViewUrl)
761: #set ($coachViewUrl = "${page.url}?tmpl=teaminfo-network-monospace-template")
762: #set ($enumCode = $sport.enumCode)
763:
764: #if ($enumCode == 2)
765: #set ($coachViewUrl = "${coachViewUrl}&sort=ptspg")
766: #elseif ($enumCode == 1 || $enumCode == 11)
767: #set ($coachViewUrl = "${coachViewUrl}&sort=ab&pos=h")
768: #end
769:
770: #if ($enumCode == 7 || $enumCode == 8 || $enumCode > 11) #else
771: <li class="nav-item" data-skip="true"><a href="$coachViewUrl" target="_blank" class="nav-link text-nowrap text-center">Coach's View</a></li>
772: #end
773: #end
774:
775: #macro (printTabs)
776: $request.setAttribute("icl-responsive-tabs-script", true)
777:
778: <div class="tab-nav">
779: <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3" id="teaminfo-tabs" role="tablist">
780: #printTab("profile", "Team Profile")
781:
782: #if ($showRoster)
783: #printTab("roster", "Roster")
784: #end
785:
786: #printTab("lineup", "Lineup")
787: #printTab("gamelog", "Game Log")
788: #printTab("splits", "Split Stats")
789:
790: #if ($showAttendance)
791: #printTab("attendance", "Attendance")
792: #end
793:
794: #printCoachViewUrl
795: </ul>
796: </div>
797: #end ## printTabs
798:
799: #macro (printFilters)
800: <div class="page-filters d-print-none">
801: <div class="btn-toolbar d-flex justify-content-between gap-3 flex-column flex-sm-row flex-sm-nowrap" role="toolbar" aria-label="Standings tool bar">
802: <div class="flex-fill">
803: <div class="d-flex flex-wrap align-items-end justify-content-between gap-3 flex-row">
804: $!request.setAttribute("pageObj", $page)
805: $website.includeAgain("conf-season-filter-template")
806: </div>
807: </div>
808: <div class="" role="group" aria-label="Print friendly version">
809: <a href="javascript:void(0);" onclick="printDynamicUrl()" class="btn btn-outline-secondary text-nowrap"><span class="fa fa-print"></span> Print</a>
810: </div>
811: </div>
812: </div>
813: #end ## printFilters
814:
815: #macro (printImage $src $alt $class)
816: #set ($src = "${src}?max_height=576&max_width=576&crop=1")
817: <div class="ratio ratio-1x1 rounded-circle overflow-hidden img-thumbnail">
818: <span class="align-content-center">
819: <img src="${src}" alt="${alt}" class="${class} img-fluid" />
820: </span>
821: </div>
822: #end
823: ############ END MACROS #############
824:
825: #set ($pageTitle = $page.title)
826: #if($pageTitle.trim().length() == 0)
827: #set($pageTitle = $page.sectionPage.getTitle())
828: #end
829:
830: #if ($pageTitle.trim().length() == 0)
831: #set ($season = "")
832: #if ($page.url.matches(".*/\d{4}-\d{2}/.*"))
833: #set ($truncateStr = $page.url.split("/\d{4}-\d{2}/").get(0))
834: #set ($season = $page.url.replace($truncateStr, "").substring(1, 8))
835: #end
836:
837: #set ($gender = "")
838: #if ($sport.enumCode == 6 or $sport.enumCode == 10)
839: #else
840: #if ($page.url.matches(".*/sports/m.*") || $page.url.matches(".*/sports/m-*"))
841: ##set ($gender = "Men's")
842: #elseif ($page.url.matches(".*/sports/w.*") || $page.url.matches(".*/sports/w-*"))
843: ##set ($gender = "Women's")
844: #end
845: #end
846:
847: #set ($pageTitle = "${season} ${gender} ${sport} Statistics")
848:
849: #end
850:
851: #if ($attributes.get("school_name").length() > 0)
852: #set ($pageTitleExcludeSchoolName = "${pageTitle}")
853: #set ($pageTitle = "${pageTitle} - ${attributes.get('school_name')}")
854: #end
855:
856: $!request.setAttribute("pageTitle", "${pageTitle}")
857:
858: <head><title>$pageTitle</title></head>
859:
860:
861: <div class="page-content team-stats">
862:
863: <div class="page-content-header d-flex flex-column align-items-center gap-3 mb-3">
864: <div class="tnt-heading">
865: <div class="tnt-main d-flex flex-column flex-grow-1 gap-3">
866: <div class="tnt-name-info">
867: <div class="d-flex align-items-center justify-content-between gap-3">
868: #if ($!attributes.get("teamId"))
869: <div class="tnt-left d-none d-sm-flex">
870: <div class="tnt-headshot position-relative" style="width:5rem;">
871: #printImage($website.teamLogo($!{attributes.get("teamId")}), ${attributes.get("team")}, "img-fluid")
872: </div>
873: </div>
874: #end
875: <div class="tnt-name-info-main flex-grow-1">
876: <div class="d-flex flex-column aling-items-center justify-content-between gap-3">
877: <div class="team-attributes">
878: <h1 class="m-0 p-0">
879: <span class="d-block">$pageTitleExcludeSchoolName</span>
880: <span class="d-block h4 text-muted">$!attributes.get("school_name")</span>
881: </h1>
882: #*
883: <ul class="list-unstyled list-inline-pipes d-flex align-items-center justify-content-start gap-2 m-0 w-100">
884: <li><a href="../teams?id=$!{attributes.get("teamId")}" aria-label="Team Stats - ${attributes.get("team")}">$!attributes.get("school_name")</a></li>
885: #if($season.length() > 0)<li><span>${season}</span></li>#end
886: #if($sport.length() > 0)<li><span>${sport}</span></li>#end
887: </ul>
888:
889: *#
890: </div>
891: </div>
892: </div>
893: </div>
894: </div>
895: </div>
896: </div>
897:
898: #printFilters
899:
900: ## TEAM HIGHLIGHT STATS
901: #printHighlights
902: </div>
903:
904: ## TABS
905: <div class="tabs-container my-3">
906: #printTabs
907:
908: <div class="tab-content p-3 border border-top-0">
909: #set ($url = $request.requestURI)
910:
911: ## TEAM PROFILE
912: <div #printPaneAttrs("profile")>
913: #printTeamProfileTabs()
914: </div> ## team profile
915:
916: ## ROSTER
917: #if ($showRoster)
918: <div #printPaneAttrs("roster")>
919: #set ($url = $website.includeAgain("../players?teamId=${teamId}&view=roster&ajax=true&requri=${request.requestURI}&tmpl=stats-bios-template"))
920: <div class="tabbed-ajax-content" data-url="$url"></div>
921: </div>
922: #end
923:
924: ## LINEUP
925: <div #printPaneAttrs("lineup")>
926: ## start of overall/conference
927: #printLineupTabs()
928:
929: <div class="dl-roster small">
930: Download roster:
931: <a href="../players?teamId=${attributes.teamId}&view=ext">${rosterExtension} (First Last) </a> |
932: <a href="../players?teamId=${attributes.teamId}&view=ext&type=lf"> ${rosterExtension} (Last, First)</a>
933: #if ($rosterExtraExtension)
934: <a href="../players?teamId=${attributes.teamId}&view=exte">${rosterExtraExtension} (First Last)</a> |
935: <a href="../players?teamId=${attributes.teamId}&view=exte&type=lf">${rosterExtraExtension} (Last, First)</a>
936: #end
937: </div>
938: </div> ## lineup
939:
940: ## GAMELOG
941: <div #printPaneAttrs("gamelog")>
942: <div class="stats-container table-responsive">
943: #if ($gamelogsCategoriesLabels && $gamelogsCategoriesLabels.size() > 1)
944: #printCategories($gamelogsCategoriesLabels, 'gamelog', '')
945: #else
946: #gamelogData($pos)
947: #end
948: </div>
949: </div>
950:
951: ## SPLITS
952: <div #printPaneAttrs("splits")>
953: <div class="stats-container table-responsive">
954: #if ($briefsTeamCategoriesLabels && $briefsTeamCategoriesLabels.size() > 1)
955: #printCategories($briefsTeamCategoriesLabels, 'splits', '')
956: #else
957: #splitsTeamNetworkData($pos)
958: #end
959: </div>
960: </div> ## splits
961:
962: ## ATTENDANCE
963: <div #printPaneAttrs("attendance")>
964: <div class="stats-container table-responsive">#printAttendance</div>
965: </div>
966: </div> ## tab-content
967: </div> ## tab-container
968: </div> ## stats-container
969: $wiki.su
|