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