Page source: |
1: ## https://prestosports.jira.com/browse/FED-11158
2:
3: <script src="${website.cdn("/info/klass.min.js")}"></script>
4:
5: ## PICK UP OPTIONS
6: $website.include("options")
7: #set ($options = $request.getAttribute("options"))
8: #set ($locale = "en_us")
9: #set ($locale = $options.get("locale"))
10:
11: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE
12: #set ($bioObject = $page.getDataAsObject())
13: #set ($statsURL = $bioObject.statsURL)
14:
15: #if ($statsURL.length() > 0)
16: $website.includeAgain("${statsURL}?tmpl=bio-stats-template")
17: ## various settings to get the variables set
18: #set ($events = $request.getAttribute("bio_events"))
19: #set ($seasons = $request.getAttribute("bio_seasons"))
20: #set ($career = $request.getAttribute("bio_career"))
21: #set ($labels = $request.getAttribute("bio_labels"))
22: #set ($briefs = $request.getAttribute("bio_briefs"))
23: #set ($gamelogs = $request.getAttribute("bio_gamelogs"))
24: #set ($splits = $request.getAttribute("bio_splits"))
25: #set ($statPosition = $request.getAttribute("bio_position"))
26: #set ($positions = $request.getAttribute("bio_positions"))
27: #set ($playerId = $request.getAttribute("bio_player_id"))
28: #set ($highlights = $request.getAttribute("bio_highlights"))
29: #set ($formats = $request.getAttribute("bio_formats"))
30: #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels"))
31: #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels"))
32: #set ($gamesResults = $request.getAttribute("bio_games_results"))
33: #set ($monthsPlayed = $request.getAttribute("bio_months_played"))
34: #end
35:
36: #set ($pos = "")
37: #set ($pos = $attributes.get("position"))
38: #set ($pos = $statPosition)
39: #set ($posVec = $pos.split("/"))
40: #set ($pos = $posVec[0])
41: #set ($pos = $pos.toLowerCase())
42: #set ($statPos = $positions.get($pos))
43: #set ($paramPos = $request.getParameter("pos"))
44:
45: #set ($playerId = $attributes.get("playerId"))
46: #set ($stats = $splits.overall)
47: #set ($highlights = $highlights.get($statPos))
48:
49: #set ($showHighlights = true)
50: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false)
51: #set ($showHighlights = false)
52: #end
53:
54: #set ($enhancedLayout = false)
55: #if (($options.get("bio_enhanced_layout") == "yes") || ($request.getParameter("bio_enhanced_layout") == true))
56: #set ($enhancedLayout = true)
57: #end
58:
59: #set ($showActionShots = true)
60: #if ($options.get("bio_show_action_shots") && $options.get("bio_show_action_shots") == false)
61: #set ($showActionShots = false)
62: #end
63:
64: #set ($actionShotsLimit = 5)
65: #set ($actionShotsLimit = $tool.math.toInteger($options.get("bio_action_shots_limit")))
66:
67: #set ($showCareer = $wiki.valid() && $seasons)
68: #if ("yes" == $options.get("stats_show_career") && $seasons)
69: #set ($showCareer = true)
70: #end
71:
72: #set ($hasEvents = $events.size() > 0)
73: #set ($hasSynopsis = $synopsis.trim().length() > 0)
74: #set ($htmlStatsURL = "${page.url}-stats")
75: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
76: #set ($bioBriefURL = "${page.url}-brief")
77: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
78: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1))
79: #if ($options.get("bio_hide_roster") == true)
80: #set ($showRoster = false)
81: #end
82:
83: #set ($view = "")
84: #if ($hasSynopsis || $hasBioBrief)
85: #set ($view = "bio")
86: #elseif ($statsURL.length() > 0)
87: #set ($view = "profile")
88: #elseif ($hasHTMLStats)
89: #set ($view = "htmlstats")
90: #elseif ($releases.size() > 0)
91: #set ($view = "news")
92: #elseif ($playerPhotos.size() > 0)
93: #set ($view = "photos")
94: #elseif ($playerVideos.size() > 0)
95: #set ($view = "videos")
96: #end
97:
98: #if ($options.get("bio_default_view").length() > 0)
99: #set ($checkView = $options.get("bio_default_view"))
100: #else
101: ## THIS ESTABLISHES A DEFAULT TAB FOR NEW BOOTSTRAP THEMES
102: #if ($hasSynopsis || $hasBioBrief)
103: #set ($checkView = "bio")
104: #elseif ($statsURL.length() > 0)
105: #set ($checkView = "profile")
106: #elseif ($releases.size() > 0)
107: #set ($checkView = "news")
108: #end
109: #end
110:
111: #if ($request.getParameter("view"))
112: #set ($checkView = $request.getParameter("view"))
113: #end
114:
115: #if ($checkView == "profile" && $statsURL.length() > 0)
116: #set ($view = "profile")
117: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief))
118: #set ($view = "bio")
119: #elseif ($checkView == "gamelog" && $statsURL.length() > 0)
120: #set ($view = "gamelog")
121: #elseif ($checkView == "career" && $showCareer)
122: #set ($view = "career")
123: #elseif ($checkView == "splits" && $statsURL.length() > 0)
124: #set ($view = "splits")
125: #elseif ($checkView == "htmlstats" && $hasHTMLStats)
126: #set ($view = "htmlstats")
127: #elseif ($checkView == "news" && $releases.size() > 0)
128: #set ($view = "news")
129: #elseif ($checkView == "photos" && $playerPhotos.size() > 0)
130: #set ($view = "photos")
131: #elseif ($checkView == "videos" && $playerVideos.size() > 0)
132: #set ($view = "videos")
133: #end
134:
135: #macro (printResultAriaLabel $event)
136: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
137: #if ($event.neutralSite.length() > 0 || $event.home)
138: #set ($ariaLabel = "${ariaLabel} vs.")
139: #else
140: #set ($ariaLabel = "${ariaLabel} at")
141: #end
142: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
143: #if ($event.neutralSite.length() > 0)
144: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
145: #end
146: #set ($ariaLabel = "${ariaLabel} Box Score")
147: aria-label="$ariaLabel"
148: #end
149:
150: #macro (printGrid $items $type)
151: <div class="bio-news-mentions">
152: <div class="card-columns">
153: #foreach ($item in $items)
154: #if ($item.title.length() > 0)
155: <div class="card ${type}">
156: <a href="$item.url">
157: #if ($item.thumbnailURL)
158: <img src="${item.thumbnailURL}?max_width=510" alt="$item.thumbnailAlt" class="card-img-top img-fluid" />
159: #elseif ($item.contentType == "loki/youtube")
160: <img src="http://img.youtube.com/vi/${item.dataAsString}/mqdefault.jpg" alt="$item.thumbnailAlt" class="card-img-top img-fluid" />
161: #else
162: #if ($website.exists("/images/setup/default-article-thumbnail.png"))
163: <img src="/images/setup/default-article-thumbnail.png?max_width=510&max_height=287" class="card-img-top img-fluid" alt="$item.thumbnailAlt" />
164: #else
165: <img src="$website.cdn("/info/images/default-article-thumbnail.png?max_width=510&max_height=287")" class="card-img-top img-fluid" alt="$item.thumbnailAlt" />
166: #end
167: #end
168: </a>
169: <div class="card-body">
170: <h5 class="card-title"><a href="$item.url">$item.title</a></h5>
171: #if ($item.leadIn.length() > 0)
172: <p class="card-text">$formatter.limitLen(146, $item.leadIn)</p>
173: #end
174: #if ($item.date)
175: <p class="card-text"><small class="text-muted">$formatter.formatLongDate($item.date)</small></p>
176: #end
177: </div>
178: </div>
179: #end
180: #end ## foreach
181: </div>
182: </div>
183: #end ## ends macro
184:
185: #macro (gamelogData $p)
186:
187: #set ($p = $positions.get($p))
188: #set ($gamelogs = $gamelogs.get($p))
189:
190: #if ($hasEvents)
191: <div class="stats-box full clearfix">
192: <div class="table-responsive">
193: <table class="table table-hover table-sm">
194: <thead class="thead-dark">
195: <tr>
196: <th scope="col">Date</th>
197: <th scope="col" class="pinned-col">Opponent</th>
198: <th scope="col">Score</th>
199: #foreach ($gamelog in $gamelogs)
200: <th scope="col">$gamelog</th>
201: #end
202: </tr>
203: </thead>
204: <tbody>
205: #foreach ($event in $events)
206: <tr>
207: <td scope="row">$formatter.formatDate($event.event.date, "MMM d")</td>
208: <td class="pinned-col">
209: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
210: $event.event.opponent.name
211: </td>
212: <td>
213: #if ($event.event.statusCode >= 0)
214: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
215: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
216: #else
217: ${event.event.APResult}
218: #end
219: #else #end
220: </td>
221: #foreach ($gamelog in $gamelogs.keySet())
222: #set ($value = "-")
223: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
224: <td>$value</td>
225: #end
226: </tr>
227: #end
228: </tbody>
229: </table>
230: </div> ## table-responsive
231: </div> ## stats-box
232: #end
233:
234: #end ## macro gamelogData
235:
236: #macro (splitWithLabels $statPosBriefs $label $stats $rowSpan $rowSpanLabel)
237: <tr>
238: #if ($tool.math.toInteger($rowSpan) > 0)
239: <th rowspan="$rowSpan" scope="rowgroup">$rowSpanLabel</th>
240: #end
241: <th scope="row" class="pinned-col">${label}</th>
242: #foreach ($brief in $statPosBriefs.keySet())
243: #set ($value = "-")
244: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
245: <td>#if ($value.length() > 0) $value #else - #end</td>
246: #end
247: </tr>
248: #end
249:
250: #macro (careerData $p)
251: #set ($p = $positions.get($p))
252: #set ($statPosBriefs = $briefs.get($p))
253:
254: <div class="stats-box full clearfix">
255: <div class="table-responsive">
256: <table class="table table-hover table-sm">
257: <thead class="thead-dark">
258: <tr>
259: <th scope="col" class="pinned-col"> </th>
260: #foreach ($brief in $statPosBriefs)
261: <th scope="col">$brief</th>
262: #end
263: </tr>
264: </thead>
265: <tbody>
266: #set ($careerTotals = $request.getAttribute("careerTotals"))
267: #set ($careerMap = $request.getAttribute("careerMap"))
268: #foreach ($season in $seasons)
269: ## Check if we did not get stats for this season
270: #if ($careerMap.get($season.seasonName))
271: #set ($label = "<a href='${season.path}?view=profile'>$season.seasonName</a>")
272: #splitWithLabels($statPosBriefs, $label, $careerMap[$season.seasonName], "", "")
273: #elseif ($wiki.valid())
274: <tr>
275: <td scope="row" class="text">${season.seasonName}</td>
276: <td colspan="${statPosBriefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
277: </tr>
278: #end
279: #end
280: #splitWithLabels($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall, "", "")
281: </tbody>
282: </table>
283: </div> ## table-responsive
284: </div> ## stats-box
285:
286: #end ## macro careerData
287:
288: #macro (splitsData $p)
289:
290: #set ($p = $positions.get($p))
291: #set ($statPosBriefs = $briefs.get($p))
292: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1))
293:
294: #if ($statPosBriefs.size() > 0)
295: <div class="stats-box full clearfix">
296: <div class="table-responsive">
297: <table class="table table-hover table-sm">
298: <thead class="thead-dark">
299: <tr>
300: <th scope="col" class="pinned-col"> </th>
301: <th scope="col" class="pinned-col"> </th>
302: #foreach ($brief in $statPosBriefs)
303: <th scope="col">$brief</th>
304: #end
305: </tr>
306: </thead>
307:
308: <tbody>
309: #splitWithLabels($statPosBriefs, "Total", $splits.overall, "3", "Event")
310: #splitWithLabels($statPosBriefs, "Conference", $splits.conference, "", "")
311: #splitWithLabels($statPosBriefs, "Exhibition", $splits.exhibition, "", "")
312: </tbody>
313:
314: <tbody>
315: #splitWithLabels($statPosBriefs, "Home", $splits.home, "3", "Location")
316: #splitWithLabels($statPosBriefs, "Away", $splits.away, "", "")
317: #splitWithLabels($statPosBriefs, "Neutral", $splits.neutral, "", "")
318: </tbody>
319:
320: <tbody>
321: #set ($rowSpan = $gamesResults.entrySet().size())
322: #set ($rowSpanLabel = "Result")
323:
324: #foreach($gameResult in $gamesResults.entrySet())
325: #if ($gameResult.key == "wins")
326: #set ($splitGameResult = $splits.inWins)
327: #elseif ($gameResult.key == "losses")
328: #set ($splitGameResult = $splits.inLosses)
329: #elseif ($gameResult.key == "ties")
330: #set ($splitGameResult = $splits.inTies)
331: #end
332:
333: #splitWithLabels($statPosBriefs, $gameResult.value, $splitGameResult, $rowSpan, $rowSpanLabel)
334:
335: #set ($rowSpan = "")
336: #end
337: </tbody>
338:
339: #if ($monthsPlayed and $monthsPlayed.size() > 0)
340: <tbody>
341: #set ($rowSpan = $monthsPlayed.size())
342: #set ($rowSpanLabel = "Month")
343:
344: #foreach($month in $monthsPlayed)
345: #if ($month == 'January')
346: #set ($splitMonth = $splits.january)
347: #elseif ($month == 'February')
348: #set ($splitMonth = $splits.february)
349: #elseif ($month == 'March')
350: #set($splitMonth = $splits.march)
351: #elseif ($month == 'April')
352: #set($splitMonth = $splits.april)
353: #elseif ($month == 'May')
354: #set ($splitMonth = $splits.may)
355: #elseif ($month == 'June')
356: #set ($splitMonth = $splits.june)
357: #elseif ($month == 'July')
358: #set($splitMonth = $splits.july)
359: #elseif ($month == 'August')
360: #set ($splitMonth = $splits.august)
361: #elseif ($month == 'September')
362: #set($splitMonth = $splits.september)
363: #elseif ($month == 'October')
364: #set($splitMonth = $splits.october)
365: #elseif ($month == 'November')
366: #set ($splitMonth = $splits.november)
367: #elseif ($month == 'December')
368: #set($splitMonth = $splits.december)
369: #end
370:
371: #splitWithLabels($statPosBriefs, $month, $splitMonth, $rowSpan, $rowSpanLabel)
372:
373: #set ($rowSpan = "")
374:
375: #end ## foreach
376: </tbody>
377: #end
378: </table>
379: </div> ## table-responsive
380: </div> ## stats-box
381: #end
382:
383: #end ## macro splitsData
384:
385: #macro (printRecentGames)
386: #if ($hasEvents)
387: <div class="table-responsive">
388: <table class="table table-hover table-sm">
389: <thead class="thead-dark">
390: <tr><th colspan="3" scope="col">Recent Games</th></tr>
391: </thead>
392: <tbody>
393: #set ($eventEnd = -1)
394: #foreach ($event in $events)
395: #if ($event.event.result.resolved)
396: #set ($eventEnd = $velocityCount)
397: #end
398: #end
399:
400: #set ($eventStart = $eventEnd - 5)
401: #if ($eventStart < 0) #set ($eventStart = 0) #end
402:
403: #foreach ($event in $events)
404: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
405: <tr>
406: <td scope="row">$formatter.formatDate($event.event.date, "MMM d")</td>
407: <td>
408: #if ($event.event.neutralSite.length() > 0) vs.
409: #elseif (!$event.event.home) at
410: #else ## nothing for a home game
411: #end
412: $event.event.opponent.name
413: </td>
414: <td>
415: #if ($event.event.statusCode >= 0)
416: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
417: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
418: #else
419: ${event.event.APResult}
420: #end
421: #end
422: </td>
423: </tr>
424: #end ## if
425: #end
426: </tbody>
427: </table>
428: </div>
429: #end
430: #end ## macro printRecentGames
431:
432: #macro (printCategories $briefCategoryLabels $v $ariaLabel)
433: <div class="$classTabPaneContent has-child-tabs">
434: <div class="$classBioTabChildrenWrapper" data-momentum="false">
435: <div class="jscroll-inner">
436: <ul class="$classBioTabChildren" id="bio-tabs-$v" role="tablist">
437: #foreach($briefCat in $briefCategoryLabels.entrySet())
438: #set ($briefCatLabel = $briefCat.value)
439: #set ($briefCatKey = $briefCat.key)
440: #if ($locale == "en_gb" && $briefCatLabel == "Defense")
441: #set ($briefCatLabel = "Defence")
442: #end
443: <li class="nav-item">
444: <a data-toggle="tab" id="${v}-tab-pos-${briefCatKey}" class="nav-link#if ($activePos == $briefCatKey) active#end" data-target="#${v}-tab-pos-${briefCatKey}-content" href="${page.url}?view=${v}&pos=${briefCatKey}" aria-label="${ariaLabel}: ${briefCatLabel}">${briefCatLabel}</a>
445: </li>
446: #end
447: </ul>
448: </div>
449: </div>
450: <div class="tab-content" id="${v}-tab-content">
451: #foreach ($briefCat in $briefCategoryLabels.entrySet())
452: #set ($briefCatLabel = $briefCat.value)
453: #set ($briefCatKey = $briefCat.key)
454: #set ($class = "tab-panel")
455: #if ($briefCat.key == $activePos)
456: #set ($class = "tab-panel active show")
457: #end
458: <div class="tab-pane fade ${class}" id="${v}-tab-pos-${briefCatKey}-content" role="tabpanel" aria-labelledby="${v}-tab-pos-${briefCatKey}">
459: <div class="stats-wrap $classTabPaneContent">
460: <h4 class="bio-tabbed-content-heading">$ariaLabel - <small class="text-muted"> $briefCatLabel</small></h4>
461: #if ($v == "splits")
462: #splitsData($briefCat.key)
463: #elseif ($v == "career")
464: #careerData($briefCat.key)
465: #end
466: </div>
467: </div>
468: #end
469: </div>
470: </div>
471: #end ## macro printCategories
472:
473: #macro (printHeadshot)
474: #if ($enhancedLayout)
475: #set ($classPlayerPhoto = "img-fluid img-thumbnail")
476: #else
477: #set ($classPlayerPhoto = "img-fluid")
478: #end
479:
480: #if ($headshot.url)
481: #set ($src = $headshot.url)
482: #elseif ($website.exists("/images/setup/default-headshot.png"))
483: #set ($src = "/images/setup/default-headshot.png")
484: #elseif ($website.exists("/images/setup/headshot_default.jpg"))
485: #set ($src = "/images/setup/headshot_default.jpg")
486: #else
487: #set ($src = "/info/images/default-headshot.png")
488: #end
489:
490: #if ($src.trim().length() > 0)
491: <img src="$src?max_width=510&max_height=600" class="$classPlayerPhoto" alt="$fullName" />
492: #end
493: #end ## macro printHeadshot
494:
495: #macro (printBioInfo)
496: #if ($enhancedLayout)
497: #set ($classListItems = "col-md-6 px-2")
498: #set ($definitionListItems = "d-flex border-bottom m-0 p-2")
499: #else
500: #set ($classListItems = "col-md-12 px-2")
501: #set ($definitionListItems = "d-flex flex-column border-bottom m-0 p-2")
502: #end
503:
504: #if ($enhancedLayout)
505: <div class="player-heading h3 bg-primary d-flex align-content-stretch text-white position-relative z-index-1">
506: #if ($!attributes.get("number").length() > 0)<span class="number bg-secondary inline-block text-white p-3">$!attributes.get("number")</span>#end
507: <span class="name inline-block p-3">$fullName</span>
508: </div>
509: #end
510:
511: <div class="roster-player-fields">
512: <ul class="d-flex flex-row flex-wrap justify-content-between list-unstyled">
513: #foreach ($i in [1..10])
514: #set ($stickyKey = "bio_custom${i}_sticky")
515: #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
516: <li class="$classListItems bio-field-custom-sticky">
517: <dl class="${definitionListItems}">
518: <dt class="label p-0 mr-2">$options.get($stickyKey): </dt>
519: <dd class="value p-0 m-0">$!attributes.get("custom${i}")</dd>
520: </dl>
521: </li>
522: #end
523: #end
524:
525: #foreach ($field in $fields)
526: #if (!$field.key.startsWith("custom"))
527: #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
528: #if ($field.key == "phone1" || $field.key == "phone2")
529: <li class="$classListItems bio-field-standard">
530: <dl class="${definitionListItems}">
531: <dt class="label p-0 mr-2">Phone: </dt>
532: <dd class="value p-0 m-0">$!attributes.get($field.key)</dd>
533: </dl>
534: </li>
535: #elseif ($field.key == "email_address")
536: <li class="$classListItems bio-field-standard">
537: <dl class="${definitionListItems}">
538: #set ($emailAdd = $attributes.get($field.key))
539: <dt class="label p-0 mr-2">Email: </dt>
540: <dd class="value p-0 m-0 text-truncate"><a href="mailto:${emailAdd}">$emailAdd</a></dd>
541: </dl>
542: </li>
543: #elseif ($field.key == "weight_class")
544: <li class="$classListItems bio-field-standard">
545: <dl class="${definitionListItems}">
546: <dt class="label p-0 mr-2">Class: </dt>
547: <dd class="value p-0 m-0">$!attributes.get($field.key)</dd>
548: </dl>
549: </li>
550: #elseif ($field.key != "position_abbr")
551: <li class="$classListItems bio-field-standard">
552: <dl class="${definitionListItems}">
553: <dt class="label p-0 mr-2">$field.value: </dt>
554: <dd class="value p-0 m-0">$!attributes.get($field.key)</dd>
555: </dl>
556: </li>
557: #end
558: #end
559: #end
560: #end
561:
562: #foreach ($i in [1..10])
563: #set ($customKey = "bio_custom${i}")
564: #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
565: <li class="$classListItems bio-field-custom">
566: <dl class="${definitionListItems}">
567: <dt class="label p-0 mr-2">$options.get($customKey): </dt>
568: <dd class="value p-0 m-0">$!attributes.get("custom${i}")</dd>
569: </dl>
570: </li>
571: #end
572: #end
573: </ul>
574: </div>
575: #end ## macro printBioInfo
576:
577: #macro (printActionShots)
578: #if ($showActionShots)
579: ## FILTERS OUT THE NUMBER OF ACTION PHOTOS
580: #set ($totalPhotoAvaiable = $playerPhotos.size())
581: #set ($playerPhotosFiltered = $playerPhotos)
582: #if ($actionShotsLimit < $totalPhotoAvaiable)
583: #set ($playerPhotosFiltered = $playerPhotos.subList(0, $actionShotsLimit))
584: #end
585: #set ($playerPhotosFiltered = $tool.sorter.sort($playerPhotosFiltered, "lastUpdated:desc"))
586: <div class="action-shots clearfix mb-md-n5 d-none d-sm-none d-md-block">
587: <div id="action-shots-carousel" class="carousel slide carousel-fade" data-interval="12000" data-ride="carousel">
588: <ol class="carousel-indicators pb-sm-3 mb-sm-5">
589: #foreach($photo in $playerPhotosFiltered)
590: <li data-target="#action-shots-carousel" data-slide-to="$foreach.index" class="#if ($foreach.index == 0)active#end"></li>
591: #end
592: </ol>
593: <div class="carousel-inner">
594: #foreach($photo in $playerPhotosFiltered)
595: #set ($imgAlt = "Large featured action photo of $fullName - Image $foreach.count")
596: #if ($photo.altText.length() > 0)
597: #set ($imgAlt = $photo.altText)
598: #elseif( $photo.title.length() > 0 )
599: #set ($imgAlt = $photo.title)
600: #end
601: <div class="carousel-item#if ($foreach.index == 0) active#end">
602: <img src="${photo.url}?max_width=1200" alt="$imgAlt" class="d-block w-100" data-lastupdated="$photo.lastUpdated" />
603: </div>
604: #end
605: </div>
606: </div>
607: </div>
608: #end
609: #end ## macro printActionShots
610:
611: #macro (printHighlights)
612: #if ($highlights && $showHighlights)
613: <div class="roster-bio-highlights mt-3 bg-white text-dark">
614: <ul class="d-flex flex-row flex-wrap justify-content-between list-unstyled m-0">
615: #foreach ($highlight in $highlights.keySet())
616: #set ($value = "-")
617: #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
618: <li class="flex-fill px-2 text-center border border-white bg-primary text-white">
619: <dl class="stat d-block m-0 p-2">
620: <dt class="d-block label p-0 m-0 text-uppercase">$!highlights.get($highlight)</dt>
621: <dd class="d-block value p-0 m-0">$value</dd>
622: </dl>
623: </li>
624: #end
625: </ul>
626: </div>
627: #end
628: #end ## macro printHighlights
629:
630: #macro (printRoster)
631: #if ($enhancedLayout)
632: $website.includeAgain("${page.url}?tmpl=roster-switcher-template&id=roster-list")
633: #else
634: #set ($id = "roster-switcher")
635: #if ($request.getParameter("id").length() > 0)
636: #set ($id = $request.getParameter("id"))
637: #end
638:
639: #if ($page.contentType == "loki/bio")
640: #set ($headlinesFeaturedSize = 0)
641: #foreach ($featuredPage in $page.headlinesFeatured)
642: #if ($featuredPage.contentType == "loki/headlines")
643: #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
644: #end
645: #end
646: #if ($headlinesFeaturedSize > 0)
647: <div id="$id" class="float-sm-right roster-switcher-template">
648: <div class="input-group mb-3">
649: <div class="input-group-prepend">
650: <label class="input-group-text" for="$id-options">Related Bios</label>
651: </div>
652: <select class="custom-select" id="$id-options" onchange="location=this.value;">
653: #foreach ($featuredPage in $page.headlinesFeatured)
654: #if ($featuredPage.contentType == "loki/headlines")
655: $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template¤t_url=${page.url}")
656: #end
657: #end
658: </select>
659: </div>
660: </div>
661: #end
662: #elseif ($page.contentType == "loki/bio-network")
663: #set ($relatedPlayers = $page.sectionPage.children)
664: #set ($teamNames = {})
665: #foreach ($relatedPlayer in $relatedPlayers)
666: #if ($relatedPlayer.contentType == "loki/bio-network")
667: #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
668: #set ($teamName = $relatedPlayerObj.get("team"))
669: #if ($teamName.length() > 0)
670: #if (!$teamNames.containsValue($teamName))
671: $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
672: #end
673: #end
674: #end
675: #end
676: <div id="$id" class="float-sm-right roster-switcher-template">
677: <div class="input-group mb-3">
678: <div class="input-group-prepend">
679: <label class="input-group-text" for="$id-options">Related Bios</label>
680: </div>
681: <select class="custom-select" id="$id-options" onchange="location=this.value;">
682: #foreach ($i in [1..$teamNames.size()])
683: #if ($teamNames.size() > 1)
684: <optgroup label="$teamNames.get($i)">
685: #end
686:
687: #foreach ($relatedPlayer in $relatedPlayers)
688: #if ($relatedPlayer.contentType == "loki/bio-network")
689: #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
690: #set ($teamName = $relatedPlayerObj.get("team"))
691: #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
692: #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
693: #set ($playerLastName = $relatedPlayerObj.get("last_name"))
694: <option value="$relatedPlayer.url" #if ($page.url == $relatedPlayer.url)selected#end>${playerFirstName} ${playerLastName}</option>
695: #end
696: #end
697: #end
698:
699: #if ($teamNames.size() > 1)
700: </optgroup>
701: #end
702: #end
703: </select>
704: </div>
705: </div>
706: #end
707: #end ## enhancedLayout check
708: #end ## macro printRoster
709:
710: ################################################## END MACROS #############################################################
711:
712: #if ($attributes.get("full_name").length() > 0)
713: #set ($fullName = $attributes.get("full_name"))
714: #else
715: #set ($firstName = $!attributes.get("first_name"))
716: #set ($lastName = $!attributes.get("last_name"))
717: #set ($fullName = "${firstName} ${lastName}")
718: #end
719:
720: #set ($pageTitle = "")
721: #if($request.getAttribute("pageTitle").length() > 0)
722: #set ($pageTitle = $request.getAttribute("pageTitle"))
723: #end
724: #if ($page.title.length() > 0)
725: #set ($pageTitle = $!page.title)
726: #end
727: $!request.setAttribute("pageTitle", "${pageTitle}")
728:
729: #set ($actionShots = false)
730: #if ($enhancedLayout && $playerPhotos.size() > 0)
731: #set ($actionShots = true)
732: #end
733:
734: #if ($enhancedLayout)
735: #set ($classRoot = "bio-enhanced")
736: #if ($actionShots && $showActionShots)
737: #set ($classRoot = "${classRoot} action")
738: #else
739: #set ($classRoot = "${classRoot} plain")
740: #end
741: #set ($classCard = "mb-5 bg-light p-3 col-sm-12 pt-md-0")
742: #set ($classBody = "col-sm-12")
743: #set ($classBioTabParentsWrapper = "nav-tabs-wrapper position-relative py-3 border-top border-bottom")
744: #set ($classBioTabParents = "nav nav-pills nav-tabs-responsive d-flex flex-row text-nowrap justify-content-center")
745: #set ($classBioTabChildrenWrapper = "nav-tabs-wrapper position-relative py-3 border-bottom")
746: #set ($classBioTabChildren = "nav nav-pills nav-tabs-responsive d-flex flex-row text-nowrap justify-content-center")
747: #set ($classTabPaneContent = "tab-pane-contents py-3")
748: #else
749: #set ($classRoot = "bio-wrap")
750: #set ($classCard = "mb-5 p-3 col-lg-4 col-xl-3 bg-light")
751: #set ($classBody = "col-lg-8 col-xl-9")
752: #set ($classBioTabParentsWrapper = "nav-tabs-wrapper position-relative")
753: #set ($classBioTabParents = "nav nav-tabs nav-tabs-responsive d-flex flex-row text-center justify-content-start")
754: #set ($classBioTabChildrenWrapper = "nav-tabs-wrapper position-relative")
755: #set ($classBioTabChildren = "nav nav-tabs nav-tabs-responsive d-flex flex-row text-center justify-content-start")
756: #set ($classTabPaneContent = "tab-pane-contents p-3")
757:
758: #end
759:
760: ## FULL ROSTER
761: <div class="${classRoot} #if ($highlights) bio-wrap-has-highlights #end clearfix">
762:
763: ## RELATED BIOS
764: #if ($showRoster)
765: <div class="related-bios clearfix">#printRoster</div>
766: #end
767:
768: #if ($actionShots)
769: #printActionShots
770: #end
771: #if ($enhancedLayout)
772: #else
773: <div class="player-heading h3 d-flex align-content-stretch position-relative z-index-1 mb-3 bg-primary text-white border">
774: #if ($!attributes.get("number").length() > 0)<span class="number bg-secondary inline-block text-white p-3">$!attributes.get("number")</span>#end
775: <span class="name inline-block p-3">$fullName</span>
776: </div>
777: #end
778:
779: <div class="container">
780: <div class="row">
781: <div class="bio-card ${classCard}">
782: <div class="player-about clearfix">
783: #if ($enhancedLayout)
784: <div class="row no-gutters">
785: <div class="col-md-4 col-lg-3">
786: <div class="player-headshot text-center position-relative z-index-1 mt-md-n5">#printHeadshot</div>
787: </div>
788: <div class="col-md-8 col-lg-9">
789: <div class="player-info">#printBioInfo</div>
790: </div>
791: </div>
792: #else
793: <div class="row">
794: <div class="col-md-4 col-lg-12">
795: <div class="player-headshot text-center position-relative z-index-1 mb-3">#printHeadshot</div>
796: </div>
797: <div class="col-md-8 col-lg-12">
798: <div class="player-info mb-3">#printBioInfo</div>
799: </div>
800: </div>
801: #end
802: </div>
803: #printHighlights
804: </div> ## bio-card
805:
806: #if ($view.length() > 0)
807: $request.setAttribute("icl-responsive-tabs-script", true)
808:
809: <div class="bio-body ${classBody}">
810: <div class="tab-container">
811: #if ($statsURL.length() > 0 || $hasHTMLStats || $releases.size() > 0|| $playerPhotos.size() > 0 || $playerVideos.size() > 0)
812: <div class="$classBioTabParentsWrapper" data-momentum="false">
813: <div class="jscroll-inner">
814: <ul class="$classBioTabParents" id="bio-tabs-parents" role="tablist">
815: #if ($hasSynopsis || $hasBioBrief)
816: <li class="nav-item">
817: <a data-toggle="tab" id="bio-tab" class="nav-link #if ($view == "bio") active#end" data-target="#bio" href="${page.url}?view=bio">Bio</a>
818: </li>
819: #end
820:
821: #if ($statsURL.length() > 0)
822: <li class="nav-item">
823: <a data-toggle="tab" id="profile-tab" class="nav-link#if ($view == "profile") active#end" data-target="#profile" href="${page.url}?view=profile">Player Profile</a>
824: </li>
825: <li class="nav-item">
826: <a data-toggle="tab" id="gamelog-tab" class="nav-link#if ($view == "gamelog") active#end" data-target="#gamelog" href="${page.url}?view=gamelog">Game Log</a>
827: </li>
828: #if ($showCareer)
829: <li class="nav-item">
830: <a data-toggle="tab" id="career-tab" class="nav-link#if ($view == "career") active#end" data-target="#career" href="${page.url}?view=career">Career Stats</a>
831: </li>
832: #end
833: <li class="nav-item">
834: <a data-toggle="tab" id="splits-tab" class="nav-link#if ($view == "splits") active#end" data-target="#splits" href="${page.url}?view=splits">Split Stats</a>
835: </li>
836: #end
837:
838: #if ($hasHTMLStats)
839: <li class="nav-item">
840: <a data-toggle="tab" id="htmlstats-tab" class="nav-link#if ($view == "htmlstats") active#end" data-target="#htmlstats" href="${page.url}?view=htmlstats">HTML Stats</a>
841: </li>
842: #end
843:
844: #if ($releases.size() > 0)
845: <li class="nav-item">
846: <a data-toggle="tab" id="news-tab" class="nav-link#if ($view == "news") active#end" data-target="#news" href="${page.url}?view=news">News</a>
847: </li>
848: #end
849:
850: #if ($playerPhotos.size() > 0)
851: <li class="nav-item">
852: <a data-toggle="tab" id="photos-tab" class="nav-link#if ($view == "photos") active#end" data-target="#photos" href="${page.url}?view=photos">Photos</a>
853: </li>
854: #end
855:
856: #if ($playerVideos.size() > 0)
857: <li class="nav-item">
858: <a data-toggle="tab" id="videos-tab" class="nav-link#if ($view == "videos") active#end" data-target="#videos" href="${page.url}?view=videos">Videos</a>
859: </li>
860: #end
861: </ul>
862: </div>
863: </div>
864: #end
865: <div class="tab-content" id="roster-tab-content">
866: ## BIO
867: #if ($hasSynopsis || $hasBioBrief)
868: #set ($class = "tab-panel")
869: #if ($view == "bio")
870: #set ($class = "tab-panel active show")
871: #end
872:
873: <div class="tab-pane fade ${class}" id="bio" role="tabpanel" aria-labelledby="bio-tab">
874: <div class="$classTabPaneContent synopsis">
875: <h4 class="bio-tabbed-content-heading">Bio</h4>
876: #if ($hasSynopsis)
877: $synopsis
878: #elseif ($hasBioBrief)
879: $website.include("$bioBriefURL")
880: #end
881: </div>
882: </div> ## tab-panel
883: #end
884:
885: ## STATS
886: #if ($statsURL.length() > 0)
887:
888: ## PROFILE
889: #set ($class = "tab-panel")
890: #if ($view == "profile")
891: #set ($class = "tab-panel active show")
892: #end
893:
894: <div class="tab-pane fade ${class}" id="profile" role="tabpanel" aria-labelledby="profile-tab">
895: <div class="$classTabPaneContent stats-wrap">
896: <h4 class="bio-tabbed-content-heading">Player Profile</h4>
897: ## LAST SIX GAMES
898: <div class="row">
899: <div class="stats-box col-12">
900: #printRecentGames()
901: </div>
902:
903: ## RANKING
904: <div class="stats-box col-12">
905: #if ($statPos.length() > 0)
906: $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
907: #end
908: </div>
909: </div>
910: </div> ## stats-wrap
911: </div> ## tab-content
912:
913: ## GAMELOG
914: #set ($class = "tab-panel")
915: #if ($view == "gamelog")
916: #set ($class = "tab-panel active show")
917: #end
918:
919: #set ($activePos = $statPos)
920: #if ($view == "gamelog" && $paramPos.length() > 0)
921: #if ($positions.get($paramPos).length() > 0)
922: #set ($activePos = $positions.get($paramPos))
923: #end
924: #end
925:
926: <div class="tab-pane fade ${class}" id="gamelog" role="tabpanel" aria-labelledby="gamelog-tab">
927: #if ($gamelogsCategoriesLabels)
928: <div class="$classTabPaneContent has-child-tabs">
929: <div class="$classBioTabChildrenWrapper" data-momentum="false">
930: <div class="jscroll-inner">
931: <ul class="$classBioTabChildren" id="bio-tabs-gamelog" role="tablist">
932: #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
933: #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
934: #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
935: #set($gamelogsCatLabelVal = "Defence")
936: #end
937: <li class="nav-item">
938: <a data-toggle="tab" id="gamelog-tab-pos-${gamelogsCatLabel.key}" class="nav-link#if ($activePos == $gamelogsCatLabel.key) active#end" data-target="#gamelog-tab-pos-${gamelogsCatLabel.key}-content" href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}" aria-label="Game Log: ${gamelogsCatLabelVal}">$gamelogsCatLabelVal</a>
939: </li>
940: #end
941: </ul>
942: </div>
943: </div>
944: <div class="tab-content" id="gamelog-tab-content">
945: #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
946: #set ($class = "tab-panel")
947: #if ($gamelogsCatLabel.key == $activePos)
948: #set ($class = "tab-panel active show")
949: #end
950: <div class="tab-pane fade ${class}" id="gamelog-tab-pos-${gamelogsCatLabel.key}-content" role="tabpanel" aria-labelledby="gamelog-tab-pos-${gamelogsCatLabel.key}">
951: <div class="stats-wrap $classTabPaneContent">
952: <h4 class="bio-tabbed-content-heading">Game Log - <small class="text-muted"> $gamelogsCatLabel.value</small></h4></h4>
953: #gamelogData($gamelogsCatLabel.key)
954: </div>
955: </div>
956: #end
957: </div>
958: </div>
959: #else
960: <div class="stats-wrap $classTabPaneContent">#gamelogData($pos)</div>
961: #end
962:
963: </div> ## tab-panel
964:
965: ## CAREER
966: #if ($showCareer)
967:
968: #set ($activePos = $statPos)
969: #if ($view == "career" && $paramPos.length() > 0)
970: #if ($positions.get($paramPos).length() > 0)
971: #set ($activePos = $positions.get($paramPos))
972: #end
973: #end
974:
975: #set ($class = "tab-panel")
976: #if ($view == "career")
977: #set ($class = "tab-panel active show")
978: #end
979:
980: <div class="tab-pane fade ${class}" id="career" role="tabpanel" aria-labelledby="career-tab">
981: #if ($briefsCategoriesLabels)
982: #printCategories($briefsCategoriesLabels "career" "Career Stats")
983: #else
984: <div class="stats-wrap $classTabPaneContent">#careerData($activePos)</div>
985: #end
986: </div>
987: #end
988:
989: ## SPLITS
990: #set ($class = "tab-panel clearfix")
991: #if ($view == "splits")
992: #set ($class = "tab-panel active show")
993: #end
994:
995: #set ($activePos = $statPos)
996: #if ($view == "splits" && $paramPos.length() > 0)
997: #if ($positions.get($paramPos).length() > 0)
998: #set ($activePos = $positions.get($paramPos))
999: #end
1000: #end
1001:
1002: <div class="tab-pane fade ${class}" id="splits" role="tabpanel" aria-labelledby="splits-tab">
1003: #if ($briefsCategoriesLabels)
1004: #printCategories($briefsCategoriesLabels "splits" "Splits Stats")
1005: #else
1006: <div class="stats-wrap $classTabPaneContent">#splitsData($pos)</div>
1007: #end
1008: </div>
1009: #end
1010:
1011: ## HTML STATS
1012: #if ($hasHTMLStats)
1013: #set ($class = "tab-panel clearfix")
1014: #if ($view == "htmlstats")
1015: #set ($class = "tab-panel active show")
1016: #end
1017: <div class="tab-pane fade ${class}" id="htmlstats" role="tabpanel" aria-labelledby="htmlstats-tab">
1018: <div class="$classTabPaneContent">
1019: <h4 class="bio-tabbed-content-heading">Other Stats</h4>
1020: <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
1021: </div>
1022: </div>
1023: #end
1024:
1025: ## NEWS
1026: #if ($releases.size() > 0)
1027: #set ($class = "tab-panel clearfix")
1028: #if ($view == "news")
1029: #set ($class = "tab-panel active show")
1030: #end
1031: <div class="tab-pane fade ${class}" id="news" role="tabpanel" aria-labelledby="news-tab">
1032: <div class="$classTabPaneContent">
1033: <h4 class="bio-tabbed-content-heading">News Mentions</h4>
1034: #printGrid($releases, "article")
1035: </div>
1036: </div>
1037: #end
1038:
1039: ## PHOTOS
1040: #if ($playerPhotos.size() > 0)
1041: #set ($class = "tab-panel clearfix")
1042: #if ($view == "photos")
1043: #set ($class = "tab-panel active clearfix")
1044: #end
1045: <div class="tab-pane fade ${class}" id="photos" role="tabpanel" aria-labelledby="photos-tab">
1046: <div class="$classTabPaneContent">
1047: <h4 class="bio-tabbed-content-heading">Photos</h4>
1048: $website.includeAgain("${page.url}?tmpl=bio-photos-template")
1049: </div>
1050: </div>
1051: #end
1052:
1053: ## VIDEOS
1054: #if ($playerVideos.size() > 0)
1055: #set ($class = "tab-panel clearfix")
1056: #if ($view == "videos")
1057: #set ($class = "tab-panel active clearfix")
1058: #end
1059: <div class="tab-pane fade ${class}" id="videos" role="tabpanel" aria-labelledby="videos-tab">
1060: <div class="$classTabPaneContent">
1061: <h4 class="bio-tabbed-content-heading">Videos</h4>
1062: #printGrid($playerVideos, "video")
1063: </div>
1064: </div>
1065: #end
1066:
1067: </div> ## tab-panels
1068: </div> ## tab-container
1069: </div> ## body
1070: #end
1071: </div>
1072: </div>
1073:
1074: $wiki
1075: </div> ## ends bio-wrap
1076:
1077: ## GLOBAL ADS SERVER
1078: #if ($website.ads.isAdvertisingEnabled('BIOS'))
1079: $website.includeAgain("global-adserver-slots?adSlot=bios")
1080: #end
|