Page source: |
1: ## PICK UP OPTIONS
2: $website.include("options")
3: #set ($options = $request.getAttribute("options"))
4: #set ($locale = "en_us")
5: #set ($locale = $options.get("locale"))
6:
7: #set ($showconf = true)
8: #if ($options.get("stats_hide_conference") and $options.get("stats_hide_conference").equalsIgnoreCase("hide"))
9: #set ($showconf = false)
10: #end
11:
12: #set ($showCareer = $wiki.valid() && $seasons)
13: #if ("yes" == $options.get("stats_show_career") && $seasons)
14: #set ($showCareer = "yes")
15: #end
16:
17: #if ($locale == "en_us")
18: #set ($defLabel = "Defense")
19: #elseif ($locale == "en_gb")
20: #set ($defLabel = "Defence")
21: #end
22:
23: #set ($pos = "")
24: #set ($pos = $attributes.get("position"))
25: #set ($posVec = $pos.split("/"))
26: #set ($pos = $posVec[0])
27: #set ($pos = $pos.toLowerCase())
28:
29: #set ($statPos = $positions.get($pos))
30: #set ($paramPos = $request.getParameter("pos").toLowerCase())
31: #set ($highlights = $highlights.get($statPos))
32:
33: #set ($url = ${page.url})
34: #set ($playerId = $attributes.get("playerId"))
35: #set ($stats = $splits.overall)
36:
37: #set ($hasEvents = $events.size() > 0)
38: #set ($hasSynopsis = $synopsis.length() > 1 && $synopsis.indexOf("<center>") == -1)
39: #set ($htmlStatsURL = "${page.url}-stats")
40: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
41: #set ($bioBriefURL = "${page.url}-brief")
42: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
43:
44: $request.setAttribute("careerTotals", $career)
45: ## We track a map of the careers to see if we are missing any seasons
46: #set ($careerMap = {})
47: $request.setAttribute("careerMap", $careerMap)
48: #foreach ($season in $seasons)
49: ## We need to include this season stats
50: #set ($path = "${season.path}?tmpl=bio-career-template&name=${season.seasonName}&pos=${statPos}&print=no")
51: ###set ($path = $path.replace("../..", $page.sectionPage.sectionPage.sectionPage.url))
52: $website.includeAgain($path)
53: #end
54:
55: #set ($view = "profile")
56: #if ($request.getParameter("view"))
57: #set ($view = $request.getParameter("view"))
58: #end
59:
60: #################################### MACROS ####################################################
61: #macro (printTableHeader $label $class)
62: <th class="text-uppercase $class">$label</th>
63: #end
64:
65: #macro (printCellClass)
66: class="text-nowrap"
67: #end
68:
69: #macro (printTab $viewParam $label)
70: #set ($classAttr = "nav-link text-nowrap")
71: #if ($viewParam == $view)
72: #set ($classAttr = "${classAttr} active")
73: #end
74: <li class="nav-item">
75: <a href="${page.url}?view=${viewParam}" class="$classAttr" role="tab" data-toggle="tab" data-target="#${viewParam}" aria-selected="true" aria-controls="$viewParam">$label</a>
76: </li>
77: #end
78:
79: #macro (printPaneAttrs $viewParam)
80: #set ($classAttr = "tab-pane")
81: #if ($viewParam == $view)
82: #set ($classAttr = "tab-pane active")
83: #else
84: #set ($classAttr = "${classAttr} fade")
85: #end
86:
87: class="$classAttr" role="tabpanel" id="$viewParam"
88: #end
89:
90: #macro (printResultAriaLabel $event)
91: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
92: #if ($event.neutralSite.length() > 0 || $event.home)
93: #set ($ariaLabel = "${ariaLabel} vs.")
94: #else
95: #set ($ariaLabel = "${ariaLabel} at")
96: #end
97: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
98: #if ($event.neutralSite.length() > 0)
99: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
100: #end
101: #set ($ariaLabel = "${ariaLabel} Box Score")
102: aria-label="$ariaLabel"
103: #end
104:
105: #macro (printHighlights)
106: #if ($highlights)
107: <div class="d-flex flex-wrap mb-3 bg-light">
108: #foreach ($highlight in $highlights.keySet())
109: #set ($value = "-")
110: #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
111: #set ($classAttr = "flex-fill border p-2 text-center")
112: #if ($velocityCount > 1)
113: ## #set ($classAttr = "nav-item border-left")
114: #end
115: <div class="$classAttr" style="min-width:100px">
116: <div class="text-uppercase">$!highlights.get($highlight)</div>
117: <div class="h5 m-0">$!value</div>
118: </div>
119: #end
120: </div>
121: #end
122: #end ## macro printHighlights
123:
124: #macro (splitBioNetwork $statPosBriefs $label $stats)
125: <tr>
126: <td #printCellClass>${label}</td>
127: #foreach ($brief in $statPosBriefs.keySet())
128: #set ($value = "-")
129: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
130: <td #printCellClass>#if ($value.length() > 0) $value #else - #end</td>
131: #end
132: </tr>
133: #end ## marco split
134:
135: #macro (printCategories $briefCategoryLabels $viewParam)
136: #printSubTabs($briefCategoryLabels.entrySet(), $viewParam)
137:
138: <div class="tab-content">
139: #foreach ($briefCat in $briefCategoryLabels.entrySet())
140: #set ($briefCatLabel = $briefCat.value)
141: #set ($class = "tab-pane")
142: #if ($briefCat.key == $activePos)
143: #set ($class = "tab-pane active")
144: #end
145: <div id="${viewParam}-${briefCat.key}" class="$class" role="tabpanel">
146: <div class="stats-wrap clearfix">
147: #if ($viewParam == "splits")
148: #splitsBioNetworkData($briefCat.key)
149: #elseif ($viewParam == "career")
150: #careerData($briefCat.key)
151: #end
152: </div>
153: </div>
154: #end
155: </div>
156: #end ## macro printCategories
157:
158: #macro (splitsBioNetworkData $p)
159: #set ($p = $positions.get($p))
160: #set ($statPosBriefs = $briefs.get($p))
161: #set ($colspan = $statPosBriefs.size() + 1)
162:
163: <div class="stats-container table-responsive">
164: <table class="table table-hover table-sm">
165: <thead class="thead-dark">
166: <tr>
167: <td> </td>
168: #foreach ($brief in $statPosBriefs)
169: #printTableHeader($brief, "")
170: #end
171: </tr>
172: </thead>
173: #splitBioNetwork($statPosBriefs, "Total", $splits.overall)
174: #if ($showconf)
175: #splitBioNetwork($statPosBriefs, "Conference", $splits.conference)
176: #end
177: #splitBioNetwork($statPosBriefs, "Exhibition", $splits.exhibition)
178:
179: <tr>
180: <td colspan="$colspan" class="text-center">-</td>
181: </tr>
182:
183: #splitBioNetwork($statPosBriefs, "Home", $splits.home)
184: #splitBioNetwork($statPosBriefs, "Away", $splits.away)
185: #splitBioNetwork($statPosBriefs, "Neutral", $splits.neutral)
186:
187: <tr>
188: <td colspan="$colspan" class="text-center">-</td>
189: </tr>
190:
191: #foreach($gameResult in $gamesResults.entrySet())
192: #if ($gameResult.key == "wins")
193: #set ($splitGameResult = $splits.inWins)
194: #elseif ($gameResult.key == "losses")
195: #set ($splitGameResult = $splits.inLosses)
196: #elseif ($gameResult.key == "ties")
197: #set ($splitGameResult = $splits.inTies)
198: #end
199:
200: #splitBioNetwork($statPosBriefs, $gameResult.value, $splitGameResult)
201: #end
202:
203: <tr>
204: <td colspan="$colspan" class="text-center">-</td>
205: </tr>
206:
207: #if ($monthsPlayed and $monthsPlayed.size() > 0)
208: #foreach($month in $monthsPlayed)
209: #if ($month == 'January')
210: #set ($splitMonth = $splits.january)
211: #elseif ($month == 'February')
212: #set ($splitMonth = $splits.february)
213: #elseif ($month == 'March')
214: #set($splitMonth = $splits.march)
215: #elseif ($month == 'April')
216: #set($splitMonth = $splits.april)
217: #elseif ($month == 'May')
218: #set ($splitMonth = $splits.may)
219: #elseif ($month == 'June')
220: #set ($splitMonth = $splits.june)
221: #elseif ($month == 'July')
222: #set($splitMonth = $splits.july)
223: #elseif ($month == 'August')
224: #set ($splitMonth = $splits.august)
225: #elseif ($month == 'September')
226: #set($splitMonth = $splits.september)
227: #elseif ($month == 'October')
228: #set($splitMonth = $splits.october)
229: #elseif ($month == 'November')
230: #set ($splitMonth = $splits.november)
231: #elseif ($month == 'December')
232: #set($splitMonth = $splits.december)
233: #end
234: #splitBioNetwork($statPosBriefs, $month, $splitMonth)
235: #end
236: #end
237: </table>
238: </div>
239: #end ## macro splitsBioNetworkData
240:
241: #macro (printRecentGames)
242: <div class="stats-container table-responsive">
243: <table class="table table-hover table-sm">
244:
245: #set ($eventEnd = -1)
246: #foreach ($event in $events)
247: #if ($event.event.result.resolved)
248: #set ($eventEnd = $velocityCount)
249: #end
250: #end
251:
252: #set ($eventStart = $eventEnd - 5)
253: #if ($eventStart < 0) #set ($eventStart = 0) #end
254:
255: #foreach ($event in $events)
256: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
257: <tr>
258: <td #printCellClass>$formatter.formatDate($event.event.date, "MMM d")</td>
259: <td #printCellClass>
260: #if ($event.event.neutralSite.length() > 0) vs.
261: #elseif (!$event.event.home) at
262: #end
263: $event.event.opponent.name
264: </td>
265: <td #printCellClass>
266: #if ($event.event.statusCode >= 0)
267: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
268: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
269: #else
270: ${event.event.APResult}
271: #end
272: #end
273: </td>
274: </tr>
275: #end
276: #end
277: </table>
278: </div>
279: #end ## macro printRecentGames
280:
281: #macro (gamelogData $p)
282: #set ($p = $positions.get($p))
283: #set ($gamelogs = $gamelogs.get($p))
284: #set ($atLeastOneNotOverall = false)
285:
286: <div class="stats-container table-responsive">
287: <table class="table table-hover table-sm">
288: <thead class="thead-dark">
289: <tr>
290: #printTableHeader("Date", "")
291: #printTableHeader("Opponent", "")
292: #printTableHeader("Score", "")
293:
294: #set ($colspan = 3)
295: #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9 soccer:3
296: #printTableHeader("Dec", "")
297: #end
298: #foreach ($gamelog in $gamelogs)
299: #printTableHeader($gamelog, "")
300: #end
301: </tr>
302: </thead>
303: #foreach ($event in $events)
304: <tr>
305: <td #printCellClass>$formatter.formatDate($event.event.date, "MMM d") #if (!$event.event.overall) #set ($atLeastOneNotOverall = true) # #end</</td>
306: <td #printCellClass>
307: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
308: $event.event.opponent.name
309: </td>
310: <td #printCellClass>
311: #if ($event.event.statusCode >= 0)
312: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
313: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
314: #else
315: ${event.event.APResult}
316: #end
317: #else #end
318: </td>
319: #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9 soccer:3
320: <td #printCellClass>
321: #if ($event.stats.get('gow') == 1)
322: W
323: #elseif ($event.stats.get('gol') == 1)
324: L
325: #elseif ($event.stats.get('got') == 1)
326: T<
327: #else
328: -
329: #end
330: </td>
331: #end
332: #foreach ($gamelog in $gamelogs.keySet())
333: #set ($value = "-")
334: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
335: <td #printCellClass>$value</td>
336: #end
337: </tr>
338: #end
339: </table>
340:
341: #if ($atLeastOneNotOverall)
342: <p class="my-3"># Stats don't count towards season totals</p>
343: #end
344: </div>
345: #end ## macro gamelogData
346:
347: #macro (careerData $p)
348: #set ($p = $positions.get($p))
349: #set ($statPosBriefs = $briefs.get($p))
350:
351: <div class="stats-container table-responsive">
352: <table class="table table-hover table-sm">
353: <thead class="thead-dark">
354: <tr>
355: <td> </td>
356: #foreach ($brief in $statPosBriefs)
357: #printTableHeader($brief, "")
358: #end
359: </tr>
360: </thead>
361: #foreach ($season in $seasons)
362: #if ($careerMap.get($season.seasonName))
363: #set ($label = "<a href='${season.path}?view=profile'>$season.seasonName</a>")
364: #splitBioNetwork($statPosBriefs, $label, $careerMap[$season.seasonName])
365: #elseif ($wiki.valid())
366: <tr>
367: <td #printCellClass>${season.seasonName}</td>
368: <td #printCellClass colspan="${briefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
369: </tr>
370: #end
371: #end
372:
373: #splitBioNetwork($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
374: </table>
375: </div>
376: #end ## macro careerData
377:
378: #macro (printTabs)
379: <div class="tab-nav">
380: <ul class="nav nav-tabs flex-nowrap" role="tablist">
381: #printTab("profile", "Player Profile")
382: #printTab("gamelog", "Game Log")
383: #if ($showCareer)
384: #printTab("career", "Career Stats")
385: #end
386: #printTab("splits", "Split Stats")
387: </ul>
388: </div>
389: #end ## printTabs
390:
391: #macro (printLabel $label)
392: #if ($locale == "en_gb" && $label == "Defense")
393: Defence
394: #else
395: $label
396: #end
397: #end
398:
399: #macro (printSubTabs $entries $viewParam)
400: #set ($activeLabel = "")
401: #foreach ($entry in $entries)
402: #if ($entry.key == $activePos)
403: #set ($activeLabel = $entry.value)
404: #end
405: #end
406:
407: <ul class="nav nav-tabs" role="tablist">
408: <li class="nav-item dropdown" data-module="bs-scripts/dropdown-tab-state">
409: <div class="p-2 dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">#printLabel($activeLabel)</div>
410: <div class="dropdown-menu" role="tablist">
411: #foreach($entry in $entries)
412: <a href="#${viewParam}-${entry.key}" data-url="${page.url}?view=${viewParam}&pos=${entry.key}" class="dropdown-item" role="tab" data-toggle="tab">#printLabel($entry.value)</a>
413: #end
414: </div>
415: </li>
416: </ul>
417: #end
418: ################################################## END MACROS #############################################################
419:
420: <head>
421: <title>
422: $!attributes.get("first_name") $!attributes.get("last_name") | #if ($attributes.get("number"))#$!attributes.get("number") | #end #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty)$!attributes.get("position_abbr") | #elseif ($attributes.get("position"))$!attributes.get("position") | #end $attributes.get("team")
423: </title>
424: </head>
425:
426: <div class="page-content player-stats">
427:
428:
429: <div class="d-flex justify-content-between">
430: <h1>
431: #if (!$attributes.get("number").empty)<span class="small text-muted">#$!attributes.get("number")</span>#end
432: $!attributes.get("first_name") $!attributes.get("last_name")
433:
434: #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty)
435: <span class="small">($!attributes.get("position_abbr"))</span> -
436: #elseif ($attributes.get("position"))
437: <span class="small">($!attributes.get("position"))</span> -
438: #end
439: $attributes.get("team")
440: </h1>
441:
442: #set ($teamId = $attributes.get("teamId"))
443: #if ($teamId.length() > 0)
444: <img src="${website.teamLogo($teamId)}" alt="" style="width:48px" />
445: #end
446: </div>
447:
448: #printHighlights
449:
450: <div class="tabs-container my-3">
451:
452: #printTabs
453:
454: <div class="tab-content p-3 border border-top-0">
455:
456: ## PROFILE
457: <div #printPaneAttrs("profile")>
458: <div class="row">
459: <div class="col-lg">
460: <h5>Player Stats</h5>
461: $website.include("${page.sectionPage.url}/players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
462: </div>
463: <div class="mt-3 col-lg mt-lg-0">
464: <h5>Recent Results</h5>
465: #printRecentGames
466: </div>
467: </div>
468:
469: #if ($hasSynopsis)
470: <div class="my-3">$!synopsis</div>
471: #end
472:
473: #if ($hasBioBrief)
474: <div class="my-3">$website.include($bioBriefURL)</div>
475: #end
476:
477: #if ($htmlStatsURL)
478: <div class="my-3">$website.include($htmlStatsURL)</div>
479: #end
480: </div> ## PROFILE
481:
482: ## GAMELOG
483: #set ($activePos = $statPos)
484: #if ($view == "gamelog" && $paramPos.length() > 0)
485: #if ($positions.get($paramPos).length() > 0)
486: #set ($activePos = $positions.get($paramPos))
487: #end
488: #end
489:
490: <div #printPaneAttrs("gamelog")>
491: #if ($gamelogsCategoriesLabels.size() > 0)
492: #printSubTabs($gamelogsCategoriesLabels.entrySet(), "gamelog")
493:
494: <div class="tab-content">
495: #foreach($entry in $gamelogsCategoriesLabels.entrySet())
496: #set ($class = "tab-pane")
497: #if ($entry.key == $activePos)
498: #set ($class = "tab-pane active")
499: #end
500: <div class="${class}" role="tabpanel" id="gamelog-${entry.key}">
501: #gamelogData($entry.key)
502: </div>
503: #end
504: </div>
505: #else
506: #gamelogData($pos)
507: #end
508: </div> ## tab-pane
509: ## GAMELOG
510:
511: ## CAREER
512: #if ($showCareer)
513: #set ($activePos = $statPos)
514: #if ($view == "career" && $paramPos.length() > 0)
515: #if ($positions.get($paramPos).length() > 0)
516: #set ($activePos = $positions.get($paramPos))
517: #end
518: #end
519:
520: <div #printPaneAttrs("career")>
521: #if ($briefsCategoriesLabels)
522: #printCategories($briefsCategoriesLabels "career")
523: #else
524: #careerData($activePos)
525: #end
526: </div>
527: #end
528: ## CAREER
529:
530: ## SPLITS
531: #set ($activePos = $statPos)
532: #if ($view == "splits" && $paramPos.length() > 0)
533: #if ($positions.get($paramPos).length() > 0)
534: #set ($activePos = $positions.get($paramPos))
535: #end
536: #end
537:
538: <div #printPaneAttrs("splits")>
539: #if ($briefsCategoriesLabels)
540: #printCategories($briefsCategoriesLabels "splits")
541: #else
542: #splitsBioNetworkData($pos)
543: #end
544: </div>
545: ## SPLITS
546:
547: </div> ## tab-content
548: </div> ## tabs-container
549: </div> ## bio-wrapper
550: $wiki.su
|