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