There was a problem with a Velocity script
Page/httpd/prestosports/site-public/WEB-INF/themes/generic-bootstrap/bio-career-template
ErrorInvocation of method 'getOverall' in class com.prestosports.content.sport.stats.StatsSplitter threw exception java.lang.NullPointerException at /httpd/prestosports/site-public/WEB-INF/themes/generic-bootstrap/bio-career-template[line 42, column 24]
Page source:
1: ## PICK UP OPTIONS
2: $website.include("options")
3: #set ($options = $request.getAttribute("options"))
4: 
5: #set ($locale = "en_us")
6: #set ($locale = $options.get("locale"))
7: #set ($showCareer = $wiki.valid() && $seasons)
8: #if ("yes" == $options.get("stats_show_career") && $seasons)
9:     #set ($showCareer = "yes")
10: #end
11: 
12: #if ($locale == "en_us")
13:     #set ($defLabel = "Defense")
14: #elseif ($locale == "en_gb")
15:     #set ($defLabel = "Defence")
16: #end
17: 
18: #set ($pos = "")
19: #if($attributes.get("position_stat"))
20:     #set ($pos = $attributes.get("position_stat"))
21: #else
22:     #set ($pos = $attributes.get("position"))
23:     #set ($pos = $statPosition)
24:     #set ($posVec = $pos.split("/"))
25:     #set ($pos = $posVec[0])
26: #end
27: #set ($pos = $pos.toLowerCase())
28: #set ($pos = $positions.get($pos))
29: 
30: #set ($highlights = $highlights.get($pos))
31: #if ($request.getParameter("pos"))
32:     #set ($pos = $request.getParameter("pos"))
33:     #set ($pos = $pos.toLowerCase())
34:     #set ($pos = $positions.get($pos))
35: #end
36: #set ($labels = $labels.get($pos))
37: #set ($briefs = $briefs.get($pos))
38: #set ($gamelogs = $gamelogs.get($pos))
39: #set ($view = $!request.getParameter("view"))
40: #set ($url = ${page.url})
41: #set ($playerId = $attributes.get("playerId"))
42: #set ($stats = $splits.overall)
43: 
44: ## CAREER STATS WILL PRINT LIKE THIS
45: #macro(splitBioCareer $label $stats $class)
46:     #set ($url = "${page.url}?view=career")
47:     #if ($request.getParameter("pos"))
48:       #set ($escPos = $request.getParameter("pos"))
49:       #set ($escPos = $tool.esc.url($escPos))
50:       #set ($url = "${url}&pos=$escPos")
51:     #end
52:     <tr class="$!{class}">
53:         <td class="pinned-col"><a href="${url}">${label}</a></td>
54:         #foreach ($brief in $briefs.keySet())
55:             #set ($value = "-")
56:             #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
57:             <td align="center">
58:                 #if ($value.length() > 0)$value#else - #end
59:             </td>
60:         #end
61:     </tr>
62: #end
63: 
64: #set ($name = $request.getParameter("name"))
65: $request.getAttribute("careerTotals").addGames($events)
66: $!request.getAttribute("careerMap").put($name, $stats)
67: 
68: #if ($request.getParameter("print") == 'yes')
69:     #splitBioCareer($name, $splits.overall, '')
70: #end

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