Skip to navigation Skip to content Skip to footer
Massachusetts State Collegiate Athletic Conference

Individual Leaders

Batting Average Leaders
Batting Average GP AVG
46 .519
40 .450
40 .434
37 .425
42 .421
View All
Runs Batted In Leaders
Runs Batted In GP RBI
46 62
40 32
42 30
39 30
40 29
View All
Stolen Bases Leaders
Stolen Bases GP SB
33 13
35 12
33 11
45 11
23 10
View All
Earned Run Average Leaders
Earned Run Average GP ERA
39 1.49
MCLA
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 lc9mnf3yffjf1a7lsports/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) #* Must account for 0.00 for pitching leaders. *#
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>