#19 Sam Haaf (P) - MCLA

app
2
gs
0
w
0
l
0
sv
0
ip
3.0
era
0.00
k
-
Player Stats
  | Overall | Conf | ||
---|---|---|---|---|
Games | 2 | - | ||
Plate appearances | 0 | 0 | ||
At Bats | 0 | - | ||
Runs | 0 | - | ||
Hits | 0 | - | ||
Doubles | - | - | ||
Triples | - | - | ||
Home Runs | - | - | ||
Runs Batted In | 0 | - | ||
Total bases | 0 | 0 | ||
Walks | - | - | ||
Hit by pitch | - | - | ||
Strikeouts | - | - | ||
Sacrifice Flies | - | - | ||
Sacrifice Hits | - | - | ||
Hit into double play | - | - | ||
Stolen Bases | - | - | ||
Caught Stealing | - | - | ||
Batting Average | - | - | ||
On Base Percentage | - | - | ||
Slugging Percentage | - | - | ||
Appearances | 2 | - | ||
Games started | 0 | - | ||
Wins | 0 | - | ||
Losses | 0 | - | ||
Saves | 0 | - | ||
Complete Games | - | - | ||
Shutouts | - | - | ||
Innings Pitched | 3.0 | 0.0 | ||
Hits | 3 | - | ||
Runs | - | - | ||
Earned Runs | - | - | ||
Walks | - | - | ||
Strikeouts | - | - | ||
Strikeouts per Game | .00 | .00 | ||
Doubles Allowed | 1 | - | ||
Triples Allowed | - | - | ||
Home Runs Allows | - | - | ||
At Bats Against | 11 | - | ||
Batting Average Against | .273 | - | ||
Earned Run Average | 0.00 | 0.00 | ||
Wild pitches | - | - | ||
Hit Batters | 1 | - | ||
Balks | - | - | ||
Sacrifice Flies Allowed | - | - | ||
Sacrifice Hits Allowed | - | - | ||
Total Chances | 0 | 0 | ||
Put Outs | 0 | - | ||
Assists | 0 | - | ||
Errors | 0 | - | ||
Fielding Percentage | - | - | ||
Double Plays | - | - | ||
Stolen Bases Allowed | - | - | ||
Runners Caught Stealing | - | - | ||
Runners Caught Stealing Percentage | - | - | ||
Passed Balls | - | - | ||
Catcher's Interference | - | - |
Date | Opponent | Score | ab | r | h | 2b | 3b | hr | rbi | bb | k | sb | cs |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Feb 29 | vs. SUNY Cobleskill | L, 9-7 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Feb 29 | vs. SUNY Cobleskill | L, 11-0 | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | vs. SUNY Cobleskill | W, 13-6 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 1 | vs. SUNY Cobleskill | L, 10-9 | - | - | - | - | - | - | - | - | - | - | - |
Mar 8 | vs. Mt. St. Vincent | W, 8-6 | - | - | - | - | - | - | - | - | - | - | - |
Mar 8 | vs. Mt. St. Vincent | W, 3-2 | - | - | - | - | - | - | - | - | - | - | - |
Mar 13 | vs. Colby-Sawyer | - | - | - | - | - | - | - | - | - | - | - | |
Mar 13 | vs. Colby-Sawyer | - | - | - | - | - | - | - | - | - | - | - | |
Mar 14 | vs. Hamilton | - | - | - | - | - | - | - | - | - | - | - | |
Mar 16 | vs. SUNY Poly | - | - | - | - | - | - | - | - | - | - | - | |
Mar 16 | vs. SUNY Poly | - | - | - | - | - | - | - | - | - | - | - | |
Mar 18 | vs. Minn.-Morris | - | - | - | - | - | - | - | - | - | - | - | |
Mar 18 | vs. Minn.-Morris | - | - | - | - | - | - | - | - | - | - | - | |
Mar 19 | vs. Me.-Presque Isle | - | - | - | - | - | - | - | - | - | - | - | |
Mar 20 | vs. Me.-Farmington | - | - | - | - | - | - | - | - | - | - | - | |
Mar 24 | at Rensselaer | - | - | - | - | - | - | - | - | - | - | - | |
Mar 27 | at Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | |
Mar 28 | Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | |
Mar 28 | Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 1 | at Westfield St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 3 | at Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 4 | Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 4 | Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 7 | Westfield St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 7 | Westfield St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 9 | Worcester St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 10 | at Worcester St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 10 | at Worcester St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 14 | at Union (N.Y.) | - | - | - | - | - | - | - | - | - | - | - | |
Apr 17 | Salem St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 18 | at Salem St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 18 | at Salem St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 23 | at Anna Maria | - | - | - | - | - | - | - | - | - | - | - | |
Apr 24 | Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | |
Apr 25 | at Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | |
Apr 25 | at Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | |
Apr 29 | at Williams | - | - | - | - | - | - | - | - | - | - | - | |
May 1 | at Framingham St. | - | - | - | - | - | - | - | - | - | - | - | |
May 2 | Framingham St. | - | - | - | - | - | - | - | - | - | - | - | |
May 2 | Framingham St. | - | - | - | - | - | - | - | - | - | - | - |
Date | Opponent | Score | hbp | sf | sh | tb | xbh | hdp | go | fo | go/fo | pa |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Feb 29 | vs. SUNY Cobleskill | L, 9-7 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Feb 29 | vs. SUNY Cobleskill | L, 11-0 | - | - | - | - | - | - | - | - | - | - |
Mar 1 | vs. SUNY Cobleskill | W, 13-6 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 1 | vs. SUNY Cobleskill | L, 10-9 | - | - | - | - | - | - | - | - | - | - |
Mar 8 | vs. Mt. St. Vincent | W, 8-6 | - | - | - | - | - | - | - | - | - | - |
Mar 8 | vs. Mt. St. Vincent | W, 3-2 | - | - | - | - | - | - | - | - | - | - |
Mar 13 | vs. Colby-Sawyer | - | - | - | - | - | - | - | - | - | - | |
Mar 13 | vs. Colby-Sawyer | - | - | - | - | - | - | - | - | - | - | |
Mar 14 | vs. Hamilton | - | - | - | - | - | - | - | - | - | - | |
Mar 16 | vs. SUNY Poly | - | - | - | - | - | - | - | - | - | - | |
Mar 16 | vs. SUNY Poly | - | - | - | - | - | - | - | - | - | - | |
Mar 18 | vs. Minn.-Morris | - | - | - | - | - | - | - | - | - | - | |
Mar 18 | vs. Minn.-Morris | - | - | - | - | - | - | - | - | - | - | |
Mar 19 | vs. Me.-Presque Isle | - | - | - | - | - | - | - | - | - | - | |
Mar 20 | vs. Me.-Farmington | - | - | - | - | - | - | - | - | - | - | |
Mar 24 | at Rensselaer | - | - | - | - | - | - | - | - | - | - | |
Mar 27 | at Fitchburg St. | - | - | - | - | - | - | - | - | - | - | |
Mar 28 | Fitchburg St. | - | - | - | - | - | - | - | - | - | - | |
Mar 28 | Fitchburg St. | - | - | - | - | - | - | - | - | - | - | |
Apr 1 | at Westfield St. | - | - | - | - | - | - | - | - | - | - | |
Apr 3 | at Bridgewater St. | - | - | - | - | - | - | - | - | - | - | |
Apr 4 | Bridgewater St. | - | - | - | - | - | - | - | - | - | - | |
Apr 4 | Bridgewater St. | - | - | - | - | - | - | - | - | - | - | |
Apr 7 | Westfield St. | - | - | - | - | - | - | - | - | - | - | |
Apr 7 | Westfield St. | - | - | - | - | - | - | - | - | - | - | |
Apr 9 | Worcester St. | - | - | - | - | - | - | - | - | - | - | |
Apr 10 | at Worcester St. | - | - | - | - | - | - | - | - | - | - | |
Apr 10 | at Worcester St. | - | - | - | - | - | - | - | - | - | - | |
Apr 14 | at Union (N.Y.) | - | - | - | - | - | - | - | - | - | - | |
Apr 17 | Salem St. | - | - | - | - | - | - | - | - | - | - | |
Apr 18 | at Salem St. | - | - | - | - | - | - | - | - | - | - | |
Apr 18 | at Salem St. | - | - | - | - | - | - | - | - | - | - | |
Apr 23 | at Anna Maria | - | - | - | - | - | - | - | - | - | - | |
Apr 24 | Mass. Maritime | - | - | - | - | - | - | - | - | - | - | |
Apr 25 | at Mass. Maritime | - | - | - | - | - | - | - | - | - | - | |
Apr 25 | at Mass. Maritime | - | - | - | - | - | - | - | - | - | - | |
Apr 29 | at Williams | - | - | - | - | - | - | - | - | - | - | |
May 1 | at Framingham St. | - | - | - | - | - | - | - | - | - | - | |
May 2 | Framingham St. | - | - | - | - | - | - | - | - | - | - | |
May 2 | Framingham St. | - | - | - | - | - | - | - | - | - | - |
Date | Opponent | Score | gs | w | l | sv | ip | h | r | er | era | bb | k | hr |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Feb 29 | vs. SUNY Cobleskill | L, 9-7 | 0 | 0 | 0 | 0 | 2.0 | 2 | - | - | 0.00 | - | - | - |
Feb 29 | vs. SUNY Cobleskill | L, 11-0 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | vs. SUNY Cobleskill | W, 13-6 | 0 | 0 | 0 | 0 | 1.0 | 1 | - | - | 0.00 | - | - | - |
Mar 1 | vs. SUNY Cobleskill | L, 10-9 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 8 | vs. Mt. St. Vincent | W, 8-6 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 8 | vs. Mt. St. Vincent | W, 3-2 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 13 | vs. Colby-Sawyer | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 13 | vs. Colby-Sawyer | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 14 | vs. Hamilton | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 16 | vs. SUNY Poly | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 16 | vs. SUNY Poly | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 18 | vs. Minn.-Morris | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 18 | vs. Minn.-Morris | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 19 | vs. Me.-Presque Isle | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 20 | vs. Me.-Farmington | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 24 | at Rensselaer | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 27 | at Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 28 | Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Mar 28 | Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 1 | at Westfield St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 3 | at Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 4 | Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 4 | Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 7 | Westfield St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 7 | Westfield St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 9 | Worcester St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 10 | at Worcester St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 10 | at Worcester St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 14 | at Union (N.Y.) | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 17 | Salem St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 18 | at Salem St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 18 | at Salem St. | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 23 | at Anna Maria | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 24 | Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 25 | at Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 25 | at Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | - | |
Apr 29 | at Williams | - | - | - | - | - | - | - | - | - | - | - | - | |
May 1 | at Framingham St. | - | - | - | - | - | - | - | - | - | - | - | - | |
May 2 | Framingham St. | - | - | - | - | - | - | - | - | - | - | - | - | |
May 2 | Framingham St. | - | - | - | - | - | - | - | - | - | - | - | - |
Date | Opponent | Score | tc | po | a | e | fpct | dp | sba | rcs | rcs% | pb | ci |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Feb 29 | vs. SUNY Cobleskill | L, 9-7 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Feb 29 | vs. SUNY Cobleskill | L, 11-0 | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | vs. SUNY Cobleskill | W, 13-6 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Mar 1 | vs. SUNY Cobleskill | L, 10-9 | - | - | - | - | - | - | - | - | - | - | - |
Mar 8 | vs. Mt. St. Vincent | W, 8-6 | - | - | - | - | - | - | - | - | - | - | - |
Mar 8 | vs. Mt. St. Vincent | W, 3-2 | - | - | - | - | - | - | - | - | - | - | - |
Mar 13 | vs. Colby-Sawyer | - | - | - | - | - | - | - | - | - | - | - | |
Mar 13 | vs. Colby-Sawyer | - | - | - | - | - | - | - | - | - | - | - | |
Mar 14 | vs. Hamilton | - | - | - | - | - | - | - | - | - | - | - | |
Mar 16 | vs. SUNY Poly | - | - | - | - | - | - | - | - | - | - | - | |
Mar 16 | vs. SUNY Poly | - | - | - | - | - | - | - | - | - | - | - | |
Mar 18 | vs. Minn.-Morris | - | - | - | - | - | - | - | - | - | - | - | |
Mar 18 | vs. Minn.-Morris | - | - | - | - | - | - | - | - | - | - | - | |
Mar 19 | vs. Me.-Presque Isle | - | - | - | - | - | - | - | - | - | - | - | |
Mar 20 | vs. Me.-Farmington | - | - | - | - | - | - | - | - | - | - | - | |
Mar 24 | at Rensselaer | - | - | - | - | - | - | - | - | - | - | - | |
Mar 27 | at Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | |
Mar 28 | Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | |
Mar 28 | Fitchburg St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 1 | at Westfield St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 3 | at Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 4 | Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 4 | Bridgewater St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 7 | Westfield St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 7 | Westfield St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 9 | Worcester St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 10 | at Worcester St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 10 | at Worcester St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 14 | at Union (N.Y.) | - | - | - | - | - | - | - | - | - | - | - | |
Apr 17 | Salem St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 18 | at Salem St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 18 | at Salem St. | - | - | - | - | - | - | - | - | - | - | - | |
Apr 23 | at Anna Maria | - | - | - | - | - | - | - | - | - | - | - | |
Apr 24 | Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | |
Apr 25 | at Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | |
Apr 25 | at Mass. Maritime | - | - | - | - | - | - | - | - | - | - | - | |
Apr 29 | at Williams | - | - | - | - | - | - | - | - | - | - | - | |
May 1 | at Framingham St. | - | - | - | - | - | - | - | - | - | - | - | |
May 2 | Framingham St. | - | - | - | - | - | - | - | - | - | - | - | |
May 2 | Framingham St. | - | - | - | - | - | - | - | - | - | - | - |
There was a problem with a Velocity script | |
Page | bio-network-template |
Error | VM #printCategories: too few arguments to macro. Wanted 3 got 2 at bio-network-template[line 522, column 41] |
Page source: |
1: ## PICK UP OPTIONS 2: $website.include("options") 3: #set ($options = $request.getAttribute("options")) 4: #set ($locale = "en_us") 5: #set ($locale = $options.get("locale")) 6: 7: #set ($showconf = true) 8: #if ($options.get("stats_hide_conference") and $options.get("stats_hide_conference").equalsIgnoreCase("hide")) 9: #set ($showconf = false) 10: #end 11: 12: #set ($showCareer = $wiki.valid() && $seasons) 13: #if ("yes" == $options.get("stats_show_career") && $seasons) 14: #set ($showCareer = "yes") 15: #end 16: 17: #if ($locale == "en_us") 18: #set ($defLabel = "Defense") 19: #elseif ($locale == "en_gb") 20: #set ($defLabel = "Defence") 21: #end 22: 23: #set ($pos = "") 24: #set ($pos = $attributes.get("position")) 25: #set ($posVec = $pos.split("/")) 26: #set ($pos = $posVec[0]) 27: #set ($pos = $pos.toLowerCase()) 28: 29: #set ($statPos = $positions.get($pos)) 30: #set ($paramPos = $request.getParameter("pos").toLowerCase()) 31: #set ($highlights = $highlights.get($statPos)) 32: 33: #set ($url = ${page.url}) 34: #set ($playerId = $attributes.get("playerId")) 35: #set ($stats = $splits.overall) 36: 37: #set ($hasEvents = $events.size() > 0) 38: #set ($hasSynopsis = $synopsis.length() > 1 && $synopsis.indexOf("<center>") == -1) 39: #set ($htmlStatsURL = "${page.url}-stats") 40: #set ($hasHTMLStats = $website.exists($htmlStatsURL)) 41: #set ($bioBriefURL = "${page.url}-brief") 42: #set ($hasBioBrief = $website.exists("$bioBriefURL")) 43: 44: $request.setAttribute("careerTotals", $career) 45: ## We track a map of the careers to see if we are missing any seasons 46: #set ($careerMap = {}) 47: $request.setAttribute("careerMap", $careerMap) 48: #foreach ($season in $seasons) 49: ## We need to include this season stats 50: #set ($path = "${season.path}?tmpl=bio-career-template&name=${season.seasonName}&pos=${statPos}&print=no") 51: ###set ($path = $path.replace("../..", $page.sectionPage.sectionPage.sectionPage.url)) 52: $website.includeAgain($path) 53: #end 54: 55: #set ($view = "profile") 56: #if ($request.getParameter("view")) 57: #set ($view = $request.getParameter("view")) 58: #end 59: 60: #################################### MACROS #################################################### 61: #macro (printTableHeader $label $class) 62: <th class="text-uppercase $class">$label</th> 63: #end 64: 65: #macro (printCellClass) 66: class="text-nowrap" 67: #end 68: 69: #macro (printTab $viewParam $label) 70: #set ($classAttr = "nav-link text-nowrap") 71: #if ($viewParam == $view) 72: #set ($classAttr = "${classAttr} active") 73: #end 74: <li class="nav-item"> 75: <a href="${page.url}?view=${viewParam}" class="$classAttr" role="tab" data-toggle="tab" data-target="#${viewParam}" aria-selected="true" aria-controls="$viewParam">$label</a> 76: </li> 77: #end 78: 79: #macro (printPaneAttrs $viewParam) 80: #set ($classAttr = "tab-pane") 81: #if ($viewParam == $view) 82: #set ($classAttr = "tab-pane active") 83: #else 84: #set ($classAttr = "${classAttr} fade") 85: #end 86: 87: class="$classAttr" role="tabpanel" id="$viewParam" 88: #end 89: 90: #macro (printResultAriaLabel $event) 91: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}") 92: #if ($event.neutralSite.length() > 0 || $event.home) 93: #set ($ariaLabel = "${ariaLabel} vs.") 94: #else 95: #set ($ariaLabel = "${ariaLabel} at") 96: #end 97: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:") 98: #if ($event.neutralSite.length() > 0) 99: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:") 100: #end 101: #set ($ariaLabel = "${ariaLabel} Box Score") 102: aria-label="$ariaLabel" 103: #end 104: 105: #macro (printHighlights) 106: #if ($highlights) 107: <div class="d-flex flex-wrap mb-3 bg-light"> 108: #foreach ($highlight in $highlights.keySet()) 109: #set ($value = "-") 110: #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight))) 111: #set ($classAttr = "flex-fill border p-2 text-center") 112: #if ($velocityCount > 1) 113: ## #set ($classAttr = "nav-item border-left") 114: #end 115: <div class="$classAttr" style="min-width:100px"> 116: <div class="text-uppercase">$!highlights.get($highlight)</div> 117: <div class="h5 m-0">$!value</div> 118: </div> 119: #end 120: </div> 121: #end 122: #end ## macro printHighlights 123: 124: #macro (splitBioNetwork $statPosBriefs $label $stats) 125: <tr> 126: <td #printCellClass>${label}</td> 127: #foreach ($brief in $statPosBriefs.keySet()) 128: #set ($value = "-") 129: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief))) 130: <td #printCellClass>#if ($value.length() > 0) $value #else - #end</td> 131: #end 132: </tr> 133: #end ## marco split 134: 135: #macro (printCategories $briefCategoryLabels $viewParam) 136: #printSubTabs($briefCategoryLabels.entrySet(), $viewParam) 137: 138: <div class="tab-content"> 139: #foreach ($briefCat in $briefCategoryLabels.entrySet()) 140: #set ($briefCatLabel = $briefCat.value) 141: #set ($class = "tab-pane") 142: #if ($briefCat.key == $activePos) 143: #set ($class = "tab-pane active") 144: #end 145: <div id="${viewParam}-${briefCat.key}" class="$class" role="tabpanel"> 146: <div class="stats-wrap clearfix"> 147: #if ($viewParam == "splits") 148: #splitsBioNetworkData($briefCat.key) 149: #elseif ($viewParam == "career") 150: #careerData($briefCat.key) 151: #end 152: </div> 153: </div> 154: #end 155: </div> 156: #end ## macro printCategories 157: 158: #macro (splitsBioNetworkData $p) 159: #set ($p = $positions.get($p)) 160: #set ($statPosBriefs = $briefs.get($p)) 161: #set ($colspan = $statPosBriefs.size() + 1) 162: 163: <div class="stats-container table-responsive"> 164: <table class="table table-hover table-sm"> 165: <thead class="thead-dark"> 166: <tr> 167: <td> </td> 168: #foreach ($brief in $statPosBriefs) 169: #printTableHeader($brief, "") 170: #end 171: </tr> 172: </thead> 173: #splitBioNetwork($statPosBriefs, "Total", $splits.overall) 174: #if ($showconf) 175: #splitBioNetwork($statPosBriefs, "Conference", $splits.conference) 176: #end 177: #splitBioNetwork($statPosBriefs, "Exhibition", $splits.exhibition) 178: 179: <tr> 180: <td colspan="$colspan" class="text-center">-</td> 181: </tr> 182: 183: #splitBioNetwork($statPosBriefs, "Home", $splits.home) 184: #splitBioNetwork($statPosBriefs, "Away", $splits.away) 185: #splitBioNetwork($statPosBriefs, "Neutral", $splits.neutral) 186: 187: <tr> 188: <td colspan="$colspan" class="text-center">-</td> 189: </tr> 190: 191: #foreach($gameResult in $gamesResults.entrySet()) 192: #if ($gameResult.key == "wins") 193: #set ($splitGameResult = $splits.inWins) 194: #elseif ($gameResult.key == "losses") 195: #set ($splitGameResult = $splits.inLosses) 196: #elseif ($gameResult.key == "ties") 197: #set ($splitGameResult = $splits.inTies) 198: #end 199: 200: #splitBioNetwork($statPosBriefs, $gameResult.value, $splitGameResult) 201: #end 202: 203: <tr> 204: <td colspan="$colspan" class="text-center">-</td> 205: </tr> 206: 207: #if ($monthsPlayed and $monthsPlayed.size() > 0) 208: #foreach($month in $monthsPlayed) 209: #if ($month == 'January') 210: #set ($splitMonth = $splits.january) 211: #elseif ($month == 'February') 212: #set ($splitMonth = $splits.february) 213: #elseif ($month == 'March') 214: #set($splitMonth = $splits.march) 215: #elseif ($month == 'April') 216: #set($splitMonth = $splits.april) 217: #elseif ($month == 'May') 218: #set ($splitMonth = $splits.may) 219: #elseif ($month == 'June') 220: #set ($splitMonth = $splits.june) 221: #elseif ($month == 'July') 222: #set($splitMonth = $splits.july) 223: #elseif ($month == 'August') 224: #set ($splitMonth = $splits.august) 225: #elseif ($month == 'September') 226: #set($splitMonth = $splits.september) 227: #elseif ($month == 'October') 228: #set($splitMonth = $splits.october) 229: #elseif ($month == 'November') 230: #set ($splitMonth = $splits.november) 231: #elseif ($month == 'December') 232: #set($splitMonth = $splits.december) 233: #end 234: #splitBioNetwork($statPosBriefs, $month, $splitMonth) 235: #end 236: #end 237: </table> 238: </div> 239: #end ## macro splitsBioNetworkData 240: 241: #macro (printRecentGames) 242: <div class="stats-container table-responsive"> 243: <table class="table table-hover table-sm"> 244: 245: #set ($eventEnd = -1) 246: #foreach ($event in $events) 247: #if ($event.event.result.resolved) 248: #set ($eventEnd = $velocityCount) 249: #end 250: #end 251: 252: #set ($eventStart = $eventEnd - 5) 253: #if ($eventStart < 0) #set ($eventStart = 0) #end 254: 255: #foreach ($event in $events) 256: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd) 257: <tr> 258: <td #printCellClass>$formatter.formatDate($event.event.date, "MMM d")</td> 259: <td #printCellClass> 260: #if ($event.event.neutralSite.length() > 0) vs. 261: #elseif (!$event.event.home) at 262: #end 263: $event.event.opponent.name 264: </td> 265: <td #printCellClass> 266: #if ($event.event.statusCode >= 0) 267: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0) 268: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a> 269: #else 270: ${event.event.APResult} 271: #end 272: #end 273: </td> 274: </tr> 275: #end 276: #end 277: </table> 278: </div> 279: #end ## macro printRecentGames 280: 281: #macro (gamelogData $p) 282: #set ($p = $positions.get($p)) 283: #set ($gamelogs = $gamelogs.get($p)) 284: #set ($atLeastOneNotOverall = false) 285: 286: <div class="stats-container table-responsive"> 287: <table class="table table-hover table-sm"> 288: <thead class="thead-dark"> 289: <tr> 290: #printTableHeader("Date", "") 291: #printTableHeader("Opponent", "") 292: #printTableHeader("Score", "") 293: 294: #set ($colspan = 3) 295: #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9 soccer:3 296: #printTableHeader("Dec", "") 297: #end 298: #foreach ($gamelog in $gamelogs) 299: #printTableHeader($gamelog, "") 300: #end 301: </tr> 302: </thead> 303: #foreach ($event in $events) 304: <tr> 305: <td #printCellClass>$formatter.formatDate($event.event.date, "MMM d") #if (!$event.event.overall) #set ($atLeastOneNotOverall = true) # #end</</td> 306: <td #printCellClass> 307: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end 308: $event.event.opponent.name 309: </td> 310: <td #printCellClass> 311: #if ($event.event.statusCode >= 0) 312: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0) 313: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a> 314: #else 315: ${event.event.APResult} 316: #end 317: #else #end 318: </td> 319: #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9 soccer:3 320: <td #printCellClass> 321: #if ($event.stats.get('gow') == 1) 322: W 323: #elseif ($event.stats.get('gol') == 1) 324: L 325: #elseif ($event.stats.get('got') == 1) 326: T< 327: #else 328: - 329: #end 330: </td> 331: #end 332: #foreach ($gamelog in $gamelogs.keySet()) 333: #set ($value = "-") 334: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog))) 335: <td #printCellClass>$value</td> 336: #end 337: </tr> 338: #end 339: </table> 340: 341: #if ($atLeastOneNotOverall) 342: <p class="my-3"># Stats don't count towards season totals</p> 343: #end 344: </div> 345: #end ## macro gamelogData 346: 347: #macro (careerData $p) 348: #set ($p = $positions.get($p)) 349: #set ($statPosBriefs = $briefs.get($p)) 350: 351: <div class="stats-container table-responsive"> 352: <table class="table table-hover table-sm"> 353: <thead class="thead-dark"> 354: <tr> 355: <td> </td> 356: #foreach ($brief in $statPosBriefs) 357: #printTableHeader($brief, "") 358: #end 359: </tr> 360: </thead> 361: #foreach ($season in $seasons) 362: #if ($careerMap.get($season.seasonName)) 363: #set ($label = "<a href='${season.path}?view=profile'>$season.seasonName</a>") 364: #splitBioNetwork($statPosBriefs, $label, $careerMap[$season.seasonName]) 365: #elseif ($wiki.valid()) 366: <tr> 367: <td #printCellClass>${season.seasonName}</td> 368: <td #printCellClass colspan="${briefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td> 369: </tr> 370: #end 371: #end 372: 373: #splitBioNetwork($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall) 374: </table> 375: </div> 376: #end ## macro careerData 377: 378: #macro (printTabs) 379: <div class="tab-nav"> 380: <ul class="nav nav-tabs flex-nowrap" role="tablist"> 381: #printTab("profile", "Player Profile") 382: #printTab("gamelog", "Game Log") 383: #if ($showCareer) 384: #printTab("career", "Career Stats") 385: #end 386: #printTab("splits", "Split Stats") 387: </ul> 388: </div> 389: #end ## printTabs 390: 391: #macro (printLabel $label) 392: #if ($locale == "en_gb" && $label == "Defense") 393: Defence 394: #else 395: $label 396: #end 397: #end 398: 399: #macro (printSubTabs $entries $viewParam) 400: #set ($activeLabel = "") 401: #foreach ($entry in $entries) 402: #if ($entry.key == $activePos) 403: #set ($activeLabel = $entry.value) 404: #end 405: #end 406: 407: <ul class="nav nav-tabs" role="tablist"> 408: <li class="nav-item dropdown" data-module="bs-scripts/dropdown-tab-state"> 409: <div class="p-2 dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">#printLabel($activeLabel)</div> 410: <div class="dropdown-menu" role="tablist"> 411: #foreach($entry in $entries) 412: <a href="#${viewParam}-${entry.key}" data-url="${page.url}?view=${viewParam}&pos=${entry.key}" class="dropdown-item" role="tab" data-toggle="tab">#printLabel($entry.value)</a> 413: #end 414: </div> 415: </li> 416: </ul> 417: #end 418: ################################################## END MACROS ############################################################# 419: 420: <head> 421: <title> 422: $!attributes.get("first_name") $!attributes.get("last_name") | #if ($attributes.get("number"))#$!attributes.get("number") | #end #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty)$!attributes.get("position_abbr") | #elseif ($attributes.get("position"))$!attributes.get("position") | #end $attributes.get("team") 423: </title> 424: </head> 425: 426: <div class="page-content player-stats"> 427: 428: 429: <div class="d-flex justify-content-between"> 430: <h1> 431: #if (!$attributes.get("number").empty)<span class="small text-muted">#$!attributes.get("number")</span>#end 432: $!attributes.get("first_name") $!attributes.get("last_name") 433: 434: #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty) 435: <span class="small">($!attributes.get("position_abbr"))</span> - 436: #elseif ($attributes.get("position")) 437: <span class="small">($!attributes.get("position"))</span> - 438: #end 439: $attributes.get("team") 440: </h1> 441: 442: #set ($teamId = $attributes.get("teamId")) 443: #if ($teamId.length() > 0) 444: <img src="${website.teamLogo($teamId)}" alt="" style="width:48px" /> 445: #end 446: </div> 447: 448: #printHighlights 449: 450: <div class="tabs-container my-3"> 451: 452: #printTabs 453: 454: <div class="tab-content p-3 border border-top-0"> 455: 456: ## PROFILE 457: <div #printPaneAttrs("profile")> 458: <div class="row"> 459: <div class="col-lg"> 460: <h5>Player Stats</h5> 461: $website.include("${page.sectionPage.url}/players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}") 462: </div> 463: <div class="mt-3 col-lg mt-lg-0"> 464: <h5>Recent Results</h5> 465: #printRecentGames 466: </div> 467: </div> 468: 469: #if ($hasSynopsis) 470: <div class="my-3">$!synopsis</div> 471: #end 472: 473: #if ($hasBioBrief) 474: <div class="my-3">$website.include($bioBriefURL)</div> 475: #end 476: 477: #if ($htmlStatsURL) 478: <div class="my-3">$website.include($htmlStatsURL)</div> 479: #end 480: </div> ## PROFILE 481: 482: ## GAMELOG 483: #set ($activePos = $statPos) 484: #if ($view == "gamelog" && $paramPos.length() > 0) 485: #if ($positions.get($paramPos).length() > 0) 486: #set ($activePos = $positions.get($paramPos)) 487: #end 488: #end 489: 490: <div #printPaneAttrs("gamelog")> 491: #if ($gamelogsCategoriesLabels.size() > 0) 492: #printSubTabs($gamelogsCategoriesLabels.entrySet(), "gamelog") 493: 494: <div class="tab-content"> 495: #foreach($entry in $gamelogsCategoriesLabels.entrySet()) 496: #set ($class = "tab-pane") 497: #if ($entry.key == $activePos) 498: #set ($class = "tab-pane active") 499: #end 500: <div class="${class}" role="tabpanel" id="gamelog-${entry.key}"> 501: #gamelogData($entry.key) 502: </div> 503: #end 504: </div> 505: #else 506: #gamelogData($pos) 507: #end 508: </div> ## tab-pane 509: ## GAMELOG 510: 511: ## CAREER 512: #if ($showCareer) 513: #set ($activePos = $statPos) 514: #if ($view == "career" && $paramPos.length() > 0) 515: #if ($positions.get($paramPos).length() > 0) 516: #set ($activePos = $positions.get($paramPos)) 517: #end 518: #end 519: 520: <div #printPaneAttrs("career")> 521: #if ($briefsCategoriesLabels) 522: #printCategories($briefsCategoriesLabels "career") 523: #else 524: #careerData($activePos) 525: #end 526: </div> 527: #end 528: ## CAREER 529: 530: ## SPLITS 531: #set ($activePos = $statPos) 532: #if ($view == "splits" && $paramPos.length() > 0) 533: #if ($positions.get($paramPos).length() > 0) 534: #set ($activePos = $positions.get($paramPos)) 535: #end 536: #end 537: 538: <div #printPaneAttrs("splits")> 539: #if ($briefsCategoriesLabels) 540: #printCategories($briefsCategoriesLabels "splits") 541: #else 542: #splitsBioNetworkData($pos) 543: #end 544: </div> 545: ## SPLITS 546: 547: </div> ## tab-content 548: </div> ## tabs-container 549: </div> ## bio-wrapper 550: $wiki.su |