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: #if($attributes.get("position_stat"))
25: #set ($pos = $attributes.get("position_stat"))
26: #else
27: #set ($pos = $attributes.get("position"))
28: #set ($pos = $statPosition)
29: #set ($posVec = $pos.split("/"))
30: #set ($pos = $posVec[0])
31: #end
32: #set ($pos = $pos.toLowerCase())
33: #set ($statPos = $positions.get($pos))
34: #set ($paramPos = $request.getParameter("pos"))
35:
36: #set ($highlights = $highlights.get($statPos))
37:
38: #set ($url = ${page.url})
39: #set ($playerId = $attributes.get("playerId"))
40: #set ($stats = $splits.overall)
41:
42: #set ($hasEvents = $events.size() > 0)
43: #set ($hasSynopsis = $synopsis.length() > 1 && $synopsis.indexOf("<center>") == -1)
44: #set ($htmlStatsURL = "${page.url}-stats")
45: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
46: #set ($bioBriefURL = "${page.url}-brief")
47: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
48:
49: $request.setAttribute("careerTotals", $career)
50: ## We track a map of the careers to see if we are missing any seasons
51: #if(!$rosterTransactions)
52: #set ($careerMap = {})
53: $request.setAttribute("careerMap", $careerMap)
54: #foreach ($season in $seasons)
55: ## We need to include this season stats.
56: ## we anticipate the player file being within a normal season structure.
57: #set ($path = "${season.path}?tmpl=bio-career-template&name=${season.seasonName}&pos=${statPos}&print=no")
58:
59: ## naiastats.com uses a unique foler structure that needs to be accounted for.
60: ## seasons have conference folders within NAIA to reduce query response times for massive season data.
61: #if($page.url.contains("/conf"))
62: #set ($tempPath = $page.sectionPage.sectionPage.sectionPage.sectionPage.sectionPage.url)
63: #else
64: #set ($tempPath = $page.sectionPage.sectionPage.sectionPage.url)
65: #end
66: #set ($path = $path.replace("../..", $tempPath))
67:
68: $website.includeAgain($path)
69: #end
70: #end
71: #set ($view = "profile")
72: #if ($request.getParameter("view"))
73: #set ($view = $request.getParameter("view"))
74: #end
75:
76: $website.include("${page.sectionPage.url}/roster?tmpl=roster-headshots-template")
77: #set ($rosterHeadshots = $!request.getAttribute("roster_headshots"))
78:
79: #################################### MACROS ####################################################
80: #macro (printTableHeader $label $class)
81: ## Hack for now
82: #set ($labels = $labels.get($p))
83: <th class="text-uppercase $class" data-p="$!{p}" data-bs-toggle="tooltip" data-bs-placement="top" title="$!{labels.get($label)}">$label</th>
84: #end
85:
86: #macro (printCellClass)
87: class="text-nowrap text-center"
88: #end
89:
90: #macro (printImage $src $alt $class)
91: #set ($src = "${src}?max_height=576&max_width=576&crop=1")
92: <div class="ratio ratio-1x1 rounded-circle overflow-hidden img-thumbnail">
93: <span class="align-content-center">
94: <img src="${src}" alt="${alt}" class="${class}" />
95: </span>
96: </div>
97: #end
98:
99: #macro (printTab $viewParam $label)
100: #set ($classAttr = "nav-link text-nowrap")
101: #if ($viewParam == $view)
102: #set ($classAttr = "${classAttr} active")
103: #end
104: <li class="nav-item">
105: <a href="${page.url}?view=${viewParam}" class="$classAttr" role="tab" data-bs-toggle="tab" data-bs-target="#${viewParam}" aria-selected="true" aria-controls="$viewParam">$label</a>
106: </li>
107: #end
108:
109: #macro (printPaneAttrs $viewParam)
110: #set ($classAttr = "tab-pane")
111: #if ($viewParam == $view)
112: #set ($classAttr = "tab-pane active")
113: #else
114: #set ($classAttr = "${classAttr} fade")
115: #end
116:
117: class="$classAttr" role="tabpanel" id="$viewParam"
118: #end
119:
120: #macro (printResultAriaLabel $event)
121: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
122: #if ($event.neutralSite.length() > 0 || $event.home)
123: #set ($ariaLabel = "${ariaLabel} vs.")
124: #else
125: #set ($ariaLabel = "${ariaLabel} at")
126: #end
127: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
128: #if ($event.neutralSite.length() > 0)
129: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
130: #end
131: #set ($ariaLabel = "${ariaLabel} Box Score")
132: aria-label="$ariaLabel"
133: #end
134:
135: #macro (printHighlights)
136: #if ($highlights)
137: <div class="d-flex flex-wrap bg-light">
138: #foreach ($highlight in $highlights.keySet())
139: #set ($value = "-")
140: #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
141: #set ($classAttr = "flex-fill border p-3 text-center")
142: #if ($velocityCount > 1)
143: ## #set ($classAttr = "nav-item border-left")
144: #end
145: <div class="$classAttr" style="min-width:100px">
146: <div class="text-uppercase fw-normal small text-muted">$!highlights.get($highlight)</div>
147: <div class="p-0 m-0 fs-5 fw-bold lh-1">$!value</div>
148: </div>
149: #end
150: </div>
151: #end
152: #end ## macro printHighlights
153:
154: #macro (splitBioNetwork $statPosBriefs $label $stats)
155: <tr>
156: <th class="text-nowrap text-end fw-bold">${label}</th>
157: #if($rosterTransactions && $stats.class.simpleName == "JSONObject")
158: #set($keys = $stats.names())
159: #set($array = $keys.toString().replace('"','').split(","))
160: #foreach ($brief in $statPosBriefs.keySet())
161: #set ($value = "-")
162: #if($array.contains($brief))
163: #set ($value = $!formatter.formatNumber($tool.math.toDouble($stats.get($brief)), $formats.get($brief)))
164: #end
165: <td>#if ($value.length() > 0) $value #else - #end</td>
166: #end
167: #else
168: #foreach ($brief in $statPosBriefs.keySet())
169: #set ($value = "-")
170: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
171: <td #printCellClass>#if ($value.length() > 0) $value #else - #end</td>
172: #end
173: #end
174: </tr>
175: #end ## marco split
176:
177: #macro (printCategories $briefCategoryLabels $viewParam)
178: #printSubTabs($briefCategoryLabels.entrySet(), $viewParam)
179:
180: <div class="tab-content py-3">
181: #foreach ($briefCat in $briefCategoryLabels.entrySet())
182: #set ($briefCatLabel = $briefCat.value)
183: #set ($class = "tab-pane")
184: #if ($briefCat.key == $activePos)
185: #set ($class = "tab-pane active")
186: #end
187: <div id="${viewParam}-${briefCat.key}" class="$class" role="tabpanel">
188: <div class="stats-wrap clearfix">
189: #if ($viewParam == "splits")
190: #splitsBioNetworkData($briefCat.key)
191: #elseif ($viewParam == "career")
192: #careerData($briefCat.key)
193: #end
194: </div>
195: </div>
196: #end
197: </div>
198: #end ## macro printCategories
199:
200: #macro (splitsBioNetworkData $p)
201: #set ($p = $positions.get($p))
202: #set ($statPosBriefs = $briefs.get($p))
203: #set ($colspan = $statPosBriefs.size())
204:
205: <div class="stats-container table-responsive-via-datatables">
206: <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
207: <thead class="thead-dark">
208: <tr>
209: <th> </th>
210: #foreach ($brief in $statPosBriefs)
211: #printTableHeader($brief, "text-center")
212: #end
213: </tr>
214: </thead>
215: #splitBioNetwork($statPosBriefs, "Total", $splits.overall)
216: #if ($showconf)
217: #splitBioNetwork($statPosBriefs, "Conference", $splits.conference)
218: #end
219: #splitBioNetwork($statPosBriefs, "Exhibition", $splits.exhibition)
220:
221:
222: <tr class="group">
223: #foreach ( $i in [0..$colspan])
224: <td class="text-center"> </td>
225: #end
226: </tr>
227:
228: #splitBioNetwork($statPosBriefs, "Home", $splits.home)
229: #splitBioNetwork($statPosBriefs, "Away", $splits.away)
230: #splitBioNetwork($statPosBriefs, "Neutral", $splits.neutral)
231:
232: <tr class="group">
233: #foreach ( $i in [0..$colspan])
234: <td class="text-center"> </td>
235: #end
236: </tr>
237:
238: #foreach($gameResult in $gamesResults.entrySet())
239: #if ($gameResult.key == "wins")
240: #set ($splitGameResult = $splits.inWins)
241: #elseif ($gameResult.key == "losses")
242: #set ($splitGameResult = $splits.inLosses)
243: #elseif ($gameResult.key == "ties")
244: #set ($splitGameResult = $splits.inTies)
245: #end
246:
247: #splitBioNetwork($statPosBriefs, $gameResult.value, $splitGameResult)
248: #end
249:
250: <tr class="group">
251: #foreach ( $i in [0..$colspan])
252: <td class="text-center"> </td>
253: #end
254: </tr>
255:
256: #if ($monthsPlayed and $monthsPlayed.size() > 0)
257: #foreach($month in $monthsPlayed)
258: #if ($month == 'January')
259: #set ($splitMonth = $splits.january)
260: #elseif ($month == 'February')
261: #set ($splitMonth = $splits.february)
262: #elseif ($month == 'March')
263: #set($splitMonth = $splits.march)
264: #elseif ($month == 'April')
265: #set($splitMonth = $splits.april)
266: #elseif ($month == 'May')
267: #set ($splitMonth = $splits.may)
268: #elseif ($month == 'June')
269: #set ($splitMonth = $splits.june)
270: #elseif ($month == 'July')
271: #set($splitMonth = $splits.july)
272: #elseif ($month == 'August')
273: #set ($splitMonth = $splits.august)
274: #elseif ($month == 'September')
275: #set($splitMonth = $splits.september)
276: #elseif ($month == 'October')
277: #set($splitMonth = $splits.october)
278: #elseif ($month == 'November')
279: #set ($splitMonth = $splits.november)
280: #elseif ($month == 'December')
281: #set($splitMonth = $splits.december)
282: #end
283: #splitBioNetwork($statPosBriefs, $month, $splitMonth)
284: #end
285: #end
286: </table>
287: </div>
288: #end ## macro splitsBioNetworkData
289:
290: #macro (printRecentGames)
291: <div class="stats-container table-responsive-via-datatables">
292: <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
293: <thead class="thead-dark">
294: <tr>
295: <th class="text-uppercase w-1">Date</th>
296: <th class="text-uppercase text-start">Opponent</th>
297: <th scope="col" class="text-center text-uppercase">Result</th>
298: </tr>
299: </thead>
300: #set ($eventEnd = -1)
301: #foreach ($event in $events)
302: #if ($event.event.result.resolved)
303: #set ($eventEnd = $velocityCount)
304: #end
305: #end
306:
307: #set ($eventStart = $eventEnd - 5)
308: #if ($eventStart < 0) #set ($eventStart = 0) #end
309:
310: #foreach ($event in $events)
311: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
312: <tr>
313: <td class="text-nowrap text-start">$formatter.formatDate($event.event.date, "MMM d")</td>
314: <td class="text-nowrap text-start">
315: #if ($event.event.neutralSite.length() > 0) vs.
316: #elseif (!$event.event.home) at
317: #end
318: $event.event.opponent.name
319: </td>
320: <td class="text-nowrap text-center">
321: #if ($event.event.statusCode >= 0)
322: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
323: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
324: #else
325: ${event.event.APResult}
326: #end
327: #end
328: </td>
329: </tr>
330: #end
331: #end
332: </table>
333: </div>
334: #end ## macro printRecentGames
335:
336: #macro (gamelogData $p)
337: #set ($p = $positions.get($p))
338: #set ($gamelogs = $gamelogs.get($p))
339: #set ($atLeastOneNotOverall = false)
340:
341: <div class="stats-container table-responsive-via-datatables">
342: <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
343: <thead class="thead-dark">
344: <tr>
345: #printTableHeader("Date", "w-1")
346: #printTableHeader("Opponent", "")
347: #printTableHeader("Score", "text-center")
348:
349: #set ($colspan = 3)
350: #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9 soccer:3
351: #printTableHeader("Dec", "text-center")
352: #end
353: #foreach ($gamelog in $gamelogs)
354: #printTableHeader($gamelog, "text-center")
355: #end
356: </tr>
357: </thead>
358: #foreach ($event in $events)
359: <tr>
360: <td class="text-nowrap">$formatter.formatDate($event.event.date, "MMM d") #if (!$event.event.overall) #set ($atLeastOneNotOverall = true) # #end</</td>
361: <td class="text-nowrap">
362: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
363: $event.event.opponent.name
364: </td>
365: <td #printCellClass>
366: #if ($event.event.statusCode >= 0)
367: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
368: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
369: #else
370: ${event.event.APResult}
371: #end
372: #else #end
373: </td>
374: #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9 soccer:3
375: <td #printCellClass>
376: #if ($event.stats.get('gow') == 1)
377: W
378: #elseif ($event.stats.get('gol') == 1)
379: L
380: #elseif ($event.stats.get('got') == 1)
381: T<
382: #else
383: -
384: #end
385: </td>
386: #end
387: #foreach ($gamelog in $gamelogs.keySet())
388: #set ($value = "-")
389: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
390: <td #printCellClass>$value</td>
391: #end
392: </tr>
393: #end
394: </table>
395:
396: #if ($atLeastOneNotOverall)
397: <p class="my-3"># Stats don't count towards season totals</p>
398: #end
399: </div>
400: #end ## macro gamelogData
401:
402: #macro (careerData $p)
403: #set ($p = $positions.get($p))
404: #set ($statPosBriefs = $briefs.get($p))
405:
406: <div class="stats-container table-responsive-via-datatables">
407: <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
408: <thead class="thead-dark">
409: <tr>
410: <th class=""> </th>
411: #foreach ($brief in $statPosBriefs)
412: #printTableHeader($brief, "text-center")
413: #end
414: </tr>
415: </thead>
416: #if($rosterTransactions)
417: #set ($seasonLength = $career.seasons.length())
418: #foreach ($index in [0..$tool.math.sub($seasonLength, 1)])
419: #set($season = $career.seasons[$index])
420: #if($season.seasonStatsURL != "null")
421: #set ($label = "<a href='${season.seasonStatsURL}?view=profile'>$season.seasonName.replaceAll('^[^0-9-]*','') - $season.team.teamName</a>")
422: #else
423: #set ($label = "$season.seasonName.replaceAll('^[^0-9-]*','') - $season.team.teamName")
424: #end
425: #splitBioNetwork($statPosBriefs, $label, $season.player.stats)
426: #end
427: #splitBioNetwork($statPosBriefs, "Total", $career.totals)
428:
429: #else
430: #foreach ($season in $seasons)
431: #if ($careerMap.get($season.seasonName))
432: ## naiastats.com uses a unique foler structure that needs to be accounted for.
433: ## seasons have conference folders within NAIA to reduce query response times for massive season data.
434: #if($page.url.contains("/conf"))
435: #set ($tempPath = $page.sectionPage.sectionPage.sectionPage.sectionPage.sectionPage.url)
436: #else
437: #set ($tempPath = $page.sectionPage.sectionPage.sectionPage.url)
438: #end
439: #set ($path = $season.path.replace("../..", $tempPath))
440:
441: #set ($label = "<a href='${path}?view=profile'>$season.seasonName</a>")
442: #splitBioNetwork($statPosBriefs, $label, $careerMap[$season.seasonName])
443: #elseif ($wiki.valid())
444: <tr>
445: <td class="text-nowrap text-end text-muted fst-italic">${season.seasonName}</td>
446: #foreach ($i in [1..$statPosBriefs.size()])
447: #if ($statPosBriefs.size() > 1)
448: #if ($foreach.first)
449: <td class="text-nowrap text-center text-muted">
450: <a href="#" data-bs-toggle="tooltip" title="We could not find the 'players' page in the ${season.seasonName} section."><span class="fa fa-light fa-circle-info"></span></a>
451: </td>
452: #else
453: <td class="text-nowrap text-center text-muted"></td>
454: #end
455: #end
456: #end
457: </tr>
458: #end
459: #end
460: #splitBioNetwork($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
461: #end
462:
463:
464: </table>
465: </div>
466: #end ## macro careerData
467:
468: #macro (printTabs)
469: $request.setAttribute("icl-responsive-tabs-script", true)
470: <div class="tab-nav">
471: <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3" id="bio-network-tabs" role="tablist">
472: #printTab("profile", "Player Profile")
473: #printTab("gamelog", "Game Log")
474: #if ($showCareer)
475: #printTab("career", "Career Stats")
476: #end
477: #printTab("splits", "Split Stats")
478: </ul>
479: </div>
480: #end ## printTabs
481:
482: #macro (printLabel $label)
483: #if ($locale == "en_gb" && $label == "Defense")
484: Defence
485: #else
486: $label
487: #end
488: #end
489:
490: #macro (printSubTabs $entries $viewParam)
491: #set ($activeLabel = "")
492: #foreach ($entry in $entries)
493: #if ($entry.key == $activePos)
494: #set ($activeLabel = $entry.value)
495: #end
496: #end
497:
498: <div class="d-flex flex-row text-nowrap align-items-center justify-content-center">
499: <div class="secondary-tab-select-container flex-fill">
500: <select class="tab-nav-select-helper form-select" id="${viewParam}-subtabs-select" aria-label="Choose a stat group">
501: #foreach($entry in $entries)
502: <option value="#${viewParam}-${entry.key}" #if ($entry.value == $activeLabel || $foreach.first) selected #end>#printLabel($entry.value)</option>
503: #end
504: </select>
505: <script>
506: $('.tab-nav-select-helper').on('change', function(e) {
507: var id = $(this).val();
508: $('a[data-bs-target="' + id + '"]').tab('show');
509: });
510: </script>
511: </div>
512: </div>
513:
514: <ul class="d-none nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-start gap-3" role="tablist" id="${viewParam}-subtabs">
515: #foreach($entry in $entries)
516: #set ($class = "nav-link")
517: #if ($entry.value == $activeLabel)
518: #set ($class = "${class} active")
519: #end
520: <li class="nav-item">
521: <a href="#${viewParam}-${entry.key}" class="${class}" id="${viewParam}-${entry.key}-tab" data-bs-target="#${viewParam}-${entry.key}" role="tab" data-bs-toggle="tab">#printLabel($entry.value)</a>
522: </li>
523: #end
524: </ul>
525: #end
526: ################################################## END MACROS #############################################################
527:
528: <head>
529: <title>
530: $!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")
531: </title>
532: </head>
533:
534: $request.setAttribute("icl-responsive-tabs-script", true)
535: $request.setAttribute("icl-dataTables-script", true)
536:
537: <div class="page-content player-stats">
538: <div class="d-flex flex-column justify-content-between gap-3">
539: <div class="bnt-heading">
540: <div class="bnt-main d-flex flex-column flex-grow-1 gap-3">
541: <div class="bnt-name-info">
542: <div class="d-flex align-items-center justify-content-between gap-3">
543: <div class="bnt-left">
544: <div class="bnt-headshot position-relative" style="width:5rem;">
545: #set ($playerName = $!attributes.get("first_name") + ' '+ $!attributes.get("last_name"))
546: #set ($src = "/info/images/default-headshot.png")
547: #if ($rosterHeadshots.size() > 0)
548: #foreach ($rosterPlayer in $rosterHeadshots)
549: #if ($playerName == $rosterPlayer.name)
550: #if ($rosterPlayer.headshot.length() > 0)
551: #set ($src = $rosterPlayer.headshot)
552: #elseif ($website.exists("/images/setup/default-headshot.png"))
553: #set ($src = "/images/setup/default-headshot.png")
554: #elseif ($website.exists("/images/setup/headshot_default.jpg"))
555: #set ($src = "/images/setup/headshot_default.jpg")
556: #end
557: #end
558: #end
559: #printImage($src, $playerName, "img-fluid h-auto")
560: #else
561: #printImage($website.teamLogo($!{attributes.get("teamId")}), ${attributes.get("team")}, "img-fluid h-auto")
562: #end
563: #if (!$attributes.get("number").empty)
564: <div class="jersey-number-overlay d-inline-block position-absolute bottom-0 end-0 lh-1">
565: <span class="number d-inline-block small text-center bg-primary text-white rounded-circle lh-1 overflow-hidden p-2" style="width:2rem; height:2rem;">
566: $!attributes.get("number")
567: </span>
568: </div>
569: #end
570: </div>
571: </div>
572: <div class="bnt-name-info-main flex-grow-1">
573: <div class="d-flex flex-column aling-items-center justify-content-between gap-3">
574: <div class="player-attributes">
575: <h1 class="m-0 p-0">
576: $!attributes.get("first_name") $!attributes.get("last_name")
577: </h1>
578: <ul class="list-unstyled list-inline-pipes d-flex align-items-center justify-content-start gap-2 m-0 w-100">
579: #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty)
580: <li><span>$!attributes.get("position_abbr")</span></li>
581: #elseif ($attributes.get("position"))
582: <li><span>$!attributes.get("position")</span></li>
583: #end
584: <li><a href="../teams?id=$!{attributes.get("teamId")}" aria-label="Team Stats - ${attributes.get("team")}">$attributes.get("team")</a></li>
585: </ul>
586: </div>
587: </div>
588: </div>
589: #if ($rosterHeadshots.size() > 0)
590: ## do nothing
591: #else
592: #set ($teamId = $attributes.get("teamId"))
593: #if ($teamId.length() > 0)
594: <div class="bnt-team-logo">
595: <span class="bnt-team-logo ps-2">
596: <img class="img-mh-3" src="${website.teamLogo($teamId)}" alt="" />
597: </span>
598: </div>
599: #end
600: #end
601: </div>
602: </div>
603: <div class="bnt-highlights mx-3">
604: #printHighlights
605: </div>
606: </div>
607: </div>
608: </div>
609:
610:
611: <div class="tabs-container my-3">
612:
613: #printTabs
614:
615: <div class="tab-content p-3 border">
616:
617: ## PROFILE
618: <div #printPaneAttrs("profile")>
619: <div class="row">
620: <div class="col-lg">
621: <h5>Player Stats</h5>
622: $website.include("${page.sectionPage.url}/players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
623: </div>
624: <div class="mt-3 col-lg mt-lg-0">
625: <h5>Recent Results</h5>
626: #printRecentGames
627:
628: #if($website.ads.isMediaInternalSectionsAdsEnabled())
629: <!-- Individual Player Page, ad unit is placed below recent results on Desktop and Mobile -->
630: <div id="waldo-tag-25894" class="p-3 text-center"></div>
631: #end
632: </div>
633: </div>
634:
635: #if ($hasSynopsis)
636: <div class="my-3">$!synopsis</div>
637: #end
638:
639: #if ($hasBioBrief)
640: <div class="my-3">$website.include($bioBriefURL)</div>
641: #end
642:
643: #if ($htmlStatsURL)
644: <div class="my-3">$website.include($htmlStatsURL)</div>
645: #end
646: </div> ## PROFILE
647:
648: ## GAMELOG
649: #set ($activePos = $statPos)
650: #if ($view == "gamelog" && $paramPos.length() > 0)
651: #if ($positions.get($paramPos).length() > 0)
652: #set ($activePos = $positions.get($paramPos))
653: #end
654: #end
655:
656: <div #printPaneAttrs("gamelog")>
657: #if ($gamelogsCategoriesLabels.size() > 0)
658: #printSubTabs($gamelogsCategoriesLabels.entrySet(), "gamelog")
659:
660: <div class="tab-content py-3">
661: #foreach($entry in $gamelogsCategoriesLabels.entrySet())
662: #set ($class = "tab-pane")
663: #if ($entry.key == $activePos)
664: #set ($class = "tab-pane active")
665: #end
666: <div class="${class}" role="tabpanel" id="gamelog-${entry.key}">
667: #gamelogData($entry.key)
668: </div>
669: #end
670: </div>
671: #else
672: #gamelogData($pos)
673: #end
674: </div> ## tab-pane
675: ## GAMELOG
676:
677: ## CAREER
678: #if ($showCareer)
679: #set ($activePos = $statPos)
680: #if ($view == "career" && $paramPos.length() > 0)
681: #if ($positions.get($paramPos).length() > 0)
682: #set ($activePos = $positions.get($paramPos))
683: #end
684: #end
685: <div #printPaneAttrs("career")>
686: #if ($briefsCategoriesLabels)
687: #printCategories($briefsCategoriesLabels "career")
688: #else
689: #careerData($activePos)
690: #end
691: </div>
692: #end
693: ## CAREER
694:
695: ## SPLITS
696: #set ($activePos = $statPos)
697: #if ($view == "splits" && $paramPos.length() > 0)
698: #if ($positions.get($paramPos).length() > 0)
699: #set ($activePos = $positions.get($paramPos))
700: #end
701: #end
702:
703: <div #printPaneAttrs("splits")>
704: #if ($briefsCategoriesLabels)
705: #printCategories($briefsCategoriesLabels "splits")
706: #else
707: #splitsBioNetworkData($pos)
708: #end
709: </div>
710: ## SPLITS
711:
712: </div> ## tab-content
713: </div> ## tabs-container
714: </div> ## bio-wrapper
715: $wiki.su
|