Skip to navigation Skip to content Skip to footer

Individual Leaders

Batting Average Leaders
Batting Average GP AVG
8 .571
15 .500
8 .500
30 .482
42 .476
View All
Runs Batted In Leaders
Runs Batted In GP RBI
30 48
40 48
37 42
Iowa Wesleyan University
There was a problem with a Velocity script
Pagesports/sball/2015-16/stats-leader-template
ErrorInvocation of method 'substring' in class java.lang.String threw exception java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at w0a6ym3iwtqq5ux6sports/sball/2015-16/stats-leader-template[line 118, column 132]
Page source:
1: ## PICK UP OPTIONS
2: $website.include("options")
3: #set ($options = $request.getAttribute("options"))
4: 
5: #* BEGIN TABLE STYLE OPTIONS ***************#
6: #set($tableClass = "")
7: #set($tableHeadClass = "thead-dark")
8: #if ($options.get("table_bordered") != "false")	#set($tableClass = "$tableClass table-bordered") #end
9: #if ($options.get("table_hover") != "false") #set($tableClass = "$tableClass table-hover") #end
10: #if ($options.get("table_head_dark") == "true" || $request.getParameter("thead") == "dark")	#set($tableHeadClass = "$tableHeadClass thead-dark") #end
11: #if ($options.get("table_head_dark") == "false" || $request.getParameter("thead") == "light") #set($tableHeadClass = "$tableHeadClass thead-light") #end
12: #* END TABLE STYLES OPTIONS ****************#
13: 
14: #set ($locale = "en_us")
15: #set ($locale = $options.get("locale"))
16: #set ($jsRenderingParam = "jsRendering=true")
17: 
18: $website.include("standings?tmpl=stats-standings-abbr-template&${jsRenderingParam}")
19: #set ($teamAbbr = $request.getAttribute("teamAbbr"))
20: 
21: #set ($rosterHeadshots = [])
22: $website.include("${page.sectionPage.url}/roster?tmpl=roster-headshots-template&excludeBlank=true&${jsRenderingParam}")
23: #set ($rosterHeadshots = $!request.getAttribute("roster_headshots"))
24: 
25: #set ($lastIndex = $page.url.lastIndexOf("/"))
26: #set ($seasonPath = $page.url.substring(0, $lastIndex))
27: #set ($playersUrl = "${seasonPath}/players")
28: #set ($teamsUrl = "${seasonPath}/teams")
29: 
30: #set ($dropdownsWrapperClass = "dropdowns d-flex justify-content-center align-items-center flex-wrap gap-3 p-3 border-top")
31: 
32: $!request.setAttribute("locale", $locale)
33: $!request.setAttribute("jsRenderingParam", $jsRenderingParam)
34: $!request.setAttribute("playersPageName", $playersPageName)
35: $!request.setAttribute("teamsPageName", $teamsPageName)
36: 
37: ## Keep this in case the config template is overriden into the site, but now the default configuration is into the sport metadata
38: #if ($website.exists("stats-leader-config-template"))
39:     $website.include("stats-leader-config-template")
40:     #if ($sport.enumCode == 0)
41:         #set ($pageLayout = $request.getAttribute("footballTabsConfig"))
42:     #elseif ($sport.enumCode == 1 || $sport.enumCode == 11)
43:         #set ($pageLayout = $request.getAttribute("baseballTabsConfig"))
44:     #elseif ($sport.enumCode == 5)
45:         #set ($pageLayout = $request.getAttribute("iceHockeyTabsConfig"))
46:     #elseif ($sport.enumCode == 3)
47:         #set ($pageLayout = $request.getAttribute("soccerTabsConfig"))
48:     #elseif ($sport.enumCode == 9)
49:         #set ($pageLayout = $request.getAttribute("fieldHockeyTabsConfig"))
50:     #elseif ($sport.enumCode == 6 or $sport.enumCode == 10)
51:         #set ($pageLayout = $request.getAttribute("lacrosseTabsConfig"))
52:     #elseif ($sport.enumCode == 12)
53:         #set ($pageLayout = $request.getAttribute("waterPoloTabsConfig"))
54:     #elseif ($sport.enumCode == 4)
55:         #set ($pageLayout = $request.getAttribute("volleyballTabsConfig"))
56:     #elseif ($sport.enumCode == 2)
57:         #set ($pageLayout = $request.getAttribute("basketballlTabsConfig"))
58:     #end
59: #end
60: 
61: #*******************
62: ****** MACROS ******
63: *******************#
64: 
65: #macro (printImage $src $alt $class)
66: 	<div class="ratio ratio-1x1 img-mh-3 img-mw-3 rounded-circle overflow-hidden img-thumbnail">
67: 		<img src="${src}" alt="$!{alt}" class="lazyloaded img-fluid h-auto ${class}" loading="lazy" />
68: 	</div>
69: #end
70: 
71: #macro (leaders $leaders $key $statName $th)
72: 	#set ($label = $labels.get($key))
73: 	#set ($atLeastOneStat = false)
74: 	<div class="table-responsive">
75: 	    <table class="table ${tableClass} small align-middle w-100">
76:             <caption class="visually-hidden">${label} Leaders</caption>
77:             <thead class="${tableHeadClass}">
78:                     <tr>
79:                         <th scope="col">${label}</th>
80:                         <th scope="col" class="stat-val align-center text-uppercase" aria-label="games played"><abbr title="Games Played">GP</abbr></th>
81:                         <th scope="col" class="stat-val align-center text-uppercase table-active" aria-label="${statName}"><abbr title="${statName}">$th</abbr></th>
82:                     </tr>
83:             </thead>
84:             <tbody>
85:                 #foreach ($leader in $leaders)
86:                     #if ($leader.key == $key)
87:                         #foreach ($player in $leader.value)
88:                             #if($player.stats.get($key) > 0)
89:                                 <tr>
90:                                     <td>
91:                                         <div class="d-flex align-items-center gap-1">
92:                                             #if ($player.teamId.length() > 0)
93:                                                 #set ($playerName = $player.firstName + ' '+  $player.lastName)
94:                                                 #set ($src = "/info/images/default-headshot.png")
95:                                                 #if ($rosterHeadshots.size() > 0)
96:                                                     #foreach ($rosterPlayer in $rosterHeadshots)
97:                                                         #if ($playerName == $rosterPlayer.name)
98:                                                             #if ($rosterPlayer.headshot.length() > 0)
99:                                                                 #set ($src = $rosterPlayer.headshot)
100:                                                             #elseif ($website.exists("/images/setup/default-headshot.png"))
101:                                                                 #set ($src = "/images/setup/default-headshot.png")
102:                                                             #elseif ($website.exists("/images/setup/headshot_default.jpg"))
103:                                                                 #set ($src = "/images/setup/headshot_default.jpg")
104:                                                             #end
105:                                                         #end
106:                                                     #end
107:                                                     #set ($src = "${src}?max_width=48")
108:                                                     #printImage($src, $playerName, "start-50 translate-middle-x")
109:                                                 #else
110:                                                     #printImage($website.teamLogo($player.teamId), $player.team, "top-50 start-50 translate-middle p-1")
111:                                                 #end
112:                                             #end
113:                                             <div class="d-flex flex-column">
114:                                                 #set ($playerUrl = "${playersUrl}?id=${player.playerId}")
115:                                                 #if ($player.pageName.length() > 0)
116:                                                     #set ($playerUrl = "${playersUrl}/${player.pageName}")
117:                                                 #end
118:                                                 <a href="${playerUrl}" class="player-name text-decoration-none">${player.firstName.substring(0,1)} ${player.lastName}</a>
119:                                                 #if ($player.teamId.length() > 0)
120:                                                     #set ($teamUrl = "${teamsUrl}?id=${player.teamId}")
121:                                                     #if ($player.teamPageName.length() > 0)
122:                                                         #set ($teamUrl = "${teamsUrl}/${player.teamPageName}")
123:                                                     #end
124:                                                     <a href="${teamUrl}" class="player-team fst-italic small text-decoration-none text-muted lh-1">$player.team</a>
125:                                                 #else
126:                                                     <span class="player-team fst-italic small text-muted">$player.team</span>
127:                                                 #end
128:                                             </div>
129:                                         </div>
130:                                     </td>
131:                                     #set ($atLeastOneStat = true)
132:                                     <td class="stat-gp align-center">$formatter.formatNumber(${player.stats.get('gp')}, $formats.get('gp'))</td>
133:                                     <td class="stat-val align-center table-active">$formatter.formatNumber(${player.stats.get($key)}, $formats.get($key))</td>
134:                                 </tr>
135:                             #end
136:                         #end
137:                     #end ## players
138:                 #end ## leaders
139:                 #if (! $atLeastOneStat)
140:                     <tr><td colspan="3">Stats aren't available</td></tr>
141:                 #end
142:             </tbody>
143:             <tfoot class="text-center">
144:                 <tr>
145:                     <td colspan="3" class="border-bottom-0 p-0">
146:                         #set ($url = "${seasonPath}/players?sort=${key}&${jsRenderingParam}")
147:                         <a class="btn btn-link d-block text-decoration-none btn-sm" href="${url}" aria-label="View all by ${statName}">View All</a>
148:                     </td>
149:                 </tr>
150:             </tfoot>
151: 	    </table>
152: 	</div>
153: #end ## macro leaders
154: 
155: #macro (generateLeaderSections $leaders $config $columnClass)
156:     #foreach ($section in $config)
157:         <div class="${columnClass}">
158:             #leaders($leaders, $section.key, $section.statName, $section.abbr)
159:         </div>
160:     #end
161: #end ## generateLeaderSections
162: 
163: #macro (generateTabs $tabConfig $columnClass)
164:     #if ($tabConfig.tabs.size() > 1)
165:         <div class="row">
166:         <div class="col-xs-12 col-sm-12">
167:             <div class="tab-container">
168:                 <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3" id="stats-leader-tabs" role="tablist">
169:                     #foreach ($tab in $tabConfig.tabs)
170:                         #set ($tabId = $tab.label.toLowerCase().replace(' ', '-'))
171:                         <li class="tabs-category nav-item text-center" role="presentation">
172:                             <a class="nav-link #if($foreach.index == 0)active#end" href="#" role="tab" data-bs-toggle="tab" data-bs-target="#${tabId}-pane" aria-selected="#if($foreach.index == 0)true#{else}false#end" aria-controls="${tabId}-pane" id="${tabId}-tab" tabindex="#if($foreach.index == 0)0#{else}-1#end">${tab.label}</a>
173:                         </li>
174:                     #end
175:                 </ul>
176:                 <div class="tab-content pt-3">
177:                     #foreach ($tab in $tabConfig.tabs)
178:                         #set ($tabId = $tab.label.toLowerCase().replace(' ', '-'))
179:                         <div class="tab-pane #if($foreach.index == 0)active#end" id="${tabId}-pane" role="tabpanel" aria-labelledby="${tabId}-tab" tabindex="0">
180:                             <div class="row g-3">
181:                                 #generateLeaderSections($leaders, $tab.config, $columnClass)
182:                             </div>
183:                         </div>
184:                     #end
185:                 </div>
186:             </div> ## tab-container
187:         </div>
188:     </div>
189:     #else
190:         <div class="row g-3">
191:         #generateLeaderSections($leaders, $tabConfig.tabs[0].config, 'col-12 col-md-6 col-xl-3')
192:     </div>
193:     #end
194: #end ## generateTabs
195: 
196: #macro (generateDropdown $label $items $forTeam)
197:     #set ($mainPageUrl = $playersPageName)
198:     #if ($forTeam)
199:         #set ($mainPageUrl = $teamsPageName)
200:     #end
201: 
202:     #set ($id = $label.toLowerCase().replaceAll('[^a-z0-9]', '-') + "-dropdown")
203:     <div class="dropdown">
204:         <button class="btn btn-secondary dropdown-toggle" type="button" id="${id}" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
205:             ${label}
206:         </button>
207:         <ul class="dropdown-menu" aria-labelledby="${id}" role="menu">
208:             #foreach ($item in $items)
209:                 #set ($url = "${seasonPath}/${mainPageUrl}?${jsRenderingParam}")
210:                 #if ($item.key)
211:                     #set ($url = "${url}&sort=${item.key}")
212:                 #end
213:                 <li><a class="dropdown-item" role="menuitem" href="${url}">${item.name}</a></li>
214:             #end
215:         </ul>
216:     </div>
217: #end
218: 
219: #macro (printFilters)
220: <div class="my-3 d-print-none">
221:     <div class="btn-toolbar d-flex justify-content-between gap-3 flex-column flex-sm-row flex-sm-nowrap" role="toolbar" aria-label="Schedule tool bar">
222: 		## #printTeamsFilter
223:         <div class="flex-fill">
224:             <div class="d-flex flex-wrap align-items-end justify-content-between gap-3 flex-row">
225: 				$!request.setAttribute("pageObj", $page)
226: 				$website.include("conf-season-filter-template")
227:             </div>
228:         </div>
229:         <div class="m-0" role="group" aria-label="Print friendly version">
230:             <a href="${page.url}?dec=printer-decorator" class="btn btn-link border text-decoration-none text-nowrap"><span class="fa fa-print" aria-hidden="true"></span> Print</a>
231:         </div>
232:     </div>
233: </div>
234: #end ## printFilters
235: 
236: #********************
237: ****** CONTENT ******
238: ********************#
239: 
240: <div class="stats-leaders">
241: 	
242: #if ($page.title.length() > 0)
243: 	<h1>$page.title</h1>
244: #else
245: 	<h1>Individual Leaders</h1>
246: #end
247: 
248: ## ARCHIVES
249: #printFilters
250: 
251: <div class="stats-leaders-contents">
252: 
253:     #if ($pageLayout)
254:         #if ($pageLayout.tabs && $pageLayout.tabs.size() > 0)
255:             #generateTabs($pageLayout, 'col-12 col-md-6 col-xl-3')
256:         #end
257:         <div class="${dropdownsWrapperClass}">
258:             #if ($pageLayout.dropdowns && $pageLayout.dropdowns.size() > 0)
259:                 #foreach ($dropdown in $pageLayout.dropdowns)
260:                     #generateDropdown($dropdown.label, $dropdown.config, $dropdown.forTeam)
261:                 #end
262:             #end
263:             <!-- Player Stats by Team Dropdown -->
264:             $website.include("${seasonPath}/teams?tmpl=stats-team-lineup-template")
265:         </div>
266:     #else
267:         <div>
268:             <div class="alert alert-primary" role="alert">
269:                 We do not support a leader page for this sport (${sport}).
270:             </div>
271:         </div>
272:     #end
273: </div>
274: 
275: $wiki.su
276: </div>