42 Kyle Henigan
42 - Kyle Henigan
Height: 6-2
Weight: 217
Bats/Throws: R/R
Year: Sr
Hometown: Hillman, Mich.
Position: RHP
Previous School: Hillman HS
gp 13
avg -
hr -
rbi 0
r 0
sb -

Prior to SVSU

  • Prepped at Hillman High School 
  • Participated in baseball, football, and basketball
  • Lettered four years as a pitcher
  • Earned First-Team All-Conference, First-Team All-District, and All-Region Pitcher honors as a pitcher
  • Earned First-Team All-Conference for football
  • Son of Tamyra Henigan
  • Majoring in Occupational Therapy
Recent Games
May 5 at Wayne State W, 7-6
May 9 vs. #11 Ashland L, 8-6
May 10 vs. Purdue Northwest W, 6-1
May 11 vs. Northwood W, 6-3
May 12 vs. Davenport W, 12-8
May 12 vs. #11 Ashland L, 8-2
Statistics category Overall Conf
Games 13 7
Plate appearances 0 0
At Bats 0 0
Runs 0 0
Hits 0 0
Doubles - -
Triples - -
Home Runs - -
Runs Batted In 0 0
Total bases 0 0
Walks - -
Hit by pitch - -
Strikeouts - -
Sacrifice Flies - -
Sacrifice Hits - -
Hit into double play - -
Stolen Bases - -
Caught Stealing - -
Batting Average - -
On Base Percentage - -
Slugging Percentage - -
Appearances 13 7
Games started 10 7
Wins 4 3
Losses 3 2
Saves 0 0
Complete Games 1 1
Shutouts - -
Innings Pitched 51.1 31.1
Hits 56 34
Runs 39 23
Earned Runs 30 19
Walks 30 21
Strikeouts 30 16
Strikeouts per Game 5.26 4.60
Doubles Allowed 17 11
Triples Allowed 1 -
Home Runs Allows 1 1
At Bats Against 196 122
Batting Average Against .286 .279
Earned Run Average 5.26 5.46
Wild pitches 11 9
Hit Batters 9 1
Balks 1 1
Sacrifice Flies Allowed 4 2
Sacrifice Hits Allowed 7 4
Total Chances 4 3
Put Outs 0 0
Assists 4 3
Errors 0 0
Fielding Percentage 1.000 1.000
Double Plays - -
Stolen Bases Allowed 4 1
Runners Caught Stealing 5 2
Runners Caught Stealing Percentage .556 .667
Passed Balls - -
Catcher's Interference - -
Date Opponent Score ab r h 2b 3b hr rbi bb k sb cs
Feb 15 vs. #15 Illinois-Springfield L, 8-5 - - - - - - - - - - -
Feb 15 vs. #15 Illinois-Springfield L, 11-3 0 0 0 - - - 0 - - - -
Feb 16 vs. #15 Illinois-Springfield L, 12-6 - - - - - - - - - - -
Feb 22 vs. McKendree L, 5-3 - - - - - - - - - - -
Feb 23 vs. McKendree W, 22-3 - - - - - - - - - - -
Feb 24 vs. McKendree W, 19-7 0 0 0 - - - 0 - - - -
Mar 2 at Missouri S&T L, 17-3 - - - - - - - - - - -
Mar 2 at Missouri S&T W, 6-2 - - - - - - - - - - -
Mar 3 at Missouri S&T L, 8-5 0 0 0 - - - 0 - - - -
Mar 7 at Trevecca Nazarene W, 4-1 - - - - - - - - - - -
Mar 7 at Trevecca Nazarene L, 7-6 - - - - - - - - - - -
Mar 15 at #15 Mercyhurst L, 7-0 - - - - - - - - - - -
Mar 17 at #15 Mercyhurst W, 8-1 0 0 0 - - - 0 - - - -
Mar 22 at Davenport W, 7-5 - - - - - - - - - - -
Mar 23 at Davenport L, 9-5 - - - - - - - - - - -
Mar 23 at Davenport W, 13-9 0 0 0 - - - 0 - - - -
Mar 24 at Davenport W, 12-2 - - - - - - - - - - -
Mar 26 at Hillsdale W, 14-8 - - - - - - - - - - -
Mar 29 Grand Valley State W, 4-3 - - - - - - - - - - -
Mar 29 Grand Valley State W, 5-4 - - - - - - - - - - -
Apr 1 Grand Valley State W, 9-5 0 0 0 - - - 0 - - - -
Apr 1 Grand Valley State T, 5-5 - - - - - - - - - - -
Apr 5 #15 Ashland L, 4-1 - - - - - - - - - - -
Apr 6 #15 Ashland L, 4-2 - - - - - - - - - - -
Apr 6 #15 Ashland L, 3-1 - - - - - - - - - - -
Apr 7 #15 Ashland W, 11-3 0 0 0 - - - 0 - - - -
Apr 9 Hillsdale L, 8-6 - - - - - - - - - - -
Apr 10 Lawrence Tech L, 17-8 - - - - - - - - - - -
Apr 12 at Northwood L, 5-2 - - - - - - - - - - -
Apr 12 at Northwood L, 12-8 - - - - - - - - - - -
Apr 13 at Northwood L, 10-8 - - - - - - - - - - -
Apr 13 at Northwood L, 13-4 0 0 0 - - - 0 - - - -
Apr 16 vs. Northwood L, 14-13 - - - - - - - - - - -
Apr 19 at Purdue Northwest L, 6-2 - - - - - - - - - - -
Apr 19 at Purdue Northwest W, 7-3 - - - - - - - - - - -
Apr 20 at Purdue Northwest L, 3-1 - - - - - - - - - - -
Apr 20 at Purdue Northwest L, 3-2 0 0 0 - - - 0 - - - -
Apr 24 vs. Cleary W, 14-0 - - - - - - - - - - -
Apr 26 Parkside W, 14-5 - - - - - - - - - - -
Apr 27 Parkside L, 11-8 - - - - - - - - - - -
Apr 27 Parkside W, 7-1 - - - - - - - - - - -
Apr 28 Parkside L, 13-5 0 0 0 - - - 0 - - - -
May 3 at Wayne State L, 2-0 - - - - - - - - - - -
May 4 at Wayne State L, 13-9 - - - - - - - - - - -
May 4 at Wayne State L, 5-0 - - - - - - - - - - -
May 5 at Wayne State W, 7-6 0 0 0 - - - 0 - - - -
May 9 vs. #11 Ashland L, 8-6 0 0 0 - - - 0 - - - -
May 10 vs. Purdue Northwest W, 6-1 - - - - - - - - - - -
May 11 vs. Northwood W, 6-3 - - - - - - - - - - -
May 12 vs. Davenport W, 12-8 0 0 0 - - - 0 - - - -
May 12 vs. #11 Ashland L, 8-2 - - - - - - - - - - -
Date Opponent Score hbp sf sh tb xbh hdp go fo go/fo pa
Feb 15 vs. #15 Illinois-Springfield L, 8-5 - - - - - - - - - -
Feb 15 vs. #15 Illinois-Springfield L, 11-3 - - - 0 0 - - - - 0
Feb 16 vs. #15 Illinois-Springfield L, 12-6 - - - - - - - - - -
Feb 22 vs. McKendree L, 5-3 - - - - - - - - - -
Feb 23 vs. McKendree W, 22-3 - - - - - - - - - -
Feb 24 vs. McKendree W, 19-7 - - - 0 0 - - - - 0
Mar 2 at Missouri S&T L, 17-3 - - - - - - - - - -
Mar 2 at Missouri S&T W, 6-2 - - - - - - - - - -
Mar 3 at Missouri S&T L, 8-5 - - - 0 0 - - - - 0
Mar 7 at Trevecca Nazarene W, 4-1 - - - - - - - - - -
Mar 7 at Trevecca Nazarene L, 7-6 - - - - - - - - - -
Mar 15 at #15 Mercyhurst L, 7-0 - - - - - - - - - -
Mar 17 at #15 Mercyhurst W, 8-1 - - - 0 0 - - - - 0
Mar 22 at Davenport W, 7-5 - - - - - - - - - -
Mar 23 at Davenport L, 9-5 - - - - - - - - - -
Mar 23 at Davenport W, 13-9 - - - 0 0 - - - - 0
Mar 24 at Davenport W, 12-2 - - - - - - - - - -
Mar 26 at Hillsdale W, 14-8 - - - - - - - - - -
Mar 29 Grand Valley State W, 4-3 - - - - - - - - - -
Mar 29 Grand Valley State W, 5-4 - - - - - - - - - -
Apr 1 Grand Valley State W, 9-5 - - - 0 0 - - - - 0
Apr 1 Grand Valley State T, 5-5 - - - - - - - - - -
Apr 5 #15 Ashland L, 4-1 - - - - - - - - - -
Apr 6 #15 Ashland L, 4-2 - - - - - - - - - -
Apr 6 #15 Ashland L, 3-1 - - - - - - - - - -
Apr 7 #15 Ashland W, 11-3 - - - 0 0 - - - - 0
Apr 9 Hillsdale L, 8-6 - - - - - - - - - -
Apr 10 Lawrence Tech L, 17-8 - - - - - - - - - -
Apr 12 at Northwood L, 5-2 - - - - - - - - - -
Apr 12 at Northwood L, 12-8 - - - - - - - - - -
Apr 13 at Northwood L, 10-8 - - - - - - - - - -
Apr 13 at Northwood L, 13-4 - - - 0 0 - - - - 0
Apr 16 vs. Northwood L, 14-13 - - - - - - - - - -
Apr 19 at Purdue Northwest L, 6-2 - - - - - - - - - -
Apr 19 at Purdue Northwest W, 7-3 - - - - - - - - - -
Apr 20 at Purdue Northwest L, 3-1 - - - - - - - - - -
Apr 20 at Purdue Northwest L, 3-2 - - - 0 0 - - - - 0
Apr 24 vs. Cleary W, 14-0 - - - - - - - - - -
Apr 26 Parkside W, 14-5 - - - - - - - - - -
Apr 27 Parkside L, 11-8 - - - - - - - - - -
Apr 27 Parkside W, 7-1 - - - - - - - - - -
Apr 28 Parkside L, 13-5 - - - 0 0 - - - - 0
May 3 at Wayne State L, 2-0 - - - - - - - - - -
May 4 at Wayne State L, 13-9 - - - - - - - - - -
May 4 at Wayne State L, 5-0 - - - - - - - - - -
May 5 at Wayne State W, 7-6 - - - 0 0 - - - - 0
May 9 vs. #11 Ashland L, 8-6 - - - 0 0 - - - - 0
May 10 vs. Purdue Northwest W, 6-1 - - - - - - - - - -
May 11 vs. Northwood W, 6-3 - - - - - - - - - -
May 12 vs. Davenport W, 12-8 - - - 0 0 - - - - 0
May 12 vs. #11 Ashland L, 8-2 - - - - - - - - - -
Date Opponent Score gs w l sv ip h r er era bb k hr
Feb 15 vs. #15 Illinois-Springfield L, 8-5 - - - - - - - - - - - -
Feb 15 vs. #15 Illinois-Springfield L, 11-3 0 0 0 0 4.2 3 1 - 0.00 - 6 -
Feb 16 vs. #15 Illinois-Springfield L, 12-6 - - - - - - - - - - - -
Feb 22 vs. McKendree L, 5-3 - - - - - - - - - - - -
Feb 23 vs. McKendree W, 22-3 - - - - - - - - - - - -
Feb 24 vs. McKendree W, 19-7 0 1 0 0 6.0 3 3 1 1.50 2 3 -
Mar 2 at Missouri S&T L, 17-3 - - - - - - - - - - - -
Mar 2 at Missouri S&T W, 6-2 - - - - - - - - - - - -
Mar 3 at Missouri S&T L, 8-5 1 0 1 0 3.2 5 4 4 9.82 3 4 -
Mar 7 at Trevecca Nazarene W, 4-1 - - - - - - - - - - - -
Mar 7 at Trevecca Nazarene L, 7-6 - - - - - - - - - - - -
Mar 15 at #15 Mercyhurst L, 7-0 - - - - - - - - - - - -
Mar 17 at #15 Mercyhurst W, 8-1 0 0 0 0 1.0 - - - 0.00 1 1 -
Mar 22 at Davenport W, 7-5 - - - - - - - - - - - -
Mar 23 at Davenport L, 9-5 - - - - - - - - - - - -
Mar 23 at Davenport W, 13-9 1 1 0 0 4.0 5 2 2 4.50 1 1 -
Mar 24 at Davenport W, 12-2 - - - - - - - - - - - -
Mar 26 at Hillsdale W, 14-8 - - - - - - - - - - - -
Mar 29 Grand Valley State W, 4-3 - - - - - - - - - - - -
Mar 29 Grand Valley State W, 5-4 - - - - - - - - - - - -
Apr 1 Grand Valley State W, 9-5 1 1 0 0 5.0 5 3 3 5.40 5 4 -
Apr 1 Grand Valley State T, 5-5 - - - - - - - - - - - -
Apr 5 #15 Ashland L, 4-1 - - - - - - - - - - - -
Apr 6 #15 Ashland L, 4-2 - - - - - - - - - - - -
Apr 6 #15 Ashland L, 3-1 - - - - - - - - - - - -
Apr 7 #15 Ashland W, 11-3 1 1 0 0 6.0 8 2 1 1.50 3 3 -
Apr 9 Hillsdale L, 8-6 - - - - - - - - - - - -
Apr 10 Lawrence Tech L, 17-8 - - - - - - - - - - - -
Apr 12 at Northwood L, 5-2 - - - - - - - - - - - -
Apr 12 at Northwood L, 12-8 - - - - - - - - - - - -
Apr 13 at Northwood L, 10-8 - - - - - - - - - - - -
Apr 13 at Northwood L, 13-4 1 0 0 0 6.0 4 4 4 6.00 3 1 1
Apr 16 vs. Northwood L, 14-13 - - - - - - - - - - - -
Apr 19 at Purdue Northwest L, 6-2 - - - - - - - - - - - -
Apr 19 at Purdue Northwest W, 7-3 - - - - - - - - - - - -
Apr 20 at Purdue Northwest L, 3-1 - - - - - - - - - - - -
Apr 20 at Purdue Northwest L, 3-2 1 0 1 0 6.0 4 3 1 1.50 1 4 -
Apr 24 vs. Cleary W, 14-0 - - - - - - - - - - - -
Apr 26 Parkside W, 14-5 - - - - - - - - - - - -
Apr 27 Parkside L, 11-8 - - - - - - - - - - - -
Apr 27 Parkside W, 7-1 - - - - - - - - - - - -
Apr 28 Parkside L, 13-5 1 0 1 0 3.1 8 9 8 21.60 5 1 -
May 3 at Wayne State L, 2-0 - - - - - - - - - - - -
May 4 at Wayne State L, 13-9 - - - - - - - - - - - -
May 4 at Wayne State L, 5-0 - - - - - - - - - - - -
May 5 at Wayne State W, 7-6 1 0 0 0 1.0 0 0 0 0.00 3 2 -
May 9 vs. #11 Ashland L, 8-6 1 0 0 0 4.0 6 3 2 4.50 1 0 -
May 10 vs. Purdue Northwest W, 6-1 - - - - - - - - - - - -
May 11 vs. Northwood W, 6-3 - - - - - - - - - - - -
May 12 vs. Davenport W, 12-8 1 0 0 0 0.2 5 5 4 54.00 2 0 -
May 12 vs. #11 Ashland L, 8-2 - - - - - - - - - - - -
Date Opponent Score tc po a e fpct dp sba rcs rcs% pb ci
Feb 15 vs. #15 Illinois-Springfield L, 8-5 - - - - - - - - - - -
Feb 15 vs. #15 Illinois-Springfield L, 11-3 0 0 0 0 - - - 1 1.000 - -
Feb 16 vs. #15 Illinois-Springfield L, 12-6 - - - - - - - - - - -
Feb 22 vs. McKendree L, 5-3 - - - - - - - - - - -
Feb 23 vs. McKendree W, 22-3 - - - - - - - - - - -
Feb 24 vs. McKendree W, 19-7 0 0 0 0 - - - 2 1.000 - -
Mar 2 at Missouri S&T L, 17-3 - - - - - - - - - - -
Mar 2 at Missouri S&T W, 6-2 - - - - - - - - - - -
Mar 3 at Missouri S&T L, 8-5 0 0 0 0 - - 3 - - - -
Mar 7 at Trevecca Nazarene W, 4-1 - - - - - - - - - - -
Mar 7 at Trevecca Nazarene L, 7-6 - - - - - - - - - - -
Mar 15 at #15 Mercyhurst L, 7-0 - - - - - - - - - - -
Mar 17 at #15 Mercyhurst W, 8-1 0 0 0 0 - - - - - - -
Mar 22 at Davenport W, 7-5 - - - - - - - - - - -
Mar 23 at Davenport L, 9-5 - - - - - - - - - - -
Mar 23 at Davenport W, 13-9 0 0 0 0 - - 1 - - - -
Mar 24 at Davenport W, 12-2 - - - - - - - - - - -
Mar 26 at Hillsdale W, 14-8 - - - - - - - - - - -
Mar 29 Grand Valley State W, 4-3 - - - - - - - - - - -
Mar 29 Grand Valley State W, 5-4 - - - - - - - - - - -
Apr 1 Grand Valley State W, 9-5 0 0 0 0 - - - 1 1.000 - -
Apr 1 Grand Valley State T, 5-5 - - - - - - - - - - -
Apr 5 #15 Ashland L, 4-1 - - - - - - - - - - -
Apr 6 #15 Ashland L, 4-2 - - - - - - - - - - -
Apr 6 #15 Ashland L, 3-1 - - - - - - - - - - -
Apr 7 #15 Ashland W, 11-3 0 0 0 0 - - - - - - -
Apr 9 Hillsdale L, 8-6 - - - - - - - - - - -
Apr 10 Lawrence Tech L, 17-8 - - - - - - - - - - -
Apr 12 at Northwood L, 5-2 - - - - - - - - - - -
Apr 12 at Northwood L, 12-8 - - - - - - - - - - -
Apr 13 at Northwood L, 10-8 - - - - - - - - - - -
Apr 13 at Northwood L, 13-4 1 0 1 0 1.000 - - - - - -
Apr 16 vs. Northwood L, 14-13 - - - - - - - - - - -
Apr 19 at Purdue Northwest L, 6-2 - - - - - - - - - - -
Apr 19 at Purdue Northwest W, 7-3 - - - - - - - - - - -
Apr 20 at Purdue Northwest L, 3-1 - - - - - - - - - - -
Apr 20 at Purdue Northwest L, 3-2 1 0 1 0 1.000 - - - - - -
Apr 24 vs. Cleary W, 14-0 - - - - - - - - - - -
Apr 26 Parkside W, 14-5 - - - - - - - - - - -
Apr 27 Parkside L, 11-8 - - - - - - - - - - -
Apr 27 Parkside W, 7-1 - - - - - - - - - - -
Apr 28 Parkside L, 13-5 1 0 1 0 1.000 - - 1 1.000 - -
May 3 at Wayne State L, 2-0 - - - - - - - - - - -
May 4 at Wayne State L, 13-9 - - - - - - - - - - -
May 4 at Wayne State L, 5-0 - - - - - - - - - - -
May 5 at Wayne State W, 7-6 0 0 0 0 - - - - - - -
May 9 vs. #11 Ashland L, 8-6 1 0 1 0 1.000 - - - - - -
May 10 vs. Purdue Northwest W, 6-1 - - - - - - - - - - -
May 11 vs. Northwood W, 6-3 - - - - - - - - - - -
May 12 vs. Davenport W, 12-8 0 0 0 0 - - - - - - -
May 12 vs. #11 Ashland L, 8-2 - - - - - - - - - - -
  g ab r h 2b 3b hr rbi bb k sb cs avg obp slg
2018-19 13 0 0 0 - - - 0 - - - - - - -
2019-20 3 0 0 0 - - - 0 - - - - - - -
2020-21 - - - - - - - - - - - - - - -
Total 16 0 0 0 - - - 0 - - - - - - -
  g hbp sf sh tb xbh hdp go fo go/fo pa
2018-19 13 - - - 0 0 - - - - 0
2019-20 3 - - - 0 0 - - - - 0
2020-21 - - - - 0 0 - - - - 0
Total 16 - - - 0 0 - - - - 0
  app gs w l sv cg ip h r er bb k k/9 hr era
2018-19 13 10 4 3 0 1 51.1 56 39 30 30 30 5.26 1 5.26
2019-20 3 2 0 0 0 - 8.2 11 7 3 8 5 5.19 - 3.12
2020-21 - - - - - - 0.0 - - - - - .00 - 0.00
Total 16 12 4 3 0 1 60.0 67 46 33 38 35 5.25 1 4.95
  g tc po a e fpct dp sba rcs rcs% pb ci
2018-19 13 4 0 4 0 1.000 - 4 5 .556 - -
2019-20 3 3 0 1 2 .333 - - 2 1.000 - -
2020-21 - 0 - - - - - - - - - -
Total 16 7 0 5 2 .714 - 4 7 .636 - -
  g ab r h 2b 3b hr rbi bb k sb cs avg obp slg
Total 13 0 0 0 - - - 0 - - - - - - -
Conference 7 0 0 0 - - - 0 - - - - - - -
There was a problem with a Velocity script
Pagebio-template
ErrorVM #split: too few arguments to macro. Wanted 5 got 3 at bio-template[line 295, column 1]
Page source:
1: $website.addCss($website.cdn("/info/photo-gallery.css"))
2: <script src="${website.cdn("/info/klass.min.js")}"></script>
3: <script src="${website.cdn("/info/code.photoswipe.jquery-3.0.5.min.js")}"></script>
4: <script src="${website.cdn("/info/masonry.pkgd.min.js")}"></script>
5: <script src="${website.cdn("/info/imagesloaded.pkgd.min.js")}"></script>
6: <script src="${website.cdn("/info/photogallery/photogallery.js")}"></script>
7: 
8: ## PICK UP OPTIONS
9: $website.include("options")
10: #set ($options = $request.getAttribute("options"))
11: #set ($locale = "en_us")
12: #set ($locale = $options.get("locale"))
13: 
14: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE
15: #set ($bioObject = $page.getDataAsObject())
16: #set ($statsURL = $bioObject.statsURL)
17: 
18: #if ($statsURL.length() > 0)
19:   $website.includeAgain("${statsURL}?tmpl=bio-stats-template")
20:   ## various settings to get the variables set
21:   #set ($events = $request.getAttribute("bio_events"))
22:   #set ($seasons = $request.getAttribute("bio_seasons"))
23:   #set ($career = $request.getAttribute("bio_career"))
24:   #set ($labels = $request.getAttribute("bio_labels"))
25:   #set ($briefs = $request.getAttribute("bio_briefs"))
26:   #set ($gamelogs = $request.getAttribute("bio_gamelogs"))
27:   #set ($splits = $request.getAttribute("bio_splits"))
28:   #set ($statPosition = $request.getAttribute("bio_position"))
29:   #set ($positions = $request.getAttribute("bio_positions"))
30:   #set ($playerId = $request.getAttribute("bio_player_id"))
31:   #set ($highlights = $request.getAttribute("bio_highlights"))
32:   #set ($formats = $request.getAttribute("bio_formats"))
33:   #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels"))
34:   #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels"))
35:   #set ($gamesResults = $request.getAttribute("bio_games_results"))
36:   #set ($monthsPlayed = $request.getAttribute("bio_months_played"))
37: #end
38: 
39: #set ($pos = "")
40: #set ($pos = $attributes.get("position"))
41: #set ($pos = $statPosition)
42: #set ($posVec = $pos.split("/"))
43: #set ($pos = $posVec[0])
44: #set ($pos = $pos.toLowerCase())
45: #set ($statPos = $positions.get($pos))
46: #set ($paramPos = $request.getParameter("pos"))
47: 
48: #set ($playerId = $attributes.get("playerId"))
49: #set ($stats = $splits.overall)
50: #set ($highlights = $highlights.get($statPos))
51: 
52: #set ($showHighlights = true)
53: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false)
54: 	#set ($showHighlights = false)
55: #end
56: 
57: #set ($enhancedLayout = false)
58: #if (($options.get("bio_enhanced_layout") == "yes") || ($request.getParameter("bio_enhanced_layout") == true))
59: 	#set ($enhancedLayout = true)
60: 	$website.addCss($website.cdn("/info/bio-styles-enhanced.css"))
61: #end
62: 
63: #set ($showActionShots = true)
64: #if ($options.get("bio_show_action_shots") && $options.get("bio_show_action_shots") == false)
65: 	#set ($showActionShots = false)
66: #end
67: 
68: #set ($actionShotsLimit = 5)
69: #set ($actionShotsLimit = $tool.math.toInteger($options.get("bio_action_shots_limit")))
70: 
71: #set ($showCareer = $wiki.valid() && $seasons)
72: #if ("yes" == $options.get("stats_show_career") && $seasons)
73:   #set ($showCareer = true)
74: #end
75: 
76: #set ($hasEvents = $events.size() > 0)
77: #set ($hasSynopsis = $synopsis.trim().length() > 0)
78: #set ($htmlStatsURL = "${page.url}-stats")
79: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
80: #set ($bioBriefURL = "${page.url}-brief")
81: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
82: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1))
83: #if ($options.get("bio_hide_roster") == true)
84:   #set ($showRoster = false)
85: #end
86: 
87: #set ($view = "")
88: #if ($hasSynopsis || $hasBioBrief)
89:   #set ($view = "bio")
90: #elseif ($statsURL.length() > 0)
91:   #set ($view = "profile")
92: #elseif ($hasHTMLStats)
93:   #set ($view = "htmlstats")
94: #elseif ($releases.size() > 0)
95:   #set ($view = "news")
96: #elseif ($playerPhotos.size() > 0)
97:   #set ($view = "photos")
98: #elseif ($playerVideos.size() > 0)
99:   #set ($view = "videos")
100: #end
101: 
102: #if ($options.get("bio_default_view").length() > 0)
103:   #set ($checkView = $options.get("bio_default_view"))
104: #end
105: 
106: #if ($request.getParameter("view"))
107:   #set ($checkView = $request.getParameter("view"))
108: #end
109: 
110: #if ($checkView == "profile" && $statsURL.length() > 0)
111:   #set ($view = "profile")
112: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief))
113:   #set ($view = "bio")
114: #elseif ($checkView == "gamelog" && $statsURL.length() > 0)
115:   #set ($view = "gamelog")
116: #elseif ($checkView == "career" && $showCareer)
117:   #set ($view = "career")
118: #elseif ($checkView == "splits" && $statsURL.length() > 0)
119:   #set ($view = "splits")
120: #elseif ($checkView == "htmlstats" && $hasHTMLStats)
121:   #set ($view = "htmlstats")
122: #elseif ($checkView == "news" && $releases.size() > 0)
123:   #set ($view = "news")
124: #elseif ($checkView == "photos" && $playerPhotos.size() > 0)
125:   #set ($view = "photos")
126: #elseif ($checkView == "videos" && $playerVideos.size() > 0)
127:     #set ($view = "videos")
128: #end
129: 
130: #macro (printResultAriaLabel $event)
131:     #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
132:     #if ($event.neutralSite.length() > 0 || $event.home)
133:     	#set ($ariaLabel = "${ariaLabel} vs.")
134:     #else
135:     	#set ($ariaLabel = "${ariaLabel} at")
136:     #end
137:     #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
138:     #if ($event.neutralSite.length() > 0)
139:     	#set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
140:     #end
141:     #set ($ariaLabel = "${ariaLabel} Box Score")
142:     aria-label="$ariaLabel"
143: #end
144: 
145: #macro (printGrid $items $type)
146: <div class="news-layout grid">
147:     <div class="stories">
148:         <ul>
149:         #foreach ($item in $items)
150:             #if ($item.title.length() > 0)
151: 
152:                 <li class="story ${type}">
153:                 	<div class="clearfix">
154:                 	<a href="$item.url" class="title-box">
155:                         <span class="thumb">
156:                         #if ($item.thumbnailURL)
157:                         	<img src="$website.cdn("/info/images/spacer.gif")" data-src="${item.thumbnailURL}?max_width=300" alt="" class="lazyload" />
158: 						#elseif ($item.contentType == "loki/youtube")
159: 							<img src="$website.cdn("/info/images/spacer.gif")" data-src="http://img.youtube.com/vi/${item.dataAsString}/0.jpg" alt="" class="lazyload" />
160:                         #else
161:                         	<img src="$website.cdn("/info/images/spacer.gif")" data-src="/images/setup/thumbnail_default.jpg?max_width=300" alt="" class="lazyload" />
162:                         #end
163:                         </span>
164:                 		<span class="title">$item.title</span>
165:                 	</a>
166:                 	</div>
167:                 </li>
168:             #end
169:         #end ## foreach
170:         </ul>
171:     </div>
172: </div>
173: #end ## ends macro
174: 
175: #macro (gamelogData $p)
176: 
177: #set ($p = $positions.get($p))
178: #set ($gamelogs = $gamelogs.get($p))
179: 
180: #if ($hasEvents)
181: <div class="stats-box full clearfix">
182: <div class="scrollable">
183: <div>
184: <table>
185:   <tr class="thead">
186:     <th class="text">Date</th>
187:     <th class="pinned-col text">Opponent</th>
188:     <th>Score</th>
189:     #foreach ($gamelog in $gamelogs)
190:       <th>$gamelog</th>
191:     #end
192:   </tr>
193: #foreach ($event in $events)
194:   <tr>
195:     <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
196:     <td class="pinned-col text">
197:       #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
198:       $event.event.opponent.name
199:     </td>
200:     <td>
201:     #if ($event.event.statusCode >= 0)
202:       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
203:           <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
204:       #else
205:       ${event.event.APResult}
206:       #end
207:     #else &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:     #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">&nbsp;</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" data-player-photo-count="$playerPhotos.size()">
616:         <div class="slider" data-module="slick-slider-init" data-slick-settings="$slickSettings">
617:             #set ($playerPhotos = $tool.sorter.sort($playerPhotos, "lastUpdated:desc"))
618:             #foreach ($photo in $playerPhotos)
619: 				#if ($velocityCount <= $actionShotsLimit)
620:                     #set ($imgAlt = "Action shot for ${page.title} image ${velocityCount}")
621:                     #if ($photo.altText.length() > 0)
622:                         #set ($imgAlt = $photo.altText)
623:                     #elseif( $photo.title.length() > 0 )
624:                         #set ($imgAlt = $photo.title)
625:                     #end
626:             		<div class="image">
627:             			<img data-lazy="$photo.url" alt="$imgAlt" data-lastupdated="$photo.lastUpdated"/>
628:             	    </div>
629: 				#end
630:     	    #end
631: 	    </div>
632:     </div>
633: #end
634: #end ## macro printActionShots
635: 
636: #macro (printHighlights)
637: #if ($highlights && $showHighlights)
638:   <div class="highlights #if ($enhancedLayout) highlights-bio-enhanced #else highlights-bio #end clearfix">
639:     #foreach ($highlight in $highlights.keySet())
640:       #set ($value = "-")
641:       #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
642:       <div class="stat clearfix">
643:         <span class="stat-title">$!highlights.get($highlight)</span>
644:         <span class="stat-value">$value</span>
645:       </div>
646:     #end
647:   </div>
648: #end
649: #end ## macro printHighlights
650: #macro (printRoster)
651: #if ($enhancedLayout)
652:   $website.includeAgain("${page.url}?tmpl=roster-switcher-template&id=roster-list")
653: #else
654: #if ($page.contentType == "loki/bio")
655:   #set ($headlinesFeaturedSize = 0)
656:   #foreach ($featuredPage in $page.headlinesFeatured)
657:     #if ($featuredPage.contentType == "loki/headlines")
658:       #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
659:     #end
660:   #end
661:   #if ($headlinesFeaturedSize > 0)
662:       <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below.">
663:         <option selected="selected">Related Bios</option>
664:         #foreach ($featuredPage in $page.headlinesFeatured)
665:           #if ($featuredPage.contentType == "loki/headlines")
666:             $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template&current_url=${page.url}")
667: 		  #end
668: 	    #end
669:       </select>
670:   #end
671: #elseif ($page.contentType == "loki/bio-network")
672:   #set ($relatedPlayers = $page.sectionPage.children)
673:   #set ($teamNames = {})
674:   #foreach ($relatedPlayer in $relatedPlayers)
675:     #if ($relatedPlayer.contentType == "loki/bio-network")
676:       #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
677:       #set ($teamName = $relatedPlayerObj.get("team"))
678:       #if ($teamName.length() > 0)
679:         #if (!$teamNames.containsValue($teamName))
680:           $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
681:         #end
682:       #end
683:     #end
684:   #end
685: 
686:   <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below.">
687:   #foreach ($i in [1..$teamNames.size()])
688:     #if ($teamNames.size() > 1)
689:       <optgroup label="$teamNames.get($i)">
690:     #end
691: 
692:     #foreach ($relatedPlayer in $relatedPlayers)
693:       #if ($relatedPlayer.contentType == "loki/bio-network")
694:         #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
695:         #set ($teamName = $relatedPlayerObj.get("team"))
696:         #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
697:           #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
698:           #set ($playerLastName = $relatedPlayerObj.get("last_name"))
699:           #if ($page.url == $relatedPlayer.url)
700:             <option value="$relatedPlayer.url" selected="selected">${playerFirstName} ${playerLastName}</option>
701:           #else
702:             <option value="$relatedPlayer.url">${playerFirstName} ${playerLastName}</option>
703:           #end
704:         #end
705:       #end
706:     #end
707: 
708:     #if ($teamNames.size() > 1)
709:       </optgroup>
710:     #end
711:   #end
712:   </select>
713: #end
714: #end ## enhancedLayout check
715: #end ## macro printRoster
716: 
717: ################################################## END MACROS  #############################################################
718: 
719: #if ($attributes.get("full_name").length() > 0)
720:   #set ($fullName = $attributes.get("full_name"))
721: #else
722:   #set ($firstName = $!attributes.get("first_name"))
723:   #set ($lastName = $!attributes.get("last_name"))
724:   #set ($fullName = "${firstName} ${lastName}")
725: #end
726: 
727: #set ($actionShots = false)
728: #if ($enhancedLayout && $playerPhotos.size() > 0)
729:   #set ($actionShots = true)
730: #end
731: 
732: #if ($enhancedLayout)
733:   #set ($rootClass = "bio-enhanced")
734:   #if ($actionShots && $showActionShots)
735:   	#set ($rootClass = "${rootClass} action")
736:   #else
737:   	#set ($rootClass = "${rootClass} plain")
738:   #end
739: #else
740:   #set ($rootClass = "bio-wrap")
741: #end
742: 
743: ## FULL ROSTER
744: <div class="${rootClass} #if ($highlights) bio-wrap-has-highlights #end clearfix" data-module="stats/responsive-container">
745: 
746: ## RELATED BIOS
747: #if ($showRoster)
748:   <div class="related-bios clearfix">#printRoster</div>
749: #end
750: 
751: #if ($actionShots)
752:   #printActionShots
753: #end
754: 
755: <div class="head clearfix">
756: <div class="clearfix">
757: 
758: <div class="player-about clearfix">
759:   <div class="player-headshot">#printHeadshot</div>
760:   <div class="player-info">#printBioInfo</div>
761: </div>
762: 
763: #printHighlights
764: 
765: </div>
766: </div> ## head
767: 
768: #if ($view.length() > 0)
769: <div class="body clearfix">
770: 
771: <div class="tab-container primary clearfix" data-module="stats/tabs" data-type="primary">
772: <div class="tab-nav" data-module="jscroll" data-momentum="false">
773:   <div>
774:   <ul class="clearfix">
775:   #if ($hasSynopsis || $hasBioBrief)
776:     <li #if ($view == "bio") class="active" #end><a href="${page.url}?view=bio">Bio</a></li>
777:   #end
778: 
779:   #if ($statsURL.length() > 0)
780:     <li #if ($view == "profile") class="active" #end><a href="${page.url}?view=profile">Player Profile</a></li>
781:     <li #if ($view == "gamelog") class="active" #end><a href="${page.url}?view=gamelog">Game Log</a></li>
782:     #if ($showCareer)
783:       <li #if ($view == "career") class="active" #end><a href="${page.url}?view=career">Career Stats</a></li>
784:     #end
785:     <li #if ($view == "splits") class="active" #end><a href="${page.url}?view=splits">Split Stats</a></li>
786:   #end
787: 
788:   #if ($hasHTMLStats)
789:     <li #if ($view == "htmlstats") class="active" #end><a href="${page.url}?view=htmlstats">HTML Stats</a></li>
790:   #end
791: 
792:   #if ($releases.size() > 0)
793: 	<li #if ($view == "news") class="active" #end><a href="${page.url}?view=news">News</a></li>
794:   #end
795: 
796:   #if ($playerPhotos.size() > 0)
797: 	<li #if ($view == "photos") class="active" #end><a href="${page.url}?view=photos">Photos</a></li>
798:   #end
799: 
800:   #if ($playerVideos.size() > 0)
801:     <li #if ($view == "videos") class="active" #end><a href="${page.url}?view=videos">Videos</a></li>
802:   #end
803:   </ul>
804:   </div>
805: </div> ## tab-nav
806: 
807: <div class="tab-panels clearfix">
808: 
809: ## BIO
810: #if ($hasSynopsis || $hasBioBrief)
811: 
812: #set ($class = "tab-panel clearfix")
813: #if ($view == "bio")
814:   #set ($class = "tab-panel active clearfix")
815: #end
816: <div class="${class}">
817: 
818: <div class="synopsis clearfix">
819: #if ($hasSynopsis)
820:   $synopsis
821: #elseif ($hasBioBrief)
822:   $website.include("$bioBriefURL")
823: #end
824: </div>
825: 
826: </div> ## tab-panel
827: #end
828: ## BIO
829: 
830: ## STATS
831: #if ($statsURL.length() > 0)
832: 
833: ## PROFILE
834: #set ($class = "tab-panel clearfix")
835: #if ($view == "profile")
836:   #set ($class = "tab-panel active clearfix")
837: #end
838: <div class="${class}">
839: <div class="stats-wrap clearfix">
840: 
841: ## LAST SIX GAMES
842: <div class="stats-box half">
843: #printRecentGames()
844: </div>
845: 
846: ## RANKING
847: <div class="stats-box half">
848: #if ($statPos.length() > 0)
849:   $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
850: #end
851: </div>
852: 
853: </div> ## stats-wrap
854: </div> ## tab-content
855: ## PROFILE
856: 
857: ## GAMELOG
858: #set ($class = "tab-panel clearfix")
859: #if ($view == "gamelog")
860:   #set ($class = "tab-panel active clearfix")
861: #end
862: 
863: #set ($activePos = $statPos)
864: #if ($view == "gamelog" && $paramPos.length() > 0)
865:   #if ($positions.get($paramPos).length() > 0)
866:     #set ($activePos = $positions.get($paramPos))
867:   #end
868: #end
869: 
870: <div class="${class}">
871: 
872: #if ($gamelogsCategoriesLabels)
873: <div class="tab-container clearfix secondary" data-module="stats/tabs" data-type="secondary">
874:   <div class="tab-nav" data-module="jscroll" data-momentum="false">
875:     <div>
876:     <ul class="clearfix">
877:     #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
878:       #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
879: 
880:       #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
881:         #set($gamelogsCatLabelVal = "Defence")
882:       #end
883: 
884:       <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>
885:     #end
886:     </ul>
887: 	</div>
888:   </div>
889:   <div class="tab-panels">
890:   #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
891:     #set ($class = "tab-panel clearfix")
892:     #if ($gamelogsCatLabel.key == $activePos)
893:       #set ($class = "tab-panel active clearfix")
894:     #end
895:     <div class="${class}">
896:       <div class="stats-wrap clearfix">#gamelogData($gamelogsCatLabel.key)</div>
897: 	</div>
898:   #end
899:   </div>
900: </div>
901: #else
902:   <div class="stats-wrap clearfix">#gamelogData($pos)</div>
903: #end
904: 
905: </div> ## tab-panel
906: ## GAMELOG
907: 
908: 
909: ## CAREER
910: #if ($showCareer)
911: 
912: #set ($activePos = $statPos)
913: #if ($view == "career" && $paramPos.length() > 0)
914:   #if ($positions.get($paramPos).length() > 0)
915:     #set ($activePos = $positions.get($paramPos))
916:   #end
917: #end
918: 
919: #set ($class = "tab-panel clearfix")
920: #if ($view == "career")
921:   #set ($class = "tab-panel active clearfix")
922: #end
923: 
924: <div class="${class}">
925: 
926: #if ($briefsCategoriesLabels)
927:   #printCategories($briefsCategoriesLabels "career" "Career Stats")
928: #else
929:   <div class="stats-wrap clearfix">#careerData($activePos)</div>
930: #end
931: 
932: </div> ## tab-panel
933: #end
934: ## CAREER
935: 
936: ## SPLITS
937: #set ($class = "tab-panel clearfix")
938: #if ($view == "splits")
939: 	#set ($class = "tab-panel active clearfix")
940: #end
941: 
942: #set ($activePos = $statPos)
943: #if ($view == "splits" && $paramPos.length() > 0)
944:   #if ($positions.get($paramPos).length() > 0)
945:     #set ($activePos = $positions.get($paramPos))
946:   #end
947: #end
948: 
949: <div class="${class}">
950: 
951: #if ($briefsCategoriesLabels)
952:   #printCategories($briefsCategoriesLabels "splits" "Splits Stats")
953: #else
954:   <div class="stats-wrap clearfix">#splitsData($pos)</div>
955: #end
956: 
957: </div> ## tab-panel
958: ## SPLITS
959: 
960: #end
961: ## STATS
962: 
963: ## HTML STATS
964: #if ($hasHTMLStats)
965: 
966: #set ($class = "tab-panel clearfix")
967: #if ($view == "htmlstats")
968:   #set ($class = "tab-panel active clearfix")
969: #end
970: <div class="${class}">
971:   <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
972: </div>
973: 
974: #end
975: ## HTML STATS
976: 
977: ## NEWS
978: #if ($releases.size() > 0)
979: #set ($class = "tab-panel clearfix")
980: #if ($view == "news")
981:   #set ($class = "tab-panel active clearfix")
982: #end
983: <div class="${class}">
984: 	#printGrid($releases, "article")
985: </div> ## tab-content
986: #end
987: ## NEWS
988: 
989: ## PHOTOS
990: #if ($playerPhotos.size() > 0)
991: #set ($class = "tab-panel clearfix")
992: #if ($view == "photos")
993:   #set ($class = "tab-panel active clearfix")
994: #end
995: <div class="${class}">
996:     $website.includeAgain("${page.url}?tmpl=bio-photos-template")
997: </div> ## tab-content
998: #end
999: ## PHOTOS
1000: 
1001: ## VIDEOS
1002: #if ($playerVideos.size() > 0)
1003:   #set ($class = "tab-panel clearfix")
1004:   #if ($view == "videos")
1005:     #set ($class = "tab-panel active clearfix")
1006:   #end
1007: <div class="${class}">
1008: 	#printGrid($playerVideos, "video")
1009: </div> ## tab-content
1010: #end
1011: ## VIDEOS
1012: 
1013: </div> ## tab-panels
1014: </div> ## tab-container
1015: </div> ## body
1016: #end
1017: 
1018: $wiki
1019: </div> ## ends bio-wrap
1020: 
1021: ## GLOBAL ADS SERVER
1022: #if ($website.ads.isAdvertisingEnabled('BIOS'))
1023:         $website.includeAgain("global-adserver-slots?adSlot=bios")
1024: #end