
Height: | 6-0 |
Weight: | 200 |
Year: | Sr. |
Hometown: | Wilmington, Del. |
High School: | Brandywine |
Position: | P |
Bats/Throws: | R/R |
2013 (Junior): Workhorse out of the bullpen who made a
team-high 19 appearacnes on the year… Finished with a 3-2
record and 3.78 earned run average while striking out 15 batters
over 33.1 innings of work… Earned the win in relief in the
season opener against Gallaudet by throwing two innings…
Struck out the side against Norwich… Threw 3.1 scoreless
innings in two games against Frostburg before earning the victory
against NCAA Tournament qualifier Penn St.-Harrisburg…
Retired the side against Salisbury… Picked up his third win
of the season by throwing four shutout innings against
Arcadia… Pitched a 1-2-3 inning against Frostburg in the CAC
Tournament… Allowed no earned runs over two innings against
Richard Stockton at Frawley Stadium before fanning one in his final
inning of the year at NCAA Tournament qualifier Randolph-Macon.
2012 (Sophomore): Made a team-high 19 appearances on the mound, all in relief and tallied a 4-2 record with a 3.35 earned run average… Earned two saves and combined for three shutouts… Struck out 20 in 37.2 innings of work… Earned the save with a two-inning performance at St. Mary’s (3/18)… Credited with the win by throwing three innings of one-hit baseball against Haverford (3/20)… Picked up the victory in game two at Gallaudet (3/28) and in the opener against Mary Washington (4/6)… Pitched a three-inning save against No. 9 Rowan, allowing an unearned run on four hits… Had arguably his best outing in the CAC First Round at Frostburg, throwing a season-high four innings and allowed just one hit and struck out two (4/17)… Had three Ks at Arcadia (4/10) and against Washington College (4/24).
2011 (Freshman): Made seven appearances and
three starts on the mound in his first season with the
Wolverines... Went 0-2 with a 6.59 earned run average in 13.2
innings... Made his collegiate debut with a scoreless inning of
work against Albright (Feb. 13)... Went a season-long 5.2 innings
in his first career start at Randolph-Macon (Feb. 23).
High School: Played football (Greenlea) and baseball
(Fadena)...Second Team All-Conference...Batted a .405 average
his senior year.
Personal: Born 9/22/1991...Son of Rich Sr. and Donna Cooper...Has a brother Rich Jr. who played baseball at Penn Tech.
Recent Games | ||
---|---|---|
Apr 19 | vs. Christopher Newport | L, 6-2 |
Apr 23 | Neumann | L, 9-1 |
Apr 24 | at Susquehanna | W, 2-1 |
Apr 27 | at Misericordia | L, 13-10 |
May 3 | Bridgewater (Va.) | L, 3-2 |
May 3 | Bridgewater (Va.) | L, 3-1 |
Statistics category | Overall | Conf | ||
---|---|---|---|---|
Games | 22 | 8 | ||
Plate appearances | 0 | 0 | ||
At Bats | 0 | 0 | ||
Runs | 0 | 0 | ||
Hits | 0 | 0 | ||
Doubles | - | - | ||
Triples | - | - | ||
Home Runs | - | - | ||
Runs Batted In | 0 | 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 | 22 | 8 | ||
Games started | 0 | 0 | ||
Wins | 4 | 1 | ||
Losses | 1 | 0 | ||
Saves | 6 | 4 | ||
Complete Games | - | - | ||
Shutouts | - | - | ||
Innings Pitched | 40.0 | 17.0 | ||
Hits | 38 | 14 | ||
Runs | 7 | 2 | ||
Earned Runs | 5 | 1 | ||
Walks | 10 | 5 | ||
Strikeouts | 17 | 8 | ||
Strikeouts per Game | 3.82 | 4.24 | ||
Doubles Allowed | 3 | 2 | ||
Triples Allowed | - | - | ||
Home Runs Allows | 2 | 2 | ||
At Bats Against | 151 | 60 | ||
Batting Average Against | .252 | .233 | ||
Earned Run Average | 1.13 | 0.53 | ||
Wild pitches | 1 | - | ||
Hit Batters | 2 | 1 | ||
Balks | - | - | ||
Sacrifice Flies Allowed | - | - | ||
Sacrifice Hits Allowed | 1 | - | ||
Total Chances | 16 | 5 | ||
Put Outs | 7 | 3 | ||
Assists | 7 | 2 | ||
Errors | 2 | 0 | ||
Fielding Percentage | .875 | 1.000 | ||
Double Plays | - | - | ||
Stolen Bases Allowed | 5 | 1 | ||
Runners Caught Stealing | 3 | 1 | ||
Runners Caught Stealing Percentage | .375 | .500 | ||
Passed Balls | - | - | ||
Catcher's Interference | - | - |
Date | Opponent | Score | ab | r | h | 2b | 3b | hr | rbi | bb | k | sb | cs |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Feb 21 | vs. Moravian | L, 1-0 | - | - | - | - | - | - | - | - | - | - | - |
Feb 22 | vs. Keystone | W, 9-8 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Feb 23 | at Hampden-Sydney | L, 9-6 | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | Oswego St. | W, 5-0 | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | Oswego St. | L, 7-6 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 2 | New Jersey City | W, 3-2 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 9 | St. Mary's (Md.) | W, 7-3 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 9 | St. Mary's (Md.) | L, 11-10 | - | - | - | - | - | - | - | - | - | - | - |
Mar 10 | Stevenson | L, 13-0 | - | - | - | - | - | - | - | - | - | - | - |
Mar 11 | Shenandoah | L, 5-2 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 14 | Marymount (Va.) | W, 3-2 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 15 | at Christopher Newport | L, 17-6 | - | - | - | - | - | - | - | - | - | - | - |
Mar 15 | at Christopher Newport | W, 10-9 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 16 | at Salisbury | W, 9-5 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 20 | at Penn St.-Harrisburg | W, 4-3 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Mar 22 | Mary Washington | W, 2-1 | - | - | - | - | - | - | - | - | - | - | - |
Mar 22 | Mary Washington | W, 5-2 | - | - | - | - | - | - | - | - | - | - | - |
Mar 28 | Southern Virginia | W, 1-0 | - | - | - | - | - | - | - | - | - | - | - |
Mar 28 | Southern Virginia | L, 2-0 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 1 | Susquehanna | W, 7-6 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 2 | at Marymount (Va.) | W, 15-14 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 3 | Salisbury | L, 8-1 | - | - | - | - | - | - | - | - | - | - | - |
Apr 5 | at York (Pa.) | L, 21-8 | - | - | - | - | - | - | - | - | - | - | - |
Apr 5 | at York (Pa.) | L, 12-4 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 9 | Penn St.-Harrisburg | W, 11-2 | - | - | - | - | - | - | - | - | - | - | - |
Apr 10 | at Eastern | W, 13-8 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 12 | at Frostburg St. | L, 10-3 | - | - | - | - | - | - | - | - | - | - | - |
Apr 12 | at Frostburg St. | L, 8-6 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 16 | at Salisbury | L, 5-4 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 18 | vs. St. Mary's (Md.) | W, 6-1 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 19 | vs. Christopher Newport | L, 6-2 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 23 | Neumann | L, 9-1 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 24 | at Susquehanna | W, 2-1 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
Apr 27 | at Misericordia | L, 13-10 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
May 3 | Bridgewater (Va.) | L, 3-2 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - |
May 3 | Bridgewater (Va.) | L, 3-1 | - | - | - | - | - | - | - | - | - | - | - |
Date | Opponent | Score | hbp | sf | sh | tb | xbh | hdp | go | fo | go/fo | pa |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Feb 21 | vs. Moravian | L, 1-0 | - | - | - | - | - | - | - | - | - | - |
Feb 22 | vs. Keystone | W, 9-8 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Feb 23 | at Hampden-Sydney | L, 9-6 | - | - | - | - | - | - | - | - | - | - |
Mar 1 | Oswego St. | W, 5-0 | - | - | - | - | - | - | - | - | - | - |
Mar 1 | Oswego St. | L, 7-6 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 2 | New Jersey City | W, 3-2 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 9 | St. Mary's (Md.) | W, 7-3 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 9 | St. Mary's (Md.) | L, 11-10 | - | - | - | - | - | - | - | - | - | - |
Mar 10 | Stevenson | L, 13-0 | - | - | - | - | - | - | - | - | - | - |
Mar 11 | Shenandoah | L, 5-2 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 14 | Marymount (Va.) | W, 3-2 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 15 | at Christopher Newport | L, 17-6 | - | - | - | - | - | - | - | - | - | - |
Mar 15 | at Christopher Newport | W, 10-9 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 16 | at Salisbury | W, 9-5 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 20 | at Penn St.-Harrisburg | W, 4-3 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Mar 22 | Mary Washington | W, 2-1 | - | - | - | - | - | - | - | - | - | - |
Mar 22 | Mary Washington | W, 5-2 | - | - | - | - | - | - | - | - | - | - |
Mar 28 | Southern Virginia | W, 1-0 | - | - | - | - | - | - | - | - | - | - |
Mar 28 | Southern Virginia | L, 2-0 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 1 | Susquehanna | W, 7-6 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 2 | at Marymount (Va.) | W, 15-14 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 3 | Salisbury | L, 8-1 | - | - | - | - | - | - | - | - | - | - |
Apr 5 | at York (Pa.) | L, 21-8 | - | - | - | - | - | - | - | - | - | - |
Apr 5 | at York (Pa.) | L, 12-4 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 9 | Penn St.-Harrisburg | W, 11-2 | - | - | - | - | - | - | - | - | - | - |
Apr 10 | at Eastern | W, 13-8 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 12 | at Frostburg St. | L, 10-3 | - | - | - | - | - | - | - | - | - | - |
Apr 12 | at Frostburg St. | L, 8-6 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 16 | at Salisbury | L, 5-4 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 18 | vs. St. Mary's (Md.) | W, 6-1 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 19 | vs. Christopher Newport | L, 6-2 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 23 | Neumann | L, 9-1 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 24 | at Susquehanna | W, 2-1 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Apr 27 | at Misericordia | L, 13-10 | - | - | - | 0 | 0 | - | - | - | - | 0 |
May 3 | Bridgewater (Va.) | L, 3-2 | - | - | - | 0 | 0 | - | - | - | - | 0 |
May 3 | Bridgewater (Va.) | L, 3-1 | - | - | - | - | - | - | - | - | - | - |
Date | Opponent | Score | gs | w | l | sv | ip | h | r | er | era | bb | k | hr |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Feb 21 | vs. Moravian | L, 1-0 | - | - | - | - | - | - | - | - | - | - | - | - |
Feb 22 | vs. Keystone | W, 9-8 | 0 | 1 | 0 | 0 | 3.0 | 3 | - | - | 0.00 | - | 1 | - |
Feb 23 | at Hampden-Sydney | L, 9-6 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | Oswego St. | W, 5-0 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | Oswego St. | L, 7-6 | 0 | 0 | 0 | 0 | 0.2 | 0 | 0 | 0 | 0.00 | 0 | 1 | - |
Mar 2 | New Jersey City | W, 3-2 | 0 | 1 | 0 | 0 | 2.0 | 2 | 0 | 0 | 0.00 | 0 | 0 | - |
Mar 9 | St. Mary's (Md.) | W, 7-3 | 0 | 0 | 0 | 0 | 2.0 | 1 | 0 | 0 | 0.00 | 1 | 0 | - |
Mar 9 | St. Mary's (Md.) | L, 11-10 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 10 | Stevenson | L, 13-0 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 11 | Shenandoah | L, 5-2 | 0 | 0 | 0 | 0 | 2.0 | 2 | - | - | 0.00 | 2 | - | - |
Mar 14 | Marymount (Va.) | W, 3-2 | 0 | 0 | 0 | 1 | 2.0 | 1 | 0 | 0 | 0.00 | 1 | 2 | - |
Mar 15 | at Christopher Newport | L, 17-6 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 15 | at Christopher Newport | W, 10-9 | 0 | 1 | 0 | 0 | 3.2 | 3 | 1 | 0 | 0.00 | 0 | 1 | 1 |
Mar 16 | at Salisbury | W, 9-5 | 0 | 0 | 0 | 1 | 2.1 | 2 | 0 | 0 | 0.00 | 0 | 2 | - |
Mar 20 | at Penn St.-Harrisburg | W, 4-3 | 0 | 0 | 0 | 1 | 2.0 | 1 | 0 | 0 | 0.00 | 1 | 1 | - |
Mar 22 | Mary Washington | W, 2-1 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 22 | Mary Washington | W, 5-2 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 28 | Southern Virginia | W, 1-0 | - | - | - | - | - | - | - | - | - | - | - | - |
Mar 28 | Southern Virginia | L, 2-0 | 0 | 0 | 0 | 0 | 2.0 | 2 | 0 | 0 | 0.00 | 1 | 2 | - |
Apr 1 | Susquehanna | W, 7-6 | 0 | 1 | 0 | 0 | 3.0 | 2 | 0 | 0 | 0.00 | 1 | 1 | - |
Apr 2 | at Marymount (Va.) | W, 15-14 | 0 | 0 | 0 | 1 | 2.0 | 3 | - | - | 0.00 | 2 | 2 | - |
Apr 3 | Salisbury | L, 8-1 | - | - | - | - | - | - | - | - | - | - | - | - |
Apr 5 | at York (Pa.) | L, 21-8 | - | - | - | - | - | - | - | - | - | - | - | - |
Apr 5 | at York (Pa.) | L, 12-4 | 0 | 0 | 0 | 0 | 1.0 | 2 | 0 | 0 | 0.00 | 0 | 0 | - |
Apr 9 | Penn St.-Harrisburg | W, 11-2 | - | - | - | - | - | - | - | - | - | - | - | - |
Apr 10 | at Eastern | W, 13-8 | 0 | 0 | 0 | 0 | 1.0 | 0 | 0 | 0 | 0.00 | 0 | 0 | - |
Apr 12 | at Frostburg St. | L, 10-3 | - | - | - | - | - | - | - | - | - | - | - | - |
Apr 12 | at Frostburg St. | L, 8-6 | 0 | 0 | 0 | 0 | 2.0 | 1 | 1 | 1 | 4.50 | 0 | 0 | 1 |
Apr 16 | at Salisbury | L, 5-4 | 0 | 0 | 1 | 0 | 1.1 | 5 | 2 | 2 | 13.50 | 0 | 1 | - |
Apr 18 | vs. St. Mary's (Md.) | W, 6-1 | 0 | 0 | 0 | 1 | 2.0 | 2 | 0 | 0 | 0.00 | 0 | 1 | - |
Apr 19 | vs. Christopher Newport | L, 6-2 | 0 | 0 | 0 | 0 | 1.0 | 2 | 1 | 1 | 9.00 | 0 | 0 | - |
Apr 23 | Neumann | L, 9-1 | 0 | 0 | 0 | 0 | 1.0 | 2 | 0 | 0 | 0.00 | 0 | 0 | - |
Apr 24 | at Susquehanna | W, 2-1 | 0 | 0 | 0 | 1 | 2.0 | 1 | - | - | 0.00 | - | - | - |
Apr 27 | at Misericordia | L, 13-10 | 0 | 0 | 0 | 0 | 1.0 | 1 | 2 | 1 | 9.00 | 1 | 1 | - |
May 3 | Bridgewater (Va.) | L, 3-2 | 0 | 0 | 0 | 0 | 1.0 | 0 | 0 | 0 | 0.00 | 0 | 1 | - |
May 3 | Bridgewater (Va.) | L, 3-1 | - | - | - | - | - | - | - | - | - | - | - | - |
Date | Opponent | Score | tc | po | a | e | fpct | dp | sba | rcs | rcs% | pb | ci |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Feb 21 | vs. Moravian | L, 1-0 | - | - | - | - | - | - | - | - | - | - | - |
Feb 22 | vs. Keystone | W, 9-8 | 3 | 1 | 1 | 1 | .667 | - | - | - | - | - | - |
Feb 23 | at Hampden-Sydney | L, 9-6 | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | Oswego St. | W, 5-0 | - | - | - | - | - | - | - | - | - | - | - |
Mar 1 | Oswego St. | L, 7-6 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Mar 2 | New Jersey City | W, 3-2 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Mar 9 | St. Mary's (Md.) | W, 7-3 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Mar 9 | St. Mary's (Md.) | L, 11-10 | - | - | - | - | - | - | - | - | - | - | - |
Mar 10 | Stevenson | L, 13-0 | - | - | - | - | - | - | - | - | - | - | - |
Mar 11 | Shenandoah | L, 5-2 | 2 | 2 | 0 | 0 | 1.000 | - | 1 | - | - | - | - |
Mar 14 | Marymount (Va.) | W, 3-2 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Mar 15 | at Christopher Newport | L, 17-6 | - | - | - | - | - | - | - | - | - | - | - |
Mar 15 | at Christopher Newport | W, 10-9 | 1 | 1 | 0 | 0 | 1.000 | - | - | 1 | 1.000 | - | - |
Mar 16 | at Salisbury | W, 9-5 | 1 | 1 | 0 | 0 | 1.000 | - | - | - | - | - | - |
Mar 20 | at Penn St.-Harrisburg | W, 4-3 | 1 | 0 | 1 | 0 | 1.000 | - | - | - | - | - | - |
Mar 22 | Mary Washington | W, 2-1 | - | - | - | - | - | - | - | - | - | - | - |
Mar 22 | Mary Washington | W, 5-2 | - | - | - | - | - | - | - | - | - | - | - |
Mar 28 | Southern Virginia | W, 1-0 | - | - | - | - | - | - | - | - | - | - | - |
Mar 28 | Southern Virginia | L, 2-0 | 0 | 0 | 0 | 0 | - | - | 1 | 1 | .500 | - | - |
Apr 1 | Susquehanna | W, 7-6 | 2 | 0 | 2 | 0 | 1.000 | - | 1 | 1 | .500 | - | - |
Apr 2 | at Marymount (Va.) | W, 15-14 | 0 | 0 | 0 | 0 | - | - | 1 | - | - | - | - |
Apr 3 | Salisbury | L, 8-1 | - | - | - | - | - | - | - | - | - | - | - |
Apr 5 | at York (Pa.) | L, 21-8 | - | - | - | - | - | - | - | - | - | - | - |
Apr 5 | at York (Pa.) | L, 12-4 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Apr 9 | Penn St.-Harrisburg | W, 11-2 | - | - | - | - | - | - | - | - | - | - | - |
Apr 10 | at Eastern | W, 13-8 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Apr 12 | at Frostburg St. | L, 10-3 | - | - | - | - | - | - | - | - | - | - | - |
Apr 12 | at Frostburg St. | L, 8-6 | 2 | 1 | 1 | 0 | 1.000 | - | - | - | - | - | - |
Apr 16 | at Salisbury | L, 5-4 | 1 | 0 | 1 | 0 | 1.000 | - | - | - | - | - | - |
Apr 18 | vs. St. Mary's (Md.) | W, 6-1 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Apr 19 | vs. Christopher Newport | L, 6-2 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Apr 23 | Neumann | L, 9-1 | 0 | 0 | 0 | 0 | - | - | - | - | - | - | - |
Apr 24 | at Susquehanna | W, 2-1 | 1 | 0 | 1 | 0 | 1.000 | - | 1 | - | - | - | - |
Apr 27 | at Misericordia | L, 13-10 | 1 | 0 | 0 | 1 | .000 | - | - | - | - | - | - |
May 3 | Bridgewater (Va.) | L, 3-2 | 1 | 1 | 0 | 0 | 1.000 | - | - | - | - | - | - |
May 3 | Bridgewater (Va.) | L, 3-1 | - | - | - | - | - | - | - | - | - | - | - |
app | gs | w | l | sv | cg | ip | h | r | er | bb | k | k/9 | hr | era | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2010-11 | 7 | 3 | 0 | 2 | 0 | - | 13.2 | 26 | 18 | 10 | 7 | 4 | 2.63 | - | 6.59 |
2011-12 | 17 | 0 | 4 | 2 | 2 | - | 38.2 | 40 | 18 | 14 | 16 | 20 | 4.66 | 3 | 3.26 |
2012-13 | 19 | 0 | 3 | 2 | 0 | - | 33.1 | 40 | 22 | 14 | 9 | 15 | 4.05 | - | 3.78 |
2013-14 | 22 | 0 | 4 | 1 | 6 | - | 40.0 | 38 | 7 | 5 | 10 | 17 | 3.82 | 2 | 1.13 |
Total | 65 | 3 | 11 | 7 | 8 | - | 125.2 | 144 | 65 | 43 | 42 | 56 | 4.01 | 5 | 3.08 |
g | ab | r | h | 2b | 3b | hr | rbi | bb | k | sb | cs | avg | obp | slg | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Total | 22 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
Conference | 8 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
Exhibition | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
- | |||||||||||||||
Home | 9 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
Away | 10 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
Neutral | 3 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
- | |||||||||||||||
Wins | 12 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
Losses | 10 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
- | |||||||||||||||
February | 1 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
March | 9 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
April | 11 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
May | 1 | 0 | 0 | 0 | - | - | - | 0 | - | - | - | - | - | - | - |
g | hbp | sf | sh | tb | xbh | hdp | go | fo | go/fo | pa | |
---|---|---|---|---|---|---|---|---|---|---|---|
Total | 22 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Conference | 8 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Exhibition | - | - | - | - | 0 | 0 | - | - | - | - | 0 |
- | |||||||||||
Home | 9 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Away | 10 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Neutral | 3 | - | - | - | 0 | 0 | - | - | - | - | 0 |
- | |||||||||||
Wins | 12 | - | - | - | 0 | 0 | - | - | - | - | 0 |
Losses | 10 | - | - | - | 0 | 0 | - | - | - | - | 0 |
- | |||||||||||
February | 1 | - | - | - | 0 | 0 | - | - | - | - | 0 |
March | 9 | - | - | - | 0 | 0 | - | - | - | - | 0 |
April | 11 | - | - | - | 0 | 0 | - | - | - | - | 0 |
May | 1 | - | - | - | 0 | 0 | - | - | - | - | 0 |
app | gs | w | l | sv | cg | ip | h | r | er | bb | k | k/9 | hr | era | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Total | 22 | 0 | 4 | 1 | 6 | - | 40.0 | 38 | 7 | 5 | 10 | 17 | 3.82 | 2 | 1.13 |
Conference | 8 | 0 | 1 | 0 | 4 | - | 17.0 | 14 | 2 | 1 | 5 | 8 | 4.24 | 2 | 0.53 |
Exhibition | - | - | - | - | - | - | 0.0 | - | - | - | - | - | .00 | - | 0.00 |
- | |||||||||||||||
Home | 9 | 0 | 2 | 0 | 1 | - | 15.2 | 12 | 0 | 0 | 6 | 7 | 4.02 | - | 0.00 |
Away | 10 | 0 | 1 | 1 | 4 | - | 18.1 | 19 | 6 | 4 | 4 | 8 | 3.93 | 2 | 1.96 |
There was a problem with a Velocity script | |
Page | bio-template |
Error | VM #split: too few arguments to macro. Wanted 5 got 3 at bio-template[line 301, column 1] |
Page source: |
1: $website.addCss($website.cdn("/info/photo-gallery.css")) 2: <script src="${website.cdn("/info/klass.min.js")}"></script> 3: <script src="${website.cdn("/info/code.photoswipe.jquery-3.0.5.min.js")}"></script> 4: <script src="${website.cdn("/info/masonry.pkgd.min.js")}"></script> 5: <script src="${website.cdn("/info/imagesloaded.pkgd.min.js")}"></script> 6: <script src="${website.cdn("/info/photogallery/photogallery.js")}"></script> 7: 8: ## PICK UP OPTIONS 9: $website.include("options") 10: #set ($options = $request.getAttribute("options")) 11: #set ($locale = "en_us") 12: #set ($locale = $options.get("locale")) 13: 14: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE 15: #set ($bioObject = $page.getDataAsObject()) 16: #set ($statsURL = $bioObject.statsURL) 17: 18: #if ($statsURL.length() > 0) 19: $website.includeAgain("${statsURL}?tmpl=bio-stats-template") 20: ## various settings to get the variables set 21: #set ($events = $request.getAttribute("bio_events")) 22: #set ($seasons = $request.getAttribute("bio_seasons")) 23: #set ($career = $request.getAttribute("bio_career")) 24: #set ($labels = $request.getAttribute("bio_labels")) 25: #set ($briefs = $request.getAttribute("bio_briefs")) 26: #set ($gamelogs = $request.getAttribute("bio_gamelogs")) 27: #set ($splits = $request.getAttribute("bio_splits")) 28: #set ($statPosition = $request.getAttribute("bio_position")) 29: #set ($positions = $request.getAttribute("bio_positions")) 30: #set ($playerId = $request.getAttribute("bio_player_id")) 31: #set ($highlights = $request.getAttribute("bio_highlights")) 32: #set ($formats = $request.getAttribute("bio_formats")) 33: #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels")) 34: #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels")) 35: #set ($gamesResults = $request.getAttribute("bio_games_results")) 36: #set ($monthsPlayed = $request.getAttribute("bio_months_played")) 37: #end 38: 39: #set ($pos = "") 40: #set ($pos = $attributes.get("position")) 41: #set ($pos = $statPosition) 42: #set ($posVec = $pos.split("/")) 43: #set ($pos = $posVec[0]) 44: #set ($pos = $pos.toLowerCase()) 45: #set ($statPos = $positions.get($pos)) 46: #set ($paramPos = $request.getParameter("pos")) 47: 48: #set ($playerId = $attributes.get("playerId")) 49: #set ($stats = $splits.overall) 50: #set ($highlights = $highlights.get($statPos)) 51: 52: #set ($showHighlights = true) 53: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false) 54: #set ($showHighlights = false) 55: #end 56: 57: #set ($enhancedLayout = false) 58: #if (($options.get("bio_enhanced_layout") == "yes") || ($request.getParameter("bio_enhanced_layout") == true)) 59: #set ($enhancedLayout = true) 60: $website.addCss($website.cdn("/info/bio-styles-enhanced.css")) 61: #end 62: 63: #set ($showActionShots = true) 64: #if ($options.get("bio_show_action_shots") && $options.get("bio_show_action_shots") == false) 65: #set ($showActionShots = false) 66: #end 67: 68: #set ($actionShotsLimit = 5) 69: #set ($actionShotsLimit = $tool.math.toInteger($options.get("bio_action_shots_limit"))) 70: 71: #set ($showCareer = $wiki.valid() && $seasons) 72: #if ("yes" == $options.get("stats_show_career") && $seasons) 73: #set ($showCareer = true) 74: #end 75: 76: #set ($hasEvents = $events.size() > 0) 77: #set ($hasSynopsis = $synopsis.trim().length() > 0) 78: #set ($htmlStatsURL = "${page.url}-stats") 79: #set ($hasHTMLStats = $website.exists($htmlStatsURL)) 80: #set ($bioBriefURL = "${page.url}-brief") 81: #set ($hasBioBrief = $website.exists("$bioBriefURL")) 82: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1)) 83: #if ($options.get("bio_hide_roster") == true) 84: #set ($showRoster = false) 85: #end 86: 87: #set ($view = "") 88: #if ($hasSynopsis || $hasBioBrief) 89: #set ($view = "bio") 90: #elseif ($statsURL.length() > 0) 91: #set ($view = "profile") 92: #elseif ($hasHTMLStats) 93: #set ($view = "htmlstats") 94: #elseif ($releases.size() > 0) 95: #set ($view = "news") 96: #elseif ($playerPhotos.size() > 0) 97: #set ($view = "photos") 98: #elseif ($playerVideos.size() > 0) 99: #set ($view = "videos") 100: #end 101: 102: #if ($options.get("bio_default_view").length() > 0) 103: #set ($checkView = $options.get("bio_default_view")) 104: #end 105: 106: #if ($request.getParameter("view")) 107: #set ($checkView = $request.getParameter("view")) 108: #end 109: 110: #if ($checkView == "profile" && $statsURL.length() > 0) 111: #set ($view = "profile") 112: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief)) 113: #set ($view = "bio") 114: #elseif ($checkView == "gamelog" && $statsURL.length() > 0) 115: #set ($view = "gamelog") 116: #elseif ($checkView == "career" && $showCareer) 117: #set ($view = "career") 118: #elseif ($checkView == "splits" && $statsURL.length() > 0) 119: #set ($view = "splits") 120: #elseif ($checkView == "htmlstats" && $hasHTMLStats) 121: #set ($view = "htmlstats") 122: #elseif ($checkView == "news" && $releases.size() > 0) 123: #set ($view = "news") 124: #elseif ($checkView == "photos" && $playerPhotos.size() > 0) 125: #set ($view = "photos") 126: #elseif ($checkView == "videos" && $playerVideos.size() > 0) 127: #set ($view = "videos") 128: #end 129: 130: #macro (printResultAriaLabel $event) 131: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}") 132: #if ($event.neutralSite.length() > 0 || $event.home) 133: #set ($ariaLabel = "${ariaLabel} vs.") 134: #else 135: #set ($ariaLabel = "${ariaLabel} at") 136: #end 137: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:") 138: #if ($event.neutralSite.length() > 0) 139: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:") 140: #end 141: #set ($ariaLabel = "${ariaLabel} Box Score") 142: aria-label="$ariaLabel" 143: #end 144: 145: #macro (printGrid $items $type) 146: <div class="news-layout grid"> 147: <div class="stories"> 148: <ul> 149: #foreach ($item in $items) 150: #if ($item.title.length() > 0) 151: 152: <li class="story ${type}"> 153: <div class="clearfix"> 154: <a href="$item.url" class="title-box"> 155: <span class="thumb"> 156: #if ($item.thumbnailURL) 157: <img src="$website.cdn("/info/images/spacer.gif")" data-src="${item.thumbnailURL}?max_width=300" alt="" class="lazyload" /> 158: #elseif ($item.contentType == "loki/youtube") 159: <img src="$website.cdn("/info/images/spacer.gif")" data-src="http://img.youtube.com/vi/${item.dataAsString}/0.jpg" alt="" class="lazyload" /> 160: #else 161: <img src="$website.cdn("/info/images/spacer.gif")" data-src="/images/setup/thumbnail_default.jpg?max_width=300" alt="" class="lazyload" /> 162: #end 163: </span> 164: <span class="title">$item.title</span> 165: </a> 166: </div> 167: </li> 168: #end 169: #end ## foreach 170: </ul> 171: </div> 172: </div> 173: #end ## ends macro 174: 175: #macro (gamelogData $p) 176: 177: #set ($p = $positions.get($p)) 178: #set ($gamelogs = $gamelogs.get($p)) 179: 180: #if ($hasEvents) 181: <div class="stats-box full clearfix"> 182: <div class="scrollable"> 183: <div> 184: <table> 185: <tr class="thead"> 186: <th class="text">Date</th> 187: <th class="pinned-col text">Opponent</th> 188: <th>Score</th> 189: #foreach ($gamelog in $gamelogs) 190: <th>$gamelog</th> 191: #end 192: </tr> 193: #foreach ($event in $events) 194: <tr> 195: <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td> 196: <td class="pinned-col text"> 197: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end 198: $event.event.opponent.name 199: </td> 200: <td> 201: #if ($event.event.statusCode >= 0) 202: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0) 203: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a> 204: #else 205: ${event.event.APResult} 206: #end 207: #else #end 208: </td> 209: #foreach ($gamelog in $gamelogs.keySet()) 210: #set ($value = "-") 211: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog))) 212: <td>$value</td> 213: #end 214: </tr> 215: #end 216: </table> 217: </div> 218: </div> ## scrollable 219: </div> ## stats-box 220: #end 221: 222: #end ## macro gamelogData 223: 224: #macro (split $statPosBriefs $label $stats) 225: <tr> 226: <td class="pinned-col text">${label}</td> 227: #foreach ($brief in $statPosBriefs.keySet()) 228: #set ($value = "-") 229: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief))) 230: <td>#if ($value.length() > 0) $value #else - #end</td> 231: #end 232: </tr> 233: #end 234: 235: #macro (careerData $p) 236: #set ($p = $positions.get($p)) 237: #set ($statPosBriefs = $briefs.get($p)) 238: 239: <div class="stats-box full clearfix"> 240: <div class="scrollable"> 241: <div> 242: <table> 243: <tr class="thead"> 244: <th class="pinned-col"> </th> 245: #foreach ($brief in $statPosBriefs) 246: <th>$brief</th> 247: #end 248: </tr> 249: 250: #set ($careerTotals = $request.getAttribute("careerTotals")) 251: #set ($careerMap = $request.getAttribute("careerMap")) 252: 253: #foreach ($season in $seasons) 254: ## Check if we did not get stats for this season 255: #if ($careerMap.get($season.seasonName)) 256: #set ($label = "<a href='${season.path}?view=profile'>$season.seasonName</a>") 257: #split($statPosBriefs, $label, $careerMap[$season.seasonName]) 258: #elseif ($wiki.valid()) 259: <tr> 260: <td class="text">${season.seasonName}</td> 261: <td colspan="${statPosBriefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td> 262: </tr> 263: #end 264: #end 265: 266: #split($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall) 267: 268: </table> 269: </div> 270: </div> ## scrollable 271: </div> ## stats-box 272: 273: #end ## macro careerData 274: 275: #macro (splitsData $p) 276: 277: #set ($p = $positions.get($p)) 278: #set ($statPosBriefs = $briefs.get($p)) 279: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1)) 280: 281: #if ($statPosBriefs.size() > 0) 282: <div class="stats-box full clearfix"> 283: <div class="scrollable"> 284: <div> 285: <table> 286: <tr> 287: <th class="pinned-col"> </th> 288: #foreach ($brief in $statPosBriefs) 289: <th>$brief</th> 290: #end 291: </tr> 292: 293: #split($statPosBriefs, "Total", $splits.overall) 294: #split($statPosBriefs, "Conference", $splits.conference) 295: #split($statPosBriefs, "Exhibition", $splits.exhibition) 296: 297: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr> 298: 299: #split($statPosBriefs, "Home", $splits.home) 300: #split($statPosBriefs, "Away", $splits.away) 301: #split($statPosBriefs, "Neutral", $splits.neutral) 302: 303: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr> 304: 305: #foreach($gameResult in $gamesResults.entrySet()) 306: #if ($gameResult.key == "wins") 307: #set ($splitGameResult = $splits.inWins) 308: #elseif ($gameResult.key == "losses") 309: #set ($splitGameResult = $splits.inLosses) 310: #elseif ($gameResult.key == "ties") 311: #set ($splitGameResult = $splits.inTies) 312: #end 313: 314: #split($statPosBriefs, $gameResult.value, $splitGameResult) 315: #end 316: 317: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr> 318: 319: #if ($monthsPlayed and $monthsPlayed.size() > 0) 320: #foreach($month in $monthsPlayed) 321: #if ($month == 'January') 322: #set ($splitMonth = $splits.january) 323: #elseif ($month == 'February') 324: #set ($splitMonth = $splits.february) 325: #elseif ($month == 'March') 326: #set($splitMonth = $splits.march) 327: #elseif ($month == 'April') 328: #set($splitMonth = $splits.april) 329: #elseif ($month == 'May') 330: #set ($splitMonth = $splits.may) 331: #elseif ($month == 'June') 332: #set ($splitMonth = $splits.june) 333: #elseif ($month == 'July') 334: #set($splitMonth = $splits.july) 335: #elseif ($month == 'August') 336: #set ($splitMonth = $splits.august) 337: #elseif ($month == 'September') 338: #set($splitMonth = $splits.september) 339: #elseif ($month == 'October') 340: #set($splitMonth = $splits.october) 341: #elseif ($month == 'November') 342: #set ($splitMonth = $splits.november) 343: #elseif ($month == 'December') 344: #set($splitMonth = $splits.december) 345: #end 346: 347: #split($statPosBriefs, $month, $splitMonth) 348: #end ## foreach 349: #end 350: </table> 351: </div> 352: </div> ## scrollable 353: </div> ## srollable-table 354: #end 355: 356: #end ## macro splitsData 357: 358: #macro (printRecentGames) 359: #if ($hasEvents) 360: <table> 361: <tr class="thead accent-bg"><th colspan="3">Recent Games</th></tr> 362: 363: #set ($eventEnd = -1) 364: #foreach ($event in $events) 365: #if ($event.event.result.resolved) 366: #set ($eventEnd = $velocityCount) 367: #end 368: #end 369: 370: #set ($eventStart = $eventEnd - 5) 371: #if ($eventStart < 0) #set ($eventStart = 0) #end 372: 373: #foreach ($event in $events) 374: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd) 375: <tr> 376: <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td> 377: <td class="text"> 378: #if ($event.event.neutralSite.length() > 0) vs. 379: #elseif (!$event.event.home) at 380: #else ## nothing for a home game 381: #end 382: $event.event.opponent.name 383: </td> 384: <td class="text"> 385: #if ($event.event.statusCode >= 0) 386: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0) 387: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a> 388: #else 389: ${event.event.APResult} 390: #end 391: #end 392: </td> 393: </tr> 394: #end ## if 395: #end 396: </table> 397: #end 398: #end ## macro printRecentGames 399: 400: #macro (printCategories $briefCategoryLabels $v $ariaLabel) 401: 402: <div class="tab-container secondary clearfix" data-module="stats/tabs" data-type="secondary"> 403: <div class="tab-nav" data-module="jscroll" data-momentum="false"> 404: <div> 405: <ul class="clearfix"> 406: #foreach($briefCat in $briefCategoryLabels.entrySet()) 407: #set ($briefCatLabel = $briefCat.value) 408: #set ($briefCatKey = $briefCat.key) 409: 410: #if ($locale == "en_gb" && $briefCatLabel == "Defense") 411: #set ($briefCatLabel = "Defence") 412: #end 413: 414: <li #if ($activePos == $briefCatKey) class="active" #end><a href="${page.url}?view=${v}&pos=${briefCatKey}" role="button" aria-label="${ariaLabel}: ${briefCatLabel}">$briefCatLabel</a></li> 415: #end 416: </ul> 417: </div> 418: </div> 419: <div class="tab-panels"> 420: #foreach ($briefCat in $briefCategoryLabels.entrySet()) 421: #set ($class = "tab-panel clearfix") 422: #if ($briefCat.key == $activePos) 423: #set ($class = "tab-panel active clearfix") 424: #end 425: <div class="$class"> 426: <div class="stats-wrap clearfix"> 427: #if ($v == "splits") 428: #splitsData($briefCat.key) 429: #elseif ($v == "career") 430: #careerData($briefCat.key) 431: #end 432: </div> 433: </div> 434: #end 435: </div> 436: </div> ## tab-container 437: 438: #end ## macro printCategories 439: 440: #macro (printHeadshot) 441: #if ($enhancedLayout) 442: 443: #if ($headshot.url) 444: <img src="$headshot.url?max_width=300&max_height=400" alt="$fullName" /> 445: #else 446: #if ($website.exists("/images/setup/headshot_default.jpg")) 447: <img src="/images/setup/headshot_default.jpg?max_width=300&max_height=400" alt="$fullName" /> 448: #else 449: <img src="$website.cdn("/info/images/default_headshot.jpg?max_width=300&max_height=400")" alt="$fullName" /> 450: #end 451: #end 452: 453: #else 454: 455: #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span>#end 456: 457: #if ($headshot.url) 458: <img src="$headshot.url?max_width=160&max_height=210" alt="$fullName" /> 459: #else 460: #if ($website.exists("/images/setup/headshot_default.jpg")) 461: <img src="/images/setup/headshot_default.jpg?max_width=160&max_height=210" alt="" /> 462: #else 463: <img src="$website.cdn("/info/images/default_headshot.jpg?max_width=160&max_height=210")" alt="" /> 464: #end 465: #end 466: 467: #end ## ## enhancedLayout check 468: #end ## macro printHeadshot 469: 470: #macro (printBioInfo) 471: #if ($enhancedLayout) 472: 473: <h2 class="player-heading"> 474: #if ($!attributes.get("number").length() > 0)<span class="number accent-bg">$!attributes.get("number")</span>#end 475: <span class="name">$fullName</span> 476: </h2> 477: 478: <ul> 479: #foreach ($i in [1..10]) 480: #set ($stickyKey = "bio_custom${i}_sticky") 481: #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0) 482: <li> 483: <dl> 484: <dt class="label">$options.get($stickyKey): </dt> 485: <dd class="value">$!attributes.get("custom${i}")</dd> 486: </dl> 487: </li> 488: #end 489: #end 490: 491: #foreach ($field in $fields) 492: #if (!$field.key.startsWith("custom")) 493: #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name")) 494: #if ($field.key == "phone1" || $field.key == "phone2") 495: <li> 496: <dl> 497: <dt class="label">Phone: </dt> 498: <dd class="value">$!attributes.get($field.key)</dd> 499: </dl> 500: </li> 501: #elseif ($field.key == "email_address") 502: #set ($emailAdd = $attributes.get($field.key)) 503: <li> 504: <dl> 505: <dt class="label">Email: </dt> 506: <dd class="value"><a href="mailto:${emailAdd}">$emailAdd</a></dd> 507: </dl> 508: </li> 509: #elseif ($field.key == "weight_class") 510: <li> 511: <dl> 512: <dt class="label">Class: </dt> 513: <dd class="value">$!attributes.get($field.key)</dd> 514: </dl> 515: </li> 516: #elseif ($field.key != "position_abbr") 517: <li> 518: <dl> 519: <dt class="label">$field.value: </dt> 520: <dd class="value">$!attributes.get($field.key)</dd> 521: </dl> 522: </li> 523: #end 524: #end 525: #end 526: #end 527: 528: #foreach ($i in [1..10]) 529: #set ($customKey = "bio_custom${i}") 530: #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}")) 531: <li> 532: <dl> 533: <dt class="label">$options.get($customKey): </dt> 534: <dd class="value">$!attributes.get("custom${i}")</dd> 535: </dl> 536: </li> 537: #end 538: #end 539: </ul> 540: 541: #else 542: ## default layout 543: 544: <div class="player-name"> 545: #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span><span class="sep"> - </span>#end 546: <span class="name">$fullName</span> 547: </div> 548: 549: <table role="presentation"> 550: #foreach ($i in [1..10]) 551: #set ($stickyKey = "bio_custom${i}_sticky") 552: #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0) 553: <tr> 554: <td class="label">$options.get($stickyKey): </td> 555: <td class="value">$!attributes.get("custom${i}")</td> 556: </tr> 557: #end 558: #end 559: 560: #foreach ($field in $fields) 561: #if (!$field.key.startsWith("custom")) 562: #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name")) 563: #if ($field.key == "phone1" || $field.key == "phone2") 564: <tr> 565: <td class="label">Phone: </td> 566: <td class="value">$!attributes.get($field.key)</td> 567: </tr> 568: #elseif ($field.key == "email_address") 569: #set ($emailAdd = $attributes.get($field.key)) 570: <tr> 571: <td class="label">Email: </td> 572: <td class="value"><a href="mailto:${emailAdd}">$emailAdd</a></td> 573: </tr> 574: #elseif ($field.key == "weight_class") 575: <tr> 576: <td class="label">Class: </td> 577: <td class="value">$!attributes.get($field.key)</td> 578: </tr> 579: #elseif ($field.key != "position_abbr") 580: <tr> 581: <td class="label">$field.value: </td> 582: <td class="value">$!attributes.get($field.key)</td> 583: </tr> 584: #end 585: #end 586: #end 587: #end 588: 589: #foreach ($i in [1..10]) 590: #set ($customKey = "bio_custom${i}") 591: #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}")) 592: <tr> 593: <td class="label">$options.get($customKey): </td> 594: <td class="value">$!attributes.get("custom${i}")</td> 595: </tr> 596: #end 597: #end 598: </table> 599: #end ## enhancedLayout check 600: #end ## macro printBioInfo 601: 602: #macro (printActionShots) 603: #if ($showActionShots) 604: ## BANNERS SLIDER 605: #set ($slickSettings = { 606: "autoplay": true, 607: "fade": true, 608: "arrows": false, 609: "slidesToShow": 1, 610: "slidesToScroll": 1, 611: "lazyLoad": "ondemand", 612: "responsive": "none" 613: }) 614: #set ($slickSettings = $slickSettings.toString().replace("=", ":")) 615: <div class="action-shots clearfix"> 616: <div class="slider" data-module="slick-slider-init" data-slick-settings="$slickSettings"> 617: #foreach ($photo in $playerPhotos) 618: #if ($velocityCount <= $actionShotsLimit) 619: #set ($imgAlt = "") 620: #if (!$image.altText.equals($image.title)) 621: #set ($imgAlt = $image.altText) 622: #elseif( $image.title.length() == 0 ) 623: #set ($imgAlt = "Action shot for $page.title image $velocityCount") 624: #end 625: <div class="image"> 626: <img data-lazy="$photo.url" alt="$imgAlt" /> 627: </div> 628: #end 629: #end 630: </div> 631: </div> 632: #end 633: #end ## macro printActionShots 634: 635: #macro (printHighlights) 636: #if ($highlights && $showHighlights) 637: <div class="highlights #if ($enhancedLayout) highlights-bio-enhanced #else highlights-bio #end clearfix"> 638: #foreach ($highlight in $highlights.keySet()) 639: #set ($value = "-") 640: #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight))) 641: <div class="stat clearfix"> 642: <span class="stat-title">$!highlights.get($highlight)</span> 643: <span class="stat-value">$value</span> 644: </div> 645: #end 646: </div> 647: #end 648: #end ## macro printHighlights 649: #macro (printRoster) 650: #if ($enhancedLayout) 651: $website.includeAgain("${page.url}?tmpl=roster-switcher-template&id=roster-list") 652: #else 653: #if ($page.contentType == "loki/bio") 654: #set ($headlinesFeaturedSize = 0) 655: #foreach ($featuredPage in $page.headlinesFeatured) 656: #if ($featuredPage.contentType == "loki/headlines") 657: #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1) 658: #end 659: #end 660: #if ($headlinesFeaturedSize > 0) 661: <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below."> 662: <option selected="selected">Related Bios</option> 663: #foreach ($featuredPage in $page.headlinesFeatured) 664: #if ($featuredPage.contentType == "loki/headlines") 665: $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template¤t_url=${page.url}") 666: #end 667: #end 668: </select> 669: #end 670: #elseif ($page.contentType == "loki/bio-network") 671: #set ($relatedPlayers = $page.sectionPage.children) 672: #set ($teamNames = {}) 673: #foreach ($relatedPlayer in $relatedPlayers) 674: #if ($relatedPlayer.contentType == "loki/bio-network") 675: #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes()) 676: #set ($teamName = $relatedPlayerObj.get("team")) 677: #if ($teamName.length() > 0) 678: #if (!$teamNames.containsValue($teamName)) 679: $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName) 680: #end 681: #end 682: #end 683: #end 684: 685: <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below."> 686: #foreach ($i in [1..$teamNames.size()]) 687: #if ($teamNames.size() > 1) 688: <optgroup label="$teamNames.get($i)"> 689: #end 690: 691: #foreach ($relatedPlayer in $relatedPlayers) 692: #if ($relatedPlayer.contentType == "loki/bio-network") 693: #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes()) 694: #set ($teamName = $relatedPlayerObj.get("team")) 695: #if ($teamName.length() > 0 && $teamName == $teamNames.get($i)) 696: #set ($playerFirstName = $relatedPlayerObj.get("first_name")) 697: #set ($playerLastName = $relatedPlayerObj.get("last_name")) 698: #if ($page.url == $relatedPlayer.url) 699: <option value="$relatedPlayer.url" selected="selected">${playerFirstName} ${playerLastName}</option> 700: #else 701: <option value="$relatedPlayer.url">${playerFirstName} ${playerLastName}</option> 702: #end 703: #end 704: #end 705: #end 706: 707: #if ($teamNames.size() > 1) 708: </optgroup> 709: #end 710: #end 711: </select> 712: #end 713: #end ## enhancedLayout check 714: #end ## macro printRoster 715: 716: ################################################## END MACROS ############################################################# 717: 718: #if ($attributes.get("full_name").length() > 0) 719: #set ($fullName = $attributes.get("full_name")) 720: #else 721: #set ($firstName = $!attributes.get("first_name")) 722: #set ($lastName = $!attributes.get("last_name")) 723: #set ($fullName = "${firstName} ${lastName}") 724: #end 725: 726: #set ($actionShots = false) 727: #if ($enhancedLayout && $playerPhotos.size() > 0) 728: #set ($actionShots = true) 729: #end 730: 731: #if ($enhancedLayout) 732: #set ($rootClass = "bio-enhanced") 733: #if ($actionShots && $showActionShots) 734: #set ($rootClass = "${rootClass} action") 735: #else 736: #set ($rootClass = "${rootClass} plain") 737: #end 738: #else 739: #set ($rootClass = "bio-wrap") 740: #end 741: 742: ## FULL ROSTER 743: <div class="${rootClass} #if ($highlights) bio-wrap-has-highlights #end clearfix" data-module="stats/responsive-container"> 744: 745: ## RELATED BIOS 746: #if ($showRoster) 747: <div class="related-bios clearfix">#printRoster</div> 748: #end 749: 750: #if ($actionShots) 751: #printActionShots 752: #end 753: 754: <div class="head clearfix"> 755: <div class="clearfix"> 756: 757: <div class="player-about clearfix"> 758: <div class="player-headshot">#printHeadshot</div> 759: <div class="player-info">#printBioInfo</div> 760: </div> 761: 762: #printHighlights 763: 764: </div> 765: </div> ## head 766: 767: #if ($view.length() > 0) 768: <div class="body clearfix"> 769: 770: <div class="tab-container primary clearfix" data-module="stats/tabs" data-type="primary"> 771: <div class="tab-nav" data-module="jscroll" data-momentum="false"> 772: <div> 773: <ul class="clearfix"> 774: #if ($hasSynopsis || $hasBioBrief) 775: <li #if ($view == "bio") class="active" #end><a href="${page.url}?view=bio">Bio</a></li> 776: #end 777: 778: #if ($statsURL.length() > 0) 779: <li #if ($view == "profile") class="active" #end><a href="${page.url}?view=profile">Player Profile</a></li> 780: <li #if ($view == "gamelog") class="active" #end><a href="${page.url}?view=gamelog">Game Log</a></li> 781: #if ($showCareer) 782: <li #if ($view == "career") class="active" #end><a href="${page.url}?view=career">Career Stats</a></li> 783: #end 784: <li #if ($view == "splits") class="active" #end><a href="${page.url}?view=splits">Split Stats</a></li> 785: #end 786: 787: #if ($hasHTMLStats) 788: <li #if ($view == "htmlstats") class="active" #end><a href="${page.url}?view=htmlstats">HTML Stats</a></li> 789: #end 790: 791: #if ($releases.size() > 0) 792: <li #if ($view == "news") class="active" #end><a href="${page.url}?view=news">News</a></li> 793: #end 794: 795: #if ($playerPhotos.size() > 0) 796: <li #if ($view == "photos") class="active" #end><a href="${page.url}?view=photos">Photos</a></li> 797: #end 798: 799: #if ($playerVideos.size() > 0) 800: <li #if ($view == "videos") class="active" #end><a href="${page.url}?view=videos">Videos</a></li> 801: #end 802: </ul> 803: </div> 804: </div> ## tab-nav 805: 806: <div class="tab-panels clearfix"> 807: 808: ## BIO 809: #if ($hasSynopsis || $hasBioBrief) 810: 811: #set ($class = "tab-panel clearfix") 812: #if ($view == "bio") 813: #set ($class = "tab-panel active clearfix") 814: #end 815: <div class="${class}"> 816: 817: <div class="synopsis clearfix"> 818: #if ($hasSynopsis) 819: $synopsis 820: #elseif ($hasBioBrief) 821: $website.include("$bioBriefURL") 822: #end 823: </div> 824: 825: </div> ## tab-panel 826: #end 827: ## BIO 828: 829: ## STATS 830: #if ($statsURL.length() > 0) 831: 832: ## PROFILE 833: #set ($class = "tab-panel clearfix") 834: #if ($view == "profile") 835: #set ($class = "tab-panel active clearfix") 836: #end 837: <div class="${class}"> 838: <div class="stats-wrap clearfix"> 839: 840: ## LAST SIX GAMES 841: <div class="stats-box half"> 842: #printRecentGames() 843: </div> 844: 845: ## RANKING 846: <div class="stats-box half"> 847: #if ($statPos.length() > 0) 848: $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}") 849: #end 850: </div> 851: 852: </div> ## stats-wrap 853: </div> ## tab-content 854: ## PROFILE 855: 856: ## GAMELOG 857: #set ($class = "tab-panel clearfix") 858: #if ($view == "gamelog") 859: #set ($class = "tab-panel active clearfix") 860: #end 861: 862: #set ($activePos = $statPos) 863: #if ($view == "gamelog" && $paramPos.length() > 0) 864: #if ($positions.get($paramPos).length() > 0) 865: #set ($activePos = $positions.get($paramPos)) 866: #end 867: #end 868: 869: <div class="${class}"> 870: 871: #if ($gamelogsCategoriesLabels) 872: <div class="tab-container clearfix secondary" data-module="stats/tabs" data-type="secondary"> 873: <div class="tab-nav" data-module="jscroll" data-momentum="false"> 874: <div> 875: <ul class="clearfix"> 876: #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet()) 877: #set($gamelogsCatLabelVal = $gamelogsCatLabel.value) 878: 879: #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense") 880: #set($gamelogsCatLabelVal = "Defence") 881: #end 882: 883: <li #if ($activePos == $gamelogsCatLabel.key) class="active" #end><a href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}" role="button" aria-label="Game Log: ${gamelogsCatLabelVal}">$gamelogsCatLabelVal</a></li> 884: #end 885: </ul> 886: </div> 887: </div> 888: <div class="tab-panels"> 889: #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet()) 890: #set ($class = "tab-panel clearfix") 891: #if ($gamelogsCatLabel.key == $activePos) 892: #set ($class = "tab-panel active clearfix") 893: #end 894: <div class="${class}"> 895: <div class="stats-wrap clearfix">#gamelogData($gamelogsCatLabel.key)</div> 896: </div> 897: #end 898: </div> 899: </div> 900: #else 901: <div class="stats-wrap clearfix">#gamelogData($pos)</div> 902: #end 903: 904: </div> ## tab-panel 905: ## GAMELOG 906: 907: 908: ## CAREER 909: #if ($showCareer) 910: 911: #set ($activePos = $statPos) 912: #if ($view == "career" && $paramPos.length() > 0) 913: #if ($positions.get($paramPos).length() > 0) 914: #set ($activePos = $positions.get($paramPos)) 915: #end 916: #end 917: 918: #set ($class = "tab-panel clearfix") 919: #if ($view == "career") 920: #set ($class = "tab-panel active clearfix") 921: #end 922: 923: <div class="${class}"> 924: 925: #if ($briefsCategoriesLabels) 926: #printCategories($briefsCategoriesLabels "career" "Career Stats") 927: #else 928: <div class="stats-wrap clearfix">#careerData($activePos)</div> 929: #end 930: 931: </div> ## tab-panel 932: #end 933: ## CAREER 934: 935: ## SPLITS 936: #set ($class = "tab-panel clearfix") 937: #if ($view == "splits") 938: #set ($class = "tab-panel active clearfix") 939: #end 940: 941: #set ($activePos = $statPos) 942: #if ($view == "splits" && $paramPos.length() > 0) 943: #if ($positions.get($paramPos).length() > 0) 944: #set ($activePos = $positions.get($paramPos)) 945: #end 946: #end 947: 948: <div class="${class}"> 949: 950: #if ($briefsCategoriesLabels) 951: #printCategories($briefsCategoriesLabels "splits" "Splits Stats") 952: #else 953: <div class="stats-wrap clearfix">#splitsData($pos)</div> 954: #end 955: 956: </div> ## tab-panel 957: ## SPLITS 958: 959: #end 960: ## STATS 961: 962: ## HTML STATS 963: #if ($hasHTMLStats) 964: 965: #set ($class = "tab-panel clearfix") 966: #if ($view == "htmlstats") 967: #set ($class = "tab-panel active clearfix") 968: #end 969: <div class="${class}"> 970: <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a> 971: </div> 972: 973: #end 974: ## HTML STATS 975: 976: ## NEWS 977: #if ($releases.size() > 0) 978: #set ($class = "tab-panel clearfix") 979: #if ($view == "news") 980: #set ($class = "tab-panel active clearfix") 981: #end 982: <div class="${class}"> 983: #printGrid($releases, "article") 984: </div> ## tab-content 985: #end 986: ## NEWS 987: 988: ## PHOTOS 989: #if ($playerPhotos.size() > 0) 990: #set ($class = "tab-panel clearfix") 991: #if ($view == "photos") 992: #set ($class = "tab-panel active clearfix") 993: #end 994: <div class="${class}"> 995: $website.includeAgain("${page.url}?tmpl=bio-photos-template") 996: </div> ## tab-content 997: #end 998: ## PHOTOS 999: 1000: ## VIDEOS 1001: #if ($playerVideos.size() > 0) 1002: #set ($class = "tab-panel clearfix") 1003: #if ($view == "videos") 1004: #set ($class = "tab-panel active clearfix") 1005: #end 1006: <div class="${class}"> 1007: #printGrid($playerVideos, "video") 1008: </div> ## tab-content 1009: #end 1010: ## VIDEOS 1011: 1012: </div> ## tab-panels 1013: </div> ## tab-container 1014: </div> ## body 1015: #end 1016: 1017: $wiki 1018: </div> ## ends bio-wrap 1019: 1020: ## GLOBAL ADS SERVER 1021: #if ($website.ads.isAdvertisingEnabled('BIOS')) 1022: $website.includeAgain("global-adserver-slots?adSlot=bios") 1023: #end |