44 Cameron Brown
44 - Cameron Brown
Height: 6-0
Weight: 237
Year: Sr.
Hometown: Westlake, Ohio
High School: Westlake
Position: DE
Major: Biology
gp 10
tk 49.0
sac 15
int 1
ffum 3

Senior (2018): Named to the AFCA Division III Coaches’ All-America Second Team, becoming the fourth player in program history to earn the honor from the organization… Was the 50th All-American overall in program history and the first CWRU defensive lineman to earn All-America recognition since Derek Messmer in 1996… Also selected as the PAC Defensive Player of the Year (becoming the first Spartan to earn the honor since the team rejoined the conference as a football affiliate member in 2014) and the UAA Defensive Player of the Year (the ninth in program history and first since 2012)… Was one of 35 finalists for the Cliff Harris Award, presented to the nation’s top small college defensive player each season… Selected to the D3football.com All-South Region First Team, becoming CWRU’s first selection to the top team since 2009, and the fifth overall in program history… He was the third defensive end in program history to be named to the D3football.com All-Region team, and the first to be selected to the first team… Earned All-PAC honors for the third-straight season, and claimed a spot on the all-conference first team for the second-straight year… Claimed All-UAA First Team honors for the third-straight year… Started all 10 games for the Spartans, finishing the year with 49 total tackles, including 28 solo… Totaled 15.0 sacks during the year for 122 yards lost, marking a program record for sacks in a season and finishing second among all Division III players with 1.5 sacks per game… His 15 sacks marked a program record, breaking the previous mark of 13.0, set by Derek Messmer in 1995… Registered 18.0 total tackles for a loss, ranking second in the PAC and 18th in Division III with 1.8 tackles for a loss per game… Paced the team with three forced fumbles (his 0.30 per game ranked 32nd among DIII players and second in the PAC) and seven quarterback hurries, and added an interception, two pass breakups and a fumble recovery… Was named to the D3football.com Team of the Week twice, selected as the PAC Defensive Player of the Week three times, and earned UAA Athlete of the Week honors three times… Set a program record with 4.5 sacks against Saint Vincent on October 13, the most sacks in a single game this season by any Division III player, and tied for the second most across all three NCAA divisions in 2018… Also forced a fumble and recovered a fumble during the game… Added three sacks, a forced fumble and an interception return for a touchdown during CWRU’s win over Bethany on October 27… Matched his career-high with 10 tackles against Geneva on October 20, including a pair of sacks… Had at least one sack in eight of the team’s 10 games… Ended the 2018 season ranked fourth in program history with 24.0 career sacks, nine shy of the program’s all-time record.

Junior (2017): Selected to the All-PAC and All-UAA First Teams… Started all 12 games during the season… Finished the year with 42 tackles, including 20 solo… Led all CWRU players with 4.5 sacks and three quarterback hurries, and was second on the team with 10 tackles for a loss… Forced one fumble, recovered a fumble and added a pass breakup during the year… Notched a season-high eight tackles, including half a sack, against Grove City on September 16… Had three tackles for a loss, including one sack, against Saint Vincent on September 30... Forced and recovered a fumble during the team’s win over Thiel, while also collecting a pair of tackles for a loss, on October 14.

Sophomore (2016): Earned selection to the All-PAC Second Team and the All-UAA First Team during his first season with the Spartans… Led all Spartan players with 4.5 sacks, 13.5 tackles for a loss (94th in DIII), two fumble recoveries (61st in DIII), three forced fumbles and six quarterback hurries… Started all 10 games during the season, ending the year with 47 tackles and five pass breakups… Named the PAC and UAA Defensive Player of the Week, and selected to the D3football.com Team of the Week, after recording 10 tackles, including two for a loss and a sack, forcing a pair of fumbles and recovering one, and notching a quarterback hurry and a pass breakup against Geneva on October 22nd… Led all Spartan players with 10 tackles against Bethany, including 2.5 tackles for a loss, en route earning UAA Defensive Player of the Week and PAC Rookie of the Week honors…Recorded a season-high three tackles for a loss, including two sacks, during the team’s season finale against Carnegie Mellon.

Personal: Transferred from the University of Cincinnati prior to the start of his sophomore year, where he did not play varsity football... Played four years of football in high school, competing for both Mater Dei High School in California, and Westlake High School in Ohio, graduating from Westlake in 2015... Served as his team captain during his senior year... Was coached by Mark Campo... Also played basketball in high school... Born May 27... Son of Mike and Carolyn... His father, Mike, is an assistant coach for the Golden State Warriors and the former head coach of both the Cleveland Cavaliers and the Los Angeles Lakers... His brother, Elijah, plays basketball for the University of New Mexico... His uncle, Anthony, is a former NFL offensive lineman, playing for the Steelers and Bengals.

Recent Games
Oct 6 at Wash. & Jeff. L, 44-36
Oct 13 St. Vincent W, 37-7
Oct 20 at Geneva W, 27-14
Oct 27 at Bethany (W.V.) W, 34-3
Nov 3 Waynesburg W, 41-17
Nov 10 Carnegie Mellon L, 29-23
Statistics category Overall Conf
Solo tackles 28 25
Assists 21 19
Tackles 49.0 44.0
Tackles per game 4.9 4.9
Sacks 15 15
Sack yards 122 122
Interceptions 1 1
Returned for touchdown 1 1
Fumble recoveries 1 1
Fumble return TDs - -
Date Opponent Score comp att pct yds y/a td int sac yds
Sep 1 Rochester (N.Y.) W, 38-10 - - - - - - - - -
Sep 15 at Grove City W, 49-23 - - - - - - - - -
Sep 22 Thiel W, 63-20 - - - - - - - - -
Sep 29 at Westminster (Pa.) W, 35-14 - - - - - - - - -
Oct 6 at Wash. & Jeff. L, 44-36 - - - - - - - - -
Oct 13 St. Vincent W, 37-7 - - - - - - - - -
Oct 20 at Geneva W, 27-14 - - - - - - - - -
Oct 27 at Bethany (W.V.) W, 34-3 - - - - - - - - -
Nov 3 Waynesburg W, 41-17 - - - - - - - - -
Nov 10 Carnegie Mellon L, 29-23 - - - - - - - - -
Date Opponent Score rush yds y/a lng td fum lost
Sep 1 Rochester (N.Y.) W, 38-10 - - - - - - -
Sep 15 at Grove City W, 49-23 - - - - - - -
Sep 22 Thiel W, 63-20 - - - - - - -
Sep 29 at Westminster (Pa.) W, 35-14 - - - - - - -
Oct 6 at Wash. & Jeff. L, 44-36 - - - - - - -
Oct 13 St. Vincent W, 37-7 - - - - - - -
Oct 20 at Geneva W, 27-14 - - - - - - -
Oct 27 at Bethany (W.V.) W, 34-3 - - - - - - -
Nov 3 Waynesburg W, 41-17 - - - - - - -
Nov 10 Carnegie Mellon L, 29-23 - - - - - - -
Date Opponent Score rec yds y/r lng td fum lost
Sep 1 Rochester (N.Y.) W, 38-10 - - - - - - -
Sep 15 at Grove City W, 49-23 - - - - - - -
Sep 22 Thiel W, 63-20 - - - - - - -
Sep 29 at Westminster (Pa.) W, 35-14 - - - - - - -
Oct 6 at Wash. & Jeff. L, 44-36 - - - - - - -
Oct 13 St. Vincent W, 37-7 - - - - - - -
Oct 20 at Geneva W, 27-14 - - - - - - -
Oct 27 at Bethany (W.V.) W, 34-3 - - - - - - -
Nov 3 Waynesburg W, 41-17 - - - - - - -
Nov 10 Carnegie Mellon L, 29-23 - - - - - - -
Date Opponent Score fgm fga lng xpm xpa pts
Sep 1 Rochester (N.Y.) W, 38-10 - - - - - 0
Sep 15 at Grove City W, 49-23 - - - - - 0
Sep 22 Thiel W, 63-20 - - - - - 0
Sep 29 at Westminster (Pa.) W, 35-14 - - - - - 0
Oct 6 at Wash. & Jeff. L, 44-36 - - - - - 0
Oct 13 St. Vincent W, 37-7 - - - - - 0
Oct 20 at Geneva W, 27-14 - - - - - 0
Oct 27 at Bethany (W.V.) W, 34-3 - - - - - 0
Nov 3 Waynesburg W, 41-17 - - - - - 0
Nov 10 Carnegie Mellon L, 29-23 - - - - - 0
Date Opponent Score punt yds avg long in20 fc tb blk
Sep 1 Rochester (N.Y.) W, 38-10 - - - - - - - -
Sep 15 at Grove City W, 49-23 - - - - - - - -
Sep 22 Thiel W, 63-20 - - - - - - - -
Sep 29 at Westminster (Pa.) W, 35-14 - - - - - - - -
Oct 6 at Wash. & Jeff. L, 44-36 - - - - - - - -
Oct 13 St. Vincent W, 37-7 - - - - - - - -
Oct 20 at Geneva W, 27-14 - - - - - - - -
Oct 27 at Bethany (W.V.) W, 34-3 - - - - - - - -
Nov 3 Waynesburg W, 41-17 - - - - - - - -
Nov 10 Carnegie Mellon L, 29-23 - - - - - - - -
Date Opponent Score kr yds avg lng td pr yds avg lng td
Sep 1 Rochester (N.Y.) W, 38-10 - - - - - - - - - -
Sep 15 at Grove City W, 49-23 - - - - - - - - - -
Sep 22 Thiel W, 63-20 - - - - - - - - - -
Sep 29 at Westminster (Pa.) W, 35-14 - - - - - - - - - -
Oct 6 at Wash. & Jeff. L, 44-36 - - - - - - - - - -
Oct 13 St. Vincent W, 37-7 - - - - - - - - - -
Oct 20 at Geneva W, 27-14 - - - - - - - - - -
Oct 27 at Bethany (W.V.) W, 34-3 - - - - - - - - - -
Nov 3 Waynesburg W, 41-17 - - - - - - - - - -
Nov 10 Carnegie Mellon L, 29-23 - - - - - - - - - -
Date Opponent Score gp rush rcv pr kr yds
Sep 1 Rochester (N.Y.) W, 38-10 1 - - - - 0
Sep 15 at Grove City W, 49-23 1 - - - - 0
Sep 22 Thiel W, 63-20 1 - - - - 0
Sep 29 at Westminster (Pa.) W, 35-14 1 - - - - 0
Oct 6 at Wash. & Jeff. L, 44-36 1 - - - - 0
Oct 13 St. Vincent W, 37-7 1 - - - - 0
Oct 20 at Geneva W, 27-14 1 - - - - 0
Oct 27 at Bethany (W.V.) W, 34-3 1 - - - - 0
Nov 3 Waynesburg W, 41-17 1 - - - - 0
Nov 10 Carnegie Mellon L, 29-23 1 - - - - 0
Date Opponent Score pts rush rec kr pr int fum xpm fgm saf misc 2pt
Sep 1 Rochester (N.Y.) W, 38-10 0 - - - - - - - - - 0 -
Sep 15 at Grove City W, 49-23 0 - - - - - - - - - 0 -
Sep 22 Thiel W, 63-20 0 - - - - - - - - - 0 -
Sep 29 at Westminster (Pa.) W, 35-14 0 - - - - - - - - - 0 -
Oct 6 at Wash. & Jeff. L, 44-36 0 - - - - - - - - - 0 -
Oct 13 St. Vincent W, 37-7 0 - - - - - - - - - 0 -
Oct 20 at Geneva W, 27-14 0 - - - - - - - - - 0 -
Oct 27 at Bethany (W.V.) W, 34-3 0 - - - - 1 - - - - 0 -
Nov 3 Waynesburg W, 41-17 0 - - - - - - - - - 0 -
Nov 10 Carnegie Mellon L, 29-23 0 - - - - - - - - - 0 -
Date Opponent Score tack ast tot sack lost tfl yds ff fr td int yds td brup blk saf
Sep 1 Rochester (N.Y.) W, 38-10 3 2 5.0 - - 1 2 - - - - - - - - -
Sep 15 at Grove City W, 49-23 2 4 6.0 1 4 1.5 4 - - - - - - - - -
Sep 22 Thiel W, 63-20 1 3 4.0 1.5 6 1.5 6 - - - - - - - - -
Sep 29 at Westminster (Pa.) W, 35-14 2 4 6.0 1 5 2 8 - - - - - - - - -
Oct 6 at Wash. & Jeff. L, 44-36 2 0 2.0 1 7 1 7 - - - - - - 1 - -
Oct 13 St. Vincent W, 37-7 5 1 6.0 4.5 18 4.5 19 1 1 - - - - - - -
Oct 20 at Geneva W, 27-14 5 5 10.0 2 17 2.5 19 1 - - - - - - - -
Oct 27 at Bethany (W.V.) W, 34-3 4 0 4.0 3 53 3 53 1 - - 1 15 1 - - -
Nov 3 Waynesburg W, 41-17 1 0 1.0 - - 0 - - - - - - - 1 - -
Nov 10 Carnegie Mellon L, 29-23 3 2 5.0 1 12 1 12 - - - - - - - - -
  gp comp att pct yds y/g y/a td int lg effic
2016-17 10 - - - - - - - - - 0.0
2017-18 12 - - - - - - - - - 0.0
2018-19 10 - - - - - - - - - 0.0
2019-20 11 - - - - - - - - - 0.0
Total 43 - - - - - - - - - 0.0
  gp rush yds y/g avg td lg fum lost
2016-17 10 - - - - - - - -
2017-18 12 - - - - - - - -
2018-19 10 - - - - - - - -
2019-20 11 - - - - - - - -
Total 43 - - - - - - - -
  gp rec rec/g yds y/g avg td lg
2016-17 10 - - - - - - -
2017-18 12 - - - - - - -
2018-19 10 - - - - - - -
2019-20 11 - - - - - - -
Total 43 - - - - - - -
  gp fgm fga pct lg xpm xpa pct pts
2016-17 10 - - - - - - - 0
2017-18 12 - - - - - - - 0
2018-19 10 - - - - - - - 0
2019-20 11 - - - - - - - 0
Total 43 - - - - - - - 0
  gp punt yds avg lg in20 fc tb blk
2016-17 10 - - - - - - - -
2017-18 12 - - - - - - - -
2018-19 10 - - - - - - - -
2019-20 11 - - - - - - - -
Total 43 - - - - - - - -
  kr yds avg td lg pr yds avg td lg
2016-17 - - - - - - - - - -
2017-18 - - - - - - - - - -
2018-19 - - - - - - - - - -
2019-20 - - - - - - - - - -
Total - - - - - - - - - -
  gp rush rcv pr kr yds ypg
2016-17 10 - - - - 0 .0
2017-18 12 - - - - 0 .0
2018-19 10 - - - - 0 .0
2019-20 11 - - - - 0 .0
Total 43 - - - - 0 .0
  pts pts/g rush rec kr pr int fum xpm fgm 2pt misc
2016-17 0 0.0 - - - - - - - - - 0
2017-18 0 0.0 - - - - - - - - - 0
2018-19 6 0.6 - - - - 1 - - - - 0
2019-20 0 0.0 - - - - - - - - - 0
Total 6 0.1 - - - - 1 - - - - 0
  gp tkl ast tot tkl/g sck yds tfl yds ff fr yds int yds brup blk
2016-17 10 23 24 47.0 4.7 4.5 34 13.5 72 2 2 0 - - 5 -
2017-18 12 20 22 42.0 3.5 4.5 33 10 44 1 1 0 - - 1 -
2018-19 10 28 21 49.0 4.9 15 122 18 130 3 1 0 1 15 2 -
2019-20 11 29 20 49.0 4.5 10.5 70 18.5 96 6 1 0 - - 2 -
Total 43 100 87 187.0 4.3 34.5 259 60 342 12 5 0 1 15 10 -

Splits Stats - Passing

    gp comp att pct yds y/g y/a td int lg effic
Event Total 10 - - - - - - - - - 0.0
Conference 9 - - - - - - - - - 0.0
Exhibition - - - - - - - - - - 0.0
Location Home 5 - - - - - - - - - 0.0
Away 5 - - - - - - - - - 0.0
Neutral - - - - - - - - - - 0.0
Result Wins 8 - - - - - - - - - 0.0
Losses 2 - - - - - - - - - 0.0
Month September 4 - - - - - - - - - 0.0
October 4 - - - - - - - - - 0.0
November 2 - - - - - - - - - 0.0

Splits Stats - Rushing

    gp rush yds y/g avg td lg fum lost
Event Total 10 - - - - - - - -
Conference 9 - - - - - - - -
Exhibition - - - - - - - - -
Location Home 5 - - - - - - - -
Away 5 - - - - - - - -
Neutral - - - - - - - - -
Result Wins 8 - - - - - - - -
Losses 2 - - - - - - - -
Month September 4 - - - - - - - -
October 4 - - - - - - - -
November 2 - - - - - - - -

Splits Stats - Receiving

    gp rec rec/g yds y/g avg td lg
Event Total 10 - - - - - - -
Conference 9 - - - - - - -
Exhibition - - - - - - - -
Location Home 5 - - - - - - -
Away 5 - - - - - - -
Neutral - - - - - - - -
Result Wins 8 - - - - - - -
Losses 2 - - - - - - -
Month September 4 - - - - - - -
October 4 - - - - - - -
November 2 - - - - - - -

Splits Stats - Kicking

    gp fgm fga pct lg xpm xpa pct pts
Event Total 10 - - - - - - - 0
Conference 9 - - - - - - - 0
Exhibition - - - - - - - - 0
Location Home 5 - - - - - - - 0
Away 5 - - - - - - - 0
Neutral - - - - - - - - 0
Result Wins 8 - - - - - - - 0
Losses 2 - - - - - - - 0
Month September 4 - - - - - - - 0
October 4 - - - - - - - 0
November 2 - - - - - - - 0

Splits Stats - Punting

    gp punt yds avg lg in20 fc tb blk
Event Total 10 - - - - - - - -
Conference 9 - - - - - - - -
Exhibition - - - - - - - - -
Location Home 5 - - - - - - - -
Away 5 - - - - - - - -
Neutral - - - - - - - - -
Result Wins 8 - - - - - - - -
Losses 2 - - - - - - - -
Month September 4 - - - - - - - -
October 4 - - - - - - - -
November 2 - - - - - - - -

Splits Stats - Returns

    kr yds avg td lg pr yds avg td lg
Event Total - - - - - - - - - -
Conference - - - - - - - - - -
Exhibition - - - - - - - - - -
Location Home - - - - - - - - - -
Away - - - - - - - - - -
Neutral - - - - - - - - - -
Result Wins - - - - - - - - - -
Losses - - - - - - - - - -
Month September - - - - - - - - - -
October - - - - - - - - - -
November - - - - - - - - - -

Splits Stats - All-Purpose

    gp rush rcv pr kr yds ypg
Event Total 10 - - - - 0 .0
Conference 9 - - - - 0 .0
Exhibition - - - - - 0 -
Location Home 5 - - - - 0 .0
Away 5 - - - - 0 .0
Neutral - - - - - 0 -
Result Wins 8 - - - - 0 .0
Losses 2 - - - - 0 .0
Month September 4 - - - - 0 .0
October 4 - - - - 0 .0
November 2 - - - - 0 .0

Splits Stats - Scoring

    pts pts/g rush rec kr pr int fum xpm fgm 2pt misc
Event Total 6 0.6 - - - - 1 - - - - 0
Conference 6 0.7 - - - - 1 - - - - 0
Exhibition 0 - - - - - - - - - - 0
Location Home 0 0.0 - - - - - - - - - 0
Away 6 1.2 - - - - 1 - - - - 0
Neutral 0 - - - - - - - - - - 0
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 330, column 21]
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.includeAgain("global-adserver-slots?adSlot=bios")
1022: #end