Page source: |
1: <script src="${website.cdn("/info/klass.min.js")}"></script>
2:
3: ## PICK UP OPTIONS
4: $website.include("options")
5: #set ($options = $request.getAttribute("options"))
6: #set ($locale = "en_us")
7: #set ($locale = $options.get("locale"))
8:
9: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE
10: #set ($bioObject = $page.getDataAsObject())
11: #set ($statsURL = $bioObject.statsURL)
12: #if ($statsURL.length() > 0)
13: $website.includeAgain("${statsURL}?tmpl=bio-stats-template")
14: ## various settings to get the variables set
15: #set ($events = $request.getAttribute("bio_events"))
16: #set ($seasons = $request.getAttribute("bio_seasons"))
17: #set ($career = $request.getAttribute("bio_career"))
18: #set ($labels = $request.getAttribute("bio_labels"))
19: #set ($briefs = $request.getAttribute("bio_briefs"))
20: #set ($gamelogs = $request.getAttribute("bio_gamelogs"))
21: #set ($splits = $request.getAttribute("bio_splits"))
22: #set ($statPosition = $request.getAttribute("bio_position"))
23: #set ($positions = $request.getAttribute("bio_positions"))
24: #set ($playerId = $request.getAttribute("bio_player_id"))
25: #set ($highlights = $request.getAttribute("bio_highlights"))
26: #set ($formats = $request.getAttribute("bio_formats"))
27: #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels"))
28: #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels"))
29: #set ($gamesResults = $request.getAttribute("bio_games_results"))
30: #set ($monthsPlayed = $request.getAttribute("bio_months_played"))
31: #set ($rosterTransactions = $request.getAttribute("roster_transactions"))
32: #end
33:
34: #set ($pos = "")
35: #if($attributes.get("position_stat"))
36: #set ($pos = $attributes.get("position_stat"))
37: #else
38: #set ($pos = $attributes.get("position"))
39: #set ($pos = $statPosition)
40: #set ($posVec = $pos.split("/"))
41: #set ($pos = $posVec[0])
42: #end
43: #set ($pos = $pos.toLowerCase())
44: #set ($statPos = $positions.get($pos))
45: #set ($paramPos = $request.getParameter("pos"))
46:
47: #set ($playerId = $attributes.get("playerId"))
48: #set ($stats = $splits.overall)
49: #set ($highlights = $highlights.get($statPos))
50:
51: #set ($showHighlights = true)
52: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false)
53: #set ($showHighlights = false)
54: #end
55:
56: #set ($enhancedLayout = false)
57: #if (($options.get("bio_enhanced_layout") == "yes") || ($request.getParameter("bio_enhanced_layout") == true))
58: #set ($enhancedLayout = true)
59: #end
60:
61: #set ($showActionShots = true)
62: #if ($options.get("bio_show_action_shots") && $options.get("bio_show_action_shots") == false)
63: #set ($showActionShots = false)
64: #end
65:
66: #set ($showDate = true)
67: #if ($options.get("news_layout_show_date") == "no")
68: #set ($showDate = false)
69: #end
70:
71: #set ($showLeadin = true)
72: #if ($options.get("news_layout_show_leadin") == "no")
73: #set ($showLeadin = false)
74: #end
75:
76: #set ($dateFormat = "MMMM dd, yyyy")
77: #if ($options.get("site_date_format").length() > 0) #set ($dateFormat = $options.get("site_date_format")) #end
78:
79: #set ($thumbnail-orientation = "ratio ratio-16x9 ratio-adaptive")
80: #if ($options.get("news_thumbnail_orientation") == "portrait") ## default view from options
81: #set ($thumbnail-orientation = "ratio ratio-3x4")
82: #elseif ($options.get("news_thumbnail_orientation") == "landscape")
83: #set ($thumbnail-orientation = "ratio ratio-16x9")
84: #elseif ($options.get("news_thumbnail_orientation") == "adaptive")
85: #set ($thumbnail-orientation = "embed-responsive-adaptive")
86: #elseif ($request.getParameter("thumbnail_orientation") == "portrait") ## default view from include parameter
87: #set ($thumbnail-orientation = "ratio ratio-3x4")
88: #end
89:
90: #set ($showThumb = true)
91: #if ($options.get("news_layout_show_thumb") == "no")
92: #set ($showThumb = false)
93: #end
94: #set ($thumbWidth = 767)
95:
96: #set ($actionShotsLimit = 5)
97: #set ($actionShotsLimit = $tool.math.toInteger($options.get("bio_action_shots_limit")))
98:
99: #set ($showCareer = $wiki.valid() && $seasons)
100: #if ("yes" == $options.get("stats_show_career") && $seasons)
101: #set ($showCareer = true)
102: #end
103:
104: #set ($hasEvents = $events.size() > 0)
105: #set ($hasSynopsis = $synopsis.trim().length() > 0)
106: #set ($htmlStatsURL = "${page.url}-stats")
107: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
108: #set ($bioBriefURL = "${page.url}-brief")
109: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
110: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1))
111: #if ($options.get("bio_hide_roster") == true)
112: #set ($showRoster = false)
113: #end
114:
115: #if ($hasEvents)
116: $request.setAttribute("icl-dataTables-script", true)
117: #end
118:
119: #set ($view = "")
120: #if ($hasSynopsis || $hasBioBrief)
121: #set ($view = "bio")
122: #elseif ($statsURL.length() > 0)
123: #set ($view = "profile")
124: #elseif ($hasHTMLStats)
125: #set ($view = "htmlstats")
126: #elseif ($releases.size() > 0)
127: #set ($view = "news")
128: #elseif ($playerPhotos.size() > 0)
129: #set ($view = "photos")
130: #elseif ($playerVideos.size() > 0)
131: #set ($view = "videos")
132: #end
133:
134: #if ($options.get("bio_default_view").length() > 0)
135: #set ($checkView = $options.get("bio_default_view"))
136: #else
137: ## THIS ESTABLISHES A DEFAULT TAB FOR NEW BOOTSTRAP THEMES
138: #if ($hasSynopsis || $hasBioBrief)
139: #set ($checkView = "bio")
140: #elseif ($statsURL.length() > 0)
141: #set ($checkView = "profile")
142: #elseif ($releases.size() > 0)
143: #set ($checkView = "news")
144: #end
145: #end
146:
147: #if ($request.getParameter("view"))
148: #set ($checkView = $request.getParameter("view"))
149: #end
150:
151: #if ($checkView == "profile" && $statsURL.length() > 0)
152: #set ($view = "profile")
153: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief))
154: #set ($view = "bio")
155: #elseif ($checkView == "gamelog" && $statsURL.length() > 0)
156: #set ($view = "gamelog")
157: #elseif ($checkView == "career" && $showCareer)
158: #set ($view = "career")
159: #elseif ($checkView == "splits" && $statsURL.length() > 0)
160: #set ($view = "splits")
161: #elseif ($checkView == "htmlstats" && $hasHTMLStats)
162: #set ($view = "htmlstats")
163: #elseif ($checkView == "news" && $releases.size() > 0)
164: #set ($view = "news")
165: #elseif ($checkView == "photos" && $playerPhotos.size() > 0)
166: #set ($view = "photos")
167: #elseif ($checkView == "videos" && $playerVideos.size() > 0)
168: #set ($view = "videos")
169: #elseif ($checkView == "weplayed")
170: #set ($view = "weplayed")
171: #end
172:
173: #macro (printResultAriaLabel $event)
174: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
175: #if ($event.neutralSite.length() > 0 || $event.home)
176: #set ($ariaLabel = "${ariaLabel} vs.")
177: #else
178: #set ($ariaLabel = "${ariaLabel} at")
179: #end
180: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
181: #if ($event.neutralSite.length() > 0)
182: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
183: #end
184: #set ($ariaLabel = "${ariaLabel} Box Score")
185: aria-label="$ariaLabel"
186: #end
187:
188: #macro(playIcon $url)
189: <a href="$url" class="play-btn video-btn-overlay" onclick="return(false);" onmouseup="return(false);">
190: <span class="center-icon-pre">
191: <span class="center-icon">
192: <span class="sr-only">Play Video</span>
193: <span class="fab fa-youtube"></span>
194: </span>
195: </span>
196: </a>
197: #end
198:
199: #macro (printVideo $article)
200: #if ($article.contentType == "loki/youtube")
201: #set ($videoID = $article.dataAsString)
202: <img src="https://i3.ytimg.com/vi/${videoID}/maxresdefault.jpg" alt="video thumbnail for $article.thumbnailAlt" class="card-img-top img-fluid" />
203: #playIcon($article.url)
204: #end
205:
206: #if ($article.contentType == "loki/video")
207: <video class="player" muted="true">
208: <source src="${article.url}?dec=" type="video/mp4" />
209: </video>
210: #playIcon($article.url)
211: #end
212: #end
213:
214: ## ARTICLE MENTIONS MACRO
215: #macro (printReleases $items $type)
216: <div class="cards news-layout grid bio-news-mentions">
217: <div class="card-columns row">
218: #foreach ($article in $items)
219:
220: ## CATEGORY / TITLE
221: #set ($title = $article.title)
222: #set ($category = "Article")
223:
224: #if($article.contentType == "loki/bio")
225: #set ($category = "Bio")
226: #elseif ($article.contentType == "video/x-flv" || $article.contentType == "loki/video" || $article.contentType == "loki/youtube")
227: #set ($category = "Video")
228: #end
229:
230: #if ($article.url.startsWith("/sports/"))
231: #set ($sportKey = $article.url.split("/").get(2))
232: #if ($sportLabels.containsKey($sportKey))
233: #set ($category = $sportLabels.get($sportKey))
234: #end
235: #else
236: #set ($articleSection = $article.sectionPage)
237: #foreach ($i in [1..5])
238: #if ($articleSection.url.length() == 0)
239: #break
240: #elseif ($articleSection.sectionPage.url.length() == 0) ## if parent is a root section
241: #if ($articleSection.title.length() > 0)
242: #set ($category = $articleSection.title)
243: #else
244: #set ($firstChar = $articleSection.name.substring(0, 1).toUpperCase())
245: #set ($afterFirstChars = $articleSection.name.substring(1))
246: #set ($category = "${firstChar}${afterFirstChars}")
247: #end
248: #break
249: #end
250: #set ($articleSection = $articleSection.sectionPage)
251: #end
252: #end
253: ## END CATEGORY / TITLE
254:
255: #set ($altText = $article.title)
256: #if ($article.thumbnailURL)
257: #if ($article.thumbnailPage.altText.length() > 0)
258: #set ($altText = "$article.thumbnailPage.altText")
259: #end
260: #end
261:
262: #if ($article.thumbnailURL.length() > 0)
263: #set ($src = $article.thumbnailURL)
264: #elseif ($website.exists("/images/setup/default-thumbnail.png"))
265: #set ($src = "/images/setup/default-thumbnail.png")
266: #elseif ($website.exists("/images/setup/thumbnail_default.jpg"))
267: #set ($src = "/images/setup/thumbnail_default.jpg")
268: #else
269: #set ($src = "/info/images/default-thumbnail.png")
270: #end
271: #set ($thumbnailURL = "${src}?max_width=${thumbWidth}")
272:
273: #set ($cardClass = "card")
274: #if ($velocityCount > $showSize)
275: #set ($cardClass = "card hidden")
276: #end
277:
278: <div class="col-12 col-sm-6 col-md-4 col-lg-4 d-flex align-items-stretch">
279: <div class="${cardClass} border position-relative">
280: <div class="card-inner position-relative">
281: #if ($showThumb == true)
282: <div class="thumb overflow-hidden card-img-top ${thumbnail-orientation}" style="background-image:url('${thumbnailURL}'); background-size:cover; background-position:center;">
283: <img src="${thumbnailURL}" alt="${altText}" class="img-fluid" />
284: #printVideo($article)
285: </div>
286: #end
287: <div class="card-body border-top rounded-bottom bg-white">
288: <div class="entry-body-header">
289: <ul class="entry-meta list-unstyled d-flex align-items-center justify-content-between mb-2 text-muted">
290: <li class="entry-category">$category</li>
291: <li class="entry-header-date d-none d-lg-block hide-on-grid-view">
292: <span class="small d-flex align-items-center">
293: <span class="fa fa-calendar-o"></span>
294: <span class="ms-2">$formatter.formatDate($article.date, $dateFormat)</span>
295: </span>
296: </li>
297: </ul>
298: <div class="card-title entry-title h4 mb-0">
299: <a class="text-decoration-none stretched-link clamp-2" href="$article.url">$title</a>
300: </div>
301: #if ($showLeadin == true && $article.leadIn.length() > 0)
302: <p class="card-text entry-summary clamp-3">$article.leadIn</p>
303: #end
304: </div>
305: </div>
306: #if ($showDate == true && $article.date)
307: <div class="card-footer border-top rounded-bottom bg-white text-muted p-3">
308: <ul class="list-unstyled d-flex align-items-center m-0">
309: <li class="card-entry-date">
310: <span class="small d-flex align-items-center">
311: <span class="fa fa-calendar-o"></span>
312: <span class="ms-2">$formatter.formatDate($article.date, $dateFormat)</span>
313: </span>
314: </li>
315: </ul>
316: </div>
317: #end
318: </div>
319: </div> ## card
320: </div>
321: #end ## loop
322: </div>
323: </div>
324: #end ## printReleases
325:
326: #macro (gamelogData $p)
327:
328: #set ($p = $positions.get($p))
329: #set ($gamelogs = $gamelogs.get($p))
330:
331: #if ($hasEvents)
332: <div class="stats-box full clearfix">
333: <div class="table-responsive-via-datatables">
334: <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">
335: <thead class="thead-dark">
336: <tr>
337: <th scope="col">Date</th>
338: <th scope="col" class="text-start">Opponent</th>
339: <th scope="col" class="">Score</th>
340: #foreach ($gamelog in $gamelogs)
341: <th scope="col" class="text-uppercase text-center">$gamelog</th>
342: #end
343: </tr>
344: </thead>
345: <tbody>
346: #foreach ($event in $events)
347: <tr>
348: <td scope="row">$formatter.formatDate($event.event.date, "MMM d")</td>
349: <td class="text-start">
350: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
351: $event.event.opponent.name
352: </td>
353: <td class="">
354: #if ($event.event.statusCode >= 0)
355: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
356: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
357: #else
358: ${event.event.APResult}
359: #end
360: #else #end
361: </td>
362: #foreach ($gamelog in $gamelogs.keySet())
363: #set ($value = "-")
364: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
365: <td class="text-center">$value</td>
366: #end
367: </tr>
368: #end
369: </tbody>
370: </table>
371: </div> ## table-responsive
372: </div> ## stats-box
373: #end
374:
375: #end ## macro gamelogData
376:
377: #macro (splitWithLabels $statPosBriefs $label $stats $rowSpan $colspan $rowSpanLabel)
378: #if ($tool.math.toInteger($rowSpan) > 0)
379: <tr class="group" data-rowspan="$rowSpan" data-colspan="$colspan">
380: <td class="text-start">$rowSpanLabel</td>
381: #foreach ( $i in [0..$tool.math.sub($colspan, 0)])
382: <td class="text-center"> </td>
383: #end
384: </tr>
385: #end
386: <tr data-rowspan="$rowSpan" data-colspan="$colspan">
387: <th scope="row" class="text-end">${label}</th>
388:
389: #if($rosterTransactions && $v == "career")
390: #set($keys = $stats.names())
391: #set($array = $keys.toString().replace('"','').split(","))
392: #foreach ($brief in $statPosBriefs.keySet())
393: #set ($value = "-")
394: #if($array.contains($brief))
395: #set ($value = $!formatter.formatNumber($tool.math.toDouble($stats.get($brief)), $formats.get($brief)))
396: #end
397: <td class="text-center">#if ($value.length() > 0) $value #else - #end</td>
398: #end
399: #else
400: #foreach ($brief in $statPosBriefs.keySet())
401: #set ($value = "-")
402: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
403: <td class="text-center">#if ($value.length() > 0) $value #else - #end</td>
404: #end
405: #end
406:
407: </tr>
408: #end
409:
410: #macro (careerData $p)
411: #set ($p = $positions.get($p))
412: #set ($statPosBriefs = $briefs.get($p))
413:
414: <div class="stats-box full clearfix">
415: <div class="table-responsive-via-datatables table-responsive-webkit-overflow-scroll-fix">
416: <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">
417: <thead class="thead-dark">
418: <tr>
419: <th scope="col" class="pinned-col"> </th>
420: #foreach ($brief in $statPosBriefs)
421: <th scope="col" class="text-center text-uppercase">$brief</th>
422: #end
423: </tr>
424: </thead>
425: <tbody>
426: #if($rosterTransactions)
427: #set ($seasonLength = $career.seasons.length())
428: #foreach ($index in [0..$tool.math.sub($seasonLength, 1)])
429: #set($season = $career.seasons[$index])
430: #if($season.seasonStatsURL != "null")
431: #set ($label = "<a href='${season.seasonStatsURL}?view=profile'>$season.seasonName.replaceAll('^[^0-9-]*','') - $season.team.teamName</a>")
432: #else
433: #set ($label = "$season.seasonName.replaceAll('^[^0-9-]*','') - $season.team.teamName ")
434: #end
435: #splitWithLabels($statPosBriefs, $label, $season.player.stats, "", "", "")
436: #end
437: #splitWithLabels($statPosBriefs, "Total", $career.totals, "", "", "")
438: #else
439: #set ($careerTotals = $request.getAttribute("careerTotals"))
440: #set ($careerMap = $request.getAttribute("careerMap"))
441: #foreach ($season in $seasons)
442: ## Check if we did not get stats for this season
443: #if ($careerMap.get($season.seasonName))
444: #set ($label = "<a href='${season.path}?view=profile'>$season.seasonName</a>")
445: #splitWithLabels($statPosBriefs, $label, $careerMap[$season.seasonName], "", "", "")
446: #elseif ($wiki.valid())
447: <tr>
448: <td scope="row" class="text-end">
449: ${season.seasonName}
450: <span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-placement="right" title="We could not find the 'players' page in the ${season.seasonName} section.">
451: <span class="fa fa-light fa-circle-info"></span>
452: </span>
453: </td>
454: #foreach ( $i in [0..$tool.math.sub($statPosBriefs.size(), 1)])
455: <td class="text-center"> </td>
456: #end
457: </tr>
458: #end
459: #end
460: #splitWithLabels($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall, "", "", "")
461: #end
462: </tbody>
463: </table>
464: </div> ## table-responsive
465: </div> ## stats-box
466:
467: #end ## macro careerData
468:
469: #macro (splitsData $p)
470:
471: #set ($p = $positions.get($p))
472: #set ($statPosBriefs = $briefs.get($p))
473: #set ($colspan = $tool.math.sub($statPosBriefs.size(), 1))
474:
475: #if ($statPosBriefs.size() > 0)
476: <div class="stats-box full clearfix">
477: <div class="table-responsive-via-datatables">
478: <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">
479: <thead class="thead-dark">
480: <tr data-colspan="$colspan">
481: <th scope="col"> </th>
482: #foreach ($brief in $statPosBriefs)
483: <th scope="col" class="text-center text-uppercase">$brief</th>
484: #end
485: </tr>
486: </thead>
487:
488: <tbody>
489: <tr class="group" data-colspan="$colspan">
490: <td class="text-start">Event</td>
491: #foreach ( $i in [0..$tool.math.sub($colspan, 0)])
492: <td class="text-center"> </td>
493: #end
494: </tr>
495: #splitWithLabels($statPosBriefs, "Total", $splits.overall, "", "", "")
496: #splitWithLabels($statPosBriefs, "Conference", $splits.conference, "", "", "")
497: #splitWithLabels($statPosBriefs, "Exhibition", $splits.exhibition, "", "", "")
498:
499: <tr class="group" data-colspan="$colspan">
500: <td class="text-start">Location</td>
501: #foreach ( $i in [0..$colspan])
502: <td class="text-center"> </td>
503: #end
504: </tr>
505: #splitWithLabels($statPosBriefs, "Home", $splits.home, "", "", "")
506: #splitWithLabels($statPosBriefs, "Away", $splits.away, "", "", "")
507: #splitWithLabels($statPosBriefs, "Neutral", $splits.neutral, "", "", "")
508:
509: #set ($rowSpan = $gamesResults.entrySet().size())
510: #set ($rowSpanLabel = "Result")
511:
512: #foreach($gameResult in $gamesResults.entrySet())
513: #if ($gameResult.key == "wins")
514: #set ($splitGameResult = $splits.inWins)
515: #elseif ($gameResult.key == "losses")
516: #set ($splitGameResult = $splits.inLosses)
517: #elseif ($gameResult.key == "ties")
518: #set ($splitGameResult = $splits.inTies)
519: #end
520:
521: #splitWithLabels($statPosBriefs, $gameResult.value, $splitGameResult, $rowSpan, $colspan, $rowSpanLabel)
522:
523: #set ($rowSpan = "")
524: #end
525:
526:
527: #if ($monthsPlayed and $monthsPlayed.size() > 0)
528:
529: #set ($rowSpan = $monthsPlayed.size())
530: #set ($rowSpanLabel = "Month")
531:
532: #foreach($month in $monthsPlayed)
533: #if ($month == 'January')
534: #set ($splitMonth = $splits.january)
535: #elseif ($month == 'February')
536: #set ($splitMonth = $splits.february)
537: #elseif ($month == 'March')
538: #set($splitMonth = $splits.march)
539: #elseif ($month == 'April')
540: #set($splitMonth = $splits.april)
541: #elseif ($month == 'May')
542: #set ($splitMonth = $splits.may)
543: #elseif ($month == 'June')
544: #set ($splitMonth = $splits.june)
545: #elseif ($month == 'July')
546: #set($splitMonth = $splits.july)
547: #elseif ($month == 'August')
548: #set ($splitMonth = $splits.august)
549: #elseif ($month == 'September')
550: #set($splitMonth = $splits.september)
551: #elseif ($month == 'October')
552: #set($splitMonth = $splits.october)
553: #elseif ($month == 'November')
554: #set ($splitMonth = $splits.november)
555: #elseif ($month == 'December')
556: #set($splitMonth = $splits.december)
557: #end
558:
559: #splitWithLabels($statPosBriefs, $month, $splitMonth, $rowSpan, $colspan, $rowSpanLabel)
560:
561: #set ($rowSpan = "")
562:
563: #end ## foreach
564:
565: #end
566: </tbody>
567: </table>
568: </div> ## table-responsive
569: </div> ## stats-box
570: #end
571:
572: #end ## macro splitsData
573:
574: #macro (printRecentGames)
575: #if ($hasEvents)
576: <div class="table-responsive-via-datatables">
577: <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">
578: <thead class="thead-dark">
579: <tr>
580: <th scope="col text-start">Date</th>
581: <th scope="col text-start">Opponent</th>
582: <th scope="col">Result</th>
583: </tr>
584: </thead>
585: <tbody>
586: #set ($eventEnd = -1)
587: #foreach ($event in $events)
588: #if ($event.event.result.resolved)
589: #set ($eventEnd = $velocityCount)
590: #end
591: #end
592:
593: #set ($eventStart = $eventEnd - 5)
594: #if ($eventStart < 0) #set ($eventStart = 0) #end
595:
596: #foreach ($event in $events)
597: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
598: <tr>
599: <td scope="row" class="text-start">$formatter.formatDate($event.event.date, "MMM d")</td>
600: <td class="text-start">
601: #if ($event.event.neutralSite.length() > 0) vs.
602: #elseif (!$event.event.home) at
603: #else ## nothing for a home game
604: #end
605: $event.event.opponent.name
606: </td>
607: <td>
608: #if ($event.event.statusCode >= 0)
609: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
610: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
611: #else
612: ${event.event.APResult}
613: #end
614: #end
615: </td>
616: </tr>
617: #end ## if
618: #end
619: </tbody>
620: </table>
621: </div>
622: #end
623: #end ## macro printRecentGames
624:
625: #macro (printCategories $briefCategoryLabels $v $ariaLabel)
626: <div class="$classTabPaneContent has-child-tabs">
627: <div class="d-flex flex-row text-nowrap align-items-center justify-content-center">
628: <div class="secondary-tab-select-container flex-fill">
629: <select class="tab-nav-select-helper form-select" id="bio-tabs-${v}-select" aria-label="Choose a stat group">
630: #foreach($briefCat in $briefCategoryLabels.entrySet())
631: #set ($briefCatLabel = $briefCat.value)
632: #set ($briefCatKey = $briefCat.key)
633: #if ($locale == "en_gb" && $briefCatLabel == "Defense")
634: #set ($briefCatLabel = "Defence")
635: #end
636: <option value="#${v}-tab-pos-${briefCatKey}-content" #if ($pos == $briefCat.key || $foreach.first) selected #end>${briefCatLabel}</option>
637: #end
638: </select>
639: <script>
640: $('.tab-nav-select-helper').on('change', function(e) {
641: var id = $(this).val();
642: $('a[data-bs-target="' + id + '"]').tab('show');
643: });
644: </script>
645: </div>
646: </div>
647: <div class="$classBioTabChildrenWrapper" data-momentum="false">
648: <ul class="$classBioTabChildren" id="bio-tabs-${v}" role="tablist">
649: #foreach($briefCat in $briefCategoryLabels.entrySet())
650: #set ($briefCatLabel = $briefCat.value)
651: #set ($briefCatKey = $briefCat.key)
652: #if ($locale == "en_gb" && $briefCatLabel == "Defense")
653: #set ($briefCatLabel = "Defence")
654: #end
655: <li class="nav-item flex-fill flex-md-grow-0 flex-md-shrink-0">
656: <a data-bs-toggle="tab" id="${v}-tab-pos-${briefCatKey}" class="nav-link#if ($activePos == $briefCatKey) active#end" data-bs-target="#${v}-tab-pos-${briefCatKey}-content" href="${page.url}?view=${v}&pos=${briefCatKey}" aria-label="${ariaLabel}: ${briefCatLabel}">${briefCatLabel}</a>
657: </li>
658: #end
659: </ul>
660: </div>
661: <div class="tab-content" id="${v}-tab-content">
662: #foreach ($briefCat in $briefCategoryLabels.entrySet())
663: #set ($briefCatLabel = $briefCat.value)
664: #set ($briefCatKey = $briefCat.key)
665: #set ($class = "tab-panel")
666: #if ($briefCat.key == $activePos)
667: #set ($class = "tab-panel active show")
668: #end
669: <div class="tab-pane fade ${class}" id="${v}-tab-pos-${briefCatKey}-content" role="tabpanel" aria-labelledby="${v}-tab-pos-${briefCatKey}">
670: <div class="stats-wrap $classTabPaneContentChild">
671: #if ($v == "splits")
672: #splitsData($briefCat.key)
673: #elseif ($v == "career")
674: #careerData($briefCat.key)
675: #end
676: <caption><p class="text-muted small">$ariaLabel: $briefCatLabel</p></caption>
677: </div>
678: </div>
679: #end
680: </div>
681: </div>
682: #end ## macro printCategories
683:
684: #macro (printHeadshot)
685: #if ($enhancedLayout)
686: #set ($classPlayerPhoto = "img-fluid img-thumbnail")
687: #else
688: #set ($classPlayerPhoto = "img-fluid h-auto")
689: #end
690:
691: #if ($headshot.url)
692: #set ($src = $headshot.url)
693: #elseif ($website.exists("/images/setup/default-headshot.png"))
694: #set ($src = "/images/setup/default-headshot.png")
695: #elseif ($website.exists("/images/setup/headshot_default.jpg"))
696: #set ($src = "/images/setup/headshot_default.jpg")
697: #else
698: #set ($src = "/info/images/default-headshot.png")
699: #end
700:
701: #if ($src.trim().length() > 0)
702: <img src="$src?max_width=510&max_height=600" class="$classPlayerPhoto" alt="$fullName" />
703: #end
704: #end ## macro printHeadshot
705:
706: #set ($socialBrands = ["facebook", "twitter", "instagram", "youtube", "twitch", "tiktok", "nil"])
707:
708: #macro (buildSocialLink $brand $handle $icons $class)
709: #if($brand == "facebook")
710: #set($socialHost = "https://www.facebook.com")
711: #elseif($brand == "twitter")
712: #set($socialHost = "https://twitter.com")
713: #elseif($brand == "instagram")
714: #set($socialHost = "https://www.instagram.com")
715: #elseif($brand == "tikTok")
716: #set($socialHost = "https://www.tiktok.com")
717: #elseif($brand == "tiktok")
718: #set($socialHost = "https://www.tiktok.com")
719: #elseif($brand == "twitch")
720: #set($socialHost = "https://www.twitch.tv")
721: #elseif($brand == "youtube")
722: #set($socialHost = "https://www.youtube.com")
723: #elseif($brand == "nil")
724: #set($socialHost = "") ## We cannot define a host because the data entry can accept all NIL host services. Opendorse, Influencer, Fanatics, etc.
725: #end
726:
727: #if($socialHost.length() > 0 )
728: #set($url = "${socialHost}/${handle}")
729: #elseif($brand == "nil")
730: #set($url = "${handle}")
731: #else
732: #set($url = "")
733: #end
734:
735: #set($icons = $Boolean.parseBoolean($icons))
736: #if($icons == true)
737: <a href="$url" class="$class" target="_blank"><span aria-label="$brand" class="#if($brand == 'nil')fa-kit #else fa fa-brands #end #if($brand == 'twitter') fa-x-twitter #else fa-$brand.toLowerCase() #end"></span></a>
738: #else
739: <a href="$url" class="$class" target="_blank">$handle</a>
740: #end
741: #end
742:
743: #macro(playerHeading)
744: <div class="player-heading h3 bg-primary d-flex align-content-stretch text-white position-relative z-index-1">
745: #if ($!attributes.get("number").length() > 0)<span class="number bg-secondary inline-block text-white p-3">$!attributes.get("number")</span>#end
746: <span class="name inline-block w-100 flex-grow-1 p-3">$fullName</span>
747: <span class="social-handle-link inline-block p-3">
748: <ul class="d-flex align-content-center h-100 gap-3 list-unstyled m-0">
749: #foreach ($field in $fields)
750: #if ($socialBrands.contains($field.key.toLowerCase()) && $attributes.get($field.key).length() > 0)
751: <li class="d-flex flex-column align-content-center justify-content-center">
752: #buildSocialLink($field.value.toLowerCase(), $!attributes.get($field.key), true, "btn btn-lg btn-link text-white p-0")
753: </li>
754: #end
755: #end
756: </ul>
757: </span>
758: </div>
759: #end
760:
761: #macro (printBioInfo)
762: #if ($enhancedLayout)
763: #set ($classListItems = "col-12 col-lg-6 px-3")
764: #set ($classListItems = "col-12 col-lg-6 px-3")
765: #set ($definitionListItems = "border-bottom m-0 p-2 h-100")
766: #else
767: #set ($classListItems = "col-12 px-2")
768: #set ($definitionListItems = "d-flex flex-row border-bottom m-0 p-2")
769: #end
770:
771: #if ($enhancedLayout)
772: #playerHeading
773: #end
774:
775: <div class="roster-player-fields">
776: <ul class="d-flex flex-row flex-wrap justify-content-between list-unstyled">
777: #foreach ($i in [1..10])
778: #set ($stickyKey = "bio_custom${i}_sticky")
779: #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
780: <li class="$classListItems bio-field-custom-sticky">
781: <dl class="${definitionListItems}">
782: <dt class="label p-0 me-2">$options.get($stickyKey): </dt>
783: <dd class="value p-0 m-0 text-muted">$!attributes.get("custom${i}")</dd>
784: </dl>
785: </li>
786: #end
787: #end
788:
789: #foreach ($field in $fields)
790: #if (!$field.key.startsWith("custom"))
791: #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
792: #if ($field.key == "phone1" || $field.key == "phone2")
793: <li class="$classListItems bio-field-standard">
794: <dl class="${definitionListItems}">
795: <dt class="label p-0 me-2 d-inline">Phone: </dt>
796: <dd class="value p-0 m-0 d-inline text-muted">$!attributes.get($field.key)</dd>
797: </dl>
798: </li>
799: #elseif ($field.key == "email_address")
800: <li class="$classListItems bio-field-standard">
801: <dl class="${definitionListItems}">
802: #set ($emailAdd = $attributes.get($field.key))
803: <dt class="label p-0 me-2 d-inline">Email: </dt>
804: <dd class="value p-0 m-0 text-truncate d-inline text-muted"><a href="mailto:${emailAdd}">$emailAdd</a></dd>
805: </dl>
806: </li>
807: #elseif ($field.key == "weight_class")
808: <li class="$classListItems bio-field-standard">
809: <dl class="${definitionListItems}">
810: <dt class="label p-0 me-2 d-inline">Class: </dt>
811: <dd class="value p-0 m-0 d-inline text-muted">$!attributes.get($field.key)</dd>
812: </dl>
813: </li>
814: #elseif ($socialBrands.contains($field.value.toLowerCase()))
815: <li class="$classListItems bio-field-standard">
816: <dl class="${definitionListItems}">
817: <dt class="label p-0 me-2 d-inline">$field.value: </dt>
818: <dd class="value p-0 m-0 d-inline text-muted">#buildSocialLink($field.value.toLowerCase(), $!attributes.get($field.key), false, "")</dd>
819: </dl>
820: </li>
821: #elseif ($field.key != "position_abbr")
822: <li class="$classListItems bio-field-standard">
823: <dl class="${definitionListItems}">
824: <dt class="label p-0 me-2 d-inline">$field.value: </dt>
825: <dd class="value p-0 m-0 d-inline text-muted">$!attributes.get($field.key)</dd>
826: </dl>
827: </li>
828: #end
829: #end
830: #end
831: #end
832:
833: #foreach ($i in [1..10])
834: #set ($customKey = "bio_custom${i}")
835: #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
836: <li class="$classListItems bio-field-custom">
837: <dl class="${definitionListItems}">
838: <dt class="label p-0 me-2 d-inline">$options.get($customKey): </dt>
839: <dd class="value p-0 m-0 d-inline text-muted">$!attributes.get("custom${i}")</dd>
840: </dl>
841: </li>
842: #end
843: #end
844: </ul>
845: </div>
846: #end ## macro printBioInfo
847:
848: #macro (printActionShots)
849: #if ($showActionShots)
850: ## FILTERS OUT THE NUMBER OF ACTION PHOTOS
851: #set ($totalPhotoAvaiable = $playerPhotos.size())
852: #set ($playerPhotosFiltered = $playerPhotos)
853: #if ($actionShotsLimit < $totalPhotoAvaiable)
854: #set ($playerPhotosFiltered = $playerPhotos.subList(0, $actionShotsLimit))
855: #end
856: #set ($playerPhotosFiltered = $tool.sorter.sort($playerPhotosFiltered, "lastUpdated:desc"))
857: <div class="action-shots clearfix mb-md-n5 d-none d-sm-none d-md-block">
858: <div id="action-shots-carousel" class="carousel slide carousel-fade" data-bs-interval="12000" data-bs-ride="carousel">
859: <ol class="carousel-indicators pb-sm-3 mb-sm-5">
860: #foreach($photo in $playerPhotosFiltered)
861: <li data-bs-target="#action-shots-carousel" data-bs-slide-to="$foreach.index" class="#if ($foreach.index == 0)active#end"></li>
862: #end
863: </ol>
864: <div class="carousel-inner">
865: #foreach($photo in $playerPhotosFiltered)
866: #set ($imgAlt = "Large featured action photo of $fullName - Image $foreach.count")
867: #if ($photo.altText.length() > 0)
868: #set ($imgAlt = $photo.altText)
869: #elseif( $photo.title.length() > 0 )
870: #set ($imgAlt = $photo.title)
871: #end
872: <div class="carousel-item#if ($foreach.index == 0) active#end">
873: <img src="${photo.url}?max_width=1200" alt="$imgAlt" class="d-block w-100" data-lastupdated="$photo.lastUpdated" />
874: </div>
875: #end
876: </div>
877: </div>
878: </div>
879: #end
880: #end ## macro printActionShots
881:
882: #macro (printHighlights)
883: #if ($highlights && $showHighlights)
884: <div class="roster-bio-highlights bg-white text-dark w-100">
885: <ul class="d-flex flex-row flex-wrap justify-content-between list-unstyled m-0">
886: #foreach ($highlight in $highlights.keySet())
887: #set ($value = "-")
888: #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
889: <li class="flex-fill text-center border border">
890: <dl class="stat d-block m-0 p-3">
891: <dt class="d-block label p-0 m-0 text-uppercase fw-normal small text-muted">$!highlights.get($highlight)</dt>
892: <dd class="d-block value p-0 m-0 fs-5 fw-bold lh-1">$value</dd>
893: </dl>
894: </li>
895: #end
896: </ul>
897: </div>
898: #end
899: #end ## macro printHighlights
900:
901: #macro (printRoster)
902: #if ($enhancedLayout)
903: $website.includeAgain("${page.url}?tmpl=roster-switcher-template&id=roster-list")
904: #else
905: #set ($id = "roster-switcher")
906: #if ($request.getParameter("id").length() > 0)
907: #set ($id = $request.getParameter("id"))
908: #end
909:
910: #if ($page.contentType == "loki/bio")
911: #set ($headlinesFeaturedSize = 0)
912: #foreach ($featuredPage in $page.headlinesFeatured)
913: #if ($featuredPage.contentType == "loki/headlines")
914: #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
915: #end
916: #end
917: #if ($headlinesFeaturedSize > 0)
918: <div id="$id" class="float-sm-end roster-switcher-template">
919: <span class="input-group">
920: <span class="input-group-text" id="${id-options}-group-text">Related Bios</span>
921: <select class="form-select" id="$id-options" aria-describedby="${id-options}-group-text" onchange="location=this.value;">
922: #foreach ($featuredPage in $page.headlinesFeatured)
923: #if ($featuredPage.contentType == "loki/headlines")
924: $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template¤t_url=${page.url}")
925: #end
926: #end
927: </select>
928: </div>
929: </div>
930: #end
931: #elseif ($page.contentType == "loki/bio-network")
932: #set ($relatedPlayers = $page.sectionPage.children)
933: #set ($teamNames = {})
934: #foreach ($relatedPlayer in $relatedPlayers)
935: #if ($relatedPlayer.contentType == "loki/bio-network")
936: #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
937: #set ($teamName = $relatedPlayerObj.get("team"))
938: #if ($teamName.length() > 0)
939: #if (!$teamNames.containsValue($teamName))
940: $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
941: #end
942: #end
943: #end
944: #end
945: <div id="$id" class="float-sm-end roster-switcher-template">
946: <div class="input-group">
947: <span class="input-group-text" id="${id-options}-group-text">Related Bios</span>
948: <select class="form-select" id="$id-options" aria-describedby="${id-options}-group-text" onchange="location=this.value;">
949: #foreach ($i in [1..$teamNames.size()])
950: #if ($teamNames.size() > 1)
951: <optgroup label="$teamNames.get($i)">
952: #end
953:
954: #foreach ($relatedPlayer in $relatedPlayers)
955: #if ($relatedPlayer.contentType == "loki/bio-network")
956: #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
957: #set ($teamName = $relatedPlayerObj.get("team"))
958: #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
959: #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
960: #set ($playerLastName = $relatedPlayerObj.get("last_name"))
961: <option value="$relatedPlayer.url" #if ($page.url == $relatedPlayer.url)selected#end>${playerFirstName} ${playerLastName}</option>
962: #end
963: #end
964: #end
965:
966: #if ($teamNames.size() > 1)
967: </optgroup>
968: #end
969: #end
970: </select>
971: </div>
972: </div>
973: #end
974: #end ## enhancedLayout check
975: #end ## macro printRoster
976:
977: ################################################## END MACROS #############################################################
978:
979: #if ($attributes.get("full_name").length() > 0)
980: #set ($fullName = $attributes.get("full_name"))
981: #else
982: #set ($firstName = $!attributes.get("first_name"))
983: #set ($lastName = $!attributes.get("last_name"))
984: #set ($fullName = "${firstName} ${lastName}")
985: #end
986:
987: #set ($pageTitle = "")
988: #if($request.getAttribute("pageTitle").length() > 0)
989: #set ($pageTitle = $request.getAttribute("pageTitle"))
990: #end
991: #if ($page.title.length() > 0)
992: #set ($pageTitle = $!page.title)
993: #end
994: $!request.setAttribute("pageTitle", "${pageTitle}")
995:
996: #set ($actionShots = false)
997: #if ($enhancedLayout && $playerPhotos.size() > 0)
998: #set ($actionShots = true)
999: #end
1000:
1001: #if ($enhancedLayout)
1002: #set ($classRoot = "bio-enhanced")
1003: #if ($actionShots && $showActionShots)
1004: #set ($classRoot = "${classRoot} action")
1005: #else
1006: #set ($classRoot = "${classRoot} plain")
1007: #end
1008: #set ($classCard = "bg-light p-3 col-sm-12 pt-md-0")
1009: #set ($classBody = "col-sm-12")
1010: #set ($classBioTabParentsWrapper = "nav-tabs-wrapper position-relative pt-3")
1011: #set ($classBioTabParents = "nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3")
1012: #set ($classBioTabChildrenWrapper = "nav-tabs-wrapper position-relative py-3 border-bottom d-none")
1013: #set ($classBioTabChildren = "nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3")
1014: #set ($classTabPaneContent = "tab-pane-contents p-3 border border-top-0")
1015: #set ($classTabPaneContentChild = "tab-pane-contents p-0")
1016: #else
1017: #set ($classRoot = "bio-wrap")
1018: #set ($classCard = "mb-5 p-3 col-lg-4 col-xl-3 bg-white")
1019: #set ($classBody = "col-lg-8 col-xl-9 py-3")
1020: #set ($classBioTabParentsWrapper = "nav-tabs-wrapper position-relative tab-nav")
1021: #set ($classBioTabParents = "nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3")
1022: #set ($classBioTabChildrenWrapper = "nav-tabs-wrapper position-relative tab-nav d-none")
1023: #set ($classBioTabChildren = "nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3")
1024: #set ($classTabPaneContent = "tab-pane-contents p-3 border border-top-0")
1025: #set ($classTabPaneContentChild = "tab-pane-contents p-0")
1026:
1027: #end
1028:
1029: ## FULL ROSTER
1030: <div class="${classRoot} #if ($highlights) bio-wrap-has-highlights #end clearfix">
1031:
1032: ## RELATED BIOS
1033: #if ($showRoster)
1034: <div class="related-bios clearfix mb-3">#printRoster</div>
1035: #end
1036:
1037: #if ($actionShots)
1038: #printActionShots
1039: #end
1040: #if ($enhancedLayout)
1041: #else
1042: #playerHeading
1043: #end
1044:
1045: <div class="roster-bio-container">
1046: <div class="row">
1047: <div class="bio-card ${classCard}">
1048: <div class="player-about clearfix">
1049: #if ($enhancedLayout)
1050: <div class="row no-gutters g-0">
1051: <div class="col-md-4 col-lg-3">
1052: <div class="player-headshot text-center position-relative z-index-1 mt-md-n5">#printHeadshot</div>
1053: </div>
1054: <div class="col-md-8 col-lg-9">
1055: <div class="player-info">#printBioInfo</div>
1056: <div class="mt-3 mx-3 w-100">
1057: #printHighlights
1058: </div>
1059: </div>
1060: </div>
1061: #else
1062: <div class="row">
1063: <div class="col-md-4 col-lg-12">
1064: <div class="player-headshot text-center position-relative z-index-1 mb-3">
1065: <div class="overflow-hidden img-thumbnail">
1066: #printHeadshot
1067: </div>
1068: </div>
1069: </div>
1070: <div class="col-md-8 col-lg-12">
1071: <div class="player-info mb-3">#printBioInfo</div>
1072: </div>
1073: </div>
1074: #end
1075: </div>
1076: </div> ## bio-card
1077:
1078: #if ($view.length() > 0)
1079: $request.setAttribute("icl-responsive-tabs-script", true)
1080:
1081: <div class="bio-body ${classBody}">
1082:
1083: <div class="d-flex flex-column align-items-center justify-content-start gap-3">
1084: #if (!$enhancedLayout) #printHighlights #end
1085: <div class="tab-container w-100">
1086: #if ($statsURL.length() > 0 || $hasHTMLStats || $releases.size() > 0|| $playerPhotos.size() > 0 || $playerVideos.size() > 0)
1087: <div class="$classBioTabParentsWrapper">
1088: <ul class="$classBioTabParents" id="bio-tabs-parents" role="tablist">
1089: #if ($hasSynopsis || $hasBioBrief)
1090: <li class="nav-item">
1091: <a data-bs-toggle="tab" id="bio-tab" class="nav-link #if ($view == "bio") active#end" data-bs-target="#bio" href="${page.url}?view=bio">Bio</a>
1092: </li>
1093: #end
1094:
1095: #if ($statsURL.length() > 0)
1096: <li class="nav-item">
1097: <a data-bs-toggle="tab" id="profile-tab" class="nav-link#if ($view == "profile") active#end" data-bs-target="#profile" href="${page.url}?view=profile">Player Profile</a>
1098: </li>
1099: <li class="nav-item">
1100: <a data-bs-toggle="tab" id="gamelog-tab" class="nav-link#if ($view == "gamelog") active#end" data-bs-target="#gamelog" href="${page.url}?view=gamelog">Game Log</a>
1101: </li>
1102: #if ($showCareer)
1103: <li class="nav-item">
1104: <a data-bs-toggle="tab" id="career-tab" class="nav-link#if ($view == "career") active#end" data-bs-target="#career" href="${page.url}?view=career">Career Stats</a>
1105: </li>
1106: #end
1107: <li class="nav-item">
1108: <a data-bs-toggle="tab" id="splits-tab" class="nav-link#if ($view == "splits") active#end" data-bs-target="#splits" href="${page.url}?view=splits">Split Stats</a>
1109: </li>
1110: #end
1111:
1112: #if ($hasHTMLStats)
1113: <li class="nav-item">
1114: <a data-bs-toggle="tab" id="htmlstats-tab" class="nav-link#if ($view == "htmlstats") active#end" data-bs-target="#htmlstats" href="${page.url}?view=htmlstats">HTML Stats</a>
1115: </li>
1116: #end
1117:
1118: #if ($releases.size() > 0)
1119: <li class="nav-item">
1120: <a data-bs-toggle="tab" id="news-tab" class="nav-link#if ($view == "news") active#end" data-bs-target="#news" href="${page.url}?view=news">News</a>
1121: </li>
1122: #end
1123:
1124: #if ($playerPhotos.size() > 0)
1125: <li class="nav-item">
1126: <a data-bs-toggle="tab" id="photos-tab" class="nav-link#if ($view == "photos") active#end" data-bs-target="#photos" href="${page.url}?view=photos">Photos</a>
1127: </li>
1128: #end
1129:
1130: #if ($playerVideos.size() > 0)
1131: <li class="nav-item">
1132: <a data-bs-toggle="tab" id="videos-tab" class="nav-link#if ($view == "videos") active#end" data-bs-target="#videos" href="${page.url}?view=videos">Videos</a>
1133: </li>
1134: #end
1135:
1136: ## WEPLAYED MOMENTS - THIRD-PARTY SUPPORT PLUGIN
1137: #if (!$page.url.contains("/coaches") && $options.get("weplayed_addon_code"))
1138: <li class="nav-item weplayed-hide-no-data #if ($view == "weplayed") active#end">
1139: <a data-toggle="tab" id="weplayed-tab" class="nav-link#if ($view == "weplayed") active#end" data-target="#weplayed" href="${page.url}?view=weplayed">#Moments</a>
1140: </li>
1141: #end
1142: </ul>
1143: </div>
1144: #end
1145: <div class="tab-content" id="roster-tab-content">
1146: ## BIO
1147: #if ($hasSynopsis || $hasBioBrief)
1148: #set ($class = "tab-panel")
1149: #if ($view == "bio")
1150: #set ($class = "tab-panel active show")
1151: #end
1152:
1153: <div class="tab-pane fade ${class}" id="bio" role="tabpanel" aria-labelledby="bio-tab">
1154: <div class="$classTabPaneContent synopsis">
1155: <h5 class="bio-tabbed-content-heading">Bio</h5>
1156: #if ($hasSynopsis)
1157: $synopsis
1158: #elseif ($hasBioBrief)
1159: $website.include("$bioBriefURL")
1160: #end
1161: </div>
1162: </div> ## tab-panel
1163: #end
1164:
1165: ## STATS
1166: #if ($statsURL.length() > 0)
1167:
1168: ## PROFILE
1169: #set ($class = "tab-panel")
1170: #if ($view == "profile")
1171: #set ($class = "tab-panel active show")
1172: #end
1173:
1174: <div class="tab-pane fade ${class}" id="profile" role="tabpanel" aria-labelledby="profile-tab">
1175: <div class="$classTabPaneContent stats-wrap">
1176:
1177: ## LAST SIX GAMES
1178: <h5 class="bio-tabbed-content-heading">Recent games</h5>
1179: <div class="stats-box mb-3">
1180: #printRecentGames()
1181: </div>
1182:
1183: <h5 class="bio-tabbed-content-heading">Season Statistics</h5>
1184: ## RANKING
1185: <div class="stats-box mb-3">
1186: #if ($statPos.length() > 0)
1187: $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
1188: #end
1189: </div>
1190: </div>
1191: </div> ## stats-wrap
1192: </div> ## tab-content
1193:
1194: ## GAMELOG
1195: #set ($class = "tab-panel")
1196: #if ($view == "gamelog")
1197: #set ($class = "tab-panel active show")
1198: #end
1199:
1200: #set ($activePos = $statPos)
1201: #if ($view == "gamelog" && $paramPos.length() > 0)
1202: #if ($positions.get($paramPos).length() > 0)
1203: #set ($activePos = $positions.get($paramPos))
1204: #end
1205: #end
1206:
1207: <div class="tab-pane fade ${class}" id="gamelog" role="tabpanel" aria-labelledby="gamelog-tab">
1208: #if ($gamelogsCategoriesLabels)
1209: <div class="$classTabPaneContent has-child-tabs">
1210: <div class="d-flex flex-row text-nowrap align-items-center justify-content-center">
1211: <div class="secondary-tab-select-container flex-fill">
1212: <select class="tab-nav-select-helper form-select" id="bio-tabs-gamelog-select" aria-label="Choose a stat group">
1213: #foreach($briefCat in $gamelogsCategoriesLabels.entrySet())
1214: #set ($briefCatLabel = $briefCat.value)
1215: #set ($briefCatKey = $briefCat.key)
1216: #if ($locale == "en_gb" && $briefCatLabel == "Defense")
1217: #set ($briefCatLabel = "Defence")
1218: #end
1219: <option value="#gamelog-tab-pos-${briefCatKey}-content" #if ($pos == $briefCat.key || $foreach.first) selected #end>${briefCatLabel}</option>
1220: #end
1221: </select>
1222: <script>
1223: $('.tab-nav-select-helper').on('change', function(e) {
1224: var id = $(this).val();
1225: $('a[data-bs-target="' + id + '"]').tab('show');
1226: });
1227: </script>
1228: </div>
1229: </div>
1230: <div class="$classBioTabChildrenWrapper" data-momentum="false">
1231: <ul class="$classBioTabChildren" id="bio-tabs-gamelog" role="tablist">
1232: #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
1233: #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
1234: #set ($gamelogsCatLabelKey = $gamelogsCatLabel.key)
1235: #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
1236: #set($gamelogsCatLabelVal = "Defence")
1237: #end
1238: <li class="nav-item flex-fill flex-md-grow-0 flex-md-shrink-0">
1239: <a data-bs-toggle="tab" id="gamelog-tab-pos-${gamelogsCatLabel.key}" class="nav-link#if ($activePos == $gamelogsCatLabel.key) active#end" data-bs-target="#gamelog-tab-pos-${gamelogsCatLabel.key}-content" href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}" aria-label="Game Log: ${gamelogsCatLabelVal}">$gamelogsCatLabelVal</a>
1240: </li>
1241: #end
1242: </ul>
1243: </div>
1244: <div class="tab-content" id="gamelog-tab-content">
1245: #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
1246: #set ($class = "tab-panel")
1247: #if ($gamelogsCatLabel.key == $activePos)
1248: #set ($class = "tab-panel active show")
1249: #end
1250: <div class="tab-pane fade ${class}" id="gamelog-tab-pos-${gamelogsCatLabel.key}-content" role="tabpanel" aria-labelledby="gamelog-tab-pos-${gamelogsCatLabel.key}">
1251: <div class="stats-wrap $classTabPaneContentChild">
1252: <h5 class="bio-tabbed-content-heading sr-only">Game Log - <small class="text-muted"> $gamelogsCatLabel.value</small></h5></h4>
1253: #gamelogData($gamelogsCatLabel.key)
1254: </div>
1255: </div>
1256: #end
1257: </div>
1258: </div>
1259: #else
1260: <div class="stats-wrap $classTabPaneContent">#gamelogData($pos)</div>
1261: #end
1262:
1263: </div> ## tab-panel
1264:
1265: ## CAREER
1266: #if ($showCareer)
1267:
1268: #set ($activePos = $statPos)
1269: #if ($view == "career" && $paramPos.length() > 0)
1270: #if ($positions.get($paramPos).length() > 0)
1271: #set ($activePos = $positions.get($paramPos))
1272: #end
1273: #end
1274:
1275: #set ($class = "tab-panel")
1276: #if ($view == "career")
1277: #set ($class = "tab-panel active show")
1278: #end
1279:
1280: <div class="tab-pane fade ${class}" id="career" role="tabpanel" aria-labelledby="career-tab">
1281: #if ($briefsCategoriesLabels)
1282: #printCategories($briefsCategoriesLabels "career" "Career Stats")
1283: #else
1284: <div class="stats-wrap $classTabPaneContent">#careerData($activePos)</div>
1285: #end
1286: </div>
1287: #end
1288:
1289: ## SPLITS
1290: #set ($class = "tab-panel clearfix")
1291: #if ($view == "splits")
1292: #set ($class = "tab-panel active show")
1293: #end
1294:
1295: #set ($activePos = $statPos)
1296: #if ($view == "splits" && $paramPos.length() > 0)
1297: #if ($positions.get($paramPos).length() > 0)
1298: #set ($activePos = $positions.get($paramPos))
1299: #end
1300: #end
1301:
1302: <div class="tab-pane fade ${class}" id="splits" role="tabpanel" aria-labelledby="splits-tab">
1303: #if ($briefsCategoriesLabels)
1304: #printCategories($briefsCategoriesLabels "splits" "Splits Stats")
1305: #else
1306: <div class="stats-wrap $classTabPaneContent">#splitsData($pos)</div>
1307: #end
1308: </div>
1309: #end
1310:
1311: ## HTML STATS
1312: #if ($hasHTMLStats)
1313: #set ($class = "tab-panel clearfix")
1314: #if ($view == "htmlstats")
1315: #set ($class = "tab-panel active show")
1316: #end
1317: <div class="tab-pane fade ${class}" id="htmlstats" role="tabpanel" aria-labelledby="htmlstats-tab">
1318: <div class="$classTabPaneContent">
1319: <h5 class="bio-tabbed-content-heading">Other Stats</h5>
1320: <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
1321: </div>
1322: </div>
1323: #end
1324:
1325: ## NEWS
1326: #if ($releases.size() > 0)
1327: #set ($class = "tab-panel clearfix")
1328: #if ($view == "news")
1329: #set ($class = "tab-panel active show")
1330: #end
1331: <div class="tab-pane fade ${class}" id="news" role="tabpanel" aria-labelledby="news-tab">
1332: <div class="$classTabPaneContent">
1333: <h5 class="bio-tabbed-content-heading">News mentions</h5>
1334: #printReleases($releases, "article")
1335: </div>
1336: </div>
1337: #end
1338:
1339: ## PHOTOS
1340: #if ($playerPhotos.size() > 0)
1341: #set ($class = "tab-panel clearfix")
1342: #if ($view == "photos")
1343: #set ($class = "tab-panel active show clearfix")
1344: #end
1345: <div class="tab-pane fade ${class}" id="photos" role="tabpanel" aria-labelledby="photos-tab">
1346: <div class="$classTabPaneContent">
1347: <h5 class="bio-tabbed-content-heading">Photos</h5>
1348: $website.includeAgain("${page.url}?tmpl=bio-photos-template")
1349: </div>
1350: </div>
1351: #end
1352:
1353: ## VIDEOS
1354: #if ($playerVideos.size() > 0)
1355: #set ($class = "tab-panel clearfix")
1356: #if ($view == "videos")
1357: #set ($class = "tab-panel active show clearfix")
1358: #end
1359: <div class="tab-pane fade ${class}" id="videos" role="tabpanel" aria-labelledby="videos-tab">
1360: <div class="$classTabPaneContent">
1361: <h5 class="bio-tabbed-content-heading">Videos</h5>
1362: #printReleases($playerVideos, "video")
1363: </div>
1364: </div>
1365: #end
1366:
1367: ## WEPLAYED MOMENTS - THIRD-PARTY SUPPORT PLUGIN
1368: #if (!$page.url.contains("/coaches") && $options.get("weplayed_addon_code"))
1369: #set ($class = "tab-panel clearfix")
1370: #if ($view == "weplayed")
1371: #set ($class = "tab-panel active show clearfix")
1372: #end
1373: <div class="tab-pane fade ${class} weplayed-hide-no-data" id="weplayed-tab" role="tabpanel" aria-labelledby="weplayed-tab">
1374: <div class="$classTabPaneContent">
1375: <div data-weplayed-widget></div>
1376: </div>
1377: </div>
1378: #end
1379:
1380: </div> ## tab-panels
1381: </div> ## tab-container
1382: </div>
1383: </div> ## body
1384: #end
1385: </div>
1386: </div>
1387:
1388: $wiki
1389: </div> ## ends bio-wrap
1390:
1391: ## GLOBAL ADS SERVER
1392: #if ($website.ads.isAdvertisingEnabled('BIOS'))
1393: $website.includeAgain("global-adserver-slots?adSlot=bios")
1394: #end
1395:
|