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