Player Stats

Rk Name Team gp ab h rbi bb k avg obp slg
1 C Ontai San Mateo 45 171 51 34 29 27 .298 .408 .444
2 A Ackerman San Mateo 44 175 60 36 18 36 .343 .420 .577
2 D Carnazzo San Mateo 44 167 54 28 29 27 .323 .419 .437
2 A Flores San Mateo 44 153 48 35 21 28 .314 .424 .471
2 J Ota San Mateo 44 176 51 25 21 27 .290 .377 .415
6 J Torres San Mateo 43 154 40 28 27 28 .260 .373 .468
7 S Prozell San Mateo 42 99 28 17 11 9 .283 .360 .424
8 C Coffey Chabot 40 169 57 54 17 20 .337 .406 .497
8 C Gabrielson San Mateo 40 115 38 18 15 27 .330 .418 .478
8 G McCarthy
There was a problem with a Velocity script
Pagesports/bsb/2018-19/Conference/Coast_-_Golden_Gate/stats-bios-template
ErrorInvocation of method 'includeAgain' in class com.prestosports.render.ContentEngineInvoker threw exception java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. at g5xpj7agcui7frapsports/bsb/2018-19/Conference/Coast_-_Golden_Gate/stats-bios-template[line 378, column 38]
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: #set ($showconf = true)
7: #if ($options.get("stats_hide_conference") and $options.get("stats_hide_conference").equalsIgnoreCase("hide"))
8:     #set ($showconf = false)
9: #end
10: 
11: #set ($isSharedMeets = true)
12: #if ($sport and $sport.statistics == true)
13:     #set ($isSharedMeets = false)
14: #end
15: 
16: #set ($showTotalRow = false)
17: #if ($options.get("stats_individual_show_totals_row") and $options.get("stats_individual_show_totals_row").equalsIgnoreCase("show"))
18:     #set ($showTotalRow = true)
19: #end
20: 
21: #set ($isIncluded = $website.isIncluded())
22: 
23: #set ($isAjax = false)
24: #if ($request.getParameter('ajax').length() > 0)
25:     #set ($isAjax = true)
26: #end
27: 
28: #set ($idLength = 0)
29: #set ($idLength = $formatter.escapeXml($request.getParameter("id")).length())
30: #set ($teamCount = $page.getTeamIDs().size())
31: 
32: #set ($teamId = '')
33: #if ($request.getParameter("teamId").length() > 0)
34:     #set ($teamId = $request.getParameter("teamId"))
35: #end
36: 
37: #set ($isSingleTeam = false)
38: #if ($teamId.length() != 0 or $teamCount == 1)
39:     #set ($isSingleTeam = true)
40: #end
41: 
42: #if ($teamCount == 1 and (not $isIncluded) and $idLength == 0 and not $isSharedMeets)
43:     $website.decorate("")
44:     #set ($targetURL = "${page.url}/../teams?view=lineup")
45:     $response.sendRedirect($targetURL)
46: #stop
47: #end
48: 
49: ## STAT LABELS
50: $website.includeAgain("stats-labels")
51: #set ($statLabels = $!request.getAttribute("statLabels"))
52: 
53: #set ($pos = "")
54: #set ($pos = $formatter.escapeXml($request.getParameter("pos")))
55: 
56: #if ($pos.length() == 0 and $briefsDefaultCategoryPosition and not $isIncluded and not $isSharedMeets)
57:     $website.decorate("")
58:     #set ($targetURL = "${page.url}?pos=" + $briefsDefaultCategoryPosition)
59:     #if($briefsDefaultSorting and $briefsDefaultSorting.containsKey($briefsDefaultCategoryPosition))
60:         #set ($targetURL = $targetURL + "&sort=" + $briefsDefaultSorting.get($briefsDefaultCategoryPosition))
61:     #end
62: 
63:     $response.sendRedirect($targetURL)
64: #stop
65: #end
66: 
67: ## We want to leave this undefined so we can test for that
68: #set ($minEsc = $formatter.escapeXml($request.getParameter("min")))
69: #if ($minEsc.length() > 0)
70:     #set ($min = $minEsc)
71: #end
72: 
73: #set ($cansort = $formatter.escapeXml($request.getParameter("cs")))
74: 
75: ## #set ($labels = $labels.get($positions.get($pos)))
76: 
77: #set ($url = $request.requestURI)
78: #set ($view = "")
79: #set ($view = $formatter.escapeXml($!request.getParameter("view")))
80: 
81: #set ($restriction = "0")
82: #set ($restrictionEsc = $formatter.escapeXml($request.getParameter("r")))
83: #if ($restrictionEsc.length() > 0)
84:     #set ($restriction = $restrictionEsc)
85: #end
86: 
87: $website.include("standings?tmpl=stats-standings-abbr-template")
88: #set ($teamAbbr = $request.getAttribute("teamAbbr"))
89: 
90: #*
91: <!--
92: Debug
93: URL: $url
94: isIncluded: $isIncluded
95: View: ${view}
96: Position: $pos
97: Sort: $sort
98: isAjax: $isAjax
99: isSharedMeets = $isSharedMeets
100: page.getTeamIDs.size() = $page.getTeamIDs().size()
101: teamId = $teamId
102: page.teams.entrySet() = $page.teams.entrySet().size()
103: isSingleTeam = $isSingleTeam
104: -->
105: *#
106: 
107: #if ($locale == "en_us")
108:     #set ($defLabel = "Defense")
109: #elseif ($locale == "en_gb")
110:     #set ($defLabel = "Defence")
111: #end
112: 
113: #macro (printTableHeader $label $class)
114:     ## Hack for now
115:     #set ($pos = "")
116:     #set ($pos = $formatter.escapeXml($request.getParameter("pos")))
117:     #set ($labels = $labels.get($pos))
118:     <th class="text-uppercase text-nowrap $class #if($sort == $key)table-active#end" #if($sort == $key) data-sort="1" #end data-key="$label" data-bs-toggle="tooltip" data-bs-placement="top" title="$!{labels.get($key)}">$label</th>
119: #end
120: 
121: #macro(printBriefsCategories $r)
122:     #set ($ariaLabel = "Overall Stats")
123:     #if ($r == "1")
124:         #set ($ariaLabel = "Conference Stats")
125:     #end
126:     #set ($briefsCategories = [])
127:     #if ($teamId.length() == 0 && $briefsCategoriesLabels)
128:         <div class="tab-container">
129:             #set ($activeCategory = "")
130:             #foreach ($entry in $briefsCategoriesLabels.entrySet())
131:                 #if ($foreach.first)
132:                     #set ($activeCategory = $entry.key)
133:                 #end
134:                 #if ($pos.length() > 0 && $entry.value.keySet().contains($pos))
135:                     #set ($activeCategory = $entry.key)
136:                 #end
137:             #end
138: 
139:             <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-start gap-3" id="stats-bios-secondary-tabs" role="tablist">
140:                 #foreach ($category in $briefsCategoriesLabels.entrySet())
141:                     <li class="tabs-category nav-item text-center">
142:                         <a class="nav-link #if ($category.key == $activeCategory) active #end" href="#" role="tab" data-bs-toggle="tab" data-bs-target="#stats-bio-${category.key.toLowerCase()}-${r}" aria-label="${ariaLabel}: ${category.key}">$category.key</a>
143:                     </li>
144:                 #end
145:             </ul>
146: 
147:             <div class="tab-content py-3">
148:                 #foreach($category in $briefsCategoriesLabels.entrySet())
149: 
150:                     #set ($activeSubCategory = "")
151:                     #foreach ($subCategory in $category.value.entrySet())
152:                         #if ($foreach.first)
153:                             #set ($activeSubCategory = $subCategory.value)
154:                         #end
155:                         #if ($pos == $subCategory.key)
156:                             #set ($activeSubCategory = $subCategory.value)
157:                         #end
158:                     #end
159:                     <div class="tab-pane #if ($category.key == $activeCategory) active #end" id="stats-bio-${category.key.toLowerCase()}-${r}" data-pos="$pos">
160:                         <div class="tab-container">
161:                             <div class="d-flex flex-row text-nowrap align-items-center justify-content-center">
162:                                 <div class="secondary-tab-select-container flex-fill">
163:                                     <select class="tab-nav-select-helper form-select" id="stats-bios-tertiary-select" aria-label="Choose a stat group">
164:                                         #foreach($briefsCat in $briefsCategoriesLabels.get("${category.key}").entrySet())
165:                                             <option value="#stats-bio-subs-${briefsCat.key.toLowerCase()}-${r}" #if ($briefsCat.value == $activeSubCategory || $foreach.first) selected #end>$briefsCat.value</option>
166:                                         #end
167:                                     </select>
168:                                     <script>
169:                                         $('.tab-nav-select-helper').on('change', function(e) {
170:                                             var id = $(this).val();
171:                                             $('a[data-bs-target="' + id + '"]').tab('show');
172:                                         });
173:                                     </script>
174:                                 </div>
175:                             </div>
176:                             <ul class="d-none nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-start gap-3" id="stats-bios-tertiary-tabs" role="tablist">
177:                                 #foreach($briefsCat in $briefsCategoriesLabels.get("${category.key}").entrySet())
178:                                     <li class="tabs-category nav-item">
179:                                         <a class="nav-link #if ($briefsCat.value == $activeSubCategory) active #end" href="#" role="tab" data-bs-toggle="tab" data-bs-target="#stats-bio-subs-${briefsCat.key.toLowerCase()}-${r}" aria-label="${ariaLabel}: ${category.key}: ${briefsCat.value}">$briefsCat.value</a>
180:                                     </li>
181:                                 #end
182:                             </ul>
183: 
184:                             <div class="tab-content py-3">
185:                                 #foreach($briefsCat in $briefsCategoriesLabels.get("${category.key}").entrySet())
186:                                     <div class="tab-pane #if ($briefsCat.value == $activeSubCategory) active #end" id="stats-bio-subs-${briefsCat.key.toLowerCase()}-${r}">
187:                                         #printPlayers($briefsCat.key, $r)
188:                                     </div>
189:                                 #end
190:                             </div>
191:                         </div>
192:                     </div>
193:                 #end
194:             </div>
195:         </div> ## tab-container
196:     #else
197:         #printPlayers($pos, $r)
198:     #end
199: #end  ## printBriefsCategories
200: 
201: #macro(printPlayers $p $r)
202:     $request.setAttribute("icl-dataTables-script", true)
203: 
204:     #set ($briefs = $briefs.get($positions.get($p)))
205: 
206:     #set ($sortOrder = "asc")
207:     #if (($sort == "gs") || ($sort == "gp") || ($sort == "pts") || ($sort == "ptspm"))
208:         #set ($sortOrder = "desc")
209:     #end
210: 
211:     ## player stats (conference, naia)
212:     #set ($searching = "true")
213:     #set ($paging = "true")
214:     #set ($info = "true")
215:     #set ($fixedColumnStart = 1)
216: 
217:     #if ($isIncluded || ($sort != 'name' && !$isSharedMeets))
218:         #set ($fixedColumnStart = 2)
219:     #end
220: 
221:     #if ($isIncluded)
222:         ## lineup pages
223:         #set ($searching = "false")
224:         #set ($paging = "false")
225:         #set ($info = "false")
226:     #end
227: 
228: 
229: 
230: <div class="stats-container table-responsive-via-datatables">
231:     <table class="table table-hover nowrap w-100" data-col-name="${sort}" data-sort-order="${sortOrder}" data-info="${info}" data-searching="${searching}" data-ordering="false" data-paging="${paging}" data-filter="false" data-responsive="false" data-fixed-column-start="${fixedColumnStart}" data-scroll-x="true" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js">
232:         #if ($minimum.length() > 0)
233:             <caption class="caption-side-top">$!minimum</caption>
234:         #end
235:         <thead class="thead-dark">
236:         <tr>
237:             #if ($isIncluded)
238:                 #printTableHeader("#", "text-center w-1")
239:             #elseif ($sort != 'name' && !$isSharedMeets)
240:                 #printTableHeader("Rk", "text-center w-1")
241:             #end
242: 
243:             #if ($cansort == 'n' || $isSharedMeets)
244:                 #printTableHeader("Name", "text-left")
245:             #else
246:                 <th class="text-left text-uppercase text-nowrap #if($sort.equals("name")) table-active #end">Name</th>
247:             #end
248: 
249:             #if ($isIncluded)
250:                 #printTableHeader("Yr", "text-center")
251:                 #printTableHeader("Pos", "text-center")
252:             #elseif ($isSharedMeets)
253:                 #printTableHeader("Yr", "text-center")
254:             #else
255:                 #printTableHeader("Team", "text-center")
256:             #end
257: 
258:             ## Hack for now
259:             #set ($pos = "")
260:             #set ($pos = $formatter.escapeXml($request.getParameter("pos")))
261:             #set ($labels = $labels.get($pos))
262: 
263:             #foreach ($key in $briefs.keySet())
264:                 #if ($cansort == 'n')
265:                     #printTableHeader($briefs.get($key), "text-center")
266:                 #else
267:                     <th class="text-center text-uppercase text-nowrap #if($sort == $key)table-active#end" #if($sort == $key) data-sort="1" #end data-key="$key">
268:                         <a class="text-reset" href="${url}?sort=${key}&view=${view}&pos=${p}&r=${r}" aria-label="sort table using ${briefs.get($key)}" data-bs-toggle="tooltip" data-bs-placement="top" title="$!{labels.get($key)}">${briefs.get($key)}</a>
269:                     </th>
270:                 #end
271:             #end
272:         </tr>
273:         </thead>
274:         #set ($showCount = 0)
275:         #set ($rankValue = "abb")
276:         #set ($counter = 0)
277: 
278:         <tbody>
279:             #foreach ($individual in $individuals)
280:                 #if ($r == "1")
281:                     #set ($stats = $individual.statsConference)
282:                 #else
283:                     #set ($stats = $individual.stats)
284:                 #end
285: 
286:                 #set ($individualPosition = "")
287:                 #set ($individualPosition = $individual.position)
288:                 #set ($posVec = $individualPosition.split("/"))
289:                 #set ($individualPosition = $posVec[0])
290: 
291:                 #set ($show = "")
292: 
293:                 #set ($showAllPlayers = $options.get("stats_show_all_players"))
294:                 #set ($showPosition = $lineupShowPosition && $lineupShowPosition.containsKey($p))
295:                 #set ($showStat = $lineupShowStat && $lineupShowStat.containsKey($p))
296:                 #if (!$showAllPlayers.equalsIgnoreCase("yes") and ($showPosition or $showStat or $min))
297:                     #if ($showPosition)
298:                         #set ($indPositionsList = $lineupShowPosition.get($p))
299:                         #foreach ($indPos in $indPositionsList)
300:                             #if ($individualPosition.equalsIgnoreCase($indPos))
301:                                 #set ($show = "y")
302:                             #end
303:                         #end
304:                     #end
305: 
306:                     #if ($showStat)
307:                         #set ($statsList = $lineupShowStat.get($p))
308:                         #foreach ($statElem in $statsList)
309:                             #if ($stats.get($statElem) > 0)
310:                                 #set ($show = "y")
311:                             #end
312:                         #end
313:                     #end
314: 
315:                     #if ($min)
316:                         #set ($test = 0)
317:                         #set ($test = $stats.get($min))
318:                         #if ($test > 0)
319:                             #set ($show = "y")
320:                         #end
321:                     #end
322:                 #else
323:                     #set ($show = "y")
324:                 #end
325: 
326:                 #if ($show.length() > 0)
327:                     #set ($showCount = $showCount + 1)
328:                     #if ($showCount <= 125)
329:                     <tr>
330:                         #if ($isIncluded)
331:                             <td class="text-nowrap text-center #if($sort.equals("uniform")) table-active #end">${individual.uniform}</td>
332:                         #elseif ($sort != 'name' && ! $isSharedMeets)
333:                             <td class="text-nowrap text-center">
334:                                 ## Need to figure out what value is
335:                                 #set ($value = ${stats.get($sort)})
336:                                 #if (!($value == $rankValue))
337:                                     ##This is a new rank value... let's update our ranking
338:                                     #set ($rank = $showCount)
339:                                     #set ($rankValue = $value)
340:                                 #end
341:                                 ${rank}
342:                             </td>
343:                         #end
344: 
345:                         <td class="text-nowrap text-left #if($sort.equals("name")) table-active #end">
346:                             #if ($isSharedMeets)
347:                                 ${individual.firstName} ${individual.lastName}
348:                             #else
349:                                 <a href="${page.url}/${individual.pageName}">
350:                                     #if ($isIncluded)
351:                                         ${individual.firstName}
352:                                     #elseif ($individual.firstName.length() > 0)
353:                                         ${individual.firstName.substring(0, 1)}
354:                                     #end
355:                                     ${individual.lastName}
356:                                 </a>
357:                             #end
358:                         </td>
359: 
360:                         #if ($isIncluded)
361:                             <td class="text-nowrap text-center">$!{individual.year}</td>
362:                             <td class="text-nowrap text-center">
363:                                 #if ($individual.positionAbbreviation)
364:                                     $!individual.positionAbbreviation
365:                                 #else
366:                                     $!individual.position
367:                                 #end
368:                             </td>
369:                         #elseif ($isSharedMeets)
370:                             <td class="text-nowrap text-center">$!{individual.year}</td>
371:                         #else
372:                             #set ($teamname = "")
373:                             #set ($teamname = $individual.team)
374: 
375:                             ## TRY AND GRAB ALL THE TEAMS PAGES FROM WITHIN THE /CONF SECTION SETUP
376:                             ## THIS ALLOWS US TEAM NAMES TO LINK TO TEAMS STATS PAGE WITHIN THE /CONF SECTION IF SETUP
377:                             $!request.setAttribute("pageObj", $page)
378:                             $website.includeAgain("get-conf-pages?pageName=teams")
379:                             #set ($confPages = $!request.getAttribute("conf_pages"))
380:                             #set ($confTeams = {})
381:                             
382:                             ## THIS BUILDS A MAPPING OF CONFERENCE NAMES AND THEIR ASSOCIATED TEAMS FROM THE TEAMS PAGE
383:                             #foreach ($conf in $confPages)
384:                                 #set ($ignore = $confTeams.put("$conf.name", { "teamsPage": $conf.pageObj, "teams": $conf.pageObj.teams }))
385:                             #end
386: 
387:                             #set ($teamsURL = "teams?id=${individual.teamId}")
388:                             #foreach ($entry in $confTeams.entrySet())
389:                                 #if ($entry.value.teams.containsValue($teamname))
390:                                     #set ($teamURL = "${entry.value.teamsPage.url}?id=${individual.teamId}")
391:                                 #end
392:                             #end
393: 
394:                             #if($teamAbbr.size() > 0)
395:                                 ## THIS IS USED ONLY FOR SITES WANTING TO DISPLAY DIVISONS WITHIN THERE STATS
396:                                 #*
397:                                 #set ($teamname = $teamAbbr.get($individual.teamId))
398:                                 #set ($teamname = $teamAbbr.get($individual.team))
399:                                  *#
400:                             #end
401: 
402:                             <td class="text-nowrap text-center #if($sort.equals("team")) table-active #end">
403:                                 #if ($teamname.length() > 0)
404:                                     <a href="$teamsURL">${teamname}</a>
405:                                 #end
406:                             </td>
407:                         #end
408: 
409:                         ## Briefs
410:                         #foreach ($key in $briefs.keySet())
411:                             #set ($value = "-")
412:                             #set ($value = $formatter.formatNumber(${stats.get($key)}, $!formats.get($key)))
413:                             <td class="text-center text-nowrap #if($sort == $key) table-active #end" data-sort="$sort" data-key="$key">
414:                                 #if ($value.length() > 0)
415:                                     $value
416:                                 #else
417:                                     -
418:                                 #end
419:                             </td>
420:                         #end
421:                     </tr>
422:                     #end ## page limit
423:                 #end ## showing
424:             #end ## foreach individual
425:         </tbody>
426:         #if ($individuals.size() == 0)
427:             <caption>
428:                 #if ($isSharedMeets)
429:                     This team's roster is empty
430:                 #elseif ($hasBiosBeforeFilter)
431:                     No players meet the minimum
432:                 #else
433:                     No stats are available at this time
434:                 #end
435:             </caption>
436:         #end
437:     </table>
438: </div>
439:     #if ($isIncluded || $showTotalRow)
440:     <div class="table-totals mb-3 small text-start text-muted p-2">
441:         <div class="d-flex align-items-center justify-content-start totals gap-2 mb-2 flex-column flex-md-row">
442:             <div class="heading text-center text-md-end col-12 col-md-3 fw-bold">Totals</div>
443:             #set ($teamStats = $request.getAttribute("teamStats"))
444:             <div class="calculated-totals flex-fill w-100 m-0">
445:                 <ul class="m-0 list-unstyled d-flex flex-wrap justify-content-center align-items-stretch border-top border-start">
446:                     #foreach ($key in $briefs.keySet())
447:                         #set ($value = "-")
448:                         #set ($value = $formatter.formatNumber(${teamStats.get($key)}, $!formats.get($key)))
449:                         <li class="flex-fill text-center border-bottom border-end p-2 flex-fill">
450:                             <div class="d-flex flex-column justify-content-center align-items-center h-100">
451:                                 <span class="uppercase key initialism">$briefs.get($key)</span>
452:                                 <span class="value fw-bold m-0 lh-1 nowrap">#if ($value.length() > 0)${value}#else-#end</span>
453:                             </div>
454:                         </li>
455:                     #end
456:                 </ul>
457:             </div>
458:         </div>
459:         <div class="d-flex align-items-center justify-content-start opponent-totals gap-2 mb-2 flex-column flex-md-row">
460:             <div class="heading text-center text-md-end col-12 col-md-3 fw-bold">Opponents</div>
461:             <div class="calculated-totals flex-fill w-100 m-0">
462:                 <ul class="m-0 list-unstyled d-flex flex-wrap justify-content-center align-items-stretch border-top border-start">
463:                     #foreach ($key in $briefs.keySet())
464:                         #set ($keyopp = "${key}opp")
465:                         #set ($value = "-")
466:                         #set ($value = $formatter.formatNumber(${teamStats.get($keyopp)}, $!formats.get($key)))
467:                         <li class="flex-fill text-center border-bottom border-end p-2 flex-fill">
468:                             <div class="d-flex flex-column justify-content-center align-items-center h-100">
469:                                 <span class="uppercase key initialism">$briefs.get($key)</span>
470:                                 <span class="value fw-bold m-0 lh-1 nowrap">#if ($value.length() > 0)${value}#else-#end</span>
471:                             </div>
472:                         </li>
473:                     #end
474:                 </ul>
475:             </div>
476:         </div>
477:     </div>
478:     #end
479: #end ## printPlayers
480: 
481: #macro (printFilters)
482:     <div class="p-3 border my-3 d-print-none">
483:         <div class="btn-toolbar d-flex justify-content-between gap-3 flex-column flex-sm-row flex-sm-nowrap" role="toolbar" aria-label="Standings tool bar">
484:             ## #printTeamsFilter
485:             <div class="flex-fill">
486:                 <div class="d-flex flex-wrap align-items-end justify-content-between gap-3 flex-row">
487:                     $!request.setAttribute("pageObj", $page)
488:                     $website.include("conf-season-filter-template")
489:                 </div>
490:             </div>
491:             <div class="" role="group" aria-label="Print friendly version">
492:                 <a href="${page.url}?dec=printer-decorator" class="btn btn-outline-secondary text-nowrap"><span class="fa fa-print"></span> Print</a>
493:             </div>
494:         </div>
495:     </div>
496: #end ## printFilters
497: 
498: ### END MACROS ###
499: 
500: ## TEAMS LAYOUTS FOR SHARED MEETS
501: #if ($isSharedMeets && !$isSingleTeam)
502: 
503:     #set ($teams = $tool.sorter.sort($page.teams.entrySet(), "value"))
504:     #set ($teamsThreshold = 20)
505: 
506:     #if ($page.title.length() > 0)
507:     <h1>$page.title</h1>
508:     #else
509:     <h1>Teams</h1>
510:     #end
511: 
512:     #if ($teams.size() > $teamsThreshold)
513: 
514:         #set ($alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
515: 
516:     <div class="alphabet-filter" data-module="stats/alphabet-filter">
517:         <div class="alphabet-filter-chars">
518:             <span class="alphabet-filter-border"> | </span>
519:             #foreach ($alphabet in $alphabets.split(""))
520:                 #if ($alphabet.length() > 0)
521:                     <a href="#alphabet-filter-${alphabet}" class="alphabet-filter-char">$alphabet</a>
522:                     <span class="alphabet-filter-border"> | </span>
523:                 #end
524:             #end
525:         </div> ## alphabet-filter-char
526: 
527:     <div class="alphabet-filter-list">
528:     <div class="alphabet-filter-column">
529:         #set ($lastAlphabet = "")
530:         #set ($counter = 0)
531: 
532:         #foreach ($team in $teams)
533:             #set ($teamName = $team.value)
534: 
535:             #if ($teamName.charAt(0) != $lastAlphabet)
536:                 #set ($counter = $counter + 1)
537:                 #if ($counter > 1)
538:                 </div> ## alphabet-filter-section
539:                 #end
540:                 #if ($counter == 8 || $counter == 15)
541:                 </div> ## alphabet-filter-column
542:                 <div class="alphabet-filter-column">
543:                 #end
544:                 #set ($lastAlphabet = $teamName.charAt(0))
545:             <div class="alphabet-filter-section" id="alphabet-filter-${lastAlphabet}">
546:                 <h4 class="alphabet-filter-char-title">| $lastAlphabet |</h4>
547:             #end
548:             <a href="${page.url}?teamId=${team.key}" class="alphabet-filter-link">$teamName</a>
549:         #end
550:     </div> ## alphabet-filter-section
551:     </div> ## alphabet-filter-column
552:     </div> ## alphabet-filter-list
553:     </div> ## alphabet-filter
554: 
555:     #else ## plain list
556: 
557:     <div class="stats-container table-responsive">
558:         <table class="table table-hover">
559:             #foreach ($team in $teams)
560:                 <tr><td class="text"><a href="${page.url}?teamId=${team.key}">$team.value</a></td></tr>
561:             #end
562:             #if ($teams.size() == 0)
563:                 <tr><td>There are no teams that match this criteria</td></tr>
564:             #end
565:         </table>
566:     </div>
567: 
568:     #end ## teams threshold
569: 
570:     ## TEAMINFO ROSTER LAYOUT
571: #elseif ($isIncluded && $view == 'roster')
572: 
573:     #set ($baseball = $sport && $sport.XMLCode == "bsgame")
574: <div class="stats-container table-responsive table-responsive-webkit-overflow-scroll-fix">
575:     <table class="table table-hover">
576:         <thead class="thead-dark">
577:         <tr>
578:             <th scope="col" class="text-nowrap text-center w-1">#</th>
579:             <th scope="col" class="text-nowrap text-left text-start text-uppercase pinned-col">Name</th>
580:             <th scope="col" class="text-nowrap text-center text-uppercase ">Position</th>
581:             <th scope="col" class="text-nowrap text-center text-uppercase">Year</th>
582:             <th scope="col" class="text-nowrap text-center text-uppercase">Status</th>
583:             #if ($baseball)
584:                 <th scope="col" class="text-nowrap text-center text-uppercase">Height</th>
585:                 <th scope="col" class="text-nowrap text-center text-uppercase">Weight</th>
586:                 <th scope="col" class="text-nowrap text-center text-uppercase">Bats</th>
587:                 <th scope="col" class="text-nowrap text-center text-uppercase">Throws</th>
588:                 <th scope="col" class="text-nowrap text-center text-uppercase">DOB</th>
589:                 <th scope="col" class="text-nowrap text-left text-uppercase">Hometown</th>
590:             #end
591:         </tr>
592:         </thead>
593:         <tbody>
594:             #foreach ($individual in $individuals)
595:             <tr data-additional-roster-status="$additionalRosterStatus" data-player-status="$individual.playerStatus" data-active="$individual.active" #if($additionalRosterStatus && $individual.playerStatus == "Inactive") class="table-warning #if(!$wiki.valid()) d-none #end" #end>
596:                 <td scope="row" class="text text-center">${individual.uniform}</td>
597:                 <td class="text text-left text-start pinned-col">
598:                     <a href="${page.url}/${individual.pageName}">${individual.firstName} ${individual.lastName}</a>
599:                 </td>
600:                 <td class="text-center">
601:                     #if ($individual.positionAbbreviation)
602:                 $!individual.positionAbbreviation
603:               #else
604:                         $!individual.position
605:                     #end
606:                 </td>
607:                 <td class="text-center">$!{individual.year}</td>
608:                 <td class="text-center">
609:                     #if($additionalRosterStatus)
610:                         $individual.playerStatus
611:                     #elseif ($individual.active)
612:                         Active
613:                     #else
614:                         Inactive
615:                     #end
616:                 </td>
617:                 #if ($baseball)
618:                     <td class="text-center">$!{individual.dataMap["height"]}</td>
619:                     <td class="text-center">$!{individual.dataMap["weight"]}</td>
620:                     <td class="text-center">$!{individual.dataMap["bats"]}</td>
621:                     <td class="text-center">$!{individual.dataMap["throws"]}</td>
622:                     <td class="text-center">$!{individual.dataMap["born"]}</td>
623:                     <td class="text-left text-start">$!{individual.dataMap["hometown"]}</td>
624:                 #end
625:             </tr>
626:             #end
627:         </tbody>
628:     </table>
629: </div>
630: 
631:     ## SHARED MEETS PLAYERS
632: #elseif ($isSharedMeets)
633: 
634:     #if ($teamId)
635:         #set ($playersPageTitle = $page.title)
636:         #foreach($team in $page.teams.entrySet())
637:             #if ($teamId == $team.key)
638:                 #set ($playersPageTitle = $team.value)
639:             #end
640:         #end
641:     <h1>$playersPageTitle</h1>
642:     #end
643: 
644:     #printPlayers($pos, $restriction)
645: 
646:     ## PLAYERS / LINEUP
647: #else
648: 
649:     ## do not show these options on the lineup page
650:     #if (not $isIncluded)
651: 
652:         #if ($isAjax)
653:             $website.decorate('')
654:             #printPlayers($pos $restriction)
655:         #stop
656:         #end
657: 
658:         ## ARCHIVES
659:         #if ($page.contentType == "stat/bios")
660:         <div class="float-end">$website.include("navbar-playerstats-archive?tmpl=schedule-archive-list-template")</div>
661:         #end
662: 
663:         #if ($page.title.length() > 0 && !$isSharedMeets)
664:         <h1>$page.title</h1>
665:         #else
666:         <h1>Player Stats</h1>
667:         #end
668: 
669:         #printFilters
670: 
671:         ##if ($minimum.length() > 0)
672:     <!--<div class="clearfix align-right">$!minimum</div>-->
673:         ##end
674: 
675:         #if ($showconf && !$isSharedMeets)
676:             $request.setAttribute("icl-responsive-tabs-script", true)
677:             <div class="tab-container">
678:                 <div class="tab-nav m-0">
679:                     <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-start gap-3" id="stats-bios-primary-tabs" role="tablist">
680:                         <li class="nav-item flex-fill flex-md-grow-0 flex-md-shrink-0">
681:                             <a class="nav-link text-nowrap text-center #if ($restriction == "0") active #end" href="${url}?sort=${sort}&view=${view}&pos=${pos}&r=0" role="tab" data-bs-toggle="tab" data-bs-target="#overall" aria-controls="overall" aria-selected="true">Overall</a>
682:                         </li>
683:                         <li class="nav-item flex-fill flex-md-grow-0 flex-md-shrink-0">
684:                             <a class="nav-link text-nowrap text-center #if ($restriction == "1") active #end" href="${url}?sort=${sort}&view=${view}&pos=${pos}&r=1" role="tab" data-bs-toggle="tab" data-bs-target="#conf" aria-controls="conf">Conference</a>
685:                         </li>
686:                     </ul>
687:                 </div>
688: 
689:                 <div class="tab-content p-3 border">
690:                     <div class="tab-pane #if ($restriction.equals("0")) active #end" role="tabpanel" id="overall">
691:                         #printBriefsCategories("0")
692:                     </div>
693:                     <div class="tab-pane #if ($restriction.equals("1")) active #end" role="tabpanel" id="conf">
694:                         #printBriefsCategories("1")
695:                     </div>
696:                 </div>
697:             </div> ## tab-container overall/conf
698:         #else
699:             #printBriefsCategories($restriction)
700:         #end
701: 
702:     #else
703:         #printBriefsCategories($restriction)
704:     #end ## not isIncluded
705: #end ## LAYOUTS
706: 
707: $wiki.su