23 Hannah Mazzeo
Hannah Mazzeo
  • Height:
    5'11
  • Year:
    2023
  • Hometown:
    Averill Park, NY
  • High School:
    Averill Park
  • Position:
    Forward
  • gp
    22
  • pts/g
    7.2
  • fg %
    32.2
  • 3pt %
    23.8
  • ft %
    63.8
  • reb/g
    8.8
  • a/g
    1.0

Bio

Freshman- Saw action in all 24 games with 5 starts as a first year player.  Collected a career high 14 points in a game against Curry.

High School- Was a member of the three time sectional champion Averill Park High School teams

Is the daughter of Jodi and Chris Mazzeo

Studying Health Sciences at MCLA with a concentration in Pre-Physician Assistant.  Mazzeo is minoring in Sport Coaching and Public Health.

Player Profile

Recent Games
Feb 1 Bridgewater St. L, 86-57
Feb 5 at Fitchburg St. L, 56-41
Feb 8 at Salem St. L, 59-55
Feb 12 Framingham St. L, 79-54
Feb 15 Worcester St. L, 68-64
Feb 22 at Westfield St. L, 103-59
  Overall Conf
Games 22 11
Games started 22 11
Minutes 646 326
Minutes per game 29.4 29.6
FG 55-171 33-95
FG Pct 32.2 34.7
3PT 5-21 3-15
3PT Pct 23.8 20.0
FT 44-69 25-41
FT Pct 63.8 61.0
Off rebounds 77 39
Def rebounds 116 65
Total rebounds 193 104
Rebounds per game 8.8 9.5
Personal fouls 53 26
Disqualifications 0 0
Assists 21 11
Turnovers 59 29
Assist to turnover ratio 0.4 0.4
Steals 19 5
Blocks 6 5
Points 159 94
Points per game 7.2 8.5
Points per 40 min 9.8 11.5

Game Log - Shooting

Date Opponent Score gs min fg pct 3pt pct ft pct pts
Nov 9 at Springfield L, 74-37 1 23 0-4 0.0 0-0 - 2-2 100.0 2
Nov 13 SUNY Cobleskill W, 53-52 1 33 2-9 22.2 0-0 - 9-12 75.0 13
Nov 16 at Williams L, 97-45 1 32 1-6 16.7 0-0 - 2-2 100.0 4
Nov 20 at Mount Holyoke W, 59-42 1 27 6-11 54.5 0-0 - 0-0 - 12
Nov 23 Utica L, 80-54 1 29 4-10 40.0 1-1 100.0 0-0 - 9
Nov 26 Fisher L, 67-46 1 27 3-6 50.0 1-1 100.0 0-0 - 7
Dec 4 Elms L, 63-57 1 33 3-10 30.0 0-1 0.0 4-6 66.7 10
Dec 7 at Smith L, 89-40 1 23 0-7 0.0 0-1 0.0 0-0 - 0
Dec 10 at Union (N.Y.) L, 62-28 1 19 1-5 20.0 0-0 - 1-2 50.0 3
Jan 4 at Curry L, 56-43 1 36 1-2 50.0 0-1 0.0 1-4 25.0 3
Jan 11 at Bridgewater St. L, 76-42 1 34 2-5 40.0 0-0 - 1-2 50.0 5
Jan 14 Fitchburg St. L, 65-49 1 36 5-12 41.7 1-3 33.3 0-0 - 11
Jan 16 Salem St. L, 59-40 1 35 2-11 18.2 0-2 0.0 3-8 37.5 7
Jan 18 at Framingham St. L, 78-47 1 32 2-10 20.0 1-2 50.0 1-2 50.0 6
Jan 22 at Worcester St. L, 70-43 1 18 2-6 33.3 0-1 0.0 1-3 33.3 5
Jan 26 Trinity (Conn.) L, 43-31 1 38 1-6 16.7 0-1 0.0 0-0 - 2
Jan 29 Westfield St. L, 96-72 1 21 3-7 42.9 0-0 - 3-3 100.0 9
Feb 1 Bridgewater St. L, 86-57 1 33 4-8 50.0 1-1 100.0 1-2 50.0 10
Feb 5 at Fitchburg St. L, 56-41 1 22 1-9 11.1 0-2 0.0 0-0 - 2
Feb 8 at Salem St. L, 59-55 1 37 5-12 41.7 0-1 0.0 8-10 80.0 18
Feb 12 Framingham St. L, 79-54 1 33 4-7 57.1 0-2 0.0 6-9 66.7 14
Feb 15 Worcester St. L, 68-64 1 25 3-8 37.5 0-1 0.0 1-2 50.0 7
Feb 22 at Westfield St. L, 103-59 - - - - - - - - -

Game Log - Ball control

Date Opponent Score gs min off def reb ast to a/to stl blk pf dq
Nov 9 at Springfield L, 74-37 1 23 1 2 3 0 1 0.0 0 0 0 -
Nov 13 SUNY Cobleskill W, 53-52 1 33 11 4 15 2 4 0.5 2 0 3 -
Nov 16 at Williams L, 97-45 1 32 3 6 9 0 5 0.0 0 0 2 -
Nov 20 at Mount Holyoke W, 59-42 1 27 6 6 12 0 3 0.0 3 0 2 -
Nov 23 Utica L, 80-54 1 29 4 2 6 3 2 1.5 1 0 2 -
Nov 26 Fisher L, 67-46 1 27 1 2 3 0 1 0.0 4 0 3 -
Dec 4 Elms L, 63-57 1 33 5 5 10 3 1 3.0 1 0 3 -
Dec 7 at Smith L, 89-40 1 23 1 3 4 1 2 0.5 0 0 3 -
Dec 10 at Union (N.Y.) L, 62-28 1 19 1 3 4 0 3 0.0 2 1 2 0
Jan 4 at Curry L, 56-43 1 36 4 9 13 0 6 0.0 0 0 4 -
Jan 11 at Bridgewater St. L, 76-42 1 34 4 7 11 1 4 0.3 0 0 2 -
Jan 14 Fitchburg St. L, 65-49 1 36 3 5 8 0 1 0.0 0 0 3 -
Jan 16 Salem St. L, 59-40 1 35 7 8 15 0 3 0.0 2 0 2 -
Jan 18 at Framingham St. L, 78-47 1 32 1 6 7 1 1 1.0 0 1 0 -
Jan 22 at Worcester St. L, 70-43 1 18 3 3 6 0 4 0.0 0 1 3 0
Jan 26 Trinity (Conn.) L, 43-31 1 38 1 9 10 1 2 0.5 1 0 3 -
Jan 29 Westfield St. L, 96-72 1 21 3 5 8 1 4 0.3 1 0 2 -
Feb 1 Bridgewater St. L, 86-57 1 33 3 4 7 2 2 1.0 0 1 2 -
Feb 5 at Fitchburg St. L, 56-41 1 22 3 2 5 1 1 1.0 0 0 2 -
Feb 8 at Salem St. L, 59-55 1 37 9 11 20 0 2 0.0 2 1 4 -
Feb 12 Framingham St. L, 79-54 1 33 1 9 10 1 2 0.5 0 1 2 -
Feb 15 Worcester St. L, 68-64 1 25 2 5 7 4 5 0.8 0 0 4 -
Feb 22 at Westfield St. L, 103-59 - - - - - - - - - - - -

Career Stats - Shooting per game

  gp gs min/g fg/g pct 3pt/g pct ft/g pct ppg
2018-19 24 5 14.9 1.4-4.0 35.4 0.0-0.0 0.0 1.8-2.8 61.8 4.6
2019-20 22 22 29.4 2.5-7.8 32.2 0.2-1.0 23.8 2.0-3.1 63.8 7.2
Total 46 27 21.8 1.9-5.8 33.3 0.1-0.5 22.7 1.9-3.0 62.8 5.8

Career Stats - Shooting totals

  gp gs min fg pct 3pt pct ft pct pts
2018-19 24 5 357 34-96 35.4 0-1 0.0 42-68 61.8 110
2019-20 22 22 646 55-171 32.2 5-21 23.8 44-69 63.8 159
Total 46 27 1003 89-267 33.3 5-22 22.7 86-137 62.8 269

Career Stats - Shooting per 40 min

  gp gs min/g fg/40 pct 3pt/40 pct ft/40 pct pts/40
2018-19 24 5 14.9 3.8-10.8 35.4 0.0-0.1 0.0 4.7-7.6 61.8 12.3
2019-20 22 22 29.4 3.4-10.6 32.2 0.3-1.3 23.8 2.7-4.3 63.8 9.8
Total 46 27 21.8 3.5-10.6 33.3 0.2-0.9 22.7 3.4-5.5 62.8 10.7

Career Stats - Ball control per game

  gp gs mpg off/g def/g reb/g pf/g dq/g ast/g to/g a/to stl/g blk/g
2018-19 24 5 14.9 2.1 2.2 4.3 2.0 0.0 0.5 1.7 0.3 0.4 0.0
2019-20 22 22 29.4 3.5 5.3 8.8 2.4 0.0 1.0 2.7 0.4 0.9 0.3
Total 46 27 21.8 2.8 3.7 6.4 2.2 0.0 0.7 2.2 0.3 0.6 0.1

Career Stats - Ball control totals

  gp gs min off def reb pf dq ast to a/to stl blk
2018-19 24 5 357 50 52 102 48 0 11 40 0.3 9 0
2019-20 22 22 646 77 116 193 53 0 21 59 0.4 19 6
Total 46 27 1003 127 168 295 101 0 32 99 0.3 28 6

Career Stats - Ball control per 40 min

  gp gs mpg off/40 def/40 reb/40 pf/40 dq/40 ast/40 to/40 a/to stl/40 blk/40
2018-19 24 5 14.9 5.6 5.8 11.4 5.4 0.0 1.2 4.5 0.3 1.0 0.0
2019-20 22 22 29.4 4.8 7.2 12.0 3.3 0.0 1.3 3.7 0.4 1.2 0.4
Total 46 27 21.8 5.1 6.7 11.8 4.0 0.0 1.3 3.9 0.3 1.1 0.2

Splits Stats - Shooting per game

    gp gs min/g fg/g pct 3pt/g pct ft/g pct ppg
Event Total 22 22 29.4 2.5-7.8 32.2 0.2-1.0 23.8 2.0-3.1 63.8 7.2
Conference 11 11 29.6 3.0-8.6 34.7 0.3-1.4 20.0 2.3-3.7 61.0 8.5
Exhibition - - - 0.0-0.0 - 0.0-0.0 - 0.0-0.0 - -
Location Home 11 11 31.2 3.1-8.5 36.2 0.4-1.2 30.8 2.5-3.8 64.3 9.0
Away 11 11 27.5 1.9-7.0 27.3 0.1-0.7 12.5 1.5-2.5 63.0 5.5
Neutral - - - 0.0-0.0 - 0.0-0.0 - 0.0-0.0 - -
Result Wins 2 2 30.0 4.0-10.0 40.0 0.0-0.0 - 4.5-6.0 75.0 12.5
Losses 20 20 29.3 2.4-7.5 31.1 0.2-1.1 23.8 1.8-2.9 61.4 6.7
Month November 6 6 28.5 2.7-7.7 34.8 0.3-0.3 100.0 2.2-2.7 81.3 7.8
December 3 3 25.0 1.3-7.3 18.2 0.0-0.7 0.0 1.7-2.7 62.5 4.3
January 8 8 31.3 2.2-7.4 30.5 0.2-1.2 20.0 1.2-2.8 45.5 6.0
February 5 5 30.0 3.4-8.8 38.6 0.2-1.4 14.3 3.2-4.6 69.6 10.2

Splits Stats - Shooting totals

    gp gs min fg pct 3pt pct ft pct pts
Event Total 22 22 646 55-171 32.2 5-21 23.8 44-69 63.8 159
Conference 11 11 326 33-95 34.7 3-15 20.0 25-41 61.0 94
Exhibition - - - 0-0 - 0-0 - 0-0 - 0
Location Home 11 11 343 34-94 36.2 4-13 30.8 27-42 64.3 99
Away 11 11 303 21-77 27.3 1-8 12.5 17-27 63.0 60
Neutral - - - 0-0 - 0-0 - 0-0 - 0
Result Wins 2 2 60 8-20 40.0 0-0 - 9-12 75.0 25
Losses 20 20 586 47-151 31.1 5-21 23.8 35-57 61.4 134
Month November 6 6 171 16-46 34.8 2-2 100.0 13-16 81.3 47
December 3 3 75 4-22 18.2 0-2 0.0 5-8 62.5 13
January 8 8 250 18-59 30.5 2-10 20.0 10-22 45.5 48
February 5 5 150 17-44 38.6 1-7 14.3 16-23 69.6 51

Splits Stats - Shooting per 40 min

    gp gs min/g fg/40 pct 3pt/40 pct ft/40 pct pts/40
Event Total 22 22 29.4 3.4-10.6 32.2 0.3-1.3 23.8 2.7-4.3 63.8 9.8
Conference 11 11 29.6 4.0-11.7 34.7 0.4-1.8 20.0 3.1-5.0 61.0 11.5
Exhibition - - - 0.0-0.0 - 0.0-0.0 - 0.0-0.0 - -
Location Home 11 11 31.2 4.0-11.0 36.2 0.5-1.5 30.8 3.1-4.9 64.3 11.5
Away 11 11 27.5 2.8-10.2 27.3 0.1-1.1 12.5 2.2-3.6 63.0 7.9
Neutral - - - 0.0-0.0 - 0.0-0.0 - 0.0-0.0 - -
Result Wins 2 2 30.0 5.3-13.3 40.0 0.0-0.0 - 6.0-8.0 75.0 16.7
Losses 20 20 29.3 3.2-10.3 31.1 0.3-1.4 23.8 2.4-3.9 61.4 9.1
Month November 6 6 28.5 3.7-10.8 34.8 0.5-0.5 100.0 3.0-3.7 81.3 11.0
December 3 3 25.0 2.1-11.7 18.2 0.0-1.1 0.0 2.7-4.3 62.5 6.9
January 8 8 31.3 2.9-9.4 30.5 0.3-1.6 20.0 1.6-3.5 45.5 7.7
February 5 5 30.0 4.5-11.7 38.6 0.3-1.9 14.3 4.3-6.1 69.6 13.6

Splits Stats - Ball control per game

    gp gs mpg off/g def/g reb/g pf/g dq/g ast/g to/g a/to stl/g blk/g
Event Total 22 22 29.4 3.5 5.3 8.8 2.4 0.0 1.0 2.7 0.4 0.9 0.3
Conference 11 11 29.6 3.5 5.9 9.5 2.4 0.0 1.0 2.6 0.4 0.5 0.5
Exhibition - - - - - - - - - - - - -
Location Home 11 11 31.2 3.7 5.3 9.0 2.6 - 1.5 2.5 0.6 1.1 0.2
Away 11 11 27.5 3.3 5.3 8.5 2.2 0.0 0.4 2.9 0.1 0.6 0.4
Neutral - - - - - - - - - - - - -
Result Wins 2 2 30.0 8.5 5.0 13.5 2.5 - 1.0 3.5 0.3 2.5 0.0
Losses 20 20 29.3 3.0 5.3 8.3 2.4 0.0 0.9 2.6 0.4 0.7 0.3
Month November 6 6 28.5 4.3 3.7 8.0 2.0 - 0.8 2.7 0.3 1.7 0.0
December 3 3 25.0 2.3 3.7 6.0 2.7 0.0 1.3 2.0 0.7 1.0 0.3
January 8 8 31.3 3.3 6.5 9.8 2.4 0.0 0.5 3.1 0.2 0.5 0.3
February 5 5 30.0 3.6 6.2 9.8 2.8 - 1.6 2.4 0.7 0.4 0.6

Splits Stats - Ball control totals

    gp gs min off def reb pf dq ast to a/to stl blk
Event Total 22 22 646 77 116 193 53 0 21 59 0.4 19 6
Conference 11 11 326 39 65 104 26 0 11 29 0.4 5 5
Exhibition - - - - - - - - - - - - -
Location Home 11 11 343 41 58 99 29 - 17 27 0.6 12 2
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 314, column 17]
Page source:
1: <script src="${website.cdn("/info/klass.min.js")}"></script>
2: 
3: ## PICK UP OPTIONS
4: $website.include("options")
5: #set ($options = $request.getAttribute("options"))
6: #set ($locale = "en_us")
7: #set ($locale = $options.get("locale"))
8: 
9: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE
10: #set ($bioObject = $page.getDataAsObject())
11: #set ($statsURL = $bioObject.statsURL)
12: 
13: #if ($statsURL.length() > 0)
14:   $website.includeAgain("${statsURL}?tmpl=bio-stats-template")
15:   ## various settings to get the variables set
16:   #set ($events = $request.getAttribute("bio_events"))
17:   #set ($seasons = $request.getAttribute("bio_seasons"))
18:   #set ($career = $request.getAttribute("bio_career"))
19:   #set ($labels = $request.getAttribute("bio_labels"))
20:   #set ($briefs = $request.getAttribute("bio_briefs"))
21:   #set ($gamelogs = $request.getAttribute("bio_gamelogs"))
22:   #set ($splits = $request.getAttribute("bio_splits"))
23:   #set ($statPosition = $request.getAttribute("bio_position"))
24:   #set ($positions = $request.getAttribute("bio_positions"))
25:   #set ($playerId = $request.getAttribute("bio_player_id"))
26:   #set ($highlights = $request.getAttribute("bio_highlights"))
27:   #set ($formats = $request.getAttribute("bio_formats"))
28:   #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels"))
29:   #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels"))
30:   #set ($gamesResults = $request.getAttribute("bio_games_results"))
31:   #set ($monthsPlayed = $request.getAttribute("bio_months_played"))
32: #end
33: 
34: #set ($pos = "")
35: #set ($pos = $attributes.get("position"))
36: #set ($pos = $statPosition)
37: #set ($posVec = $pos.split("/"))
38: #set ($pos = $posVec[0])
39: #set ($pos = $pos.toLowerCase())
40: #set ($statPos = $positions.get($pos))
41: #set ($paramPos = $request.getParameter("pos"))
42: 
43: #set ($playerId = $attributes.get("playerId"))
44: #set ($stats = $splits.overall)
45: #set ($highlights = $highlights.get($statPos))
46: 
47: #set ($showHighlights = true)
48: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false)
49: 	#set ($showHighlights = false)
50: #end
51: 
52: #set ($enhancedLayout = false)
53: #if (($options.get("bio_enhanced_layout") == "yes") || ($request.getParameter("bio_enhanced_layout") == true))
54: 	#set ($enhancedLayout = true)
55: #end
56: 
57: #set ($showActionShots = true)
58: #if ($options.get("bio_show_action_shots") && $options.get("bio_show_action_shots") == false)
59: 	#set ($showActionShots = false)
60: #end
61: 
62: #set ($actionShotsLimit = 5)
63: #set ($actionShotsLimit = $tool.math.toInteger($options.get("bio_action_shots_limit")))
64: 
65: #set ($showCareer = $wiki.valid() && $seasons)
66: #if ("yes" == $options.get("stats_show_career") && $seasons)
67:   #set ($showCareer = true)
68: #end
69: 
70: #set ($hasEvents = $events.size() > 0)
71: #set ($hasSynopsis = $synopsis.trim().length() > 0)
72: #set ($htmlStatsURL = "${page.url}-stats")
73: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
74: #set ($bioBriefURL = "${page.url}-brief")
75: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
76: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1))
77: #if ($options.get("bio_hide_roster") == true)
78:   #set ($showRoster = false)
79: #end
80: 
81: #set ($view = "")
82: #if ($hasSynopsis || $hasBioBrief)
83:   #set ($view = "bio")
84: #elseif ($statsURL.length() > 0)
85:   #set ($view = "profile")
86: #elseif ($hasHTMLStats)
87:   #set ($view = "htmlstats")
88: #elseif ($releases.size() > 0)
89:   #set ($view = "news")
90: #elseif ($playerPhotos.size() > 0)
91:   #set ($view = "photos")
92: #elseif ($playerVideos.size() > 0)
93:   #set ($view = "videos")
94: #end
95: 
96: #if ($options.get("bio_default_view").length() > 0)
97:     #set ($checkView = $options.get("bio_default_view"))
98: #else
99:     ## THIS ESTABLISHES A DEFAULT TAB FOR NEW BOOTSTRAP THEMES
100:     #if ($hasSynopsis || $hasBioBrief)
101:         #set ($checkView = "bio")
102:     #elseif ($statsURL.length() > 0)
103:         #set ($checkView = "profile")
104:     #elseif ($releases.size() > 0)
105:         #set ($checkView = "news")
106:     #end
107: #end
108: 
109: #if ($request.getParameter("view"))
110:   #set ($checkView = $request.getParameter("view"))
111: #end
112: 
113: #if ($checkView == "profile" && $statsURL.length() > 0)
114:   #set ($view = "profile")
115: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief))
116:   #set ($view = "bio")
117: #elseif ($checkView == "gamelog" && $statsURL.length() > 0)
118:   #set ($view = "gamelog")
119: #elseif ($checkView == "career" && $showCareer)
120:   #set ($view = "career")
121: #elseif ($checkView == "splits" && $statsURL.length() > 0)
122:   #set ($view = "splits")
123: #elseif ($checkView == "htmlstats" && $hasHTMLStats)
124:   #set ($view = "htmlstats")
125: #elseif ($checkView == "news" && $releases.size() > 0)
126:   #set ($view = "news")
127: #elseif ($checkView == "photos" && $playerPhotos.size() > 0)
128:   #set ($view = "photos")
129: #elseif ($checkView == "videos" && $playerVideos.size() > 0)
130:     #set ($view = "videos")
131: #end
132: 
133: #macro (printResultAriaLabel $event)
134:     #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
135:     #if ($event.neutralSite.length() > 0 || $event.home)
136:     	#set ($ariaLabel = "${ariaLabel} vs.")
137:     #else
138:     	#set ($ariaLabel = "${ariaLabel} at")
139:     #end
140:     #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
141:     #if ($event.neutralSite.length() > 0)
142:     	#set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
143:     #end
144:     #set ($ariaLabel = "${ariaLabel} Box Score")
145:     aria-label="$ariaLabel"
146: #end
147: 
148: #macro (printGrid $items $type)
149:     <div class="bio-news-mentions">
150:         <div class="card-columns">
151:             #foreach ($item in $items)
152:                 #if ($item.title.length() > 0)
153:                     <div class="card ${type}">
154:                         <a href="$item.url">
155:                             #if ($item.thumbnailURL)
156:                                 <img src="${item.thumbnailURL}?max_width=510" alt="$item.thumbnailAlt" class="card-img-top img-fluid" />
157:                             #elseif ($item.contentType == "loki/youtube")
158:                                 <img src="http://img.youtube.com/vi/${item.dataAsString}/mqdefault.jpg" alt="$item.thumbnailAlt" class="card-img-top img-fluid" />
159:                             #else
160:                                 #if ($website.exists("/images/setup/default-article-thumbnail.png"))
161:                                     <img src="/images/setup/default-article-thumbnail.png?max_width=510&max_height=287" class="card-img-top img-fluid" alt="$item.thumbnailAlt" />
162:                                 #else
163:                                     <img src="$website.cdn("/info/images/default-article-thumbnail.png?max_width=510&max_height=287")" class="card-img-top img-fluid" alt="$item.thumbnailAlt" />
164:                                 #end
165:                             #end
166:                         </a>
167:                         <div class="card-body">
168:                             <h5 class="card-title"><a href="$item.url">$item.title</a></h5>
169:                             #if ($item.leadIn.length() > 0)
170:                                 <p class="card-text">$formatter.limitLen(146, $item.leadIn)</p>
171:                             #end
172:                             #if ($item.date)
173:                                 <p class="card-text"><small class="text-muted">$formatter.formatLongDate($item.date)</small></p>
174:                             #end
175:                         </div>
176:                     </div>
177:                 #end
178:             #end ## foreach
179:         </div>
180:     </div>
181: #end ## ends macro
182: 
183: #macro (gamelogData $p)
184: 
185: #set ($p = $positions.get($p))
186: #set ($gamelogs = $gamelogs.get($p))
187: 
188: #if ($hasEvents)
189: <div class="stats-box full clearfix">
190:     <div class="table-responsive">
191:         <table class="table table-hover table-sm">
192:             <thead class="thead-dark">
193:                 <tr>
194:                     <th scope="col">Date</th>
195:                     <th scope="col" class="pinned-col">Opponent</th>
196:                     <th scope="col">Score</th>
197:                     #foreach ($gamelog in $gamelogs)
198:                       <th scope="col">$gamelog</th>
199:                     #end
200:                 </tr>
201:             </thead>
202:             <tbody>
203:                 #foreach ($event in $events)
204:                   <tr>
205:                     <td scope="row">$formatter.formatDate($event.event.date, "MMM d")</td>
206:                     <td class="pinned-col">
207:                       #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
208:                       $event.event.opponent.name
209:                     </td>
210:                     <td>
211:                     #if ($event.event.statusCode >= 0)
212:                       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
213:                           <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
214:                       #else
215:                       ${event.event.APResult}
216:                       #end
217:                     #else &nbsp; #end
218:                     </td>
219:                     #foreach ($gamelog in $gamelogs.keySet())
220:                       #set ($value = "-")
221:                       #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
222:                       <td>$value</td>
223:                     #end
224:                   </tr>
225:                 #end
226:             </tbody>
227:         </table>
228:     </div> ## table-responsive
229: </div> ## stats-box
230: #end
231: 
232: #end ## macro gamelogData
233: 
234: #macro (split $statPosBriefs $label $stats $rowSpan $rowSpanLabel)
235:     <tr>
236:         #if ($tool.math.toInteger($rowSpan) > 0)
237:             <th rowspan="$rowSpan" scope="rowgroup">$rowSpanLabel</th>
238:         #end
239:         <th scope="row" class="pinned-col">${label}</th>
240:         #foreach ($brief in $statPosBriefs.keySet())
241:             #set ($value = "-")
242:             #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
243:             <td>#if ($value.length() > 0) $value #else - #end</td>
244:         #end
245:     </tr>
246: #end
247: 
248: #macro (careerData $p)
249: #set ($p = $positions.get($p))
250: #set ($statPosBriefs = $briefs.get($p))
251: 
252: <div class="stats-box full clearfix">
253:     <div class="table-responsive">
254:         <table class="table table-hover table-sm">
255:             <thead class="thead-dark">
256:                 <tr>
257:                     <th scope="col" class="pinned-col">&nbsp;</th>
258:                     #foreach ($brief in $statPosBriefs)
259:                         <th scope="col">$brief</th>
260:                     #end
261:                 </tr>
262:             </thead>
263:             <tbody>
264:                 #set ($careerTotals = $request.getAttribute("careerTotals"))
265:                 #set ($careerMap = $request.getAttribute("careerMap"))
266:                 #foreach ($season in $seasons)
267:                     ## Check if we did not get stats for this season
268:                     #if ($careerMap.get($season.seasonName))
269:                         #set ($label = "<a href='${season.path}?view=profile'>$season.seasonName</a>")
270:                         #split($statPosBriefs, $label, $careerMap[$season.seasonName], "", "")
271:                     #elseif ($wiki.valid())
272:                         <tr>
273:                             <td scope="row" class="text">${season.seasonName}</td>
274:                             <td colspan="${statPosBriefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
275:                         </tr>
276:                     #end
277:                 #end
278:                 #split($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall, "", "")
279:             </tbody>
280:         </table>
281:     </div> ## table-responsive
282: </div> ## stats-box
283: 
284: #end ## macro careerData
285: 
286: #macro (splitsData $p)
287: 
288: #set ($p = $positions.get($p))
289: #set ($statPosBriefs = $briefs.get($p))
290: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1))
291: 
292: #if ($statPosBriefs.size() > 0)
293: <div class="stats-box full clearfix">
294:     <div class="table-responsive">
295:         <table class="table table-hover table-sm">
296:             <thead class="thead-dark">
297:                 <tr>
298:                     <th scope="col" class="pinned-col">&nbsp;</th>
299:                     <th scope="col" class="pinned-col">&nbsp;</th>
300:                     #foreach ($brief in $statPosBriefs)
301:                         <th scope="col">$brief</th>
302:                     #end
303:                 </tr>
304:             </thead>
305:                 
306:             <tbody>
307:                 #split($statPosBriefs, "Total", $splits.overall, "3", "Event")
308:                 #split($statPosBriefs, "Conference", $splits.conference, "", "")
309:                 #split($statPosBriefs, "Exhibition", $splits.exhibition, "", "")
310:             </tbody>
311: 
312:             <tbody>
313:                 #split($statPosBriefs, "Home", $splits.home, "3", "Location")
314:                 #split($statPosBriefs, "Away", $splits.away, "", "")
315:                 #split($statPosBriefs, "Neutral", $splits.neutral, "", "")
316:             </tbody>
317: 
318:             <tbody>
319:                 #set ($rowSpan = $gamesResults.entrySet().size()) 
320:                 #set ($rowSpanLabel = "Result") 
321: 
322:                 #foreach($gameResult in $gamesResults.entrySet())
323:                     #if ($gameResult.key == "wins")
324:                       #set ($splitGameResult = $splits.inWins)
325:                     #elseif ($gameResult.key == "losses")
326:                       #set ($splitGameResult = $splits.inLosses)
327:                     #elseif ($gameResult.key == "ties")
328:                       #set ($splitGameResult = $splits.inTies)
329:                     #end
330: 
331:                     #split($statPosBriefs, $gameResult.value, $splitGameResult, $rowSpan, $rowSpanLabel)
332: 
333:                     #set ($rowSpan = "") 
334:                 #end
335:             </tbody>
336: 
337:             #if ($monthsPlayed and $monthsPlayed.size() > 0)
338:                 <tbody>
339:                     #set ($rowSpan = $monthsPlayed.size()) 
340:                     #set ($rowSpanLabel = "Month") 
341: 
342:                     #foreach($month in $monthsPlayed)
343:                         #if ($month == 'January')
344:                           #set ($splitMonth = $splits.january)
345:                         #elseif ($month == 'February')
346:                           #set ($splitMonth = $splits.february)
347:                         #elseif ($month == 'March')
348:                           #set($splitMonth = $splits.march)
349:                         #elseif ($month == 'April')
350:                           #set($splitMonth = $splits.april)
351:                         #elseif ($month == 'May')
352:                           #set ($splitMonth = $splits.may)
353:                         #elseif ($month == 'June')
354:                           #set ($splitMonth = $splits.june)
355:                         #elseif ($month == 'July')
356:                           #set($splitMonth = $splits.july)
357:                         #elseif ($month == 'August')
358:                           #set ($splitMonth = $splits.august)
359:                         #elseif ($month == 'September')
360:                           #set($splitMonth = $splits.september)
361:                         #elseif ($month == 'October')
362:                           #set($splitMonth = $splits.october)
363:                         #elseif ($month == 'November')
364:                           #set ($splitMonth = $splits.november)
365:                         #elseif ($month == 'December')
366:                           #set($splitMonth = $splits.december)
367:                         #end
368: 
369:                         #split($statPosBriefs, $month, $splitMonth, $rowSpan, $rowSpanLabel)
370: 
371:                         #set ($rowSpan = "") 
372: 
373:                     #end ## foreach
374:                 </tbody>
375:             #end
376:         </table>
377:     </div> ## table-responsive
378: </div> ## stats-box
379: #end
380: 
381: #end ## macro splitsData
382: 
383: #macro (printRecentGames)
384: #if ($hasEvents)
385:     <div class="table-responsive">
386:         <table class="table table-hover table-sm">
387:             <thead class="thead-dark">
388:                 <tr><th colspan="3" scope="col">Recent Games</th></tr>
389:             </thead>
390:             <tbody>
391:                 #set ($eventEnd = -1)
392:                 #foreach ($event in $events)
393:                   #if ($event.event.result.resolved)
394:                     #set ($eventEnd = $velocityCount)
395:                   #end
396:                 #end
397: 
398:                 #set ($eventStart = $eventEnd - 5)
399:                 #if ($eventStart < 0) #set ($eventStart = 0) #end
400: 
401:                 #foreach ($event in $events)
402:                     #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
403:                         <tr>
404:                             <td scope="row">$formatter.formatDate($event.event.date, "MMM d")</td>
405:                             <td>
406:                                 #if ($event.event.neutralSite.length() > 0) vs.
407:                                 #elseif (!$event.event.home) at
408:                                 #else ## nothing for a home game
409:                                 #end
410:                                 $event.event.opponent.name
411:                             </td>
412:                             <td>
413:                                 #if ($event.event.statusCode >= 0)
414:                                     #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
415:                                         <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
416:                                     #else
417:                                         ${event.event.APResult}
418:                                     #end
419:                                 #end
420:                             </td>
421:                         </tr>
422:                     #end ## if
423:                 #end
424:             </tbody>
425:         </table>
426:     </div>
427: #end
428: #end ## macro printRecentGames
429: 
430: #macro (printCategories $briefCategoryLabels $v $ariaLabel)
431:     <div class="$classTabPaneContent has-child-tabs">
432:         <div class="nav-tabs-wrapper position-relative overflow-hidden" data-module="jscroll" data-momentum="false">
433:             <div class="jscroll-inner">
434:                 <ul class="$classBioTabChildren" id="bio-tabs-$v" role="tablist">
435:                     #foreach($briefCat in $briefCategoryLabels.entrySet())
436:                         #set ($briefCatLabel = $briefCat.value)
437:                         #set ($briefCatKey = $briefCat.key)
438:                         #if ($locale == "en_gb" && $briefCatLabel == "Defense")
439:                             #set ($briefCatLabel = "Defence")
440:                         #end
441:                         <li class="nav-item">
442:                             <a data-toggle="tab" id="${v}-tab-pos-${briefCatKey}" class="nav-link#if ($activePos == $briefCatKey) active#end" data-target="#${v}-tab-pos-${briefCatKey}-content" href="${page.url}?view=${v}&pos=${briefCatKey}" aria-label="${ariaLabel}: ${briefCatLabel}">${briefCatLabel}</a>
443:                         </li>
444:                     #end
445:                 </ul>
446:             </div>
447:         </div>
448:         <div class="tab-content" id="${v}-tab-content">
449:             #foreach ($briefCat in $briefCategoryLabels.entrySet())
450:                 #set ($briefCatLabel = $briefCat.value)
451:                 #set ($briefCatKey = $briefCat.key)
452:                 #set ($class = "tab-panel")
453:                 #if ($briefCat.key == $activePos)
454:                    #set ($class = "tab-panel active show")
455:                 #end
456:                 <div class="tab-pane fade ${class}" id="${v}-tab-pos-${briefCatKey}-content" role="tabpanel" aria-labelledby="${v}-tab-pos-${briefCatKey}">
457:                     <div class="stats-wrap $classTabPaneContent">
458:                         <h4 class="bio-tabbed-content-heading">$ariaLabel - <small class="text-muted"> $briefCatLabel</small></h4>
459:                         #if ($v == "splits")
460:                             #splitsData($briefCat.key)
461:                         #elseif ($v == "career")
462:                             #careerData($briefCat.key)
463:                         #end
464:                     </div>
465:                 </div>
466:             #end
467:         </div>
468:     </div>
469: #end ## macro printCategories
470: 
471: #macro (printHeadshot)
472:         #if ($enhancedLayout)
473:             #set ($classPlayerPhoto = "img-fluid img-thumbnail")
474:         #else
475:             #set ($classPlayerPhoto = "img-fluid")
476:         #end
477:     
478:         #if ($headshot.url)
479:                 #set ($src = $headshot.url)
480:         #elseif ($website.exists("/images/setup/default-headshot.png"))
481:                 #set ($src = "/images/setup/default-headshot.png")
482:         #elseif ($website.exists("/images/setup/headshot_default.jpg"))
483:                 #set ($src = "/images/setup/headshot_default.jpg")
484:         #else
485:                 #set ($src = "/info/images/default-headshot.png")
486:         #end
487:         
488:         #if ($src.trim().length() > 0)
489:             <img src="$src?max_width=510&max_height=600" class="$classPlayerPhoto" alt="$fullName" />
490:         #end
491: #end ## macro printHeadshot
492: 
493: #macro (printBioInfo)
494: #if ($enhancedLayout)
495:     #set ($classListItems = "col-md-6 px-2")
496:     #set ($definitionListItems = "d-flex border-bottom m-0 p-2")
497: #else
498:     #set ($classListItems = "col-md-12 px-2")
499:     #set ($definitionListItems = "d-flex flex-column border-bottom m-0 p-2")
500: #end
501: 
502: #if ($enhancedLayout)
503:     <div class="player-heading h3 bg-primary d-flex align-content-stretch text-white position-relative z-index-1">
504:       #if ($!attributes.get("number").length() > 0)<span class="number bg-secondary inline-block text-white p-3">$!attributes.get("number")</span>#end
505:       <span class="name inline-block p-3">$fullName</span>
506:     </div>
507: #end
508: 
509: <div class="roster-player-fields">
510:     <ul class="d-flex flex-row flex-wrap justify-content-between list-unstyled">
511:         #foreach ($i in [1..10])
512:             #set ($stickyKey = "bio_custom${i}_sticky")
513:             #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
514:                 <li class="$classListItems bio-field-custom-sticky">
515:                     <dl class="${definitionListItems}">
516:                         <dt class="label p-0 mr-2">$options.get($stickyKey): </dt>
517:                         <dd class="value p-0 m-0">$!attributes.get("custom${i}")</dd>
518:                     </dl>
519:                 </li>
520:             #end
521:         #end
522: 
523:         #foreach ($field in $fields)
524:             #if (!$field.key.startsWith("custom"))
525:                 #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
526:                     #if ($field.key == "phone1" || $field.key == "phone2")
527:                         <li class="$classListItems bio-field-standard">
528:                             <dl class="${definitionListItems}">
529:                                 <dt class="label p-0 mr-2">Phone: </dt>
530:                                 <dd class="value p-0 m-0">$!attributes.get($field.key)</dd>
531:                             </dl>
532:                         </li>
533:                     #elseif ($field.key == "email_address")
534:                         <li class="$classListItems bio-field-standard">
535:                             <dl class="${definitionListItems}">
536:                                 #set ($emailAdd = $attributes.get($field.key))
537:                                 <dt class="label p-0 mr-2">Email: </dt>
538:                                 <dd class="value p-0 m-0 text-truncate"><a href="mailto:${emailAdd}">$emailAdd</a></dd>
539:                             </dl>
540:                         </li>
541:                     #elseif ($field.key == "weight_class")
542:                         <li class="$classListItems bio-field-standard">
543:                             <dl class="${definitionListItems}">
544:                                 <dt class="label p-0 mr-2">Class: </dt>
545:                                 <dd class="value p-0 m-0">$!attributes.get($field.key)</dd>
546:                             </dl>
547:                         </li>
548:                     #elseif ($field.key != "position_abbr")
549:                         <li class="$classListItems bio-field-standard">
550:                             <dl class="${definitionListItems}">
551:                                 <dt class="label p-0 mr-2">$field.value: </dt>
552:                                 <dd class="value p-0 m-0">$!attributes.get($field.key)</dd>
553:                             </dl>
554:                         </li>
555:                     #end
556:                 #end
557:             #end
558:         #end
559: 
560:         #foreach ($i in [1..10])
561:           #set ($customKey = "bio_custom${i}")
562:           #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
563:             <li class="$classListItems bio-field-custom">
564:                 <dl class="${definitionListItems}">
565:                     <dt class="label p-0 mr-2">$options.get($customKey): </dt>
566:                     <dd class="value p-0 m-0">$!attributes.get("custom${i}")</dd>
567:                 </dl>
568:             </li>
569:           #end
570:         #end
571:     </ul>
572: </div>
573: #end ## macro printBioInfo
574: 
575: #macro (printActionShots)
576: #if ($showActionShots)
577:     ## FILTERS OUT THE NUMBER OF ACTION PHOTOS 
578:     #set ($totalPhotoAvaiable = $playerPhotos.size())
579:     #set ($playerPhotosFiltered = $playerPhotos)
580:     #if ($actionShotsLimit < $totalPhotoAvaiable)
581:         #set ($playerPhotosFiltered = $playerPhotos.subList(0, $actionShotsLimit))
582:     #end
583:     #set ($playerPhotosFiltered = $tool.sorter.sort($playerPhotosFiltered, "lastUpdated:desc"))
584:     <div class="action-shots clearfix mb-md-n5 d-none d-sm-none d-md-block">
585:         <div id="action-shots-carousel" class="carousel slide carousel-fade" data-interval="12000" data-ride="carousel">
586:             <ol class="carousel-indicators pb-sm-3 mb-sm-5">
587:                 #foreach($photo in $playerPhotosFiltered)
588:                     <li data-target="#action-shots-carousel" data-slide-to="$foreach.index" class="#if ($foreach.index == 0)active#end"></li>
589:                 #end
590:             </ol>
591:             <div class="carousel-inner">
592:                 #foreach($photo in $playerPhotosFiltered)                    
593:                     #set ($imgAlt = "Large featured action photo of $fullName - Image $foreach.count")
594:                     #if ($photo.altText.length() > 0)
595:                         #set ($imgAlt = $photo.altText)
596:                     #elseif( $photo.title.length() > 0 )
597:                         #set ($imgAlt = $photo.title)
598:                     #end
599:                     <div class="carousel-item#if ($foreach.index == 0) active#end">
600:                         <img src="${photo.url}?max_width=1200" alt="$imgAlt" class="d-block w-100" data-lastupdated="$photo.lastUpdated" />
601:                     </div>
602:                 #end
603:             </div>
604:         </div>
605:     </div>
606: #end
607: #end ## macro printActionShots
608: 
609: #macro (printHighlights)
610: #if ($highlights && $showHighlights)
611:     <div class="roster-bio-highlights mt-3 bg-white">
612:         <ul class="d-flex flex-row flex-wrap justify-content-between list-unstyled m-0">
613:             #foreach ($highlight in $highlights.keySet())
614:                 #set ($value = "-")
615:                 #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
616:                 <li class="flex-fill px-2 text-center border border-white bg-primary text-white">
617:                     <dl class="stat d-block m-0 p-2">
618:                         <dt class="d-block label p-0 m-0 text-uppercase">$!highlights.get($highlight)</dt>
619:                         <dd class="d-block value p-0 m-0">$value</dd>
620:                     </dl>
621:                 </li>
622:             #end
623:         </ul>
624:     </div>
625: #end
626: #end ## macro printHighlights
627: 
628: #macro (printRoster)
629: #if ($enhancedLayout)
630:     $website.includeAgain("${page.url}?tmpl=roster-switcher-template&id=roster-list")
631: #else
632:     #set ($id = "roster-switcher")
633:     #if ($request.getParameter("id").length() > 0)
634:         #set ($id = $request.getParameter("id"))
635:     #end
636: 
637:     #if ($page.contentType == "loki/bio")
638:         #set ($headlinesFeaturedSize = 0)
639:         #foreach ($featuredPage in $page.headlinesFeatured)
640:             #if ($featuredPage.contentType == "loki/headlines")
641:                 #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
642:             #end
643:         #end
644:         #if ($headlinesFeaturedSize > 0)
645:             <div id="$id" class="float-sm-right roster-switcher-template">
646:                 <div class="input-group mb-3">
647:                     <div class="input-group-prepend">
648:                         <label class="input-group-text" for="$id-options">Related Bios</label>
649:                     </div>
650:                     <select class="custom-select" id="$id-options" onchange="location=this.value;">
651:                         #foreach ($featuredPage in $page.headlinesFeatured)
652:                             #if ($featuredPage.contentType == "loki/headlines")
653:                                 $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template&current_url=${page.url}")
654:                             #end
655:                         #end
656:                     </select>
657:                 </div>
658:             </div>
659:         #end
660:     #elseif ($page.contentType == "loki/bio-network")
661:         #set ($relatedPlayers = $page.sectionPage.children)
662:         #set ($teamNames = {})
663:         #foreach ($relatedPlayer in $relatedPlayers)
664:             #if ($relatedPlayer.contentType == "loki/bio-network")
665:                 #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
666:                 #set ($teamName = $relatedPlayerObj.get("team"))
667:                 #if ($teamName.length() > 0)
668:                     #if (!$teamNames.containsValue($teamName))
669:                         $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
670:                     #end
671:                 #end
672:             #end
673:         #end
674:         <div id="$id" class="float-sm-right roster-switcher-template">
675:             <div class="input-group mb-3">
676:                 <div class="input-group-prepend">
677:                     <label class="input-group-text" for="$id-options">Related Bios</label>
678:                 </div>
679:                 <select class="custom-select" id="$id-options" onchange="location=this.value;">
680:                     #foreach ($i in [1..$teamNames.size()])
681:                         #if ($teamNames.size() > 1)
682:                             <optgroup label="$teamNames.get($i)">
683:                         #end
684: 
685:                         #foreach ($relatedPlayer in $relatedPlayers)
686:                             #if ($relatedPlayer.contentType == "loki/bio-network")
687:                                 #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
688:                                 #set ($teamName = $relatedPlayerObj.get("team"))
689:                                 #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
690:                                     #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
691:                                     #set ($playerLastName = $relatedPlayerObj.get("last_name"))
692:                                     <option value="$relatedPlayer.url" #if ($page.url == $relatedPlayer.url)selected#end>${playerFirstName} ${playerLastName}</option>
693:                                 #end
694:                             #end
695:                         #end
696: 
697:                         #if ($teamNames.size() > 1)
698:                             </optgroup>
699:                         #end
700:                     #end
701:                 </select>
702:             </div>
703:         </div>
704:     #end
705: #end ## enhancedLayout check
706: #end ## macro printRoster
707: 
708: ################################################## END MACROS  #############################################################
709: 
710: #if ($attributes.get("full_name").length() > 0)
711:   #set ($fullName = $attributes.get("full_name"))
712: #else
713:   #set ($firstName = $!attributes.get("first_name"))
714:   #set ($lastName = $!attributes.get("last_name"))
715:   #set ($fullName = "${firstName} ${lastName}")
716: #end
717: 
718: #set ($pageTitle = "")
719: #if($request.getAttribute("pageTitle").length() > 0)
720:         #set ($pageTitle = $request.getAttribute("pageTitle"))
721: #end
722: #if ($page.title.length() > 0)
723:         #set ($pageTitle = $!page.title)
724: #end
725: $!request.setAttribute("pageTitle", "${pageTitle}")
726: 
727: #set ($actionShots = false)
728: #if ($enhancedLayout && $playerPhotos.size() > 0)
729:   #set ($actionShots = true)
730: #end
731: 
732: #if ($enhancedLayout)
733:     #set ($classRoot = "bio-enhanced")
734:     #if ($actionShots && $showActionShots)
735:           #set ($classRoot = "${classRoot} action")
736:     #else
737:           #set ($classRoot = "${classRoot} plain")
738:     #end
739:     #set ($classCard = "mb-5 bg-light p-3 col-sm-12 pt-md-0")
740:     #set ($classBody = "col-sm-12")
741:     #set ($classBioTabParents = "nav nav-pills d-flex flex-row text-nowrap justify-content-center py-3 border-top border-bottom")
742:     #set ($classBioTabChildren = "nav nav-pills d-flex flex-row text-nowrap justify-content-center py-3 border-bottom")
743:     #set ($classTabPaneContent = "tab-pane-contents py-3")
744: #else
745:     #set ($classRoot = "bio-wrap")
746:     #set ($classCard = "mb-5 p-3 col-lg-4 col-xl-3 bg-light")
747:     #set ($classBody = "col-lg-8 col-xl-9")
748:     #set ($classBioTabParents = "nav nav-tabs d-flex flex-column flex-sm-row text-center justify-content-start")
749:     #set ($classBioTabChildren = "nav nav-tabs d-flex flex-column flex-sm-row text-center justify-content-start")
750:     #set ($classTabPaneContent = "tab-pane-contents p-3")
751:     
752: #end
753: 
754: ## FULL ROSTER
755: <div class="${classRoot} #if ($highlights) bio-wrap-has-highlights #end clearfix">
756: 
757: ## RELATED BIOS
758: #if ($showRoster)
759:   <div class="related-bios clearfix">#printRoster</div>
760: #end
761: 
762: #if ($actionShots)
763:   #printActionShots
764: #end
765: #if ($enhancedLayout)
766: #else
767:     <div class="player-heading h3 d-flex align-content-stretch position-relative z-index-1 mb-3 bg-primary text-white border">
768:         #if ($!attributes.get("number").length() > 0)<span class="number bg-secondary inline-block text-white p-3">$!attributes.get("number")</span>#end
769:         <span class="name inline-block p-3">$fullName</span>
770:     </div>
771: #end
772: 
773: <div class="container">
774:     <div class="row">
775:         <div class="bio-card ${classCard}">
776:             <div class="player-about clearfix">
777:                 #if ($enhancedLayout)
778:                     <div class="row no-gutters">
779:                         <div class="col-md-4 col-lg-3">
780:                             <div class="player-headshot text-center position-relative z-index-1 mt-md-n5">#printHeadshot</div>
781:                         </div>
782:                         <div class="col-md-8 col-lg-9">
783:                             <div class="player-info">#printBioInfo</div>
784:                         </div>
785:                     </div>
786:                 #else
787:                     <div class="row">
788:                         <div class="col-md-4 col-lg-12">
789:                             <div class="player-headshot text-center position-relative z-index-1 mb-3">#printHeadshot</div>
790:                         </div>
791:                         <div class="col-md-8 col-lg-12">
792:                             <div class="player-info mb-3">#printBioInfo</div>
793:                         </div>
794:                     </div>
795:                 #end
796:             </div>
797:             #printHighlights
798:         </div> ## bio-card
799: 
800:         #if ($view.length() > 0)
801:             <div class="bio-body ${classBody}">
802:                 <div class="tab-container">
803:                 #if ($statsURL.length() > 0 || $hasHTMLStats || $releases.size() > 0|| $playerPhotos.size() > 0 || $playerVideos.size() > 0)
804:                     <div class="nav-tabs-wrapper position-relative overflow-hidden" data-module="jscroll" data-momentum="false">
805:                         <div class="jscroll-inner">
806:                             <ul class="$classBioTabParents" id="bio-tabs-parents" role="tablist">
807:                                 #if ($hasSynopsis || $hasBioBrief)
808:                                     <li class="nav-item">
809:                                         <a data-toggle="tab" id="bio-tab" class="nav-link #if ($view == "bio") active#end" data-target="#bio" href="${page.url}?view=bio">Bio</a>
810:                                     </li>
811:                                 #end
812: 
813:                                 #if ($statsURL.length() > 0)
814:                                     <li class="nav-item">
815:                                         <a data-toggle="tab" id="profile-tab" class="nav-link#if ($view == "profile") active#end" data-target="#profile" href="${page.url}?view=profile">Player Profile</a>
816:                                     </li>
817:                                     <li class="nav-item">
818:                                         <a data-toggle="tab" id="gamelog-tab" class="nav-link#if ($view == "gamelog") active#end" data-target="#gamelog" href="${page.url}?view=gamelog">Game Log</a>
819:                                     </li>
820:                                     #if ($showCareer)
821:                                         <li class="nav-item">
822:                                             <a data-toggle="tab" id="career-tab" class="nav-link#if ($view == "career") active#end" data-target="#career" href="${page.url}?view=career">Career Stats</a>
823:                                         </li>
824:                                     #end
825:                                     <li class="nav-item">
826:                                         <a data-toggle="tab" id="splits-tab" class="nav-link#if ($view == "splits") active#end" data-target="#splits" href="${page.url}?view=splits">Split Stats</a>
827:                                     </li>
828:                                 #end
829: 
830:                                 #if ($hasHTMLStats)
831:                                     <li class="nav-item">
832:                                         <a data-toggle="tab" id="htmlstats-tab" class="nav-link#if ($view == "htmlstats") active#end" data-target="#htmlstats" href="${page.url}?view=htmlstats">HTML Stats</a>
833:                                     </li>
834:                                 #end
835: 
836:                                 #if ($releases.size() > 0)
837:                                     <li class="nav-item">
838:                                         <a data-toggle="tab" id="news-tab" class="nav-link#if ($view == "news") active#end" data-target="#news" href="${page.url}?view=news">News</a>
839:                                     </li>
840:                                 #end
841: 
842:                                 #if ($playerPhotos.size() > 0)
843:                                     <li class="nav-item">
844:                                         <a data-toggle="tab" id="photos-tab" class="nav-link#if ($view == "photos") active#end" data-target="#photos" href="${page.url}?view=photos">Photos</a>
845:                                     </li>
846:                                 #end
847: 
848:                                 #if ($playerVideos.size() > 0)
849:                                     <li class="nav-item">
850:                                         <a data-toggle="tab" id="videos-tab" class="nav-link#if ($view == "videos") active#end" data-target="#videos" href="${page.url}?view=videos">Videos</a>
851:                                     </li>
852:                                 #end
853:                             </ul>   
854:                         </div>
855:                     </div>
856:                 #end
857:                     <div class="tab-content" id="roster-tab-content">
858:                         ## BIO
859:                         #if ($hasSynopsis || $hasBioBrief)
860:                             #set ($class = "tab-panel")
861:                             #if ($view == "bio")
862:                                #set ($class = "tab-panel active show")
863:                             #end
864: 
865:                             <div class="tab-pane fade ${class}" id="bio" role="tabpanel" aria-labelledby="bio-tab">
866:                                 <div class="$classTabPaneContent synopsis">
867:                                     <h4 class="bio-tabbed-content-heading">Bio</h4>
868:                                     #if ($hasSynopsis)
869:                                       $synopsis
870:                                     #elseif ($hasBioBrief)
871:                                       $website.include("$bioBriefURL")
872:                                     #end
873:                                 </div>
874:                             </div> ## tab-panel
875:                         #end
876: 
877:                         ## STATS
878:                         #if ($statsURL.length() > 0)
879: 
880:                             ## PROFILE
881:                             #set ($class = "tab-panel")
882:                             #if ($view == "profile")
883:                                #set ($class = "tab-panel active show")
884:                             #end
885: 
886:                             <div class="tab-pane fade ${class}" id="profile" role="tabpanel" aria-labelledby="profile-tab">
887:                                 <div class="$classTabPaneContent stats-wrap">
888:                                     <h4 class="bio-tabbed-content-heading">Player Profile</h4>
889:                                     ## LAST SIX GAMES
890:                                     <div class="row">
891:                                         <div class="stats-box col-12">
892:                                             #printRecentGames()
893:                                         </div>
894: 
895:                                         ## RANKING
896:                                         <div class="stats-box col-12">
897:                                             #if ($statPos.length() > 0)
898:                                                 $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
899:                                             #end
900:                                         </div>
901:                                     </div>
902:                                 </div> ## stats-wrap
903:                             </div> ## tab-content
904: 
905:                             ## GAMELOG
906:                             #set ($class = "tab-panel")
907:                             #if ($view == "gamelog")
908:                                #set ($class = "tab-panel active show")
909:                             #end
910: 
911:                             #set ($activePos = $statPos)
912:                             #if ($view == "gamelog" && $paramPos.length() > 0)
913:                                 #if ($positions.get($paramPos).length() > 0)
914:                                     #set ($activePos = $positions.get($paramPos))
915:                                 #end
916:                             #end
917: 
918:                             <div class="tab-pane fade ${class}" id="gamelog" role="tabpanel" aria-labelledby="gamelog-tab">
919:                                 #if ($gamelogsCategoriesLabels)
920:                                     <div class="$classTabPaneContent has-child-tabs">
921:                                         <div class="nav-tabs-wrapper position-relative overflow-hidden" data-module="jscroll" data-momentum="false">
922:                                             <div class="jscroll-inner">
923:                                                 <ul class="$classBioTabChildren" id="bio-tabs-gamelog" role="tablist">
924:                                                     #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
925:                                                         #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
926:                                                         #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
927:                                                             #set($gamelogsCatLabelVal = "Defence")
928:                                                         #end
929:                                                         <li class="nav-item">
930:                                                             <a data-toggle="tab" id="gamelog-tab-pos-${gamelogsCatLabel.key}" class="nav-link#if ($activePos == $gamelogsCatLabel.key) active#end" data-target="#gamelog-tab-pos-${gamelogsCatLabel.key}-content" href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}" aria-label="Game Log: ${gamelogsCatLabelVal}">$gamelogsCatLabelVal</a>
931:                                                         </li>
932:                                                     #end
933:                                                 </ul>
934:                                             </div>
935:                                         </div>
936:                                         <div class="tab-content" id="gamelog-tab-content">
937:                                             #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
938:                                                 #set ($class = "tab-panel")
939:                                                 #if ($gamelogsCatLabel.key == $activePos)
940:                                                    #set ($class = "tab-panel active show")
941:                                                 #end
942:                                                 <div class="tab-pane fade ${class}" id="gamelog-tab-pos-${gamelogsCatLabel.key}-content" role="tabpanel" aria-labelledby="gamelog-tab-pos-${gamelogsCatLabel.key}">
943:                                                     <div class="stats-wrap $classTabPaneContent">
944:                                                          <h4 class="bio-tabbed-content-heading">Game Log - <small class="text-muted"> $gamelogsCatLabel.value</small></h4></h4>
945:                                                         #gamelogData($gamelogsCatLabel.key)
946:                                                     </div>
947:                                                 </div>
948:                                             #end
949:                                         </div>
950:                                     </div>
951:                                 #else
952:                                     <div class="stats-wrap $classTabPaneContent">#gamelogData($pos)</div>
953:                                 #end
954: 
955:                             </div> ## tab-panel
956: 
957:                             ## CAREER
958:                             #if ($showCareer)
959: 
960:                                 #set ($activePos = $statPos)
961:                                 #if ($view == "career" && $paramPos.length() > 0)
962:                                     #if ($positions.get($paramPos).length() > 0)
963:                                         #set ($activePos = $positions.get($paramPos))
964:                                     #end
965:                                 #end
966: 
967:                                 #set ($class = "tab-panel")
968:                                 #if ($view == "career")
969:                                    #set ($class = "tab-panel active show")
970:                                 #end
971: 
972:                                 <div class="tab-pane fade ${class}" id="career" role="tabpanel" aria-labelledby="career-tab">
973:                                     #if ($briefsCategoriesLabels)
974:                                         #printCategories($briefsCategoriesLabels "career" "Career Stats")
975:                                     #else
976:                                         <div class="stats-wrap $classTabPaneContent">#careerData($activePos)</div>
977:                                     #end
978:                                 </div>
979:                             #end
980: 
981:                             ## SPLITS
982:                             #set ($class = "tab-panel clearfix")
983:                             #if ($view == "splits")
984:                                #set ($class = "tab-panel active show")
985:                             #end
986: 
987:                             #set ($activePos = $statPos)
988:                             #if ($view == "splits" && $paramPos.length() > 0)
989:                                 #if ($positions.get($paramPos).length() > 0)
990:                                     #set ($activePos = $positions.get($paramPos))
991:                                 #end
992:                             #end
993: 
994:                             <div class="tab-pane fade ${class}" id="splits" role="tabpanel" aria-labelledby="splits-tab">
995:                                 #if ($briefsCategoriesLabels)
996:                                     #printCategories($briefsCategoriesLabels "splits" "Splits Stats")
997:                                 #else
998:                                     <div class="stats-wrap $classTabPaneContent">#splitsData($pos)</div>
999:                                 #end
1000:                             </div>
1001:                         #end
1002: 
1003:                         ## HTML STATS
1004:                         #if ($hasHTMLStats)
1005:                             #set ($class = "tab-panel clearfix")
1006:                             #if ($view == "htmlstats")
1007:                                #set ($class = "tab-panel active show")
1008:                             #end
1009:                             <div class="tab-pane fade ${class}" id="htmlstats" role="tabpanel" aria-labelledby="htmlstats-tab">
1010:                                 <div class="$classTabPaneContent">
1011:                                     <h4 class="bio-tabbed-content-heading">Other Stats</h4>
1012:                                     <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
1013:                                 </div>
1014:                             </div>
1015:                         #end
1016: 
1017:                         ## NEWS
1018:                         #if ($releases.size() > 0)
1019:                             #set ($class = "tab-panel clearfix")
1020:                             #if ($view == "news")
1021:                                #set ($class = "tab-panel active show")
1022:                             #end
1023:                             <div class="tab-pane fade ${class}" id="news" role="tabpanel" aria-labelledby="news-tab">
1024:                                 <div class="$classTabPaneContent">
1025:                                     <h4 class="bio-tabbed-content-heading">News Mentions</h4>
1026:                                     #printGrid($releases, "article")
1027:                                 </div>
1028:                             </div>
1029:                         #end
1030: 
1031:                         ## PHOTOS
1032:                         #if ($playerPhotos.size() > 0)
1033:                             #set ($class = "tab-panel clearfix")
1034:                             #if ($view == "photos")
1035:                                 #set ($class = "tab-panel active clearfix")
1036:                             #end
1037:                             <div class="tab-pane fade ${class}" id="photos" role="tabpanel" aria-labelledby="photos-tab">
1038:                                 <div class="$classTabPaneContent">
1039:                                     <h4 class="bio-tabbed-content-heading">Photos</h4>
1040:                                     $website.includeAgain("${page.url}?tmpl=bio-photos-template")
1041:                                 </div>
1042:                             </div>
1043:                         #end
1044: 
1045:                         ## VIDEOS
1046:                         #if ($playerVideos.size() > 0)
1047:                             #set ($class = "tab-panel clearfix")
1048:                             #if ($view == "videos")
1049:                                 #set ($class = "tab-panel active clearfix")
1050:                             #end
1051:                             <div class="tab-pane fade ${class}" id="videos" role="tabpanel" aria-labelledby="videos-tab">
1052:                                 <div class="$classTabPaneContent">
1053:                                     <h4 class="bio-tabbed-content-heading">Videos</h4>
1054:                                     #printGrid($playerVideos, "video")
1055:                                 </div>
1056:                             </div>
1057:                         #end
1058: 
1059:                     </div> ## tab-panels
1060:                 </div> ## tab-container
1061:             </div> ## body
1062:         #end
1063:     </div>
1064: </div>
1065: 
1066: $wiki
1067: </div> ## ends bio-wrap
1068: 
1069: ## GLOBAL ADS SERVER
1070: #if ($website.ads.isAdvertisingEnabled('BIOS'))
1071:         $website.includeAgain("global-adserver-slots?adSlot=bios")
1072: #end