-
- Height:
- 5-11
-
- Bats/Throws:
- L/L
-
- Year:
- Fr.
-
- Hometown:
- Jarrettsville, Md.
-
- High School:
- North Harford
-
- Position:
- OF
-
- gp
- 38
-
- avg
- .341
-
- hr
- -
-
- rbi
- 14
-
- r
- 28
-
- sb
- 3
Statistics category |
Overall |
Conf |
Games |
38
|
17
|
Plate appearances |
144
|
74
|
At Bats |
123
|
65
|
Runs |
28
|
11
|
Hits |
42
|
21
|
Doubles |
5
|
2
|
Triples |
-
|
-
|
Home Runs |
-
|
-
|
Runs Batted In |
14
|
6
|
Total bases |
47
|
23
|
Walks |
18
|
9
|
Hit by pitch |
-
|
-
|
Strikeouts |
29
|
14
|
Sacrifice Flies |
-
|
-
|
Sacrifice Hits |
3
|
-
|
Hit into double play |
1
|
-
|
Stolen Bases |
3
|
3
|
Caught Stealing |
2
|
-
|
Batting Average |
.341
|
.323
|
On Base Percentage |
.426
|
.405
|
Slugging Percentage |
.382
|
.354
|
Appearances |
0
|
0
|
Games started |
0
|
0
|
Wins |
0
|
0
|
Losses |
0
|
0
|
Saves |
0
|
0
|
Complete Games |
-
|
-
|
Shutouts |
-
|
-
|
Innings Pitched |
0.0
|
0.0
|
Hits |
-
|
-
|
Runs |
-
|
-
|
Earned Runs |
-
|
-
|
Walks |
-
|
-
|
Strikeouts |
-
|
-
|
Strikeouts per Game |
.00
|
.00
|
Doubles Allowed |
-
|
-
|
Triples Allowed |
-
|
-
|
Home Runs Allows |
-
|
-
|
At Bats Against |
-
|
-
|
Batting Average Against |
-
|
-
|
Earned Run Average |
0.00
|
0.00
|
Wild pitches |
-
|
-
|
Hit Batters |
-
|
-
|
Balks |
-
|
-
|
Sacrifice Flies Allowed |
-
|
-
|
Sacrifice Hits Allowed |
-
|
-
|
Total Chances |
46
|
21
|
Put Outs |
46
|
21
|
Assists |
0
|
0
|
Errors |
0
|
0
|
Fielding Percentage |
1.000
|
1.000
|
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 19 |
at Hampden-Sydney
|
L, 5-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 20 |
vs. Stevenson
|
W, 11-10
|
0 |
1 |
0 |
- |
- |
- |
0 |
- |
- |
- |
- |
Feb 20 |
vs. Gallaudet
|
W, 5-1
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 21 |
vs. Gallaudet
|
W, 6-2
|
1 |
0 |
1 |
- |
- |
- |
0 |
- |
- |
- |
- |
Feb 27 |
at Bridgewater (Va.)
|
L, 7-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 27 |
at Bridgewater (Va.)
|
L, 7-4
|
0 |
0 |
0 |
- |
- |
- |
0 |
- |
- |
- |
- |
Feb 28 |
at Hood
|
W, 3-1
|
0 |
0 |
0 |
- |
- |
- |
0 |
- |
- |
- |
- |
Feb 28 |
at Hood
|
L, 5-4
|
0 |
0 |
0 |
- |
- |
- |
0 |
- |
- |
- |
- |
Mar 3 |
at Dickinson
|
L, 6-1
|
1 |
0 |
1 |
- |
- |
- |
0 |
- |
- |
- |
- |
Mar 5 |
York (Pa.)
|
L, 4-1
|
4 |
0 |
1 |
- |
- |
- |
1 |
- |
- |
- |
- |
Mar 6 |
at Averett
|
W, 10-3
|
4 |
3 |
2 |
- |
- |
- |
0 |
1 |
- |
- |
- |
Mar 7 |
at Averett
|
L, 8-5
|
2 |
0 |
0 |
- |
- |
- |
0 |
1 |
- |
- |
- |
Mar 7 |
at Averett
|
L, 3-2
|
3 |
1 |
1 |
- |
- |
- |
0 |
- |
- |
- |
- |
Mar 8 |
at Roanoke
|
W, 7-5
|
3 |
2 |
2 |
1 |
- |
- |
2 |
1 |
1 |
- |
- |
Mar 9 |
at Roanoke
|
W, 8-3
|
4 |
1 |
2 |
- |
- |
- |
2 |
- |
2 |
- |
- |
Mar 10 |
at Washington and Lee
|
L, 11-10
|
4 |
2 |
3 |
- |
- |
- |
1 |
1 |
1 |
- |
1 |
Mar 12 |
Frostburg St.
|
L, 15-9
|
3 |
0 |
0 |
- |
- |
- |
0 |
- |
1 |
- |
- |
Mar 12 |
Frostburg St.
|
W, 4-3
|
4 |
0 |
1 |
- |
- |
- |
0 |
- |
3 |
- |
- |
Mar 16 |
at Marymount (Va.)
|
L, 16-13
|
4 |
4 |
3 |
- |
- |
- |
0 |
2 |
- |
1 |
- |
Mar 18 |
Elmira (N.Y.)
|
L, 6-3
|
5 |
0 |
0 |
- |
- |
- |
0 |
- |
2 |
- |
- |
Mar 19 |
Southern Virginia
|
W, 4-3
|
3 |
1 |
1 |
- |
- |
- |
0 |
- |
1 |
- |
- |
Mar 19 |
Southern Virginia
|
L, 3-0
|
4 |
0 |
1 |
- |
- |
- |
0 |
- |
- |
- |
- |
Mar 22 |
at Gettysburg
|
W, 11-4
|
3 |
0 |
0 |
- |
- |
- |
2 |
1 |
2 |
- |
- |
Mar 23 |
at Wesley
|
W, 4-1
|
4 |
0 |
0 |
- |
- |
- |
0 |
- |
1 |
- |
- |
Mar 26 |
Mary Washington
|
L, 8-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Mar 26 |
Mary Washington
|
W, 6-5
|
4 |
1 |
2 |
- |
- |
- |
0 |
- |
1 |
- |
- |
Mar 29 |
at Elizabethtown
|
L, 11-7
|
2 |
1 |
0 |
- |
- |
- |
0 |
1 |
2 |
- |
- |
Mar 30 |
Marymount (Va.)
|
W, 5-3
|
3 |
0 |
3 |
- |
- |
- |
1 |
1 |
- |
- |
- |
Apr 3 |
at St. Mary's (Md.)
|
L, 6-5
|
4 |
1 |
2 |
- |
- |
- |
1 |
1 |
- |
2 |
- |
Apr 3 |
at St. Mary's (Md.)
|
W, 9-6
|
4 |
1 |
0 |
- |
- |
- |
0 |
1 |
1 |
- |
- |
Apr 6 |
Wesley
|
L, 8-3
|
3 |
0 |
1 |
- |
- |
- |
0 |
1 |
- |
- |
- |
Apr 13 |
at York (Pa.)
|
W, 13-7
|
6 |
0 |
1 |
- |
- |
- |
0 |
- |
2 |
- |
- |
Apr 14 |
Chris. Newport
|
L, 4-2
|
4 |
1 |
0 |
- |
- |
- |
0 |
1 |
2 |
- |
- |
Apr 14 |
Chris. Newport
|
W, 3-0
|
3 |
0 |
0 |
- |
- |
- |
0 |
1 |
1 |
- |
- |
Apr 16 |
at Salisbury
|
W, 15-13
|
5 |
1 |
3 |
1 |
- |
- |
2 |
- |
1 |
- |
- |
Apr 16 |
at Salisbury
|
L, 15-8
|
3 |
1 |
2 |
1 |
- |
- |
1 |
1 |
- |
- |
- |
Apr 17 |
Lebanon Valley
|
L, 8-3
|
4 |
1 |
1 |
- |
- |
- |
0 |
- |
1 |
- |
- |
Apr 19 |
at Frostburg St.
|
W, 14-0
|
5 |
2 |
2 |
- |
- |
- |
1 |
- |
1 |
- |
- |
Apr 21 |
vs. Wesley
|
L, 10-6
|
5 |
1 |
3 |
1 |
- |
- |
0 |
- |
- |
- |
1 |
Apr 22 |
vs. Marymount (Va.)
|
L, 10-6
|
4 |
0 |
0 |
- |
- |
- |
0 |
- |
1 |
- |
- |
Apr 24 |
at Marywood
|
L, 5-4
|
4 |
0 |
2 |
1 |
- |
- |
0 |
2 |
1 |
- |
- |
Apr 26 |
Albright
|
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Apr 27 |
Juniata
|
W, 15-11
|
4 |
2 |
1 |
- |
- |
- |
0 |
1 |
1 |
- |
- |
Date |
Opponent |
Score |
hbp |
sf |
sh |
tb |
xbh |
hdp |
go |
fo |
go/fo |
pa |
Feb 19 |
at Hampden-Sydney
|
L, 5-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 20 |
vs. Stevenson
|
W, 11-10
|
- |
- |
- |
0 |
0 |
- |
- |
- |
- |
0 |
Feb 20 |
vs. Gallaudet
|
W, 5-1
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 21 |
vs. Gallaudet
|
W, 6-2
|
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
1 |
Feb 27 |
at Bridgewater (Va.)
|
L, 7-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 27 |
at Bridgewater (Va.)
|
L, 7-4
|
- |
- |
- |
0 |
0 |
- |
- |
- |
- |
0 |
Feb 28 |
at Hood
|
W, 3-1
|
- |
- |
- |
0 |
0 |
- |
- |
- |
- |
0 |
Feb 28 |
at Hood
|
L, 5-4
|
- |
- |
- |
0 |
0 |
- |
- |
- |
- |
0 |
Mar 3 |
at Dickinson
|
L, 6-1
|
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
1 |
Mar 5 |
York (Pa.)
|
L, 4-1
|
- |
- |
- |
1 |
0 |
- |
1 |
2 |
0.50 |
4 |
Mar 6 |
at Averett
|
W, 10-3
|
- |
- |
- |
2 |
0 |
- |
2 |
- |
- |
5 |
Mar 7 |
at Averett
|
L, 8-5
|
- |
- |
- |
0 |
0 |
- |
1 |
1 |
1.00 |
3 |
Mar 7 |
at Averett
|
L, 3-2
|
- |
- |
- |
1 |
0 |
- |
1 |
1 |
1.00 |
3 |
Mar 8 |
at Roanoke
|
W, 7-5
|
- |
- |
1 |
3 |
1 |
- |
1 |
- |
- |
5 |
Mar 9 |
at Roanoke
|
W, 8-3
|
- |
- |
1 |
2 |
0 |
- |
- |
- |
- |
5 |
Mar 10 |
at Washington and Lee
|
L, 11-10
|
- |
- |
- |
3 |
0 |
- |
- |
- |
- |
5 |
Mar 12 |
Frostburg St.
|
L, 15-9
|
- |
- |
- |
0 |
0 |
- |
- |
2 |
- |
3 |
Mar 12 |
Frostburg St.
|
W, 4-3
|
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
4 |
Mar 16 |
at Marymount (Va.)
|
L, 16-13
|
- |
- |
- |
3 |
0 |
- |
1 |
- |
- |
6 |
Mar 18 |
Elmira (N.Y.)
|
L, 6-3
|
- |
- |
- |
0 |
0 |
- |
2 |
1 |
2.00 |
5 |
Mar 19 |
Southern Virginia
|
W, 4-3
|
- |
- |
- |
1 |
0 |
- |
1 |
- |
- |
3 |
Mar 19 |
Southern Virginia
|
L, 3-0
|
- |
- |
- |
1 |
0 |
- |
1 |
2 |
0.50 |
4 |
Mar 22 |
at Gettysburg
|
W, 11-4
|
- |
- |
1 |
0 |
0 |
- |
2 |
- |
- |
5 |
Mar 23 |
at Wesley
|
W, 4-1
|
- |
- |
- |
0 |
0 |
- |
2 |
1 |
2.00 |
4 |
Mar 26 |
Mary Washington
|
L, 8-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Mar 26 |
Mary Washington
|
W, 6-5
|
- |
- |
- |
2 |
0 |
- |
1 |
- |
- |
4 |
Mar 29 |
at Elizabethtown
|
L, 11-7
|
- |
- |
- |
0 |
0 |
- |
- |
- |
- |
3 |
Mar 30 |
Marymount (Va.)
|
W, 5-3
|
- |
- |
- |
3 |
0 |
- |
- |
- |
- |
4 |
Apr 3 |
at St. Mary's (Md.)
|
L, 6-5
|
- |
- |
- |
2 |
0 |
- |
1 |
1 |
1.00 |
5 |
Apr 3 |
at St. Mary's (Md.)
|
W, 9-6
|
- |
- |
- |
0 |
0 |
- |
1 |
- |
- |
5 |
Apr 6 |
Wesley
|
L, 8-3
|
- |
- |
- |
1 |
0 |
- |
1 |
1 |
1.00 |
4 |
Apr 13 |
at York (Pa.)
|
W, 13-7
|
- |
- |
- |
1 |
0 |
- |
- |
3 |
- |
6 |
Apr 14 |
Chris. Newport
|
L, 4-2
|
- |
- |
- |
0 |
0 |
- |
1 |
- |
- |
5 |
Apr 14 |
Chris. Newport
|
W, 3-0
|
- |
- |
- |
0 |
0 |
- |
1 |
1 |
1.00 |
4 |
Apr 16 |
at Salisbury
|
W, 15-13
|
- |
- |
- |
4 |
1 |
- |
- |
1 |
- |
5 |
Apr 16 |
at Salisbury
|
L, 15-8
|
- |
- |
- |
3 |
1 |
- |
- |
1 |
- |
4 |
Apr 17 |
Lebanon Valley
|
L, 8-3
|
- |
- |
- |
1 |
0 |
- |
2 |
- |
- |
4 |
Apr 19 |
at Frostburg St.
|
W, 14-0
|
- |
- |
- |
2 |
0 |
- |
1 |
1 |
1.00 |
5 |
Apr 21 |
vs. Wesley
|
L, 10-6
|
- |
- |
- |
4 |
1 |
- |
1 |
1 |
1.00 |
5 |
Apr 22 |
vs. Marymount (Va.)
|
L, 10-6
|
- |
- |
- |
0 |
0 |
1 |
3 |
- |
- |
4 |
Apr 24 |
at Marywood
|
L, 5-4
|
- |
- |
- |
3 |
1 |
- |
- |
- |
- |
6 |
Apr 26 |
Albright
|
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Apr 27 |
Juniata
|
W, 15-11
|
- |
- |
- |
1 |
0 |
- |
2 |
- |
- |
5 |
Date |
Opponent |
Score |
gs |
w |
l |
sv |
ip |
h |
r |
er |
era |
bb |
k |
hr |
Feb 19 |
at Hampden-Sydney
|
L, 5-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 20 |
vs. Stevenson
|
W, 11-10
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Feb 20 |
vs. Gallaudet
|
W, 5-1
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 21 |
vs. Gallaudet
|
W, 6-2
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Feb 27 |
at Bridgewater (Va.)
|
L, 7-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 27 |
at Bridgewater (Va.)
|
L, 7-4
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Feb 28 |
at Hood
|
W, 3-1
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Feb 28 |
at Hood
|
L, 5-4
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 3 |
at Dickinson
|
L, 6-1
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 5 |
York (Pa.)
|
L, 4-1
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 6 |
at Averett
|
W, 10-3
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 7 |
at Averett
|
L, 8-5
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 7 |
at Averett
|
L, 3-2
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 8 |
at Roanoke
|
W, 7-5
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 9 |
at Roanoke
|
W, 8-3
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 10 |
at Washington and Lee
|
L, 11-10
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 12 |
Frostburg St.
|
L, 15-9
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 12 |
Frostburg St.
|
W, 4-3
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 16 |
at Marymount (Va.)
|
L, 16-13
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 18 |
Elmira (N.Y.)
|
L, 6-3
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 19 |
Southern Virginia
|
W, 4-3
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 19 |
Southern Virginia
|
L, 3-0
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 22 |
at Gettysburg
|
W, 11-4
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 23 |
at Wesley
|
W, 4-1
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 26 |
Mary Washington
|
L, 8-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Mar 26 |
Mary Washington
|
W, 6-5
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 29 |
at Elizabethtown
|
L, 11-7
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Mar 30 |
Marymount (Va.)
|
W, 5-3
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 3 |
at St. Mary's (Md.)
|
L, 6-5
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 3 |
at St. Mary's (Md.)
|
W, 9-6
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 6 |
Wesley
|
L, 8-3
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 13 |
at York (Pa.)
|
W, 13-7
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 14 |
Chris. Newport
|
L, 4-2
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 14 |
Chris. Newport
|
W, 3-0
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 16 |
at Salisbury
|
W, 15-13
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 16 |
at Salisbury
|
L, 15-8
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 17 |
Lebanon Valley
|
L, 8-3
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 19 |
at Frostburg St.
|
W, 14-0
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 21 |
vs. Wesley
|
L, 10-6
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 22 |
vs. Marymount (Va.)
|
L, 10-6
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 24 |
at Marywood
|
L, 5-4
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Apr 26 |
Albright
|
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Apr 27 |
Juniata
|
W, 15-11
|
0 |
0 |
0 |
0 |
0.0 |
- |
- |
- |
0.00 |
- |
- |
- |
Date |
Opponent |
Score |
tc |
po |
a |
e |
fpct |
dp |
sba |
rcs |
rcs% |
pb |
ci |
Feb 19 |
at Hampden-Sydney
|
L, 5-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 20 |
vs. Stevenson
|
W, 11-10
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Feb 20 |
vs. Gallaudet
|
W, 5-1
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 21 |
vs. Gallaudet
|
W, 6-2
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Feb 27 |
at Bridgewater (Va.)
|
L, 7-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Feb 27 |
at Bridgewater (Va.)
|
L, 7-4
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Feb 28 |
at Hood
|
W, 3-1
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Feb 28 |
at Hood
|
L, 5-4
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Mar 3 |
at Dickinson
|
L, 6-1
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Mar 5 |
York (Pa.)
|
L, 4-1
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 6 |
at Averett
|
W, 10-3
|
3 |
3 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 7 |
at Averett
|
L, 8-5
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Mar 7 |
at Averett
|
L, 3-2
|
2 |
2 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 8 |
at Roanoke
|
W, 7-5
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 9 |
at Roanoke
|
W, 8-3
|
2 |
2 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 10 |
at Washington and Lee
|
L, 11-10
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 12 |
Frostburg St.
|
L, 15-9
|
3 |
3 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 12 |
Frostburg St.
|
W, 4-3
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Mar 16 |
at Marymount (Va.)
|
L, 16-13
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 18 |
Elmira (N.Y.)
|
L, 6-3
|
2 |
2 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 19 |
Southern Virginia
|
W, 4-3
|
2 |
2 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 19 |
Southern Virginia
|
L, 3-0
|
3 |
3 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 22 |
at Gettysburg
|
W, 11-4
|
2 |
2 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 23 |
at Wesley
|
W, 4-1
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Mar 26 |
Mary Washington
|
L, 8-0
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Mar 26 |
Mary Washington
|
W, 6-5
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Mar 29 |
at Elizabethtown
|
L, 11-7
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Mar 30 |
Marymount (Va.)
|
W, 5-3
|
2 |
2 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 3 |
at St. Mary's (Md.)
|
L, 6-5
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Apr 3 |
at St. Mary's (Md.)
|
W, 9-6
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Apr 6 |
Wesley
|
L, 8-3
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 13 |
at York (Pa.)
|
W, 13-7
|
3 |
3 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 14 |
Chris. Newport
|
L, 4-2
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 14 |
Chris. Newport
|
W, 3-0
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 16 |
at Salisbury
|
W, 15-13
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 16 |
at Salisbury
|
L, 15-8
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 17 |
Lebanon Valley
|
L, 8-3
|
3 |
3 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 19 |
at Frostburg St.
|
W, 14-0
|
1 |
1 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 21 |
vs. Wesley
|
L, 10-6
|
3 |
3 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 22 |
vs. Marymount (Va.)
|
L, 10-6
|
2 |
2 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Apr 24 |
at Marywood
|
L, 5-4
|
0 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
- |
- |
Apr 26 |
Albright
|
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Apr 27 |
Juniata
|
W, 15-11
|
2 |
2 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
Career Stats - Hitting
|
g |
ab |
r |
h |
2b |
3b |
hr |
rbi |
bb |
k |
sb |
cs |
avg |
obp |
slg |
2015-16 |
38 |
123 |
28 |
42 |
5 |
- |
- |
14 |
18 |
29 |
3 |
2 |
.341 |
.426 |
.382 |
2016-17 |
28 |
82 |
18 |
26 |
1 |
- |
- |
12 |
11 |
17 |
- |
2 |
.317 |
.398 |
.329 |
2017-18 |
31 |
50 |
10 |
11 |
1 |
- |
- |
7 |
12 |
15 |
3 |
1 |
.220 |
.375 |
.240 |
2018-19 |
27 |
32 |
10 |
8 |
- |
- |
- |
3 |
5 |
6 |
2 |
- |
.250 |
.359 |
.250 |
Total |
124 |
287 |
66 |
87 |
7 |
- |
- |
36 |
46 |
67 |
8 |
5 |
.303 |
.401 |
.328 |
Career Stats - Extended Hitting
|
g |
hbp |
sf |
sh |
tb |
xbh |
hdp |
go |
fo |
go/fo |
pa |
2015-16 |
38 |
- |
- |
3 |
47 |
5 |
1 |
30 |
20 |
1.50 |
144 |
2016-17 |
28 |
- |
- |
- |
27 |
1 |
2 |
17 |
19 |
0.89 |
93 |
2017-18 |
31 |
1 |
1 |
1 |
12 |
1 |
- |
9 |
14 |
0.64 |
65 |
2018-19 |
27 |
1 |
1 |
1 |
8 |
0 |
- |
9 |
10 |
0.90 |
40 |
Total |
124 |
2 |
2 |
5 |
94 |
7 |
3 |
65 |
63 |
1.03 |
342 |
Career Stats - Pitching
|
app |
gs |
w |
l |
sv |
cg |
ip |
h |
r |
er |
bb |
k |
k/9 |
hr |
era |
2015-16 |
0 |
0 |
0 |
0 |
0 |
- |
0.0 |
- |
- |
- |
- |
- |
.00 |
- |
0.00 |
2016-17 |
0 |
0 |
0 |
0 |
0 |
- |
0.0 |
- |
- |
- |
- |
- |
.00 |
- |
0.00 |
2017-18 |
0 |
0 |
0 |
0 |
0 |
- |
0.0 |
- |
- |
- |
- |
- |
.00 |
- |
0.00 |
2018-19 |
1 |
0 |
0 |
0 |
0 |
- |
1.0 |
- |
1 |
1 |
2 |
- |
.00 |
- |
9.00 |
Total |
1 |
0 |
0 |
0 |
0 |
- |
1.0 |
- |
1 |
1 |
2 |
- |
.00 |
- |
9.00 |
Career Stats - Fielding
|
g |
tc |
po |
a |
e |
fpct |
dp |
sba |
rcs |
rcs% |
pb |
ci |
2015-16 |
38 |
46 |
46 |
0 |
0 |
1.000 |
- |
- |
- |
- |
- |
- |
2016-17 |
28 |
32 |
29 |
1 |
2 |
.938 |
- |
- |
- |
- |
- |
- |
2017-18 |
31 |
14 |
12 |
1 |
1 |
.929 |
- |
- |
- |
- |
- |
- |
2018-19 |
27 |
11 |
8 |
2 |
1 |
.909 |
- |
- |
- |
- |
- |
- |
Total |
124 |
103 |
95 |
4 |
4 |
.961 |
- |
- |
- |
- |
- |
- |
Splits Stats - Hitting
|
|
g |
ab |
r |
h |
2b |
3b |
hr |
rbi |
bb |
k |
sb |
cs |
avg |
obp |
slg |
Event |
Total |
38 |
123 |
28 |
42 |
5 |
- |
- |
14 |
18 |
29 |
3 |
2 |
.341 |
.426 |
.382 |
There was a problem with a Velocity script |
Page | bio-template |
Error | VM #split: too many arguments to macro. Wanted 3 got 5 at bio-template[line 308, column 17] |
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
|
Penn State Harrisburg
-
Sat, 05/02
| Baseball
vs.
Lancaster Bible
(Cancelled)
V
|
LS
-
Sat, 05/02
| Baseball
vs.
Lancaster Bible
(Cancelled)
V
|
LS
-
Fri, 05/01
| Baseball
vs.
Lancaster Bible
(Cancelled)
V
|
LS
-
Sun, 04/26
| Baseball
at
Gallaudet
(Cancelled)
-
Sat, 04/25
| Baseball
at
Gallaudet
(Cancelled)
NCAA DIV 111