13 Ilissa Hamilton
13 - Ilissa Hamilton
Height: 5-4
Bats/Throws: R/R
Year: Jr.
Hometown: S. Abington Twp, Pa.
High School: Scranton Preparatory School
Position: P/OF
Major: Biomedical Engineering
app 23
gs 19
w 13
l 6
sv 0
ip 121.1
era 3.00
k 115

2019 Season Highs

  • 3 hits at Kenyon on Mar. 23, 2019
  • 2 RBI (4x)
  • 3 runs at John Carroll on Mar. 26, 2019
  • 1 double (5x)
  • 13 strikeouts at John Carroll on Mar. 26, 2019
  • 9.0 innings pitched vs. Emory on April 20, 2019
  • 7.0 scoreless innings vs. Carnegie Mellon on Apr. 5, 2019

Pitching Career Highs

  • 13 strikeouts at Chicago on Apr. 29, 2018 & at John Carroll on Mar. 26, 2019
  • 9.0 innings pitched vs. Emory on April 20, 2019
  • 7.0 scoreless innings vs. Brandeis on Apr. 7, 2018 & vs. Carnegie Mellon on Apr. 5, 2019

Batting Career Highs

  • 3 hits vs. Augsburg on Mar. 15, 2018 & at Kenyon on Mar. 23, 2019
  • 2 RBI (5x)
  • 3 runs at John Carroll on Mar. 26, 2019
  • 2 doubles vs. John Carroll on Apr. 25, 2018

2019: Appeared in 35 games for Spartans as a junior outfielder/pitcher, including 19 starts on the mound...named to the Google Cloud Academic All-America First Team...University Athletic Association Second Team selection...earned UAA All-Academic honors... batted .270 (20-for-74) with two home runs, five doubles, two triples, 11 RBI's and 21 runs scored...on the mound, she led the Spartans with a 13-6 record and a 3.00 earned run average, while striking out a team-high 115 batters over 121.1 innings pitched...totaled 13 complete games...recorded a season-high 13 strikeouts at John Carroll on March 26...earned UAA Pitcher of the Week honors on May 6.

2018: Appeared in 48 games for the Spartans as a sophomore outfielder/pitcher, including 31 starts on the mound...University Athletic Association First Team selection...batted .282 with one run, 12 runs batted in and 24 runs scored...on the mound, she led the Spartans with a 21-8 record and a 2.57 earned run average, while striking out 184 batters over 185.0 innings pitched...totaled 19 complete games...recorded a season-high 13 strikeouts in a 4-1 win at the University of Chicago on April 29...set the new single-season program record for wins and strikeouts, surpassing Rebecca Taylor in both categories...named Most Oustanding Player at the NCAA Division III Notre Dame Regional after she threw 29 out of a possible 35 innings, compiling an ERA of 0.72 to go along with 23 strikeouts...also named the Most Outstanding Pitcher at the NCAA Division III Holland, Michigan Super Regional, after going 2-1 with a 2.47 earned run average and nine strikeouts in 17 innings pitched...earned UAA Pitcher of the Week honors on five seperate occasions (March 5, April 9, April 23, May 14 and May 21).

Prior to CWRU: Transferred from Division I Drexel University, after spending one year on the varsity softball team...attended Scranton Preparatory for high school, where she was a four-year letterwinner...served as team captain during her senior year...was coached by Jen Sicliano...three-time All-Conference selection and was named Conference Pitcher of the Year in 2015...member of the National Honor Society...received high honors throughout high school and was awarded the James E. Casey Scholarship...born August 29...daughter of Paulette and Brian Hamilton.

Recent Games
Apr 26 at Washington (Mo.) W, 6-2
Apr 27 at Washington (Mo.) W, 6-4
Apr 28 at Washington (Mo.) W, 14-6
Apr 28 at Washington (Mo.) W, 9-2
Apr 30 Ohio Northern W, 6-3
Apr 30 Ohio Northern W, 11-3
Statistics category Overall Conf
Games 35 17
Plate appearances 87 46
At Bats 74 40
Runs 21 8
Hits 20 8
Doubles 5 2
Triples 2 -
Home Runs 2 -
Runs Batted In 11 2
Total bases 35 10
Walks 8 4
Hit by pitch 1 1
Strikeouts 8 4
Sacrifice Flies - -
Sacrifice Hits 4 1
Hit into double play 1 1
Stolen Bases 2 1
Caught Stealing - -
Batting Average .270 .200
On Base Percentage .349 .289
Slugging Percentage .473 .250
Appearances 23 12
Games started 19 9
Wins 13 6
Losses 6 4
Saves 0 0
Complete Games 13 6
Shutouts 4 1
Innings Pitched 121.1 66.0
Hits 125 68
Runs 66 36
Earned Runs 52 30
Walks 32 17
Strikeouts 115 62
Strikeouts per Game 6.63 6.58
Doubles Allowed 28 20
Triples Allowed 3 1
Home Runs Allows 12 6
At Bats Against 493 272
Batting Average Against .254 .250
Earned Run Average 3.00 3.18
Wild pitches 5 4
Hit Batters 5 4
Balks - -
Sacrifice Flies Allowed 5 3
Sacrifice Hits Allowed 6 4
Total Chances 25 12
Put Outs 12 4
Assists 12 7
Errors 1 1
Fielding Percentage .960 .917
Double Plays - -
Stolen Bases Allowed 10 6
Runners Caught Stealing 5 3
Runners Caught Stealing Percentage .333 .333
Passed Balls - -
Catcher's Interference - -
Date Opponent Score ab r h 2b 3b hr rbi bb k sb cs
Mar 2 vs. Thomas More L, 8-0 2 0 0 - - - 0 - 1 - -
Mar 2 Transylvania L, 5-1 3 0 0 - - - 0 - - - -
Mar 11 vs. #15 Central (IA) W, 8-0 2 1 1 - - - 1 1 - 1 -
Mar 11 vs. Millikin L, 5-4 0 0 0 - - - 0 - - - -
Mar 12 vs. Cornell College   - - - - - - - - - - -
Mar 12 vs. Dickinson   - - - - - - - - - - -
Mar 14 vs. George Fox W, 7-5 2 1 0 - - - 0 - 1 - -
Mar 14 vs. St. Mary's (Ind.) W, 4-2 2 0 0 - - - 0 - - - -
Mar 15 vs. Buena Vista L, 7-5 0 1 0 - - - 0 - - - -
Mar 15 vs. Wis.-Platteville W, 5-0 2 0 0 - - - 0 - 1 - -
Mar 20 Baldwin Wallace L, 5-4 0 0 0 - - - 0 - - - -
Mar 20 Baldwin Wallace W, 14-4 - - - - - - - - - - -
Mar 23 at Kenyon W, 13-2 3 1 3 1 1 - 2 - - - -
Mar 23 at Kenyon W, 14-6 1 2 1 1 - - 2 1 - - -
Mar 24 Mount Union W, 9-0 3 1 1 - - - 0 - - - -
Mar 24 Mount Union W, 9-1 3 0 0 - - - 0 - - - -
Mar 26 at John Carroll W, 6-4 2 1 2 - - 1 2 - - - -
Mar 26 at John Carroll W, 10-0 2 3 2 - 1 1 2 1 - - -
Mar 29 New York U. L, 4-2 3 0 0 - - - 0 - 1 - -
Mar 29 New York U. W, 5-3 3 0 0 - - - 0 - - - -
Mar 31 New York U.   - - - - - - - - - - -
Mar 31 New York U.   - - - - - - - - - - -
Apr 5 Carnegie Mellon W, 6-0 3 1 1 1 - - 0 - - - -
Apr 5 Carnegie Mellon W, 8-0 2 0 0 - - - 0 - 1 - -
Apr 6 Carnegie Mellon W, 5-4 2 1 0 - - - 0 1 - - -
Apr 6 Carnegie Mellon L, 7-1 0 0 0 - - - 0 - - - -
Apr 12 at #21 Brandeis W, 4-2 3 0 0 - - - 0 - - - -
Apr 12 at #21 Brandeis L, 5-0 1 0 0 - - - 0 - - - -
Apr 13 at #21 Brandeis L, 4-1 2 0 0 - - - 0 - - - -
Apr 13 at #21 Brandeis L, 3-2 0 0 0 - - - 0 - - - -
Apr 17 Heidelberg W, 8-0 2 1 0 - - - 0 - - - -
Apr 17 Heidelberg W, 9-4 - - - - - - - - - - -
Apr 20 Emory L, 7-3 3 0 2 - - - 0 1 - - -
Apr 20 Emory L, 9-7 3 1 0 - - - 0 - - 1 -
Apr 21 Emory L, 10-7 3 1 0 - - - 1 - - - -
Apr 21 Emory W, 3-2 - - - - - - - - - - -
Apr 26 at Washington (Mo.) W, 6-2 3 2 2 - - - 0 - - - -
Apr 27 at Washington (Mo.) W, 6-4 3 1 1 - - - 0 1 2 - -
Apr 28 at Washington (Mo.) W, 14-6 3 1 0 - - - 0 1 - - -
Apr 28 at Washington (Mo.) W, 9-2 3 0 2 1 - - 1 - - - -
Apr 30 Ohio Northern W, 6-3 3 0 1 1 - - 0 - 1 - -
Apr 30 Ohio Northern W, 11-3 2 1 1 - - - 0 1 - - -
Date Opponent Score hbp sf sh tb xbh hdp go fo go/fo pa
Mar 2 vs. Thomas More L, 8-0 - - - 0 0 - - 1 - 2
Mar 2 Transylvania L, 5-1 - - - 0 0 - 2 1 2.00 3
Mar 11 vs. #15 Central (IA) W, 8-0 - - - 1 0 - 1 - - 3
Mar 11 vs. Millikin L, 5-4 - - - 0 0 - - - - 0
Mar 12 vs. Cornell College   - - - - - - - - - -
Mar 12 vs. Dickinson   - - - - - - - - - -
Mar 14 vs. George Fox W, 7-5 - - - 0 0 - - 1 - 2
Mar 14 vs. St. Mary's (Ind.) W, 4-2 - - - 0 0 - - 2 - 2
Mar 15 vs. Buena Vista L, 7-5 - - - 0 0 - - - - 0
Mar 15 vs. Wis.-Platteville W, 5-0 - - - 0 0 - - 1 - 2
Mar 20 Baldwin Wallace L, 5-4 - - - 0 0 - - - - 0
Mar 20 Baldwin Wallace W, 14-4 - - - - - - - - - -
Mar 23 at Kenyon W, 13-2 - - - 6 2 - - - - 3
Mar 23 at Kenyon W, 14-6 - - 2 2 1 - 2 - - 4
Mar 24 Mount Union W, 9-0 - - - 1 0 - 1 1 1.00 3
Mar 24 Mount Union W, 9-1 - - - 0 0 - 2 - - 3
Mar 26 at John Carroll W, 6-4 - - 1 5 1 - 1 - - 3
Mar 26 at John Carroll W, 10-0 - - - 7 2 - - - - 3
Mar 29 New York U. L, 4-2 - - - 0 0 1 - 2 - 3
Mar 29 New York U. W, 5-3 - - - 0 0 - 3 - - 3
Mar 31 New York U.   - - - - - - - - - -
Mar 31 New York U.   - - - - - - - - - -
Apr 5 Carnegie Mellon W, 6-0 - - - 2 1 - - 2 - 3
Apr 5 Carnegie Mellon W, 8-0 - - - 0 0 - - 1 - 2
Apr 6 Carnegie Mellon W, 5-4 - - - 0 0 - 1 1 1.00 3
Apr 6 Carnegie Mellon L, 7-1 - - - 0 0 - - - - 0
Apr 12 at #21 Brandeis W, 4-2 - - - 0 0 - 1 2 0.50 3
Apr 12 at #21 Brandeis L, 5-0 - - - 0 0 - - 1 - 1
Apr 13 at #21 Brandeis L, 4-1 - - - 0 0 - 1 1 1.00 2
Apr 13 at #21 Brandeis L, 3-2 - - - 0 0 - - - - 0
Apr 17 Heidelberg W, 8-0 - - - 0 0 - 1 1 1.00 2
Apr 17 Heidelberg W, 9-4 - - - - - - - - - -
Apr 20 Emory L, 7-3 - - - 2 0 - 1 - - 4
Apr 20 Emory L, 9-7 - - - 0 0 - 2 - - 3
Apr 21 Emory L, 10-7 1 - - 0 0 - 1 2 0.50 4
Apr 21 Emory W, 3-2 - - - - - - - - - -
Apr 26 at Washington (Mo.) W, 6-2 - - - 2 0 - - 1 - 3
Apr 27 at Washington (Mo.) W, 6-4 - - 1 1 0 - 1 - - 5
Apr 28 at Washington (Mo.) W, 14-6 - - - 0 0 - 2 1 2.00 4
Apr 28 at Washington (Mo.) W, 9-2 - - - 3 1 - - 1 - 3
Apr 30 Ohio Northern W, 6-3 - - - 2 1 - - 1 - 3
Apr 30 Ohio Northern W, 11-3 - - - 1 0 - - 1 - 3
Date Opponent Score gs w l sv ip h r er era bb k hr
Mar 2 vs. Thomas More L, 8-0 1 0 1 0 4.2 10 8 6 9.00 3 3 1
Mar 2 Transylvania L, 5-1 0 0 0 0 0.0 - - - 0.00 - - -
Mar 11 vs. #15 Central (IA) W, 8-0 1 1 0 0 5.0 2 0 0 0.00 1 6 -
Mar 11 vs. Millikin L, 5-4 0 0 0 0 1.0 - - - 0.00 - - -
Mar 12 vs. Cornell College   - - - - - - - - - - - -
Mar 12 vs. Dickinson   - - - - - - - - - - - -
Mar 14 vs. George Fox W, 7-5 1 1 0 0 6.0 5 3 2 2.33 1 6 1
Mar 14 vs. St. Mary's (Ind.) W, 4-2 0 0 0 0 0.0 - - - 0.00 - - -
Mar 15 vs. Buena Vista L, 7-5 1 0 1 0 2.2 6 6 6 15.75 1 2 1
Mar 15 vs. Wis.-Platteville W, 5-0 0 0 0 0 0.0 - - - 0.00 - - -
Mar 20 Baldwin Wallace L, 5-4 1 0 0 0 6.0 6 4 2 2.33 2 10 2
Mar 20 Baldwin Wallace W, 14-4 - - - - - - - - - - - -
Mar 23 at Kenyon W, 13-2 1 1 0 0 5.0 5 2 2 2.80 3 4 -
Mar 23 at Kenyon W, 14-6 0 0 0 0 0.0 - - - 0.00 - - -
Mar 24 Mount Union W, 9-0 1 1 0 0 5.0 2 0 0 0.00 0 2 -
Mar 24 Mount Union W, 9-1 0 0 0 0 0.0 - - - 0.00 - - -
Mar 26 at John Carroll W, 6-4 1 1 0 0 7.0 7 4 4 4.00 3 13 1
Mar 26 at John Carroll W, 10-0 0 0 0 0 0.0 - - - 0.00 - - -
Mar 29 New York U. L, 4-2 1 0 1 0 7.0 6 4 2 2.00 1 7 2
Mar 29 New York U. W, 5-3 0 0 0 0 0.0 - - - 0.00 - - -
Mar 31 New York U.   - - - - - - - - - - - -
Mar 31 New York U.   - - - - - - - - - - - -
Apr 5 Carnegie Mellon W, 6-0 1 1 0 0 7.0 5 0 0 0.00 1 10 -
Apr 5 Carnegie Mellon W, 8-0 0 0 0 0 0.0 - - - 0.00 - - -
Apr 6 Carnegie Mellon W, 5-4 1 1 0 0 7.0 2 4 4 4.00 1 8 -
Apr 6 Carnegie Mellon L, 7-1 0 0 0 0 1.2 2 1 1 4.20 - - -
Apr 12 at #21 Brandeis W, 4-2 1 1 0 0 7.0 8 2 2 2.00 1 10 -
Apr 12 at #21 Brandeis L, 5-0 0 0 0 0 0.0 - - - 0.00 - - -
Apr 13 at #21 Brandeis L, 4-1 1 0 1 0 5.0 4 4 2 2.80 2 4 2
Apr 13 at #21 Brandeis L, 3-2 0 0 0 0 0.1 - - - 0.00 - - -
Apr 17 Heidelberg W, 8-0 1 1 0 0 6.0 6 0 0 0.00 1 5 -
Apr 17 Heidelberg W, 9-4 - - - - - - - - - - - -
Apr 20 Emory L, 7-3 1 0 1 0 9.0 9 7 7 5.44 5 4 1
Apr 20 Emory L, 9-7 0 0 0 0 0.0 - - - 0.00 - - -
Apr 21 Emory L, 10-7 1 0 1 0 3.0 5 6 5 11.67 4 2 1
Apr 21 Emory W, 3-2 - - - - - - - - - - - -
Apr 26 at Washington (Mo.) W, 6-2 1 1 0 0 7.0 9 2 2 2.00 1 9 -
Apr 27 at Washington (Mo.) W, 6-4 0 1 0 0 7.0 6 - - 0.00 - 3 -
Apr 28 at Washington (Mo.) W, 14-6 1 1 0 0 5.0 12 6 5 7.00 1 5 -
Apr 28 at Washington (Mo.) W, 9-2 0 0 0 0 0.0 - - - 0.00 - - -
Apr 30 Ohio Northern W, 6-3 1 1 0 0 7.0 8 3 0 0.00 0 2 -
Apr 30 Ohio Northern W, 11-3 0 0 0 0 0.0 - - - 0.00 - - -
Date Opponent Score tc po a e fpct dp sba rcs rcs% pb ci
Mar 2 vs. Thomas More L, 8-0 2 1 1 0 1.000 - 2 - - - -
Mar 2 Transylvania L, 5-1 1 1 0 0 1.000 - - - - - -
Mar 11 vs. #15 Central (IA) W, 8-0 0 0 0 0 - - - 1 1.000 - -
Mar 11 vs. Millikin L, 5-4 0 0 0 0 - - - - - - -
Mar 12 vs. Cornell College   - - - - - - - - - - -
Mar 12 vs. Dickinson   - - - - - - - - - - -
Mar 14 vs. George Fox W, 7-5 1 1 0 0 1.000 - - - - - -
Mar 14 vs. St. Mary's (Ind.) W, 4-2 0 0 0 0 - - - - - - -
Mar 15 vs. Buena Vista L, 7-5 1 1 0 0 1.000 - - - - - -
Mar 15 vs. Wis.-Platteville W, 5-0 0 0 0 0 - - - - - - -
Mar 20 Baldwin Wallace L, 5-4 1 1 0 0 1.000 - 1 - - - -
Mar 20 Baldwin Wallace W, 14-4 - - - - - - - - - - -
Mar 23 at Kenyon W, 13-2 0 0 0 0 - - 1 - - - -
Mar 23 at Kenyon W, 14-6 1 1 0 0 1.000 - - - - - -
Mar 24 Mount Union W, 9-0 2 0 2 0 1.000 - - 1 1.000 - -
Mar 24 Mount Union W, 9-1 1 1 0 0 1.000 - - - - - -
Mar 26 at John Carroll W, 6-4 0 0 0 0 - - - - - - -
Mar 26 at John Carroll W, 10-0 0 0 0 0 - - - - - - -
Mar 29 New York U. L, 4-2 1 0 1 0 1.000 - - - - - -
Mar 29 New York U. W, 5-3 0 0 0 0 - - - - - - -
Mar 31 New York U.   - - - - - - - - - - -
Mar 31 New York U.   - - - - - - - - - - -
Apr 5 Carnegie Mellon W, 6-0 0 0 0 0 - - - 2 1.000 - -
Apr 5 Carnegie Mellon W, 8-0 0 0 0 0 - - - - - - -
Apr 6 Carnegie Mellon W, 5-4 0 0 0 0 - - - - - - -
Apr 6 Carnegie Mellon L, 7-1 0 0 0 0 - - - - - - -
Apr 12 at #21 Brandeis W, 4-2 1 0 0 1 .000 - - - - - -
Apr 12 at #21 Brandeis L, 5-0 0 0 0 0 - - - - - - -
Apr 13 at #21 Brandeis L, 4-1 1 0 1 0 1.000 - - - - - -
Apr 13 at #21 Brandeis L, 3-2 0 0 0 0 - - - - - - -
Apr 17 Heidelberg W, 8-0 0 0 0 0 - - - - - - -
Apr 17 Heidelberg W, 9-4 - - - - - - - - - - -
Apr 20 Emory L, 7-3 3 1 2 0 1.000 - 1 - - - -
Apr 20 Emory L, 9-7 0 0 0 0 - - - - - - -
Apr 21 Emory L, 10-7 2 1 1 0 1.000 - 1 1 .500 - -
Apr 21 Emory W, 3-2 - - - - - - - - - - -
Apr 26 at Washington (Mo.) W, 6-2 0 0 0 0 - - - - - - -
Apr 27 at Washington (Mo.) W, 6-4 1 0 1 0 1.000 - - - - - -
Apr 28 at Washington (Mo.) W, 14-6 1 0 1 0 1.000 - 4 - - - -
Apr 28 at Washington (Mo.) W, 9-2 2 2 0 0 1.000 - - - - - -
Apr 30 Ohio Northern W, 6-3 2 0 2 0 1.000 - - - - - -
Apr 30 Ohio Northern W, 11-3 1 1 0 0 1.000 - - - - - -
  g ab r h 2b 3b hr rbi bb k sb cs avg obp slg
2017-18 48 124 24 35 8 1 1 12 7 25 4 1 .282 .321 .387
2018-19 35 74 21 20 5 2 2 11 8 8 2 - .270 .349 .473
2019-20 9 23 8 5 1 - - 6 2 2 7 - .217 .296 .261
Total 92 221 53 60 14 3 3 29 17 35 13 1 .271 .328 .403
  g hbp sf sh tb xbh hdp go fo go/fo pa
2017-18 48 - - 3 48 10 - 22 37 0.59 134
2018-19 35 1 - 4 35 9 1 23 25 0.92 87
2019-20 9 1 1 - 6 1 1 6 9 0.67 27
Total 92 2 1 7 89 20 2 51 71 0.72 248
  app gs w l sv cg ip h r er bb k k/7 hr era
2017-18 31 31 21 8 0 19 185.0 153 78 68 61 184 6.96 18 2.57
2018-19 23 19 13 6 0 13 121.1 125 66 52 32 115 6.63 12 3.00
2019-20 5 5 3 1 0 4 32.0 28 15 12 7 27 5.91 1 2.63
Total 59 55 37 15 0 36 338.1 306 159 132 100 326 6.74 31 2.73
  g tc po a e fpct dp sba rcs rcs% pb ci
2017-18 48 43 21 19 3 .930 - 12 5 .294 - -
2018-19 35 25 12 12 1 .960 - 10 5 .333 - -
2019-20 9 9 1 8 0 1.000 - 5 2 .286 - -
Total 92 77 34 39 4 .948 - 27 12 .308 - -

Splits Stats - Hitting

    g ab r h 2b 3b hr rbi bb k sb cs avg obp slg
Event Total 35 74 21 20 5 2 2 11 8 8 2 - .270 .349 .473
Conference 17 40 8 8 2 - - 2 4 4 1 - .200 .289 .250
Exhibition - - - - - - - - - - - - - - -
Location Home 16 38 7 6 2 - - 1 3 3 1 - .158 .238 .211
Away 12 26 11 13 3 2 2 9 4 2 - - .500 .567 1.000
Neutral 7 10 3 1 - - - 1 1 3 1 - .100 .182 .100
Result Wins 22 54 18 18 5 2 2 10 7 6 1 - .333 .410 .611
Losses 13 20 3 2 - - - 1 1 2 1 - .100 .182 .100
Month March 17 33 11 10 2 2 2 9 3 4 1 - .303 .361 .667
April 18 41 10 10 3 - - 2 5 4 1 - .244 .340 .317

Splits Stats - Extended Hitting

    g hbp sf sh tb xbh hdp go fo go/fo pa
Event Total 35 1 - 4 35 9 1 23 25 0.92 87
Conference 17 1 - 1 10 2 1 13 15 0.87 46
Exhibition - - - - 0 0 - - - - 0
Location Home 16 1 - - 8 2 1 14 13 1.08 42
Away 12 - - 4 26 7 - 8 7 1.14 34
Neutral 7 - - - 1 0 - 1 5 0.20 11
Result Wins 22 - - 4 33 9 - 16 17 0.94 65
Losses 13 1 - - 2 0 1 7 8 0.88 22
Month March 17 - - 3 22 6 1 12 9 1.33 39
April 18 1 - 1 13 3 - 11 16 0.69 48

Splits Stats - Pitching

    app gs w l sv cg ip h r er bb k k/7 hr era
Event Total 23 19 13 6 0 13 121.1 125 66 52 32 115 6.63 12 3.00
Conference 12 9 6 4 0 6 66.0 68 36 30 17 62 6.58 6 3.18
Exhibition - - - - - - 0.0 - - - - - .00 - 0.00
Location Home 10 9 5 3 0 7 58.2 51 29 21 15 50 5.97 6 2.51
Away 8 6 6 1 0 4 43.1 51 20 17 11 48 7.75 3 2.75
Neutral 5 4 2 2 0 2 19.1 23 17 14 6 17 6.16 3 5.07
Result Wins 13 12 13 0 0 10 81.0 77 26 21 14 83 7.17 2 1.81
Losses 10 7 0 6 0 3 40.1 48 40 31 18 32 5.55 10 5.38
Month March 10 9 5 3 0 6 49.1 49 31 24 15 53 7.52 8 3.41
April 13 10 8 3 0 7 72.0 76 35 28 17 62 6.03 4 2.72

Splits Stats - Fielding

    g tc po a e fpct dp sba rcs rcs% pb ci
Event Total 35 25 12 12 1 .960 - 10 5 .333 - -
Conference 17 12 4 7 1 .917 - 6 3 .333 - -
Exhibition - 0 - - - - - - - - - -
Location Home 16 14 6 8 0 1.000 - 3 4 .571 - -
There was a problem with a Velocity script
Pagebio-template
ErrorVM #split: too many arguments to macro. Wanted 3 got 5 at bio-template[line 313, 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 &nbsp; #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">&nbsp;</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:     #split($statPosBriefs, $season.seasonName, $careerMap[$season.seasonName])
257:   #elseif ($wiki.valid())
258:     <tr>
259:       <td class="text">${season.seasonName}</td>
260:       <td colspan="${statPosBriefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
261:     </tr>
262:   #end
263: #end
264: 
265: #split($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
266: 
267: </table>
268: </div>
269: </div> ## scrollable
270: </div> ## stats-box
271: 
272: #end ## macro careerData
273: 
274: #macro (splitsData $p)
275: 
276: #set ($p = $positions.get($p))
277: #set ($statPosBriefs = $briefs.get($p))
278: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1))
279: 
280: #if ($statPosBriefs.size() > 0)
281: <div class="stats-box full clearfix">
282: <div class="scrollable">
283: <div>
284: <table>
285:   <tr>
286:     <th class="pinned-col">&nbsp;</th>
287:     #foreach ($brief in $statPosBriefs)
288:       <th>$brief</th>
289:     #end
290:   </tr>
291: 
292: #split($statPosBriefs, "Total", $splits.overall)
293: #split($statPosBriefs, "Conference", $splits.conference)
294: #split($statPosBriefs, "Exhibition", $splits.exhibition)
295: 
296: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
297: 
298: #split($statPosBriefs, "Home", $splits.home)
299: #split($statPosBriefs, "Away", $splits.away)
300: #split($statPosBriefs, "Neutral", $splits.neutral)
301: 
302: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
303: 
304: #foreach($gameResult in $gamesResults.entrySet())
305:   #if ($gameResult.key == "wins")
306:     #set ($splitGameResult = $splits.inWins)
307:   #elseif ($gameResult.key == "losses")
308:     #set ($splitGameResult = $splits.inLosses)
309:   #elseif ($gameResult.key == "ties")
310:     #set ($splitGameResult = $splits.inTies)
311:   #end
312: 
313:   #split($statPosBriefs, $gameResult.value, $splitGameResult)
314: #end
315: 
316: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
317: 
318: #if ($monthsPlayed and $monthsPlayed.size() > 0)
319:   #foreach($month in $monthsPlayed)
320:     #if ($month == 'January')
321:       #set ($splitMonth = $splits.january)
322:     #elseif ($month == 'February')
323:       #set ($splitMonth = $splits.february)
324:     #elseif ($month == 'March')
325:       #set($splitMonth = $splits.march)
326:     #elseif ($month == 'April')
327:       #set($splitMonth = $splits.april)
328:     #elseif ($month == 'May')
329:       #set ($splitMonth = $splits.may)
330:     #elseif ($month == 'June')
331:       #set ($splitMonth = $splits.june)
332:     #elseif ($month == 'July')
333:       #set($splitMonth = $splits.july)
334:     #elseif ($month == 'August')
335:       #set ($splitMonth = $splits.august)
336:     #elseif ($month == 'September')
337:       #set($splitMonth = $splits.september)
338:     #elseif ($month == 'October')
339:       #set($splitMonth = $splits.october)
340:     #elseif ($month == 'November')
341:       #set ($splitMonth = $splits.november)
342:     #elseif ($month == 'December')
343:       #set($splitMonth = $splits.december)
344:     #end
345: 
346:     #split($statPosBriefs, $month, $splitMonth)
347:   #end ## foreach
348: #end
349: </table>
350: </div>
351: </div> ## scrollable
352: </div> ## srollable-table
353: #end
354: 
355: #end ## macro splitsData
356: 
357: #macro (printRecentGames)
358: #if ($hasEvents)
359: <table>
360:   <tr class="thead accent-bg"><th colspan="3">Recent Games</th></tr>
361: 
362: #set ($eventEnd = -1)
363: #foreach ($event in $events)
364:   #if ($event.event.result.resolved)
365:     #set ($eventEnd = $velocityCount)
366:   #end
367: #end
368: 
369: #set ($eventStart = $eventEnd - 5)
370: #if ($eventStart < 0) #set ($eventStart = 0) #end
371: 
372: #foreach ($event in $events)
373: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
374:   <tr>
375:     <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
376:     <td class="text">
377:       #if ($event.event.neutralSite.length() > 0) vs.
378:       #elseif (!$event.event.home) at
379:       #else ## nothing for a home game
380:       #end
381:       $event.event.opponent.name
382:     </td>
383:     <td class="text">
384:     #if ($event.event.statusCode >= 0)
385:       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
386:           <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
387:       #else
388:       ${event.event.APResult}
389:       #end
390: 	#end
391: 	</td>
392:   </tr>
393: #end ## if
394: #end
395: </table>
396: #end
397: #end ## macro printRecentGames
398: 
399: #macro (printCategories $briefCategoryLabels $v $ariaLabel)
400: 
401: <div class="tab-container secondary clearfix" data-module="stats/tabs" data-type="secondary">
402: <div class="tab-nav" data-module="jscroll" data-momentum="false">
403: <div>
404: <ul class="clearfix">
405: #foreach($briefCat in $briefCategoryLabels.entrySet())
406:   #set ($briefCatLabel = $briefCat.value)
407:   #set ($briefCatKey = $briefCat.key)
408: 
409:   #if ($locale == "en_gb" && $briefCatLabel == "Defense")
410:     #set ($briefCatLabel = "Defence")
411:   #end
412: 
413:   <li #if ($activePos == $briefCatKey) class="active" #end><a href="${page.url}?view=${v}&pos=${briefCatKey}" role="button" aria-label="${ariaLabel}: ${briefCatLabel}">$briefCatLabel</a></li>
414: #end
415: </ul>
416: </div>
417: </div>
418: <div class="tab-panels">
419: #foreach ($briefCat in $briefCategoryLabels.entrySet())
420:   #set ($class = "tab-panel clearfix")
421:   #if ($briefCat.key == $activePos)
422:     #set ($class = "tab-panel active clearfix")
423:   #end
424:   <div class="$class">
425:     <div class="stats-wrap clearfix">
426:     #if ($v == "splits")
427:       #splitsData($briefCat.key)
428:     #elseif ($v == "career")
429:       #careerData($briefCat.key)
430:     #end
431:     </div>
432:   </div>
433: #end
434: </div>
435: </div> ## tab-container
436: 
437: #end ## macro printCategories
438: 
439: #macro (printHeadshot)
440: #if ($enhancedLayout)
441: 
442:   #if ($headshot.url)
443:     <img src="$headshot.url?max_width=300&max_height=400" alt="$fullName" />
444:   #else
445:     #if ($website.exists("/images/setup/headshot_default.jpg"))
446:       <img src="/images/setup/headshot_default.jpg?max_width=300&max_height=400" alt="$fullName" />
447:     #else
448:       <img src="$website.cdn("/info/images/default_headshot.jpg?max_width=300&max_height=400")" alt="$fullName" />
449:     #end
450:   #end
451: 
452: #else
453: 
454:   #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span>#end
455: 
456:   #if ($headshot.url)
457:     <img src="$headshot.url?max_width=160&max_height=210" alt="$fullName" />
458:   #else
459:     #if ($website.exists("/images/setup/headshot_default.jpg"))
460:       <img src="/images/setup/headshot_default.jpg?max_width=160&max_height=210" alt="" />
461:     #else
462:       <img src="$website.cdn("/info/images/default_headshot.jpg?max_width=160&max_height=210")" alt="" />
463:     #end
464:   #end
465: 
466: #end ## ## enhancedLayout check
467: #end ## macro printHeadshot
468: 
469: #macro (printBioInfo)
470: #if ($enhancedLayout)
471: 
472: <h2 class="player-heading">
473:   #if ($!attributes.get("number").length() > 0)<span class="number accent-bg">$!attributes.get("number")</span>#end
474:   <span class="name">$fullName</span>
475: </h2>
476: 
477: <ul>
478: #foreach ($i in [1..10])
479:   #set ($stickyKey = "bio_custom${i}_sticky")
480:   #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
481:     <li>
482:       <dl>
483:         <dt class="label">$options.get($stickyKey): </dt>
484:         <dd class="value">$!attributes.get("custom${i}")</dd>
485:       </dl>
486:     </li>
487:   #end
488: #end
489: 
490: #foreach ($field in $fields)
491:   #if (!$field.key.startsWith("custom"))
492:     #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
493:       #if ($field.key == "phone1" || $field.key == "phone2")
494:         <li>
495:           <dl>
496:             <dt class="label">Phone: </dt>
497:             <dd class="value">$!attributes.get($field.key)</dd>
498:           </dl>
499:         </li>
500:       #elseif ($field.key == "email_address")
501:         #set ($emailAdd = $attributes.get($field.key))
502:         <li>
503:           <dl>
504:             <dt class="label">Email: </dt>
505:             <dd class="value"><a href="mailto:${emailAdd}">$emailAdd</a></dd>
506:           </dl>
507:         </li>
508:       #elseif ($field.key == "weight_class")
509:         <li>
510:           <dl>
511:             <dt class="label">Class: </dt>
512:             <dd class="value">$!attributes.get($field.key)</dd>
513:           </dl>
514:         </li>
515:       #elseif ($field.key != "position_abbr")
516:         <li>
517:           <dl>
518:             <dt class="label">$field.value: </dt>
519:             <dd class="value">$!attributes.get($field.key)</dd>
520:           </dl>
521:         </li>
522:       #end
523:     #end
524:   #end
525: #end
526: 
527: #foreach ($i in [1..10])
528:   #set ($customKey = "bio_custom${i}")
529:   #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
530:     <li>
531:       <dl>
532:         <dt class="label">$options.get($customKey): </dt>
533:         <dd class="value">$!attributes.get("custom${i}")</dd>
534:       </dl>
535:     </li>
536:   #end
537: #end
538: </ul>
539: 
540: #else
541: ## default layout
542: 
543: <div class="player-name">
544:   #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span><span class="sep"> - </span>#end
545:   <span class="name">$fullName</span>
546: </div>
547: 
548: <table role="presentation">
549: #foreach ($i in [1..10])
550:   #set ($stickyKey = "bio_custom${i}_sticky")
551:   #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
552:     <tr>
553:       <td class="label">$options.get($stickyKey): </td>
554:       <td class="value">$!attributes.get("custom${i}")</td>
555:     </tr>
556:   #end
557: #end
558: 
559: #foreach ($field in $fields)
560:   #if (!$field.key.startsWith("custom"))
561:     #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
562:       #if ($field.key == "phone1" || $field.key == "phone2")
563:         <tr>
564:           <td class="label">Phone: </td>
565:           <td class="value">$!attributes.get($field.key)</td>
566:         </tr>
567:       #elseif ($field.key == "email_address")
568:         #set ($emailAdd = $attributes.get($field.key))
569:         <tr>
570:           <td class="label">Email: </td>
571:           <td class="value"><a href="mailto:${emailAdd}">$emailAdd</a></td>
572:         </tr>
573:       #elseif ($field.key == "weight_class")
574:         <tr>
575:           <td class="label">Class: </td>
576:           <td class="value">$!attributes.get($field.key)</td>
577:         </tr>
578:       #elseif ($field.key != "position_abbr")
579:         <tr>
580:           <td class="label">$field.value: </td>
581:           <td class="value">$!attributes.get($field.key)</td>
582:         </tr>
583:       #end
584:     #end
585:   #end
586: #end
587: 
588: #foreach ($i in [1..10])
589:   #set ($customKey = "bio_custom${i}")
590:   #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
591:     <tr>
592:       <td class="label">$options.get($customKey): </td>
593:       <td class="value">$!attributes.get("custom${i}")</td>
594:     </tr>
595:   #end
596: #end
597: </table>
598: #end ## enhancedLayout check
599: #end ## macro printBioInfo
600: 
601: #macro (printActionShots)
602: #if ($showActionShots)
603: 	## BANNERS SLIDER
604:     #set ($slickSettings = {
605: 		"autoplay": true,
606:         "fade": true,
607:         "arrows": false,
608:         "slidesToShow": 1,
609:         "slidesToScroll": 1,
610:         "lazyLoad": "ondemand",
611:         "responsive": "none"
612:     })
613:     #set ($slickSettings = $slickSettings.toString().replace("=", ":"))
614:     <div class="action-shots clearfix">
615:         <div class="slider" data-module="slick-slider-init" data-slick-settings="$slickSettings">
616:             #foreach ($photo in $playerPhotos)
617: 				#if ($velocityCount <= $actionShotsLimit)
618:     				#set ($imgAlt = "")
619:     				#if (!$image.altText.equals($image.title))
620:     					#set ($imgAlt = $image.altText)
621:     				#elseif( $image.title.length() == 0 )
622:     					#set ($imgAlt = "Action shot for $page.title image $velocityCount")
623:     				#end
624:             		<div class="image">
625:             			<img data-lazy="$photo.url" alt="$imgAlt" />
626:             	    </div>
627: 				#end
628:     	    #end
629: 	    </div>
630:     </div>
631: #end
632: #end ## macro printActionShots
633: 
634: #macro (printHighlights)
635: #if ($highlights && $showHighlights)
636:   <div class="highlights #if ($enhancedLayout) highlights-bio-enhanced #else highlights-bio #end clearfix">
637:     #foreach ($highlight in $highlights.keySet())
638:       #set ($value = "-")
639:       #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
640:       <div class="stat clearfix">
641:         <span class="stat-title">$!highlights.get($highlight)</span>
642:         <span class="stat-value">$value</span>
643:       </div>
644:     #end
645:   </div>
646: #end
647: #end ## macro printHighlights
648: #macro (printRoster)
649: #if ($enhancedLayout)
650:   $website.includeAgain("${page.url}?tmpl=roster-switcher-template&id=roster-list")
651: #else
652: #if ($page.contentType == "loki/bio")
653:   #set ($headlinesFeaturedSize = 0)
654:   #foreach ($featuredPage in $page.headlinesFeatured)
655:     #if ($featuredPage.contentType == "loki/headlines")
656:       #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
657:     #end
658:   #end
659:   #if ($headlinesFeaturedSize > 0)
660:       <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below.">
661:         <option selected="selected">Related Bios</option>
662:         #foreach ($featuredPage in $page.headlinesFeatured)
663:           #if ($featuredPage.contentType == "loki/headlines")
664:             $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template&current_url=${page.url}")
665: 		  #end
666: 	    #end
667:       </select>
668:   #end
669: #elseif ($page.contentType == "loki/bio-network")
670:   #set ($relatedPlayers = $page.sectionPage.children)
671:   #set ($teamNames = {})
672:   #foreach ($relatedPlayer in $relatedPlayers)
673:     #if ($relatedPlayer.contentType == "loki/bio-network")
674:       #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
675:       #set ($teamName = $relatedPlayerObj.get("team"))
676:       #if ($teamName.length() > 0)
677:         #if (!$teamNames.containsValue($teamName))
678:           $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
679:         #end
680:       #end
681:     #end
682:   #end
683: 
684:   <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below.">
685:   #foreach ($i in [1..$teamNames.size()])
686:     #if ($teamNames.size() > 1)
687:       <optgroup label="$teamNames.get($i)">
688:     #end
689: 
690:     #foreach ($relatedPlayer in $relatedPlayers)
691:       #if ($relatedPlayer.contentType == "loki/bio-network")
692:         #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
693:         #set ($teamName = $relatedPlayerObj.get("team"))
694:         #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
695:           #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
696:           #set ($playerLastName = $relatedPlayerObj.get("last_name"))
697:           #if ($page.url == $relatedPlayer.url)
698:             <option value="$relatedPlayer.url" selected="selected">${playerFirstName} ${playerLastName}</option>
699:           #else
700:             <option value="$relatedPlayer.url">${playerFirstName} ${playerLastName}</option>
701:           #end
702:         #end
703:       #end
704:     #end
705: 
706:     #if ($teamNames.size() > 1)
707:       </optgroup>
708:     #end
709:   #end
710:   </select>
711: #end
712: #end ## enhancedLayout check
713: #end ## macro printRoster
714: 
715: ################################################## END MACROS  #############################################################
716: 
717: #if ($attributes.get("full_name").length() > 0)
718:   #set ($fullName = $attributes.get("full_name"))
719: #else
720:   #set ($firstName = $!attributes.get("first_name"))
721:   #set ($lastName = $!attributes.get("last_name"))
722:   #set ($fullName = "${firstName} ${lastName}")
723: #end
724: 
725: #set ($actionShots = false)
726: #if ($enhancedLayout && $playerPhotos.size() > 0)
727:   #set ($actionShots = true)
728: #end
729: 
730: #if ($enhancedLayout)
731:   #set ($rootClass = "bio-enhanced")
732:   #if ($actionShots && $showActionShots)
733:   	#set ($rootClass = "${rootClass} action")
734:   #else
735:   	#set ($rootClass = "${rootClass} plain")
736:   #end
737: #else
738:   #set ($rootClass = "bio-wrap")
739: #end
740: 
741: ## FULL ROSTER
742: <div class="${rootClass} #if ($highlights) bio-wrap-has-highlights #end clearfix" data-module="stats/responsive-container">
743: 
744: ## RELATED BIOS
745: #if ($showRoster)
746:   <div class="related-bios clearfix">#printRoster</div>
747: #end
748: 
749: #if ($actionShots)
750:   #printActionShots
751: #end
752: 
753: <div class="head clearfix">
754: <div class="clearfix">
755: 
756: <div class="player-about clearfix">
757:   <div class="player-headshot">#printHeadshot</div>
758:   <div class="player-info">#printBioInfo</div>
759: </div>
760: 
761: #printHighlights
762: 
763: </div>
764: </div> ## head
765: 
766: #if ($view.length() > 0)
767: <div class="body clearfix">
768: 
769: <div class="tab-container primary clearfix" data-module="stats/tabs" data-type="primary">
770: <div class="tab-nav" data-module="jscroll" data-momentum="false">
771:   <div>
772:   <ul class="clearfix">
773:   #if ($hasSynopsis || $hasBioBrief)
774:     <li #if ($view == "bio") class="active" #end><a href="${page.url}?view=bio">Bio</a></li>
775:   #end
776: 
777:   #if ($statsURL.length() > 0)
778:     <li #if ($view == "profile") class="active" #end><a href="${page.url}?view=profile">Player Profile</a></li>
779:     <li #if ($view == "gamelog") class="active" #end><a href="${page.url}?view=gamelog">Game Log</a></li>
780:     #if ($showCareer)
781:       <li #if ($view == "career") class="active" #end><a href="${page.url}?view=career">Career Stats</a></li>
782:     #end
783:     <li #if ($view == "splits") class="active" #end><a href="${page.url}?view=splits">Split Stats</a></li>
784:   #end
785: 
786:   #if ($hasHTMLStats)
787:     <li #if ($view == "htmlstats") class="active" #end><a href="${page.url}?view=htmlstats">HTML Stats</a></li>
788:   #end
789: 
790:   #if ($releases.size() > 0)
791: 	<li #if ($view == "news") class="active" #end><a href="${page.url}?view=news">News</a></li>
792:   #end
793: 
794:   #if ($playerPhotos.size() > 0)
795: 	<li #if ($view == "photos") class="active" #end><a href="${page.url}?view=photos">Photos</a></li>
796:   #end
797: 
798:   #if ($playerVideos.size() > 0)
799:     <li #if ($view == "videos") class="active" #end><a href="${page.url}?view=videos">Videos</a></li>
800:   #end
801:   </ul>
802:   </div>
803: </div> ## tab-nav
804: 
805: <div class="tab-panels clearfix">
806: 
807: ## BIO
808: #if ($hasSynopsis || $hasBioBrief)
809: 
810: #set ($class = "tab-panel clearfix")
811: #if ($view == "bio")
812:   #set ($class = "tab-panel active clearfix")
813: #end
814: <div class="${class}">
815: 
816: <div class="synopsis clearfix">
817: #if ($hasSynopsis)
818:   $synopsis
819: #elseif ($hasBioBrief)
820:   $website.include("$bioBriefURL")
821: #end
822: </div>
823: 
824: </div> ## tab-panel
825: #end
826: ## BIO
827: 
828: ## STATS
829: #if ($statsURL.length() > 0)
830: 
831: ## PROFILE
832: #set ($class = "tab-panel clearfix")
833: #if ($view == "profile")
834:   #set ($class = "tab-panel active clearfix")
835: #end
836: <div class="${class}">
837: <div class="stats-wrap clearfix">
838: 
839: ## LAST SIX GAMES
840: <div class="stats-box half">
841: #printRecentGames()
842: </div>
843: 
844: ## RANKING
845: <div class="stats-box half">
846: #if ($statPos.length() > 0)
847:   $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
848: #end
849: </div>
850: 
851: </div> ## stats-wrap
852: </div> ## tab-content
853: ## PROFILE
854: 
855: ## GAMELOG
856: #set ($class = "tab-panel clearfix")
857: #if ($view == "gamelog")
858:   #set ($class = "tab-panel active clearfix")
859: #end
860: 
861: #set ($activePos = $statPos)
862: #if ($view == "gamelog" && $paramPos.length() > 0)
863:   #if ($positions.get($paramPos).length() > 0)
864:     #set ($activePos = $positions.get($paramPos))
865:   #end
866: #end
867: 
868: <div class="${class}">
869: 
870: #if ($gamelogsCategoriesLabels)
871: <div class="tab-container clearfix secondary" data-module="stats/tabs" data-type="secondary">
872:   <div class="tab-nav" data-module="jscroll" data-momentum="false">
873:     <div>
874:     <ul class="clearfix">
875:     #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
876:       #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
877: 
878:       #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
879:         #set($gamelogsCatLabelVal = "Defence")
880:       #end
881: 
882:       <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>
883:     #end
884:     </ul>
885: 	</div>
886:   </div>
887:   <div class="tab-panels">
888:   #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
889:     #set ($class = "tab-panel clearfix")
890:     #if ($gamelogsCatLabel.key == $activePos)
891:       #set ($class = "tab-panel active clearfix")
892:     #end
893:     <div class="${class}">
894:       <div class="stats-wrap clearfix">#gamelogData($gamelogsCatLabel.key)</div>
895: 	</div>
896:   #end
897:   </div>
898: </div>
899: #else
900:   <div class="stats-wrap clearfix">#gamelogData($pos)</div>
901: #end
902: 
903: </div> ## tab-panel
904: ## GAMELOG
905: 
906: 
907: ## CAREER
908: #if ($showCareer)
909: 
910: #set ($activePos = $statPos)
911: #if ($view == "career" && $paramPos.length() > 0)
912:   #if ($positions.get($paramPos).length() > 0)
913:     #set ($activePos = $positions.get($paramPos))
914:   #end
915: #end
916: 
917: #set ($class = "tab-panel clearfix")
918: #if ($view == "career")
919:   #set ($class = "tab-panel active clearfix")
920: #end
921: 
922: <div class="${class}">
923: 
924: #if ($briefsCategoriesLabels)
925:   #printCategories($briefsCategoriesLabels "career" "Career Stats")
926: #else
927:   <div class="stats-wrap clearfix">#careerData($activePos)</div>
928: #end
929: 
930: </div> ## tab-panel
931: #end
932: ## CAREER
933: 
934: ## SPLITS
935: #set ($class = "tab-panel clearfix")
936: #if ($view == "splits")
937: 	#set ($class = "tab-panel active clearfix")
938: #end
939: 
940: #set ($activePos = $statPos)
941: #if ($view == "splits" && $paramPos.length() > 0)
942:   #if ($positions.get($paramPos).length() > 0)
943:     #set ($activePos = $positions.get($paramPos))
944:   #end
945: #end
946: 
947: <div class="${class}">
948: 
949: #if ($briefsCategoriesLabels)
950:   #printCategories($briefsCategoriesLabels "splits" "Splits Stats")
951: #else
952:   <div class="stats-wrap clearfix">#splitsData($pos)</div>
953: #end
954: 
955: </div> ## tab-panel
956: ## SPLITS
957: 
958: #end
959: ## STATS
960: 
961: ## HTML STATS
962: #if ($hasHTMLStats)
963: 
964: #set ($class = "tab-panel clearfix")
965: #if ($view == "htmlstats")
966:   #set ($class = "tab-panel active clearfix")
967: #end
968: <div class="${class}">
969:   <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
970: </div>
971: 
972: #end
973: ## HTML STATS
974: 
975: ## NEWS
976: #if ($releases.size() > 0)
977: #set ($class = "tab-panel clearfix")
978: #if ($view == "news")
979:   #set ($class = "tab-panel active clearfix")
980: #end
981: <div class="${class}">
982: 	#printGrid($releases, "article")
983: </div> ## tab-content
984: #end
985: ## NEWS
986: 
987: ## PHOTOS
988: #if ($playerPhotos.size() > 0)
989: #set ($class = "tab-panel clearfix")
990: #if ($view == "photos")
991:   #set ($class = "tab-panel active clearfix")
992: #end
993: <div class="${class}">
994:     $website.includeAgain("${page.url}?tmpl=bio-photos-template")
995: </div> ## tab-content
996: #end
997: ## PHOTOS
998: 
999: ## VIDEOS
1000: #if ($playerVideos.size() > 0)
1001:   #set ($class = "tab-panel clearfix")
1002:   #if ($view == "videos")
1003:     #set ($class = "tab-panel active clearfix")
1004:   #end
1005: <div class="${class}">
1006: 	#printGrid($playerVideos, "video")
1007: </div> ## tab-content
1008: #end
1009: ## VIDEOS
1010: 
1011: </div> ## tab-panels
1012: </div> ## tab-container
1013: </div> ## body
1014: #end
1015: 
1016: $wiki
1017: </div> ## ends bio-wrap
1018: 
1019: ## GLOBAL ADS SERVER
1020: #if ($website.ads.isAdvertisingEnabled('BIOS'))
1021: 	$website.ads.register('bios', '[[320,50],[728,90],[970,90]]', 'PS_WEB_INTERNAL_LEADERBOARD')
1022: #end