There was a problem with a Velocity script
Pagesports/bsb/2016-17/players/bio-network-template
ErrorInvocation of method 'includeAgain' in class com.prestosports.render.ContentEngineInvoker threw exception javax.servlet.ServletException: javax.servlet.ServletException: java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 176,909 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago. at 6zo86i8vyc3m2mdtsports/bsb/2016-17/players/bio-network-template[line 68, column 18]
Page source:
1: ## PICK UP OPTIONS
2: $website.include("options")
3: #set ($options = $request.getAttribute("options"))
4: #set ($locale = "en_us")
5: #set ($locale = $options.get("locale"))
6: 
7: #set ($showconf = true)
8: #if ($options.get("stats_hide_conference") and $options.get("stats_hide_conference").equalsIgnoreCase("hide"))
9:     #set ($showconf = false)
10: #end
11: 
12: #set ($showCareer = $wiki.valid() && $seasons)
13: #if ("yes" == $options.get("stats_show_career") && $seasons)
14:     #set ($showCareer = "yes")
15: #end
16: 
17: #if ($locale == "en_us")
18:     #set ($defLabel = "Defense")
19: #elseif ($locale == "en_gb")
20:     #set ($defLabel = "Defence")
21: #end
22: 
23: #set ($pos = "")
24: #if($attributes.get("position_stat"))
25: 	#set ($pos = $attributes.get("position_stat"))
26: #else
27: 	#set ($pos = $attributes.get("position"))
28: 	#set ($pos = $statPosition)
29: 	#set ($posVec = $pos.split("/"))
30: 	#set ($pos = $posVec[0])
31: #end
32: #set ($pos = $pos.toLowerCase())
33: #set ($statPos = $positions.get($pos))
34: #set ($paramPos = $request.getParameter("pos"))
35: 
36: #set ($highlights = $highlights.get($statPos))
37: 
38: #set ($url = ${page.url})
39: #set ($playerId = $attributes.get("playerId"))
40: #set ($stats = $splits.overall)
41: 
42: #set ($hasEvents = $events.size() > 0)
43: #set ($hasSynopsis = $synopsis.length() > 1 && $synopsis.indexOf("<center>") == -1)
44: #set ($htmlStatsURL = "${page.url}-stats")
45: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
46: #set ($bioBriefURL = "${page.url}-brief")
47: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
48: 
49: $request.setAttribute("careerTotals", $career)
50: ## We track a map of the careers to see if we are missing any seasons
51: #if(!$rosterTransactions)
52:     #set ($careerMap = {})
53:     $request.setAttribute("careerMap", $careerMap)
54:     #foreach ($season in $seasons)
55:         ## We need to include this season stats.
56: 		## we anticipate the player file being within a normal season structure.
57:         #set ($path = "${season.path}?tmpl=bio-career-template&name=${season.seasonName}&pos=${statPos}&print=no")
58: 
59: 		## naiastats.com uses a unique foler structure that needs to be accounted for.
60: 		## seasons have conference folders within NAIA to reduce query response times for massive season data.
61: 		#if($page.url.contains("/conf"))
62: 			#set ($tempPath = $page.sectionPage.sectionPage.sectionPage.sectionPage.sectionPage.url)
63: 		#else
64: 			#set ($tempPath = $page.sectionPage.sectionPage.sectionPage.url)
65: 		#end
66: 		#set ($path = $path.replace("../..", $tempPath))
67: 
68:         $website.includeAgain($path)
69:     #end
70: #end
71: #set ($view = "profile")
72: #if ($request.getParameter("view"))
73:     #set ($view = $request.getParameter("view"))
74: #end
75: 
76: #################################### MACROS ####################################################
77: #macro (printTableHeader $label $class)
78: 	## Hack for now
79: 	#set ($labels = $labels.get($p))
80: 	<th class="text-uppercase $class" data-p="$!{p}" data-bs-toggle="tooltip" data-bs-placement="top" title="$!{labels.get($label)}">$label</th>
81: #end
82: 
83: #macro (printCellClass)
84: 	class="text-nowrap text-center"
85: #end
86: 
87: #macro (printTab $viewParam $label)
88: 	#set ($classAttr = "nav-link text-nowrap")
89: 	#if ($viewParam == $view)
90: 		#set ($classAttr = "${classAttr} active")
91: 	#end
92: 	<li class="nav-item">
93: 		<a href="${page.url}?view=${viewParam}" class="$classAttr" role="tab" data-bs-toggle="tab" data-bs-target="#${viewParam}" aria-selected="true" aria-controls="$viewParam">$label</a>
94: 	</li>
95: #end
96: 
97: #macro (printPaneAttrs $viewParam)
98: 	#set ($classAttr = "tab-pane")
99: 	#if ($viewParam == $view)
100: 		#set ($classAttr = "tab-pane active")
101: 	#else
102: 		#set ($classAttr = "${classAttr} fade")
103: 	#end
104: 
105: 	class="$classAttr" role="tabpanel" id="$viewParam"
106: #end
107: 
108: #macro (printResultAriaLabel $event)
109:     #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
110:     #if ($event.neutralSite.length() > 0 || $event.home)
111:     	#set ($ariaLabel = "${ariaLabel} vs.")
112:     #else
113:     	#set ($ariaLabel = "${ariaLabel} at")
114:     #end
115:     #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
116:     #if ($event.neutralSite.length() > 0)
117:     	#set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
118:     #end
119:     #set ($ariaLabel = "${ariaLabel} Box Score")
120:     aria-label="$ariaLabel"
121: #end
122: 
123: #macro (printHighlights)
124:     #if ($highlights)
125:         <div class="d-flex flex-wrap mb-3 bg-light">
126:         #foreach ($highlight in $highlights.keySet())
127:             #set ($value = "-")
128:             #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
129:             #set ($classAttr = "flex-fill border p-2 text-center")
130:             #if ($velocityCount > 1)
131:                 ## #set ($classAttr = "nav-item border-left")
132:             #end
133:             <div class="$classAttr" style="min-width:100px">
134:                 <div class="text-uppercase">$!highlights.get($highlight)</div>
135:                 <div class="h5 m-0">$!value</div>
136:             </div>
137:         #end
138: 		</div>
139: 	#end
140: #end ## macro printHighlights
141: 
142: #macro (splitBioNetwork $statPosBriefs $label $stats)
143: 	<tr>
144: 		<th class="text-nowrap text-end fw-bold">${label}</th>
145: 		#if($rosterTransactions && $stats.class.simpleName == "JSONObject")
146:             #set($keys =  $stats.names())
147:             #set($array = $keys.toString().replace('"','').split(","))
148:             #foreach ($brief in $statPosBriefs.keySet())
149:                 #set ($value = "-")
150:                 #if($array.contains($brief))
151:                     #set ($value = $!formatter.formatNumber($tool.math.toDouble($stats.get($brief)), $formats.get($brief)))
152:                  #end
153:                 <td>#if ($value.length() > 0) $value #else - #end</td>
154:             #end
155: 		#else
156:             #foreach ($brief in $statPosBriefs.keySet())
157:                 #set ($value = "-")
158:                 #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
159:                 <td #printCellClass>#if ($value.length() > 0) $value #else - #end</td>
160:             #end
161:         #end
162: 	</tr>
163: #end ## marco split
164: 
165: #macro (printCategories $briefCategoryLabels $viewParam)
166: 	#printSubTabs($briefCategoryLabels.entrySet(), $viewParam)
167: 
168: 	<div class="tab-content py-3">
169: 		#foreach ($briefCat in $briefCategoryLabels.entrySet())
170: 			#set ($briefCatLabel = $briefCat.value)
171: 			#set ($class = "tab-pane")
172: 			#if ($briefCat.key == $activePos)
173: 				#set ($class = "tab-pane active")
174: 			#end
175: 			<div id="${viewParam}-${briefCat.key}" class="$class" role="tabpanel">
176: 				<div class="stats-wrap clearfix">
177: 					#if ($viewParam == "splits")
178: 						#splitsBioNetworkData($briefCat.key)
179: 					#elseif ($viewParam == "career")
180: 						#careerData($briefCat.key)
181: 					#end
182: 				</div>
183: 			</div>
184: 		#end
185: 	</div>
186: #end ## macro printCategories
187: 
188: #macro (splitsBioNetworkData $p)
189: 	#set ($p = $positions.get($p))
190: 	#set ($statPosBriefs = $briefs.get($p))
191: 	#set ($colspan = $statPosBriefs.size())
192: 
193: 	<div class="stats-container table-responsive-via-datatables">
194: 		<table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
195: 			<thead class="thead-dark">
196: 				<tr>
197: 					<th>&nbsp;</th>
198: 					#foreach ($brief in $statPosBriefs)
199: 						#printTableHeader($brief, "text-center")
200: 					#end
201: 				</tr>
202: 			</thead>
203: 			#splitBioNetwork($statPosBriefs, "Total", $splits.overall)
204: 			#if ($showconf)
205: 				#splitBioNetwork($statPosBriefs, "Conference", $splits.conference)
206: 			#end
207: 			#splitBioNetwork($statPosBriefs, "Exhibition", $splits.exhibition)
208: 
209: 
210: 			<tr class="group">
211: 				#foreach ( $i in [0..$colspan])
212:                     <td class="text-center">&nbsp;</td>
213: 				#end
214: 			</tr>
215: 
216: 			#splitBioNetwork($statPosBriefs, "Home", $splits.home)
217: 			#splitBioNetwork($statPosBriefs, "Away", $splits.away)
218: 			#splitBioNetwork($statPosBriefs, "Neutral", $splits.neutral)
219: 
220:             <tr class="group">
221: 				#foreach ( $i in [0..$colspan])
222:                     <td class="text-center">&nbsp;</td>
223: 				#end
224: 			</tr>
225: 
226: 			#foreach($gameResult in $gamesResults.entrySet())
227: 				#if ($gameResult.key == "wins")
228: 					#set ($splitGameResult = $splits.inWins)
229: 				#elseif ($gameResult.key == "losses")
230: 					#set ($splitGameResult = $splits.inLosses)
231: 				#elseif ($gameResult.key == "ties")
232: 					#set ($splitGameResult = $splits.inTies)
233: 				#end
234: 
235: 				#splitBioNetwork($statPosBriefs, $gameResult.value, $splitGameResult)
236: 			#end
237: 
238:             <tr class="group">
239: 				#foreach ( $i in [0..$colspan])
240:                     <td class="text-center">&nbsp;</td>
241: 				#end
242: 			</tr>
243: 
244: 			#if ($monthsPlayed and $monthsPlayed.size() > 0)
245: 				#foreach($month in $monthsPlayed)
246: 					#if ($month == 'January')
247: 						#set ($splitMonth = $splits.january)
248: 					#elseif ($month == 'February')
249: 						#set ($splitMonth = $splits.february)
250: 					#elseif ($month == 'March')
251: 						#set($splitMonth = $splits.march)
252: 					#elseif ($month == 'April')
253: 						#set($splitMonth = $splits.april)
254: 					#elseif ($month == 'May')
255: 						#set ($splitMonth = $splits.may)
256: 					#elseif ($month == 'June')
257: 						#set ($splitMonth = $splits.june)
258: 					#elseif ($month == 'July')
259: 						#set($splitMonth = $splits.july)
260: 					#elseif ($month == 'August')
261: 						#set ($splitMonth = $splits.august)
262: 					#elseif ($month == 'September')
263: 						#set($splitMonth = $splits.september)
264: 					#elseif ($month == 'October')
265: 						#set($splitMonth = $splits.october)
266: 					#elseif ($month == 'November')
267: 						#set ($splitMonth = $splits.november)
268: 					#elseif ($month == 'December')
269: 						#set($splitMonth = $splits.december)
270: 					#end
271: 					#splitBioNetwork($statPosBriefs, $month, $splitMonth)
272: 				#end
273: 			#end
274: 		</table>
275: 	</div>
276: #end ## macro splitsBioNetworkData
277: 
278: #macro (printRecentGames)
279: 	<div class="stats-container table-responsive-via-datatables">
280:         <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
281:             <thead class="thead-dark">
282:                 <tr>
283:                     <th class="text-uppercase w-1">Date</th>
284:                     <th class="text-uppercase text-start">Opponent/Event</th>
285:                     <th scope="col" class="text-center text-uppercase">Result</th>
286:                 </tr>
287:             </thead>
288:     		#set ($eventEnd = -1)
289:     		#foreach ($event in $events)
290:     			#if ($event.event.result.resolved)
291:     				#set ($eventEnd = $velocityCount)
292:     			#end
293:     		#end
294: 
295:     		#set ($eventStart = $eventEnd - 5)
296:     		#if ($eventStart < 0) #set ($eventStart = 0) #end
297: 
298:     		#foreach ($event in $events)
299:     			#if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
300:     				<tr>
301:     					<td class="text-nowrap text-start">$formatter.formatDate($event.event.date, "MMM d")</td>
302:     					<td class="text-nowrap text-start">
303:     						#if ($event.event.neutralSite.length() > 0) vs.
304:     						#elseif (!$event.event.home) at
305:     						#end
306:     						$event.event.opponent.name
307:     					</td>
308:     					<td class="text-nowrap text-center">
309:     						#if ($event.event.statusCode >= 0)
310:     							#if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
311:     								<a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
312:     							#else
313:     								${event.event.APResult}
314:     							#end
315:     						#end
316:     					</td>
317:     				</tr>
318:     			#end
319:     		#end
320:     	</table>
321: 	</div>
322: #end ## macro printRecentGames
323: 
324: #macro (gamelogData $p)
325: 	#set ($p = $positions.get($p))
326: 	#set ($gamelogs = $gamelogs.get($p))
327: 	#set ($atLeastOneNotOverall = false)
328: 
329: 	<div class="stats-container table-responsive-via-datatables">
330:         <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
331: 			<thead class="thead-dark">
332: 				<tr>
333: 					#printTableHeader("Date", "w-1")
334: 					#printTableHeader("Opponent", "")
335: 					#printTableHeader("Score", "text-center")
336: 
337: 					#set ($colspan = 3)
338: 					#if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9   soccer:3
339: 							#printTableHeader("Dec", "text-center")
340: 					#end
341: 					#foreach ($gamelog in $gamelogs)
342: 						#printTableHeader($gamelog, "text-center")
343: 					#end
344: 				</tr>
345: 			</thead>
346: 			#foreach ($event in $events)
347: 				<tr>
348: 					<td class="text-nowrap">$formatter.formatDate($event.event.date, "MMM d") #if (!$event.event.overall) #set ($atLeastOneNotOverall = true) # #end</</td>
349: 					<td class="text-nowrap">
350: 						#if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
351: 						$event.event.opponent.name
352: 					</td>
353: 					<td #printCellClass>
354: 						#if ($event.event.statusCode >= 0)
355: 							#if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
356: 								<a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
357: 							#else
358: 								${event.event.APResult}
359: 							#end
360: 						#else &nbsp; #end
361: 					</td>
362: 					#if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9   soccer:3
363: 						<td #printCellClass>
364: 						#if ($event.stats.get('gow') == 1)
365: 							W
366: 						#elseif ($event.stats.get('gol') == 1)
367: 							L
368: 						#elseif ($event.stats.get('got') == 1)
369: 							T<
370: 						#else
371: 							-
372: 						#end
373: 						</td>
374: 					#end
375: 					#foreach ($gamelog in $gamelogs.keySet())
376: 						#set ($value = "-")
377: 						#set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
378: 						<td #printCellClass>$value</td>
379: 					#end
380: 				</tr>
381: 			#end
382: 		</table>
383: 
384: 		#if ($atLeastOneNotOverall)
385: 			<p class="my-3"># Stats don't count towards season totals</p>
386: 		#end
387: 	</div>
388: #end ## macro gamelogData
389: 
390: #macro (careerData $p)
391: 	#set ($p = $positions.get($p))
392: 	#set ($statPosBriefs = $briefs.get($p))
393: 
394: 	<div class="stats-container table-responsive-via-datatables">
395: 		<table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
396:             <thead class="thead-dark">
397:                 <tr>
398:                     <th class="">&nbsp;</th>
399:                     #foreach ($brief in $statPosBriefs)
400:                         #printTableHeader($brief, "text-center")
401:                     #end
402:                 </tr>
403:             </thead>
404:               #if($rosterTransactions)
405:                   #set ($seasonLength = $career.seasons.length())
406:                   #foreach ($index in [0..$tool.math.sub($seasonLength, 1)])
407:                       #set($season = $career.seasons[$index])
408:                       #if($season.seasonStatsURL != "null")
409:                           #set ($label = "<a href='${season.seasonStatsURL}?view=profile'>$season.seasonName.replaceAll('^[^0-9-]*','') - $season.team.teamName</a>")
410:                       #else
411:                           #set ($label = "$season.seasonName.replaceAll('^[^0-9-]*','') - $season.team.teamName")
412:                       #end
413:                       #splitBioNetwork($statPosBriefs, $label, $season.player.stats)
414:                   #end
415:                   #splitBioNetwork($statPosBriefs, "Total", $career.totals)
416: 
417:               #else
418:                 #foreach ($season in $seasons)
419:                     #if ($careerMap.get($season.seasonName))
420: 						## naiastats.com uses a unique foler structure that needs to be accounted for.
421: 						## seasons have conference folders within NAIA to reduce query response times for massive season data.
422: 						#if($page.url.contains("/conf"))
423: 							#set ($tempPath = $page.sectionPage.sectionPage.sectionPage.sectionPage.sectionPage.url)
424: 						#else
425: 							#set ($tempPath = $page.sectionPage.sectionPage.sectionPage.url)
426: 						#end
427: 						#set ($path = $season.path.replace("../..", $tempPath))
428: 
429:                         #set ($label = "<a href='${path}?view=profile'>$season.seasonName</a>")
430:                         #splitBioNetwork($statPosBriefs, $label, $careerMap[$season.seasonName])
431:                     #elseif ($wiki.valid())
432:                         <tr>
433: 							<td class="text-nowrap text-end text-muted fst-italic">${season.seasonName}</td>
434: 							#foreach ($i in [1..$statPosBriefs.size()])
435: 								#if ($statPosBriefs.size() > 1)
436: 									#if ($foreach.first)
437:                                         <td class="text-nowrap text-center text-muted">
438:                                             <a href="#" data-bs-toggle="tooltip" title="We could not find the 'players' page in the ${season.seasonName} section."><span class="fa fa-light fa-circle-info"></span></a>
439: 										</td>
440: 									#else
441: 										<td class="text-nowrap text-center text-muted"></td>
442: 									#end
443: 								#end
444: 							#end
445:                         </tr>
446:                     #end
447:                 #end
448:                 #splitBioNetwork($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
449: 			#end
450: 
451: 
452: 		</table>
453: 	</div>
454: #end ## macro careerData
455: 
456: #macro (printTabs)
457: 	$request.setAttribute("icl-responsive-tabs-script", true)
458: 	<div class="tab-nav">
459: 		<ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-start gap-3" id="bio-network-tabs" role="tablist">
460: 			#printTab("profile", "Player Profile")
461: 			#printTab("gamelog", "Game Log")
462: 			#if ($showCareer)
463: 				#printTab("career", "Career Stats")
464: 			#end
465: 			#printTab("splits", "Split Stats")
466: 		</ul>
467:     </div>
468: #end ## printTabs
469: 
470: #macro (printLabel $label)
471: 	#if ($locale == "en_gb" && $label == "Defense")
472: 		Defence
473: 	#else
474: 		$label
475: 	#end
476: #end
477: 
478: #macro (printSubTabs $entries $viewParam)
479: 	#set ($activeLabel = "")
480: 	#foreach ($entry in $entries)
481: 		#if ($entry.key == $activePos)
482: 			#set ($activeLabel = $entry.value)
483: 		#end
484: 	#end
485: 
486: 	<div class="d-flex flex-row text-nowrap align-items-center justify-content-center">
487: 		<div class="secondary-tab-select-container flex-fill">
488: 			<select class="tab-nav-select-helper form-select" id="${viewParam}-subtabs-select" aria-label="Choose a stat group">
489: 				#foreach($entry in $entries)
490: 					<option value="#${viewParam}-${entry.key}" #if ($entry.value == $activeLabel || $foreach.first) selected #end>#printLabel($entry.value)</option>
491: 				#end
492: 			</select>
493: 			<script>
494: 				$('.tab-nav-select-helper').on('change', function(e) {
495: 					var id = $(this).val();
496: 					$('a[data-bs-target="' + id + '"]').tab('show');
497: 				});
498: 			</script>
499: 		</div>
500: 	</div>
501: 
502: 	<ul class="d-none nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-start gap-3" role="tablist" id="${viewParam}-subtabs">
503: 		#foreach($entry in $entries)
504: 			#set ($class = "nav-link")
505: 			#if ($entry.value == $activeLabel)
506: 				#set ($class = "${class} active")
507: 			#end
508: 			<li class="nav-item">
509: 				<a href="#${viewParam}-${entry.key}" class="${class}" id="${viewParam}-${entry.key}-tab" data-bs-target="#${viewParam}-${entry.key}" role="tab" data-bs-toggle="tab">#printLabel($entry.value)</a>
510: 			</li>
511: 		#end
512: 	</ul>
513: #end
514: ################################################## END MACROS  #############################################################
515: 
516: <head>
517: <title>
518:     $!attributes.get("first_name") $!attributes.get("last_name") | #if ($attributes.get("number"))#$!attributes.get("number") | #end #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty)$!attributes.get("position_abbr") | #elseif ($attributes.get("position"))$!attributes.get("position") | #end  $attributes.get("team")
519: </title>
520: </head>
521: 
522: $request.setAttribute("icl-responsive-tabs-script", true)
523: $request.setAttribute("icl-dataTables-script", true)
524: 
525: <div class="page-content player-stats">
526: 
527: 
528: 	<div class="d-flex justify-content-between">
529:     	<h1>
530:             #if (!$attributes.get("number").empty)<span class="small text-muted">#$!attributes.get("number")</span>#end
531:     		$!attributes.get("first_name") $!attributes.get("last_name")
532: 
533:             #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty)
534:     			<span class="small">($!attributes.get("position_abbr"))</span>
535:     		#elseif ($attributes.get("position"))
536:     			<span class="small">($!attributes.get("position"))</span>
537:     		#end
538: 			-
539:             <small class="text-muted">
540:             	<a href="../teams?id=$!{attributes.get("teamId")}" aria-label="Team Stats - ${attributes.get("team")}">$attributes.get("team")</a>
541: 			</small>
542:         </h1>
543: 
544: 		#set ($teamId = $attributes.get("teamId"))
545:     	#if ($teamId.length() > 0)
546:             <span class="ps-2">
547: 				<img class="img-mw-4" src="${website.teamLogo($teamId)}" alt="" />
548: 			</span>
549:     	#end
550: 	</div>
551: 
552:     #printHighlights
553: 
554: 	<div class="tabs-container my-3">
555: 
556: 		#printTabs
557: 
558:     	<div class="tab-content p-3 border">
559: 
560:     		## PROFILE
561:     		<div #printPaneAttrs("profile")>
562:     			<div class="row">
563:     				<div class="col-lg">
564:     					<h5>Player Stats</h5>
565:     					$website.include("${page.sectionPage.url}/players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
566:     				</div>
567:     				<div class="mt-3 col-lg mt-lg-0">
568:     					<h5>Recent Results</h5>
569:     					#printRecentGames
570:                     </div>
571:     			</div>
572: 
573:                 #if ($hasSynopsis)
574:     				<div class="my-3">$!synopsis</div>
575:                 #end
576: 
577:                 #if ($hasBioBrief)
578:     				<div class="my-3">$website.include($bioBriefURL)</div>
579:                 #end
580: 
581:                 #if ($htmlStatsURL)
582:     				<div class="my-3">$website.include($htmlStatsURL)</div>
583:                 #end
584:     		</div> ## PROFILE
585: 
586:     		## GAMELOG
587:             #set ($activePos = $statPos)
588:             #if ($view == "gamelog" && $paramPos.length() > 0)
589:     			#if ($positions.get($paramPos).length() > 0)
590:     				#set ($activePos = $positions.get($paramPos))
591:     			#end
592:             #end
593: 
594:     		<div #printPaneAttrs("gamelog")>
595:     			#if ($gamelogsCategoriesLabels.size() > 0)
596:     				#printSubTabs($gamelogsCategoriesLabels.entrySet(), "gamelog")
597: 
598:     				<div class="tab-content py-3">
599:     					#foreach($entry in $gamelogsCategoriesLabels.entrySet())
600:     						#set ($class = "tab-pane")
601:     						#if ($entry.key == $activePos)
602:     							#set ($class = "tab-pane active")
603:     						#end
604:     						<div class="${class}" role="tabpanel" id="gamelog-${entry.key}">
605:     							#gamelogData($entry.key)
606:     						</div>
607:     					#end
608:     				</div>
609:     			#else
610:     				#gamelogData($pos)
611:     			#end
612:     		</div> ## tab-pane
613:     		## GAMELOG
614: 
615:             ## CAREER
616:     		#if ($showCareer)
617:     			#set ($activePos = $statPos)
618:     			#if ($view == "career" && $paramPos.length() > 0)
619:     				#if ($positions.get($paramPos).length() > 0)
620:     					#set ($activePos = $positions.get($paramPos))
621:     				#end
622:     			#end
623:     			<div #printPaneAttrs("career")>
624:     				#if ($briefsCategoriesLabels)
625:     					#printCategories($briefsCategoriesLabels "career")
626:     				#else
627:     					#careerData($activePos)
628:     				#end
629:     			</div>
630:     		#end
631:     		## CAREER
632: 
633:             ## SPLITS
634:     		#set ($activePos = $statPos)
635:     		#if ($view == "splits" && $paramPos.length() > 0)
636:     			#if ($positions.get($paramPos).length() > 0)
637:     				#set ($activePos = $positions.get($paramPos))
638:     			#end
639:     		#end
640: 
641:     		<div #printPaneAttrs("splits")>
642:     			#if ($briefsCategoriesLabels)
643:     				#printCategories($briefsCategoriesLabels "splits")
644:     			#else
645:     				#splitsBioNetworkData($pos)
646:     			#end
647:     		</div>
648:     		## SPLITS
649: 
650:     	</div> ## tab-content
651: 	</div> ## tabs-container
652: </div> ## bio-wrapper
653: $wiki.su