David Singleton #34 G UCLA

gp 32
pts/g 5.2
fg % 44.9
3pt % 46.7
ft % 68.4
reb/g 1.2
a/g 1.0
Recent Games
Feb 23 OREGON W, 90-83
Feb 28 USC W, 93-88
Mar 7 at Colorado L, 93-68
Mar 9 at Utah L, 92-81
Mar 13 vs. Stanford W, 79-72
Mar 14 vs. Arizona State L, 83-72
Statistics category Overall Conf
Games 32 35th 18 1st
Games started 5 83rd 4 71st
Minutes 559 77th 325 73rd
Minutes per game 17.5 79th 18.1 77th
FG 53-118 81st 37-80 68th
FG Pct 44.9 - 46.3 -
3PT 35-75 41st 25-53 28th
3PT Pct 46.7 2nd 47.2 1st
FT 26-38 76th 13-19 76th
FT Pct 68.4 - 68.4 -
Off rebounds 3 121st 2 102nd
Def rebounds 36 97th 11 106th
Total rebounds 39 104th 13 109th
Rebounds per game 1.2 102nd 0.7 110th
Personal fouls 33 66th 15 45th
Disqualifications 1 29th 0 36th
Assists 33 60th 24 48th
Turnovers 12 105th 8 97th
Assist to turnover ratio 2.8 1st 3.0 3rd
Steals 17 55th 9 53rd
Blocks 5 70th 4 50th
Points 167 75th 112 63rd
Points per game 5.2 78th 6.2 66th
Points per 40 min 11.9 78th 13.8 48th
Date Opponent Score gs min fg pct 3pt pct ft pct pts
Oct 27 # NYIT W, 125-73 - 22 4-4 100.0 4-4 100.0 2-2 100.0 14
Nov 6 Purdue Fort Wayne W, 96-71 - 16 2-4 50.0 0-1 0.0 0-0 - 4
Nov 9 Long Beach St. W, 91-80 - 19 3-5 60.0 3-4 75.0 1-2 50.0 10
Nov 16 St. Francis (Pa.) W, 95-58 - 19 1-2 50.0 1-2 50.0 0-0 - 3
Nov 19 Presbyterian W, 80-65 - 12 0-0 - 0-0 - 0-0 - 0
Nov 22 vs. Michigan St. L, 87-67 - 19 1-1 100.0 1-1 100.0 2-3 66.7 5
Nov 23 vs. North Carolina L, 94-78 - 15 1-1 100.0 1-1 100.0 0-0 - 3
Nov 28 Hawaii W, 80-61 - 15 0-0 - 0-0 - 1-2 50.0 1
Dec 2 Loyola Marymount W, 82-58 - 16 0-0 - 0-0 - 2-2 100.0 2
Dec 8 Notre Dame W, 65-62 - 10 1-4 25.0 1-2 50.0 1-2 50.0 4
Dec 15 Belmont L, 74-72 - 9 1-3 33.3 1-3 33.3 0-0 - 3
Dec 19 at Cincinnati L, 93-64 - 14 1-3 33.3 1-3 33.3 2-2 100.0 5
Dec 22 vs. Ohio St. L, 80-66 - 17 0-0 - 0-0 - 0-0 - 0
Dec 29 Liberty L, 73-58 - 20 3-8 37.5 0-2 0.0 1-1 100.0 7
Jan 3 STANFORD W, 92-70 - 19 4-6 66.7 2-3 66.7 3-3 100.0 13
Jan 5 CALIFORNIA W, 98-83 - 24 5-7 71.4 3-4 75.0 1-2 50.0 14
Jan 10 at Oregon W, 87-84 - 14 1-5 20.0 0-2 0.0 0-0 - 2
Jan 13 at Oregon State L, 79-66 - 14 0-2 0.0 0-2 0.0 1-2 50.0 1
Jan 19 at USC L, 80-67 - 9 0-0 - 0-0 - 0-0 - 0
Jan 24 ARIZONA STATE L, 84-73 - 17 3-7 42.9 2-5 40.0 0-0 - 8
Jan 26 ARIZONA W, 90-69 - 14 2-4 50.0 0-2 0.0 1-1 100.0 5
Jan 30 at Washington State W, 87-67 - 14 2-3 66.7 2-3 66.7 0-0 - 6
Feb 2 at Washington L, 69-55 - 11 0-1 0.0 0-0 - 0-0 - 0
Feb 6 COLORADO L, 84-73 - 12 0-1 0.0 0-1 0.0 1-2 50.0 1
Feb 9 UTAH L, 93-92 - 25 2-6 33.3 0-2 0.0 4-6 66.7 8
Feb 13 at California W, 75-67 - 30 4-7 57.1 4-7 57.1 0-0 - 12
Feb 16 at Stanford L, 104-80 - 15 1-4 25.0 1-2 50.0 0-0 - 3
Feb 21 OREGON STATE W, 68-67 1 28 2-4 50.0 2-3 66.7 2-3 66.7 8
Feb 23 OREGON W, 90-83 1 18 2-4 50.0 2-3 66.7 0-0 - 6
Feb 28 USC W, 93-88 1 22 3-4 75.0 3-4 75.0 0-0 - 9
Mar 7 at Colorado L, 93-68 1 15 1-4 25.0 1-3 33.3 0-0 - 3
Mar 9 at Utah L, 92-81 - 24 5-11 45.5 3-7 42.9 0-0 - 13
Mar 13 vs. Stanford W, 79-72 1 33 2-7 28.6 1-3 33.3 3-5 60.0 8
Mar 14 vs. Arizona State L, 83-72 - - - - - - - - -
# Stats don't count towards season totals
Date Opponent Score gs min off def reb ast to a/to stl blk pf dq
Oct 27 # NYIT W, 125-73 - 22 1 1 2 4 0 - 2 0 1 -
Nov 6 Purdue Fort Wayne W, 96-71 - 16 0 1 1 0 1 0.0 1 0 2 -
Nov 9 Long Beach St. W, 91-80 - 19 0 1 1 2 1 2.0 0 0 2 -
Nov 16 St. Francis (Pa.) W, 95-58 - 19 0 4 4 3 0 - 1 0 2 -
Nov 19 Presbyterian W, 80-65 - 12 0 2 2 0 0 - 1 0 1 0
Nov 22 vs. Michigan St. L, 87-67 - 19 0 3 3 0 0 - 1 0 0 0
Nov 23 vs. North Carolina L, 94-78 - 15 0 0 0 0 0 - 1 0 0 0
Nov 28 Hawaii W, 80-61 - 15 0 2 2 0 0 - 1 0 1 -
Dec 2 Loyola Marymount W, 82-58 - 16 0 3 3 0 1 0.0 1 0 1 0
Dec 8 Notre Dame W, 65-62 - 10 0 0 0 0 0 - 0 0 1 -
Dec 15 Belmont L, 74-72 - 9 0 1 1 0 0 - 0 0 1 0
Dec 19 at Cincinnati L, 93-64 - 14 0 0 0 0 0 - 0 0 1 0
Dec 22 vs. Ohio St. L, 80-66 - 17 0 1 1 1 1 1.0 0 1 1 0
Dec 29 Liberty L, 73-58 - 20 0 2 2 2 0 - 1 0 0 0
Jan 3 STANFORD W, 92-70 - 19 0 0 0 3 0 - 0 0 1 -
Jan 5 CALIFORNIA W, 98-83 - 24 0 1 1 2 1 2.0 1 0 0 0
Jan 10 at Oregon W, 87-84 - 14 0 1 1 0 1 0.0 2 1 0 -
Jan 13 at Oregon State L, 79-66 - 14 0 1 1 2 0 - 0 0 0 -
Jan 19 at USC L, 80-67 - 9 0 0 0 0 0 - 0 0 0 -
Jan 24 ARIZONA STATE L, 84-73 - 17 0 0 0 0 0 - 0 0 2 -
Jan 26 ARIZONA W, 90-69 - 14 0 0 0 1 0 - 1 0 2 0
Jan 30 at Washington State W, 87-67 - 14 0 0 0 0 0 - 0 0 1 0
Feb 2 at Washington L, 69-55 - 11 1 1 2 0 1 0.0 1 2 0 0
Feb 6 COLORADO L, 84-73 - 12 0 1 1 1 0 - 1 0 0 0
Feb 9 UTAH L, 93-92 - 25 0 1 1 3 0 - 0 0 1 0
Feb 13 at California W, 75-67 - 30 0 2 2 3 0 - 0 0 0 -
Feb 16 at Stanford L, 104-80 - 15 0 1 1 1 0 - 0 0 1 -
Feb 21 OREGON STATE W, 68-67 1 28 0 1 1 3 2 1.5 0 0 2 -
Feb 23 OREGON W, 90-83 1 18 0 0 0 3 0 - 1 0 1 0
Feb 28 USC W, 93-88 1 22 0 0 0 0 1 0.0 1 0 1 0
Mar 7 at Colorado L, 93-68 1 15 0 0 0 1 0 - 0 0 1 -
Mar 9 at Utah L, 92-81 - 24 1 1 2 1 2 0.5 1 1 2 0
Mar 13 vs. Stanford W, 79-72 1 33 1 5 6 1 0 - 0 0 5 1
Mar 14 vs. Arizona State L, 83-72 - - - - - - - - - - - -
# Stats don't count towards season totals
  gp gs min/g fg/g pct 3pt/g pct ft/g pct ppg
2018-19 32 5 17.5 1.7-3.7 44.9 1.1-2.3 46.7 0.8-1.2 68.4 5.2
2019-20 30 14 20.1 1.3-3.8 34.5 1.1-3.1 37.0 0.4-0.5 85.7 4.1
2020-21 13 - 18.9 1.8-3.8 46.0 1.5-3.1 50.0 0.2-0.2 100.0 5.2
Total 75 19 18.8 1.5-3.7 40.9 1.2-2.8 43.0 0.5-0.7 74.1 4.8
  gp gs min fg pct 3pt pct ft pct pts
2018-19 32 5 559 53-118 44.9 35-75 46.7 26-38 68.4 167
2019-20 30 14 604 39-113 34.5 34-92 37.0 12-14 85.7 124
2020-21 13 - 246 23-50 46.0 20-40 50.0 2-2 100.0 68
Total 75 19 1409 115-281 40.9 89-207 43.0 40-54 74.1 359
  gp gs min/g fg/40 pct 3pt/40 pct ft/40 pct pts/40
2018-19 32 5 17.5 3.8-8.4 44.9 2.5-5.4 46.7 1.9-2.7 68.4 11.9
2019-20 30 14 20.1 2.6-7.5 34.5 2.3-6.1 37.0 0.8-0.9 85.7 8.2
2020-21 13 - 18.9 3.7-8.1 46.0 3.3-6.5 50.0 0.3-0.3 100.0 11.1
Total 75 19 18.8 3.3-8.0 40.9 2.5-5.9 43.0 1.1-1.5 74.1 10.2
  gp gs mpg off/g def/g reb/g pf/g dq/g ast/g to/g a/to stl/g blk/g
2018-19 32 5 17.5 0.1 1.1 1.2 1.0 0.0 1.0 0.4 2.8 0.5 0.2
2019-20 30 14 20.1 0.2 1.7 1.8 1.3 0.0 1.0 0.5 2.2 0.7 0.1
2020-21 13 - 18.9 0.2 1.4 1.5 1.0 0.0 0.7 0.5 1.5 0.5 0.0
Total 75 19 18.8 0.1 1.4 1.5 1.1 0.0 1.0 0.4 2.3 0.6 0.1
  gp gs min off def reb pf dq ast to a/to stl blk
2018-19 32 5 559 3 36 39 33 1 33 12 2.8 17 5
2019-20 30 14 604 5 50 55 38 0 31 14 2.2 20 3
2020-21 13 - 246 2 18 20 13 0 9 6 1.5 7 0
Total 75 19 1409 10 104 114 84 1 73 32 2.3 44 8
  gp gs mpg off/40 def/40 reb/40 pf/40 dq/40 ast/40 to/40 a/to stl/40 blk/40
2018-19 32 5 17.5 0.2 2.6 2.8 2.4 0.1 2.4 0.9 2.8 1.2 0.4
2019-20 30 14 20.1 0.3 3.3 3.6 2.5 0.0 2.1 0.9 2.2 1.3 0.2
2020-21 13 - 18.9 0.3 2.9 3.3 2.1 0.0 1.5 1.0 1.5 1.1 0.0
Total 75 19 18.8 0.3 3.0 3.2 2.4 0.0 2.1 0.9 2.3 1.2 0.2
There was a problem with a Velocity script
Pagebio-network-template
ErrorVM #printCategories: too many arguments to macro. Wanted 2 got 3 at bio-network-template[line 574, column 11]
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: #set ($pos = $attributes.get("position"))
25: #set ($posVec = $pos.split("/"))
26: #set ($pos = $posVec[0])
27: #set ($pos = $pos.toLowerCase())
28: 
29: #set ($statPos = $positions.get($pos))
30: #set ($paramPos = $request.getParameter("pos").toLowerCase())
31: 
32: #*
33: $positions
34: $positions.keySet()
35: $positions.entrySet()
36: $statPos
37: $paramPos
38: *#
39: 
40: #set ($highlights = $highlights.get($statPos))
41: 
42: #set ($url = ${page.url})
43: #set ($playerId = $attributes.get("playerId"))
44: #set ($stats = $splits.overall)
45: 
46: #set ($hasEvents = $events.size() > 0)
47: #set ($hasSynopsis = $synopsis.length() > 1 && $synopsis.indexOf("<center>") == -1)
48: #set ($htmlStatsURL = "${page.url}-stats")
49: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
50: #set ($bioBriefURL = "${page.url}-brief")
51: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
52: 
53: $request.setAttribute("careerTotals", $career)
54: ## We track a map of the careers to see if we are missing any seasons
55: #set ($careerMap = {})
56: $request.setAttribute("careerMap", $careerMap)
57: #foreach ($season in $seasons)
58:   ## We need to include this season stats
59:   #set ($path = "${season.path}?tmpl=bio-career-template&name=${season.seasonName}&pos=${statPos}&print=no")
60:   $website.includeAgain($path)
61: #end
62: 
63: #set ($view = "profile")
64: #if ($request.getParameter("view"))
65:   #set ($view = $request.getParameter("view"))
66: #end
67: 
68: #macro (printResultAriaLabel $event)
69:     #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
70:     #if ($event.neutralSite.length() > 0 || $event.home) 
71:     	#set ($ariaLabel = "${ariaLabel} vs.")
72:     #else
73:     	#set ($ariaLabel = "${ariaLabel} at")
74:     #end
75:     #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
76:     #if ($event.neutralSite.length() > 0)
77:     	#set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
78:     #end
79:     #set ($ariaLabel = "${ariaLabel} Box Score")
80:     aria-label="$ariaLabel"
81: #end
82: 
83: #macro (printHighlights)
84: #if ($highlights)
85:   <div class="highlights highlights-standalone accent-bg">
86:     #foreach ($highlight in $highlights.keySet())
87:       #set ($value = "-")
88:       #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
89:       <div class="stat clearfix">
90:         <span class="stat-title">$!highlights.get($highlight)</span>
91:         <span class="stat-value">$value</span>
92:       </div>
93:     #end
94:   </div>
95: #end ## has highlights
96: #end ## macro printHighlights
97: 
98: #macro (split $statPosBriefs $label $stats)
99:   <tr>
100:     <td class="pinned-col text">${label}</td>
101:     #foreach ($brief in $statPosBriefs.keySet())
102:       #set ($value = "-")
103:       #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
104:       <td>#if ($value.length() > 0) $value #else - #end</td>
105:     #end
106:   </tr>
107: #end ## marco split
108: 
109: #macro (printCategories $briefCategoryLabels $v $ariaLabel)
110:   
111: <div class="tab-container secondary clearfix" data-module="stats/tabs" data-type="secondary">
112: <div class="tab-nav" data-module="jscroll" data-momentum="false">
113: <div>
114: <ul class="clearfix">
115: #foreach($briefCat in $briefCategoryLabels.entrySet())
116:   #set ($briefCatLabel = $briefCat.value)
117:   #set ($briefCatKey = $briefCat.key)
118:     
119:   #if ($locale == "en_gb" && $briefCatLabel == "Defense")
120:     #set ($briefCatLabel = "Defence")
121:   #end  
122:   
123:   <li #if ($activePos == $briefCatKey) class="active" #end><a href="${page.url}?view=${v}&pos=${briefCatKey}" role="tab" id="stats-tab-${ariaLabel.toLowerCase().replace(" ", "-")}-${briefCatLabel.toLowerCase()}" aria-label="${ariaLabel}: ${briefCatLabel}">$briefCatLabel</a></li>
124: #end
125: </ul>
126: </div>
127: </div>
128: <div class="tab-panels">
129: #foreach ($briefCat in $briefCategoryLabels.entrySet())
130:   #set ($briefCatLabel = $briefCat.value)
131:   #set ($class = "tab-panel clearfix")
132:   #if ($briefCat.key == $activePos)
133:     #set ($class = "tab-panel active clearfix")
134:   #end
135:   <div class="$class" role="tabpanel" aria-labelledby="stats-tab-${ariaLabel.toLowerCase().replace(" ", "-")}-${briefCatLabel.toLowerCase()}">
136:     <div class="stats-wrap clearfix">
137:     #if ($v == "splits")
138:       #splitsData($briefCat.key)
139:     #elseif ($v == "career")
140:       #careerData($briefCat.key)
141:     #end
142:     </div>
143:   </div>
144: #end  
145: </div>
146: </div> ## tab-container
147: 
148: #end ## macro printCategories
149: 
150: #macro (splitsData $p)
151: 
152: #set ($p = $positions.get($p))
153: #set ($statPosBriefs = $briefs.get($p))
154: #set ($colspan = $statPosBriefs.size())  
155:   
156: <div class="stats-box full clearfix">
157: <div class="scrollable">
158: <div>
159: <table>
160:   <tr class="accent-bg">
161:     <th class="pinned-col">&nbsp;</th>
162:     #foreach ($brief in $statPosBriefs)
163:       <th>$brief</th>
164:     #end
165:   </tr>
166: 
167: #split($statPosBriefs, "Total", $splits.overall)
168: #if ($showconf)
169:   #split($statPosBriefs, "Conference", $splits.conference)
170: #end
171: #split($statPosBriefs, "Exhibition", $splits.exhibition)
172: 
173: <tr class="empty-row">
174: 	<td class="pinned-col">&nbsp;</td>
175: 	<td colspan="$colspan"><div class="empty-cell">-</div></td>
176: </tr>
177: 
178: #split($statPosBriefs, "Home", $splits.home)
179: #split($statPosBriefs, "Away", $splits.away)
180: #split($statPosBriefs, "Neutral", $splits.neutral)
181: 
182: <tr class="empty-row">
183: 	<td class="pinned-col">&nbsp;</td>
184: 	<td colspan="$colspan"><div class="empty-cell">-</div></td>
185: </tr>
186: 
187: #foreach($gameResult in $gamesResults.entrySet())
188:   #if ($gameResult.key == "wins")
189:     #set ($splitGameResult = $splits.inWins)
190:   #elseif ($gameResult.key == "losses")
191:     #set ($splitGameResult = $splits.inLosses)
192:   #elseif ($gameResult.key == "ties")
193:     #set ($splitGameResult = $splits.inTies)
194:   #end
195:   
196:   #split($statPosBriefs, $gameResult.value, $splitGameResult)
197: #end
198: 
199: <tr class="empty-row">
200: 	<td class="pinned-col">&nbsp;</td>
201: 	<td colspan="$colspan"><div class="empty-cell">-</div></td>
202: </tr>
203: 
204: #if ($monthsPlayed and $monthsPlayed.size() > 0)
205:   #foreach($month in $monthsPlayed)
206:     #if ($month == 'January')
207:       #set ($splitMonth = $splits.january)
208:     #elseif ($month == 'February')
209:       #set ($splitMonth = $splits.february)
210:     #elseif ($month == 'March')
211:       #set($splitMonth = $splits.march)
212:     #elseif ($month == 'April')
213:       #set($splitMonth = $splits.april)
214:     #elseif ($month == 'May')
215:       #set ($splitMonth = $splits.may)
216:     #elseif ($month == 'June')
217:       #set ($splitMonth = $splits.june)
218:     #elseif ($month == 'July')
219:       #set($splitMonth = $splits.july)
220:     #elseif ($month == 'August')
221:       #set ($splitMonth = $splits.august)
222:     #elseif ($month == 'September')
223:       #set($splitMonth = $splits.september)
224:     #elseif ($month == 'October')
225:       #set($splitMonth = $splits.october)
226:     #elseif ($month == 'November')
227:       #set ($splitMonth = $splits.november)
228:     #elseif ($month == 'December')
229:       #set($splitMonth = $splits.december)
230:     #end
231:     
232:     #split($statPosBriefs, $month, $splitMonth)
233:   #end ## foreach
234: #end
235: </table>
236: </div>
237: </div> ## scrollable
238: </div> ## srollable-table
239: 
240: #end ## macro splitsData
241: 
242: #macro (printRecentGames)
243: <table>
244:     <tr class="thead accent-bg"><th colspan="3" class="text">Recent Games</th></tr>
245: 
246:     #set ($eventEnd = -1)
247:     #foreach ($event in $events)
248:     #if ($event.event.result.resolved)
249:     #set ($eventEnd = $velocityCount)
250:     #end
251:     #end
252: 
253:     #set ($eventStart = $eventEnd - 5)
254:     #if ($eventStart < 0) #set ($eventStart = 0) #end
255: 
256:     #foreach ($event in $events)
257:     #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
258:     <tr>
259:         <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
260:         <td class="text">
261:             #if ($event.event.neutralSite.length() > 0) vs.
262:             #elseif (!$event.event.home) at
263:             #else ## nothing for a home game
264:             #end
265:             $event.event.opponent.name
266:         </td>
267:         <td class="text">
268:             #if ($event.event.statusCode >= 0)
269:             #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
270:                 <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
271:             #else
272:             ${event.event.APResult}
273:             #end
274:             #end
275:         </td>
276:     </tr>
277:     #end ## if
278:     #end
279: </table>
280: #end ## macro printRecentGames
281: 
282: #macro (gamelogData $p)
283: 
284: #set ($p = $positions.get($p))
285: #set ($gamelogs = $gamelogs.get($p))
286: #set ($atLeastOneNotOverall = false)
287: 
288: <div class="stats-box full clearfix">
289:     <div class="scrollable">
290:         <div>
291:             <table>
292:               <tr class="thead accent-bg">
293:                   <th class="text">Date</th>
294:                   <th class="pinned-col text">Opponent</th>
295:                   <th>Score</th>
296: 				  #set ($colspan = 3)
297:                   #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9   soccer:3
298: 					#set ($colspan = $colspan + 1)
299: 					<th>Dec</th>
300:                   #end
301:                   #foreach ($gamelog in $gamelogs)
302: 					#set ($colspan = $colspan + 1)
303: 					<th>$gamelog</th>
304:                   #end
305:               </tr>
306:               #foreach ($event in $events)
307:               <tr>
308:                   <td class="text">$formatter.formatDate($event.event.date, "MMM d") #if (!$event.event.overall) #set ($atLeastOneNotOverall = true) # #end</</td>
309:                   <td class="pinned-col text">
310:                       #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
311:                       $event.event.opponent.name
312:                   </td>
313:                   <td>
314:                       #if ($event.event.statusCode >= 0)
315:                       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
316:                           <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
317:                       #else
318:                       ${event.event.APResult}
319:                       #end
320:                       #else &nbsp; #end
321:                   </td>
322:                   #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9   soccer:3
323:                       #if ($event.stats.get('gow') == 1)
324:                           <td>W</td>
325:                       #elseif ($event.stats.get('gol') == 1)
326:                           <td>L</td>
327:                       #elseif ($event.stats.get('got') == 1)
328:                           <td>T</td>
329:                       #else
330:                           <td>-</td>
331:                       #end
332:                   #end
333:                   #foreach ($gamelog in $gamelogs.keySet())
334:                   #set ($value = "-")
335:                   #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
336:                   <td>$value</td>
337:                   #end
338:               </tr>
339:               #end
340:               #if ($atLeastOneNotOverall)
341:                 <tr><td colspan="$colspan"># Stats don't count towards season totals</td></tr>
342:               #end
343:             </table>
344:         </div>
345:     </div> ## scrollable
346: </div> ## stats-box
347: 
348: #end ## macro gamelogData
349: 
350: #macro (split $statPosBriefs $label $stats)
351:   <tr>
352:     <td class="pinned-col text">${label}</td>
353:     #foreach ($brief in $statPosBriefs.keySet())
354:       #set ($value = "-")
355:       #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
356:       <td>#if ($value.length() > 0) $value #else - #end</td>
357:     #end
358:   </tr>
359: #end
360: 
361: #macro (careerData $p)
362: #set ($p = $positions.get($p))
363: #set ($statPosBriefs = $briefs.get($p))
364: 
365: <div class="stats-box full clearfix">
366: <div class="scrollable">
367: <div>
368: <table>
369: <tr class="thead accent-bg">
370:   <th class="pinned-col">&nbsp;</th>
371:   #foreach ($brief in $statPosBriefs)
372:     <th>$brief</th>
373:   #end
374: </tr>
375: 
376: #foreach ($season in $seasons)
377:   #if ($careerMap.get($season.seasonName))
378:     #set ($label = "<a href='${season.path}?view=profile'>$season.seasonName</a>")
379:     #split($statPosBriefs, $label, $careerMap[$season.seasonName])
380:   #elseif ($wiki.valid())
381:     <tr>
382:       <td class="pinned-col text">${season.seasonName}</td>
383:       <td colspan="${briefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
384:     </tr>
385:   #end
386: #end
387: 
388: #split($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
389: 
390: </table>
391: </div>
392: </div> ## scrollable
393: </div> ## stats-box
394: 
395: #end ## macro careerData
396: 
397: ################################################## END MACROS  #############################################################
398: 
399: <head>
400: <title>
401:     $!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")
402: </title>
403: </head>
404: 
405: <div class="bio-wrap bio-wrap-network clearfix" data-module="stats/responsive-container">
406: 
407:     #if ($page.title.length() > 0)
408:     <h1>$page.title</h1>
409:     #end
410: 
411:     <h2 class="player-name">
412:         <span>$!attributes.get("first_name") $!attributes.get("last_name")</span>
413:         #if (!$attributes.get("number").empty)<span>#$!attributes.get("number")</span>#end
414:         #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty)
415: 			<span>$!attributes.get("position_abbr")</span>
416: 		#elseif ($attributes.get("position"))
417: 			<span>$!attributes.get("position")</span>
418: 		#end 
419:         <a href="../teams?id=$!{attributes.get("teamId")}" aria-label="Team Stats - ${attributes.get("team")}">$attributes.get("team")</a>
420:     </h2>
421: 	
422:     #printHighlights
423: 
424:     <div class="body clearfix">
425:         <div class="tab-container primary clearfix" data-module="stats/tabs" data-type="primary">
426:             <div class="tab-nav" data-module="jscroll" data-momentum="false">
427:                 <div>
428:                     <ul class="clearfix">
429:                         <li #if ($view == "profile") class="active" #end><a href="${page.url}?view=profile" role="tab" id="stats-tab-player-profile">Player Profile</a></li>
430:                         <li #if ($view == "gamelog")class="active"#end><a href="${page.url}?view=gamelog" role="tab" id="stats-tab-game-log">Game Log</a></li>
431:                         #if ($showCareer)
432:                         <li #if ($view == "career")class="active"#end><a href="${page.url}?view=career" role="tab" id="stats-tab-career-stats">Career Stats</a></li>
433:                         #end
434:                         <li #if ($view == "splits")class="active"#end><a href="${page.url}?view=splits" role="tab" id="stats-tab-split-stats">Split Stats</a></li>
435:                     </ul>
436:                 </div>
437:             </div> ## tab-nav
438: 
439:             <div class="tab-panels clearfix">
440: 
441:                 ## PROFILE
442:                 #set ($class = "tab-panel clearfix")
443:                 #if ($view == "profile")
444:                 #set ($class = "tab-panel active clearfix")
445:                 #end
446:                 <div class="${class}" role="tabpanel" aria-labelledby="stats-tab-player-profile">
447: 
448:                     ## Player profile
449:                     <div class="clearfix stats-wrap">
450: 
451:                         ## LAST SIX GAMES
452:                         <div class="stats-box half">
453:                             #printRecentGames()
454:                         </div>
455: 
456:                         ## RANKING
457:                         <div class="stats-box half">
458:                             $website.include("../players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
459:                         </div>
460: 
461:                     </div> ## clearfix
462: 
463:                     #if ($hasSynopsis)
464:                     <div class="clearfix">$!synopsis</div>
465:                     #end
466: 
467:                     #if ($hasBioBrief)
468:                     <div class="clearfix">$website.include($htmlStatsURL)</div>
469:                     #end
470: 
471:                     #if ($htmlStatsURL)
472:                     <div class="clearfix">$website.include($bioBriefURL)</div>
473:                     #end
474: 
475:                 </div>
476:                 ## PROFILE
477: 
478:                 ## GAMELOG
479:                 #set ($class = "tab-panel clearfix")
480:                 #if ($view == "gamelog")
481:                 #set ($class = "tab-panel active clearfix")
482:                 #end
483: 
484:                 #set ($activePos = $statPos)
485:                 #if ($view == "gamelog" && $paramPos.length() > 0)
486:                   #if ($positions.get($paramPos).length() > 0)
487:                     #set ($activePos = $positions.get($paramPos))
488:                   #end
489:                 #end
490: 
491:                 <div class="${class}" role="tabpanel" aria-labelledby="stats-tab-game-log">
492: 
493:                     #if ($gamelogsCategoriesLabels)
494:                     <div class="tab-container secondary clearfix" data-module="stats/tabs" data-type="secondary">
495:                         <div class="tab-nav" data-module="jscroll" data-momentum="false">
496:                             <div>
497:                                 <ul class="clearfix">
498:                                     #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
499:                                       #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
500: 
501:                                   #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
502:                       #set($gamelogsCatLabelVal = "Defence")
503:                     #end
504: 
505:                     <li #if ($activePos == $gamelogsCatLabel.key) class="active" #end>
506:                       <a href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}" role="tab" id="stats-tab-game-log-${gamelogsCatLabelVal.toLowerCase()}" aria-label="Game Log: ${gamelogsCatLabelVal}">$gamelogsCatLabelVal</a>
507:                     </li>
508:                                     #end
509:                                 </ul>
510:                             </div>
511:                         </div>
512:                         <div class="tab-panels">
513:                 #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
514: 					#set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
515:                 #set ($class = "tab-panel clearfix")
516:                 #if ($gamelogsCatLabel.key == $activePos)
517:                   #set ($class = "tab-panel active clearfix")
518:                 #end
519:                 <div class="${class}" role="tabpanel" aria-labelledby="stats-tab-game-log-${gamelogsCatLabelVal.toLowerCase()}">
520:                   <div class="stats-wrap clearfix">#gamelogData($gamelogsCatLabel.key)</div>
521:                 </div>
522:               #end
523:                         </div>
524:                     </div>
525:                     #else
526:                       <div class="stats-wrap clearfix">#gamelogData($pos)</div>
527:                     #end
528: 
529:                 </div> ## tab-panel
530:                 ## GAMELOG
531: 
532:         ## CAREER
533:         #if ($showCareer)
534: 
535:         #set ($activePos = $statPos)
536:         #if ($view == "career" && $paramPos.length() > 0)
537:           #if ($positions.get($paramPos).length() > 0)
538:           #set ($activePos = $positions.get($paramPos))
539:           #end
540:         #end
541: 
542:         #set ($class = "tab-panel clearfix")
543:         #if ($view == "career")
544:           #set ($class = "tab-panel active clearfix")
545:         #end
546: 
547:         <div class="${class}" role="tabpanel" aria-labelledby="stats-tab-career-stats">
548: 
549:         #if ($briefsCategoriesLabels)
550:           #printCategories($briefsCategoriesLabels "career" "Career Stats")
551:         #else
552:           <div class="stats-wrap clearfix">#careerData($activePos)</div>
553:         #end    
554: 
555:         </div> ## tab-panel
556:         #end ## CAREER
557:         
558:         ## SPLITS
559:         #set ($class = "tab-panel clearfix")
560:         #if ($view == "splits")
561:           #set ($class = "tab-panel active clearfix")
562:         #end
563: 
564:         #set ($activePos = $statPos)
565:         #if ($view == "splits" && $paramPos.length() > 0)
566:           #if ($positions.get($paramPos).length() > 0)
567:           #set ($activePos = $positions.get($paramPos))
568:           #end
569:         #end
570: 
571:         <div class="${class}" role="tabpanel" aria-labelledby="stats-tab-split-stats">
572: 
573:         #if ($briefsCategoriesLabels)
574:           #printCategories($briefsCategoriesLabels "splits" "Splits Stats")
575:         #else
576:           <div class="stats-wrap clearfix">#splitsData($pos)</div>
577:         #end    
578: 
579:         </div> ## tab-panel
580:         ## SPLITS
581:         
582:             </div> ##tab-panels
583: 
584:         </div> ## tab-container
585:     </div> ## body
586: 
587: 
588: </div> ## bio-wrapper
589: $wiki.su