Player Stats

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