-
- Height:
- 5-8
-
- Weight:
- 173
-
- Year:
- Jr.
-
- Hometown:
- Macomb, Mich.
-
- High School:
- Warren De La Salle
-
- Position:
- WR
-
- gp
- 9
-
- yds
- 286
-
- yds/g
- 31.8
-
- td
- 1
Season Stats
Northwood Notes
- Named to the GLIAC All-Academic team in 2016
- Earned All-GLIAC Academic Excellence team in 2017
- Ranked second on the team in receiving yards and thrid in receptions in 2017
High School/Personal:
- Member of state championship team at Warren De La Salle High School
- Named the Tom Bonino award winner
- Earned the Dedication/Leadership award
- Graduated Summa Cum Laude
- Honor roll student
- Named to the principals list
- Majoring in Supply Chain Management
- Younger brother of Ryan Spicuzzi, who was a four-year letterwinner for the Timberwolves (2011-14)
- Son of Jeff & Donna Spicuzzi
- Born 9/12/97
|
 |
Recent Games |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
Oct 6 |
at
Northern Mich.
|
W, 27-24
|
Oct 13 |
Davenport
|
W, 30-22
|
Oct 20 |
at
Wayne St. (Mich.)
|
L, 55-21
|
Nov 3 |
Saginaw Valley
|
L, 31-10
|
Nov 10 |
at
Michigan Tech
|
W, 26-23
|
Statistics category |
Overall |
Conf |
Receptions |
16
|
11
|
Yards |
286
|
241
|
Yards per game |
31.8
|
34.4
|
Yards per catch |
17.9
|
21.9
|
Touchdowns |
1
|
1
|
Date |
Opponent |
Score |
comp |
att |
pct |
yds |
y/a |
td |
int |
sac |
yds |
Sep 1 |
at Tiffin
|
L, 40-27
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Sep 8 |
Missouri S&T
|
L, 27-16
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Sep 15 |
Ferris St.
|
L, 53-10
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Sep 22 |
at Ashland
|
L, 35-10
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Oct 13 |
Davenport
|
W, 30-22
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
Date |
Opponent |
Score |
rush |
yds |
y/a |
lng |
td |
fum |
lost |
Sep 1 |
at Tiffin
|
L, 40-27
|
- |
- |
- |
- |
- |
- |
- |
Sep 8 |
Missouri S&T
|
L, 27-16
|
- |
- |
- |
- |
- |
- |
- |
Sep 15 |
Ferris St.
|
L, 53-10
|
- |
- |
- |
- |
- |
- |
- |
Sep 22 |
at Ashland
|
L, 35-10
|
- |
- |
- |
- |
- |
- |
- |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
- |
- |
- |
- |
- |
- |
- |
Oct 13 |
Davenport
|
W, 30-22
|
- |
- |
- |
- |
- |
- |
- |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
- |
- |
- |
- |
- |
- |
- |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
- |
- |
- |
- |
- |
- |
- |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
- |
- |
- |
- |
- |
- |
- |
Date |
Opponent |
Score |
rec |
yds |
y/r |
lng |
td |
fum |
lost |
Sep 1 |
at Tiffin
|
L, 40-27
|
5 |
45 |
9.0 |
18 |
0 |
- |
- |
Sep 8 |
Missouri S&T
|
L, 27-16
|
- |
- |
- |
- |
- |
- |
- |
Sep 15 |
Ferris St.
|
L, 53-10
|
1 |
5 |
5.0 |
5 |
0 |
- |
- |
Sep 22 |
at Ashland
|
L, 35-10
|
2 |
38 |
19.0 |
19 |
0 |
- |
- |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
1 |
75 |
75.0 |
75 |
0 |
- |
- |
Oct 13 |
Davenport
|
W, 30-22
|
1 |
33 |
33.0 |
33 |
0 |
- |
- |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
2 |
32 |
16.0 |
25 |
1 |
- |
- |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
1 |
4 |
4.0 |
4 |
0 |
- |
- |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
3 |
54 |
18.0 |
25 |
0 |
- |
- |
Date |
Opponent |
Score |
fgm |
fga |
lng |
xpm |
xpa |
pts |
Sep 1 |
at Tiffin
|
L, 40-27
|
- |
- |
- |
- |
- |
0 |
Sep 8 |
Missouri S&T
|
L, 27-16
|
- |
- |
- |
- |
- |
0 |
Sep 15 |
Ferris St.
|
L, 53-10
|
- |
- |
- |
- |
- |
0 |
Sep 22 |
at Ashland
|
L, 35-10
|
- |
- |
- |
- |
- |
0 |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
- |
- |
- |
- |
- |
0 |
Oct 13 |
Davenport
|
W, 30-22
|
- |
- |
- |
- |
- |
0 |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
- |
- |
- |
- |
- |
0 |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
- |
- |
- |
- |
- |
0 |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
- |
- |
- |
- |
- |
0 |
Date |
Opponent |
Score |
punt |
yds |
avg |
long |
in20 |
fc |
tb |
blk |
Sep 1 |
at Tiffin
|
L, 40-27
|
- |
- |
- |
- |
- |
- |
- |
- |
Sep 8 |
Missouri S&T
|
L, 27-16
|
- |
- |
- |
- |
- |
- |
- |
- |
Sep 15 |
Ferris St.
|
L, 53-10
|
- |
- |
- |
- |
- |
- |
- |
- |
Sep 22 |
at Ashland
|
L, 35-10
|
- |
- |
- |
- |
- |
- |
- |
- |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
- |
- |
- |
- |
- |
- |
- |
- |
Oct 13 |
Davenport
|
W, 30-22
|
- |
- |
- |
- |
- |
- |
- |
- |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
- |
- |
- |
- |
- |
- |
- |
- |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
- |
- |
- |
- |
- |
- |
- |
- |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
- |
- |
- |
- |
- |
- |
- |
- |
Date |
Opponent |
Score |
kr |
yds |
avg |
lng |
td |
pr |
yds |
avg |
lng |
td |
Sep 1 |
at Tiffin
|
L, 40-27
|
3 |
111 |
37.0 |
63 |
0 |
- |
- |
- |
- |
- |
Sep 8 |
Missouri S&T
|
L, 27-16
|
3 |
65 |
21.7 |
28 |
0 |
- |
- |
- |
- |
- |
Sep 15 |
Ferris St.
|
L, 53-10
|
5 |
112 |
22.4 |
28 |
0 |
- |
- |
- |
- |
- |
Sep 22 |
at Ashland
|
L, 35-10
|
2 |
38 |
19.0 |
25 |
0 |
- |
- |
- |
- |
- |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
2 |
71 |
35.5 |
62 |
0 |
- |
- |
- |
- |
- |
Oct 13 |
Davenport
|
W, 30-22
|
1 |
23 |
23.0 |
23 |
0 |
- |
- |
- |
- |
- |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
3 |
61 |
20.3 |
31 |
0 |
- |
- |
- |
- |
- |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
3 |
65 |
21.7 |
24 |
0 |
- |
- |
- |
- |
- |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
2 |
60 |
30.0 |
46 |
0 |
- |
- |
- |
- |
- |
Date |
Opponent |
Score |
gp |
rush |
rcv |
pr |
kr |
yds |
Sep 1 |
at Tiffin
|
L, 40-27
|
1 |
- |
45 |
- |
111 |
156 |
Sep 8 |
Missouri S&T
|
L, 27-16
|
1 |
- |
- |
- |
65 |
65 |
Sep 15 |
Ferris St.
|
L, 53-10
|
1 |
- |
5 |
- |
112 |
117 |
Sep 22 |
at Ashland
|
L, 35-10
|
1 |
- |
38 |
- |
38 |
76 |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
1 |
- |
75 |
- |
71 |
146 |
Oct 13 |
Davenport
|
W, 30-22
|
1 |
- |
33 |
- |
23 |
56 |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
1 |
- |
32 |
- |
61 |
93 |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
1 |
- |
4 |
- |
65 |
69 |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
1 |
- |
54 |
- |
60 |
114 |
Date |
Opponent |
Score |
pts |
rush |
rec |
kr |
pr |
int |
fum |
xpm |
fgm |
saf |
misc |
2pt |
Sep 1 |
at Tiffin
|
L, 40-27
|
0 |
- |
0 |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Sep 8 |
Missouri S&T
|
L, 27-16
|
0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Sep 15 |
Ferris St.
|
L, 53-10
|
0 |
- |
0 |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Sep 22 |
at Ashland
|
L, 35-10
|
0 |
- |
0 |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
0 |
- |
0 |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Oct 13 |
Davenport
|
W, 30-22
|
0 |
- |
0 |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
6 |
- |
1 |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
0 |
- |
0 |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
0 |
- |
0 |
0 |
- |
- |
- |
- |
- |
- |
0 |
- |
Date |
Opponent |
Score |
tack |
ast |
tot |
sack |
lost |
tfl |
yds |
ff |
fr |
td |
int |
yds |
td |
brup |
blk |
saf |
Sep 1 |
at Tiffin
|
L, 40-27
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Sep 8 |
Missouri S&T
|
L, 27-16
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Sep 15 |
Ferris St.
|
L, 53-10
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Sep 22 |
at Ashland
|
L, 35-10
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Sep 29 |
Grand Valley St.
|
L, 52-7
|
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Oct 6 |
at Northern Mich.
|
W, 27-24
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Oct 13 |
Davenport
|
W, 30-22
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Oct 20 |
at Wayne St. (Mich.)
|
L, 55-21
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Nov 3 |
Saginaw Valley
|
L, 31-10
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Nov 10 |
at Michigan Tech
|
W, 26-23
|
- |
- |
0.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Career Stats - Passing
|
gp |
comp |
att |
pct |
yds |
y/g |
y/a |
td |
int |
lg |
effic |
2015-16 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
2016-17 |
10 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
2017-18 |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
2018-19 |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
2019-20 |
11 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Total |
39 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Career Stats - Rushing
|
gp |
rush |
yds |
y/g |
avg |
td |
lg |
fum |
lost |
2015-16 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
2016-17 |
10 |
- |
- |
- |
- |
- |
- |
1 |
0 |
2017-18 |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
2018-19 |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
2019-20 |
11 |
- |
- |
- |
- |
- |
- |
- |
- |
Total |
39 |
- |
- |
- |
- |
- |
- |
1 |
0 |
Career Stats - Receiving
|
gp |
rec |
rec/g |
yds |
y/g |
avg |
td |
lg |
2015-16 |
- |
- |
- |
- |
- |
- |
- |
- |
2016-17 |
10 |
10 |
1.0 |
92 |
9.2 |
9.2 |
0 |
12 |
2017-18 |
9 |
12 |
1.3 |
218 |
24.2 |
18.2 |
2 |
40 |
2018-19 |
9 |
16 |
1.8 |
286 |
31.8 |
17.9 |
1 |
75 |
2019-20 |
11 |
16 |
1.5 |
226 |
20.5 |
14.1 |
2 |
33 |
Total |
39 |
54 |
1.4 |
822 |
21.1 |
15.2 |
5 |
75 |
Career Stats - Kicking
|
gp |
fgm |
fga |
pct |
lg |
xpm |
xpa |
pct |
pts |
2015-16 |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
2016-17 |
10 |
- |
- |
- |
- |
- |
- |
- |
0 |
2017-18 |
9 |
- |
- |
- |
- |
- |
- |
- |
0 |
2018-19 |
9 |
- |
- |
- |
- |
- |
- |
- |
0 |
2019-20 |
11 |
- |
- |
- |
- |
- |
- |
- |
0 |
Total |
39 |
- |
- |
- |
- |
- |
- |
- |
0 |
Career Stats - Punting
|
gp |
punt |
yds |
avg |
lg |
in20 |
fc |
tb |
blk |
2015-16 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
2016-17 |
10 |
- |
- |
- |
- |
- |
- |
- |
- |
2017-18 |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
2018-19 |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
2019-20 |
11 |
- |
- |
- |
- |
- |
- |
- |
- |
Total |
39 |
- |
- |
- |
- |
- |
- |
- |
- |
Career Stats - Returns
|
kr |
yds |
avg |
td |
lg |
pr |
yds |
avg |
td |
lg |
2015-16 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
2016-17 |
- |
- |
- |
- |
- |
1 |
0 |
0.0 |
0 |
0 |
2017-18 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
2018-19 |
24 |
606 |
25.3 |
0 |
63 |
- |
- |
- |
- |
- |
2019-20 |
27 |
641 |
23.7 |
0 |
72 |
- |
- |
- |
- |
- |
Total |
51 |
1247 |
24.5 |
0 |
72 |
1 |
0 |
0.0 |
0 |
0 |
Career Stats - All-Purpose
|
gp |
rush |
rcv |
pr |
kr |
yds |
ypg |
2015-16 |
- |
- |
- |
- |
- |
0 |
- |
2016-17 |
10 |
- |
92 |
0 |
- |
92 |
9.2 |
2017-18 |
9 |
- |
218 |
- |
- |
218 |
24.2 |
2018-19 |
9 |
- |
286 |
- |
606 |
892 |
99.1 |
2019-20 |
11 |
- |
226 |
- |
641 |
867 |
78.8 |
Total |
39 |
- |
822 |
0 |
1247 |
2069 |
53.1 |
Career Stats - Scoring
|
pts |
pts/g |
rush |
rec |
kr |
pr |
int |
fum |
xpm |
fgm |
2pt |
misc |
2015-16 |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
2016-17 |
0 |
0.0 |
- |
0 |
- |
0 |
- |
- |
- |
- |
- |
0 |
2017-18 |
12 |
1.3 |
- |
2 |
- |
- |
- |
- |
- |
- |
- |
0 |
2018-19 |
6 |
0.7 |
- |
1 |
0 |
- |
- |
- |
- |
- |
- |
0 |
2019-20 |
12 |
1.1 |
- |
2 |
0 |
- |
- |
- |
- |
- |
- |
0 |
Total |
30 |
0.8 |
- |
5 |
0 |
0 |
- |
- |
- |
- |
- |
0 |
Career Stats - Defense
|
gp |
tkl |
ast |
tot |
tkl/g |
sck |
yds |
tfl |
yds |
ff |
fr |
yds |
int |
yds |
brup |
blk |
2015-16 |
- |
- |
- |
0.0 |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
2016-17 |
10 |
3 |
0 |
3.0 |
.3 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
2017-18 |
9 |
1 |
0 |
1.0 |
.1 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
2018-19 |
9 |
- |
- |
0.0 |
.0 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
2019-20 |
11 |
1 |
0 |
1.0 |
.1 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
Total |
39 |
5 |
0 |
5.0 |
.1 |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
Splits Stats - Passing
|
|
gp |
comp |
att |
pct |
yds |
y/g |
y/a |
td |
int |
lg |
effic |
Event |
Total |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Conference |
7 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Exhibition |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Location |
Home |
4 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Away |
5 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Neutral |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Result |
Wins |
3 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Losses |
6 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Month |
September |
4 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
October |
3 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
November |
2 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0.0 |
Splits Stats - Rushing
|
|
gp |
rush |
yds |
y/g |
avg |
td |
lg |
fum |
lost |
Event |
Total |
9 |
- |
- |
- |
- |
- |
- |
- |
- |
Conference |
7 |
- |
- |
- |
- |
- |
- |
- |
- |
Exhibition |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Location |
Home |
4 |
- |
- |
- |
- |
- |
- |
- |
- |
Away |
5 |
- |
- |
- |
- |
- |
- |
- |
- |
Neutral |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Result |
Wins |
3 |
- |
- |
- |
- |
- |
- |
- |
- |
Losses |
6 |
- |
- |
- |
- |
- |
- |
- |
- |
Month |
September |
4 |
- |
- |
- |
- |
- |
- |
- |
- |
October |
3 |
- |
- |
- |
- |
- |
- |
- |
- |
November |
2 |
- |
- |
- |
- |
- |
- |
- |
- |
Splits Stats - Receiving
|
|
gp |
rec |
rec/g |
yds |
y/g |
avg |
td |
lg |
Event |
Total |
9 |
16 |
1.8 |
286 |
31.8 |
17.9 |
1 |
75 |
Conference |
7 |
11 |
1.6 |
241 |
34.4 |
21.9 |
1 |
75 |
Exhibition |
- |
- |
- |
- |
- |
- |
- |
- |
Location |
Home |
4 |
3 |
0.8 |
42 |
10.5 |
14.0 |
0 |
33 |
There was a problem with a Velocity script |
Page | bio-template |
Error | VM #split: too many arguments to macro. Wanted 3 got 5 at bio-template[line 314, column 17] |
Page source: |
1: $website.addCss($website.cdn("/info/photo-gallery.css"))
2: <script src="${website.cdn("/info/klass.min.js")}"></script>
3: <script src="${website.cdn("/info/code.photoswipe.jquery-3.0.5.min.js")}"></script>
4: <script src="${website.cdn("/info/masonry.pkgd.min.js")}"></script>
5: <script src="${website.cdn("/info/imagesloaded.pkgd.min.js")}"></script>
6: <script src="${website.cdn("/info/photogallery/photogallery.js")}"></script>
7:
8: ## PICK UP OPTIONS
9: $website.include("options")
10: #set ($options = $request.getAttribute("options"))
11: #set ($locale = "en_us")
12: #set ($locale = $options.get("locale"))
13:
14: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE
15: #set ($bioObject = $page.getDataAsObject())
16: #set ($statsURL = $bioObject.statsURL)
17:
18: #if ($statsURL.length() > 0)
19: $website.includeAgain("${statsURL}?tmpl=bio-stats-template")
20: ## various settings to get the variables set
21: #set ($events = $request.getAttribute("bio_events"))
22: #set ($seasons = $request.getAttribute("bio_seasons"))
23: #set ($career = $request.getAttribute("bio_career"))
24: #set ($labels = $request.getAttribute("bio_labels"))
25: #set ($briefs = $request.getAttribute("bio_briefs"))
26: #set ($gamelogs = $request.getAttribute("bio_gamelogs"))
27: #set ($splits = $request.getAttribute("bio_splits"))
28: #set ($statPosition = $request.getAttribute("bio_position"))
29: #set ($positions = $request.getAttribute("bio_positions"))
30: #set ($playerId = $request.getAttribute("bio_player_id"))
31: #set ($highlights = $request.getAttribute("bio_highlights"))
32: #set ($formats = $request.getAttribute("bio_formats"))
33: #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels"))
34: #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels"))
35: #set ($gamesResults = $request.getAttribute("bio_games_results"))
36: #set ($monthsPlayed = $request.getAttribute("bio_months_played"))
37: #end
38:
39: #set ($pos = "")
40: #set ($pos = $attributes.get("position"))
41: #set ($pos = $statPosition)
42: #set ($posVec = $pos.split("/"))
43: #set ($pos = $posVec[0])
44: #set ($pos = $pos.toLowerCase())
45: #set ($statPos = $positions.get($pos))
46: #set ($paramPos = $request.getParameter("pos"))
47:
48: #set ($playerId = $attributes.get("playerId"))
49: #set ($stats = $splits.overall)
50: #set ($highlights = $highlights.get($statPos))
51:
52: #set ($showHighlights = true)
53: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false)
54: #set ($showHighlights = false)
55: #end
56:
57: #set ($enhancedLayout = false)
58: #if (($options.get("bio_enhanced_layout") == "yes") || ($request.getParameter("bio_enhanced_layout") == true))
59: #set ($enhancedLayout = true)
60: $website.addCss($website.cdn("/info/bio-styles-enhanced.css"))
61: #end
62:
63: #set ($showActionShots = true)
64: #if ($options.get("bio_show_action_shots") && $options.get("bio_show_action_shots") == false)
65: #set ($showActionShots = false)
66: #end
67:
68: #set ($actionShotsLimit = 5)
69: #set ($actionShotsLimit = $tool.math.toInteger($options.get("bio_action_shots_limit")))
70:
71: #set ($showCareer = $wiki.valid() && $seasons)
72: #if ("yes" == $options.get("stats_show_career") && $seasons)
73: #set ($showCareer = true)
74: #end
75:
76: #set ($hasEvents = $events.size() > 0)
77: #set ($hasSynopsis = $synopsis.trim().length() > 0)
78: #set ($htmlStatsURL = "${page.url}-stats")
79: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
80: #set ($bioBriefURL = "${page.url}-brief")
81: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
82: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1))
83: #if ($options.get("bio_hide_roster") == true)
84: #set ($showRoster = false)
85: #end
86:
87: #set ($view = "")
88: #if ($hasSynopsis || $hasBioBrief)
89: #set ($view = "bio")
90: #elseif ($statsURL.length() > 0)
91: #set ($view = "profile")
92: #elseif ($hasHTMLStats)
93: #set ($view = "htmlstats")
94: #elseif ($releases.size() > 0)
95: #set ($view = "news")
96: #elseif ($playerPhotos.size() > 0)
97: #set ($view = "photos")
98: #elseif ($playerVideos.size() > 0)
99: #set ($view = "videos")
100: #end
101:
102: #if ($options.get("bio_default_view").length() > 0)
103: #set ($checkView = $options.get("bio_default_view"))
104: #end
105:
106: #if ($request.getParameter("view"))
107: #set ($checkView = $request.getParameter("view"))
108: #end
109:
110: #if ($checkView == "profile" && $statsURL.length() > 0)
111: #set ($view = "profile")
112: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief))
113: #set ($view = "bio")
114: #elseif ($checkView == "gamelog" && $statsURL.length() > 0)
115: #set ($view = "gamelog")
116: #elseif ($checkView == "career" && $showCareer)
117: #set ($view = "career")
118: #elseif ($checkView == "splits" && $statsURL.length() > 0)
119: #set ($view = "splits")
120: #elseif ($checkView == "htmlstats" && $hasHTMLStats)
121: #set ($view = "htmlstats")
122: #elseif ($checkView == "news" && $releases.size() > 0)
123: #set ($view = "news")
124: #elseif ($checkView == "photos" && $playerPhotos.size() > 0)
125: #set ($view = "photos")
126: #elseif ($checkView == "videos" && $playerVideos.size() > 0)
127: #set ($view = "videos")
128: #end
129:
130: #macro (printResultAriaLabel $event)
131: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}")
132: #if ($event.neutralSite.length() > 0 || $event.home)
133: #set ($ariaLabel = "${ariaLabel} vs.")
134: #else
135: #set ($ariaLabel = "${ariaLabel} at")
136: #end
137: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:")
138: #if ($event.neutralSite.length() > 0)
139: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:")
140: #end
141: #set ($ariaLabel = "${ariaLabel} Box Score")
142: aria-label="$ariaLabel"
143: #end
144:
145: #macro (printGrid $items $type)
146: <div class="news-layout grid">
147: <div class="stories">
148: <ul>
149: #foreach ($item in $items)
150: #if ($item.title.length() > 0)
151:
152: <li class="story ${type}">
153: <div class="clearfix">
154: <a href="$item.url" class="title-box">
155: <span class="thumb">
156: #if ($item.thumbnailURL)
157: <img src="$website.cdn("/info/images/spacer.gif")" data-src="${item.thumbnailURL}?max_width=300" alt="" class="lazyload" />
158: #elseif ($item.contentType == "loki/youtube")
159: <img src="$website.cdn("/info/images/spacer.gif")" data-src="http://img.youtube.com/vi/${item.dataAsString}/0.jpg" alt="" class="lazyload" />
160: #else
161: <img src="$website.cdn("/info/images/spacer.gif")" data-src="/images/setup/thumbnail_default.jpg?max_width=300" alt="" class="lazyload" />
162: #end
163: </span>
164: <span class="title">$item.title</span>
165: </a>
166: </div>
167: </li>
168: #end
169: #end ## foreach
170: </ul>
171: </div>
172: </div>
173: #end ## ends macro
174:
175: #macro (gamelogData $p)
176:
177: #set ($p = $positions.get($p))
178: #set ($gamelogs = $gamelogs.get($p))
179:
180: #if ($hasEvents)
181: <div class="stats-box full clearfix">
182: <div class="scrollable">
183: <div>
184: <table>
185: <tr class="thead">
186: <th class="text">Date</th>
187: <th class="pinned-col text">Opponent</th>
188: <th>Score</th>
189: #foreach ($gamelog in $gamelogs)
190: <th>$gamelog</th>
191: #end
192: </tr>
193: #foreach ($event in $events)
194: <tr>
195: <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
196: <td class="pinned-col text">
197: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
198: $event.event.opponent.name
199: </td>
200: <td>
201: #if ($event.event.statusCode >= 0)
202: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
203: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
204: #else
205: ${event.event.APResult}
206: #end
207: #else #end
208: </td>
209: #foreach ($gamelog in $gamelogs.keySet())
210: #set ($value = "-")
211: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
212: <td>$value</td>
213: #end
214: </tr>
215: #end
216: </table>
217: </div>
218: </div> ## scrollable
219: </div> ## stats-box
220: #end
221:
222: #end ## macro gamelogData
223:
224: #macro (split $statPosBriefs $label $stats)
225: <tr>
226: <td class="pinned-col text">${label}</td>
227: #foreach ($brief in $statPosBriefs.keySet())
228: #set ($value = "-")
229: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
230: <td>#if ($value.length() > 0) $value #else - #end</td>
231: #end
232: </tr>
233: #end
234:
235: #macro (careerData $p)
236: #set ($p = $positions.get($p))
237: #set ($statPosBriefs = $briefs.get($p))
238:
239: <div class="stats-box full clearfix">
240: <div class="scrollable">
241: <div>
242: <table>
243: <tr class="thead">
244: <th class="pinned-col"> </th>
245: #foreach ($brief in $statPosBriefs)
246: <th>$brief</th>
247: #end
248: </tr>
249:
250: #set ($careerTotals = $request.getAttribute("careerTotals"))
251: #set ($careerMap = $request.getAttribute("careerMap"))
252:
253: #foreach ($season in $seasons)
254: ## Check if we did not get stats for this season
255: #if ($careerMap.get($season.seasonName))
256: #set ($label = "<a href='${season.path}?view=profile'>$season.seasonName</a>")
257: #split($statPosBriefs, $label, $careerMap[$season.seasonName])
258: #elseif ($wiki.valid())
259: <tr>
260: <td class="text">${season.seasonName}</td>
261: <td colspan="${statPosBriefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
262: </tr>
263: #end
264: #end
265:
266: #split($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
267:
268: </table>
269: </div>
270: </div> ## scrollable
271: </div> ## stats-box
272:
273: #end ## macro careerData
274:
275: #macro (splitsData $p)
276:
277: #set ($p = $positions.get($p))
278: #set ($statPosBriefs = $briefs.get($p))
279: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1))
280:
281: #if ($statPosBriefs.size() > 0)
282: <div class="stats-box full clearfix">
283: <div class="scrollable">
284: <div>
285: <table>
286: <tr>
287: <th class="pinned-col"> </th>
288: #foreach ($brief in $statPosBriefs)
289: <th>$brief</th>
290: #end
291: </tr>
292:
293: #split($statPosBriefs, "Total", $splits.overall)
294: #split($statPosBriefs, "Conference", $splits.conference)
295: #split($statPosBriefs, "Exhibition", $splits.exhibition)
296:
297: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
298:
299: #split($statPosBriefs, "Home", $splits.home)
300: #split($statPosBriefs, "Away", $splits.away)
301: #split($statPosBriefs, "Neutral", $splits.neutral)
302:
303: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
304:
305: #foreach($gameResult in $gamesResults.entrySet())
306: #if ($gameResult.key == "wins")
307: #set ($splitGameResult = $splits.inWins)
308: #elseif ($gameResult.key == "losses")
309: #set ($splitGameResult = $splits.inLosses)
310: #elseif ($gameResult.key == "ties")
311: #set ($splitGameResult = $splits.inTies)
312: #end
313:
314: #split($statPosBriefs, $gameResult.value, $splitGameResult)
315: #end
316:
317: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
318:
319: #if ($monthsPlayed and $monthsPlayed.size() > 0)
320: #foreach($month in $monthsPlayed)
321: #if ($month == 'January')
322: #set ($splitMonth = $splits.january)
323: #elseif ($month == 'February')
324: #set ($splitMonth = $splits.february)
325: #elseif ($month == 'March')
326: #set($splitMonth = $splits.march)
327: #elseif ($month == 'April')
328: #set($splitMonth = $splits.april)
329: #elseif ($month == 'May')
330: #set ($splitMonth = $splits.may)
331: #elseif ($month == 'June')
332: #set ($splitMonth = $splits.june)
333: #elseif ($month == 'July')
334: #set($splitMonth = $splits.july)
335: #elseif ($month == 'August')
336: #set ($splitMonth = $splits.august)
337: #elseif ($month == 'September')
338: #set($splitMonth = $splits.september)
339: #elseif ($month == 'October')
340: #set($splitMonth = $splits.october)
341: #elseif ($month == 'November')
342: #set ($splitMonth = $splits.november)
343: #elseif ($month == 'December')
344: #set($splitMonth = $splits.december)
345: #end
346:
347: #split($statPosBriefs, $month, $splitMonth)
348: #end ## foreach
349: #end
350: </table>
351: </div>
352: </div> ## scrollable
353: </div> ## srollable-table
354: #end
355:
356: #end ## macro splitsData
357:
358: #macro (printRecentGames)
359: #if ($hasEvents)
360: <table>
361: <tr class="thead accent-bg"><th colspan="3">Recent Games</th></tr>
362:
363: #set ($eventEnd = -1)
364: #foreach ($event in $events)
365: #if ($event.event.result.resolved)
366: #set ($eventEnd = $velocityCount)
367: #end
368: #end
369:
370: #set ($eventStart = $eventEnd - 5)
371: #if ($eventStart < 0) #set ($eventStart = 0) #end
372:
373: #foreach ($event in $events)
374: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
375: <tr>
376: <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
377: <td class="text">
378: #if ($event.event.neutralSite.length() > 0) vs.
379: #elseif (!$event.event.home) at
380: #else ## nothing for a home game
381: #end
382: $event.event.opponent.name
383: </td>
384: <td class="text">
385: #if ($event.event.statusCode >= 0)
386: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
387: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a>
388: #else
389: ${event.event.APResult}
390: #end
391: #end
392: </td>
393: </tr>
394: #end ## if
395: #end
396: </table>
397: #end
398: #end ## macro printRecentGames
399:
400: #macro (printCategories $briefCategoryLabels $v $ariaLabel)
401:
402: <div class="tab-container secondary clearfix" data-module="stats/tabs" data-type="secondary">
403: <div class="tab-nav" data-module="jscroll" data-momentum="false">
404: <div>
405: <ul class="clearfix">
406: #foreach($briefCat in $briefCategoryLabels.entrySet())
407: #set ($briefCatLabel = $briefCat.value)
408: #set ($briefCatKey = $briefCat.key)
409:
410: #if ($locale == "en_gb" && $briefCatLabel == "Defense")
411: #set ($briefCatLabel = "Defence")
412: #end
413:
414: <li #if ($activePos == $briefCatKey) class="active" #end><a href="${page.url}?view=${v}&pos=${briefCatKey}" role="button" aria-label="${ariaLabel}: ${briefCatLabel}">$briefCatLabel</a></li>
415: #end
416: </ul>
417: </div>
418: </div>
419: <div class="tab-panels">
420: #foreach ($briefCat in $briefCategoryLabels.entrySet())
421: #set ($class = "tab-panel clearfix")
422: #if ($briefCat.key == $activePos)
423: #set ($class = "tab-panel active clearfix")
424: #end
425: <div class="$class">
426: <div class="stats-wrap clearfix">
427: #if ($v == "splits")
428: #splitsData($briefCat.key)
429: #elseif ($v == "career")
430: #careerData($briefCat.key)
431: #end
432: </div>
433: </div>
434: #end
435: </div>
436: </div> ## tab-container
437:
438: #end ## macro printCategories
439:
440: #macro (printHeadshot)
441: #if ($enhancedLayout)
442:
443: #if ($headshot.url)
444: <img src="$headshot.url?max_width=300&max_height=400" alt="$fullName" />
445: #else
446: #if ($website.exists("/images/setup/headshot_default.jpg"))
447: <img src="/images/setup/headshot_default.jpg?max_width=300&max_height=400" alt="$fullName" />
448: #else
449: <img src="$website.cdn("/info/images/default_headshot.jpg?max_width=300&max_height=400")" alt="$fullName" />
450: #end
451: #end
452:
453: #else
454:
455: #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span>#end
456:
457: #if ($headshot.url)
458: <img src="$headshot.url?max_width=160&max_height=210" alt="$fullName" />
459: #else
460: #if ($website.exists("/images/setup/headshot_default.jpg"))
461: <img src="/images/setup/headshot_default.jpg?max_width=160&max_height=210" alt="" />
462: #else
463: <img src="$website.cdn("/info/images/default_headshot.jpg?max_width=160&max_height=210")" alt="" />
464: #end
465: #end
466:
467: #end ## ## enhancedLayout check
468: #end ## macro printHeadshot
469:
470: #macro (printBioInfo)
471: #if ($enhancedLayout)
472:
473: <h2 class="player-heading">
474: #if ($!attributes.get("number").length() > 0)<span class="number accent-bg">$!attributes.get("number")</span>#end
475: <span class="name">$fullName</span>
476: </h2>
477:
478: <ul>
479: #foreach ($i in [1..10])
480: #set ($stickyKey = "bio_custom${i}_sticky")
481: #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
482: <li>
483: <dl>
484: <dt class="label">$options.get($stickyKey): </dt>
485: <dd class="value">$!attributes.get("custom${i}")</dd>
486: </dl>
487: </li>
488: #end
489: #end
490:
491: #foreach ($field in $fields)
492: #if (!$field.key.startsWith("custom"))
493: #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
494: #if ($field.key == "phone1" || $field.key == "phone2")
495: <li>
496: <dl>
497: <dt class="label">Phone: </dt>
498: <dd class="value">$!attributes.get($field.key)</dd>
499: </dl>
500: </li>
501: #elseif ($field.key == "email_address")
502: #set ($emailAdd = $attributes.get($field.key))
503: <li>
504: <dl>
505: <dt class="label">Email: </dt>
506: <dd class="value"><a href="mailto:${emailAdd}">$emailAdd</a></dd>
507: </dl>
508: </li>
509: #elseif ($field.key == "weight_class")
510: <li>
511: <dl>
512: <dt class="label">Class: </dt>
513: <dd class="value">$!attributes.get($field.key)</dd>
514: </dl>
515: </li>
516: #elseif ($field.key != "position_abbr")
517: <li>
518: <dl>
519: <dt class="label">$field.value: </dt>
520: <dd class="value">$!attributes.get($field.key)</dd>
521: </dl>
522: </li>
523: #end
524: #end
525: #end
526: #end
527:
528: #foreach ($i in [1..10])
529: #set ($customKey = "bio_custom${i}")
530: #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
531: <li>
532: <dl>
533: <dt class="label">$options.get($customKey): </dt>
534: <dd class="value">$!attributes.get("custom${i}")</dd>
535: </dl>
536: </li>
537: #end
538: #end
539: </ul>
540:
541: #else
542: ## default layout
543:
544: <div class="player-name">
545: #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span><span class="sep"> - </span>#end
546: <span class="name">$fullName</span>
547: </div>
548:
549: <table role="presentation">
550: #foreach ($i in [1..10])
551: #set ($stickyKey = "bio_custom${i}_sticky")
552: #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
553: <tr>
554: <td class="label">$options.get($stickyKey): </td>
555: <td class="value">$!attributes.get("custom${i}")</td>
556: </tr>
557: #end
558: #end
559:
560: #foreach ($field in $fields)
561: #if (!$field.key.startsWith("custom"))
562: #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
563: #if ($field.key == "phone1" || $field.key == "phone2")
564: <tr>
565: <td class="label">Phone: </td>
566: <td class="value">$!attributes.get($field.key)</td>
567: </tr>
568: #elseif ($field.key == "email_address")
569: #set ($emailAdd = $attributes.get($field.key))
570: <tr>
571: <td class="label">Email: </td>
572: <td class="value"><a href="mailto:${emailAdd}">$emailAdd</a></td>
573: </tr>
574: #elseif ($field.key == "weight_class")
575: <tr>
576: <td class="label">Class: </td>
577: <td class="value">$!attributes.get($field.key)</td>
578: </tr>
579: #elseif ($field.key != "position_abbr")
580: <tr>
581: <td class="label">$field.value: </td>
582: <td class="value">$!attributes.get($field.key)</td>
583: </tr>
584: #end
585: #end
586: #end
587: #end
588:
589: #foreach ($i in [1..10])
590: #set ($customKey = "bio_custom${i}")
591: #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
592: <tr>
593: <td class="label">$options.get($customKey): </td>
594: <td class="value">$!attributes.get("custom${i}")</td>
595: </tr>
596: #end
597: #end
598: </table>
599: #end ## enhancedLayout check
600: #end ## macro printBioInfo
601:
602: #macro (printActionShots)
603: #if ($showActionShots)
604: ## BANNERS SLIDER
605: #set ($slickSettings = {
606: "autoplay": true,
607: "fade": true,
608: "arrows": false,
609: "slidesToShow": 1,
610: "slidesToScroll": 1,
611: "lazyLoad": "ondemand",
612: "responsive": "none"
613: })
614: #set ($slickSettings = $slickSettings.toString().replace("=", ":"))
615: <div class="action-shots clearfix" data-player-photo-count="$playerPhotos.size()">
616: <div class="slider" data-module="slick-slider-init" data-slick-settings="$slickSettings">
617: #set ($playerPhotos = $tool.sorter.sort($playerPhotos, "lastUpdated:desc"))
618: #foreach ($photo in $playerPhotos)
619: #if ($velocityCount <= $actionShotsLimit)
620: #set ($imgAlt = "Action shot for ${page.title} image ${velocityCount}")
621: #if ($photo.altText.length() > 0)
622: #set ($imgAlt = $photo.altText)
623: #elseif( $photo.title.length() > 0 )
624: #set ($imgAlt = $photo.title)
625: #end
626: <div class="image">
627: <img data-lazy="$photo.url" alt="$imgAlt" data-lastupdated="$photo.lastUpdated"/>
628: </div>
629: #end
630: #end
631: </div>
632: </div>
633: #end
634: #end ## macro printActionShots
635:
636: #macro (printHighlights)
637: #if ($highlights && $showHighlights)
638: <div class="highlights #if ($enhancedLayout) highlights-bio-enhanced #else highlights-bio #end clearfix">
639: #foreach ($highlight in $highlights.keySet())
640: #set ($value = "-")
641: #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
642: <div class="stat clearfix">
643: <span class="stat-title">$!highlights.get($highlight)</span>
644: <span class="stat-value">$value</span>
645: </div>
646: #end
647: </div>
648: #end
649: #end ## macro printHighlights
650: #macro (printRoster)
651: #if ($enhancedLayout)
652: $website.includeAgain("${page.url}?tmpl=roster-switcher-template&id=roster-list")
653: #else
654: #if ($page.contentType == "loki/bio")
655: #set ($headlinesFeaturedSize = 0)
656: #foreach ($featuredPage in $page.headlinesFeatured)
657: #if ($featuredPage.contentType == "loki/headlines")
658: #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
659: #end
660: #end
661: #if ($headlinesFeaturedSize > 0)
662: <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below.">
663: <option selected="selected">Related Bios</option>
664: #foreach ($featuredPage in $page.headlinesFeatured)
665: #if ($featuredPage.contentType == "loki/headlines")
666: $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template¤t_url=${page.url}")
667: #end
668: #end
669: </select>
670: #end
671: #elseif ($page.contentType == "loki/bio-network")
672: #set ($relatedPlayers = $page.sectionPage.children)
673: #set ($teamNames = {})
674: #foreach ($relatedPlayer in $relatedPlayers)
675: #if ($relatedPlayer.contentType == "loki/bio-network")
676: #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
677: #set ($teamName = $relatedPlayerObj.get("team"))
678: #if ($teamName.length() > 0)
679: #if (!$teamNames.containsValue($teamName))
680: $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
681: #end
682: #end
683: #end
684: #end
685:
686: <select class="roster-select-list" aria-label="Select a player to view its full bio from the list of options below.">
687: #foreach ($i in [1..$teamNames.size()])
688: #if ($teamNames.size() > 1)
689: <optgroup label="$teamNames.get($i)">
690: #end
691:
692: #foreach ($relatedPlayer in $relatedPlayers)
693: #if ($relatedPlayer.contentType == "loki/bio-network")
694: #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
695: #set ($teamName = $relatedPlayerObj.get("team"))
696: #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
697: #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
698: #set ($playerLastName = $relatedPlayerObj.get("last_name"))
699: #if ($page.url == $relatedPlayer.url)
700: <option value="$relatedPlayer.url" selected="selected">${playerFirstName} ${playerLastName}</option>
701: #else
702: <option value="$relatedPlayer.url">${playerFirstName} ${playerLastName}</option>
703: #end
704: #end
705: #end
706: #end
707:
708: #if ($teamNames.size() > 1)
709: </optgroup>
710: #end
711: #end
712: </select>
713: #end
714: #end ## enhancedLayout check
715: #end ## macro printRoster
716:
717: ################################################## END MACROS #############################################################
718:
719: #if ($attributes.get("full_name").length() > 0)
720: #set ($fullName = $attributes.get("full_name"))
721: #else
722: #set ($firstName = $!attributes.get("first_name"))
723: #set ($lastName = $!attributes.get("last_name"))
724: #set ($fullName = "${firstName} ${lastName}")
725: #end
726:
727: #set ($actionShots = false)
728: #if ($enhancedLayout && $playerPhotos.size() > 0)
729: #set ($actionShots = true)
730: #end
731:
732: #if ($enhancedLayout)
733: #set ($rootClass = "bio-enhanced")
734: #if ($actionShots && $showActionShots)
735: #set ($rootClass = "${rootClass} action")
736: #else
737: #set ($rootClass = "${rootClass} plain")
738: #end
739: #else
740: #set ($rootClass = "bio-wrap")
741: #end
742:
743: ## FULL ROSTER
744: <div class="${rootClass} #if ($highlights) bio-wrap-has-highlights #end clearfix" data-module="stats/responsive-container">
745:
746: ## RELATED BIOS
747: #if ($showRoster)
748: <div class="related-bios clearfix">#printRoster</div>
749: #end
750:
751: #if ($actionShots)
752: #printActionShots
753: #end
754:
755: <div class="head clearfix">
756: <div class="clearfix">
757:
758: <div class="player-about clearfix">
759: <div class="player-headshot">#printHeadshot</div>
760: <div class="player-info">#printBioInfo</div>
761: </div>
762:
763: #printHighlights
764:
765: </div>
766: </div> ## head
767:
768: #if ($view.length() > 0)
769: <div class="body clearfix">
770:
771: <div class="tab-container primary clearfix" data-module="stats/tabs" data-type="primary">
772: <div class="tab-nav" data-module="jscroll" data-momentum="false">
773: <div>
774: <ul class="clearfix">
775: #if ($hasSynopsis || $hasBioBrief)
776: <li #if ($view == "bio") class="active" #end><a href="${page.url}?view=bio">Bio</a></li>
777: #end
778:
779: #if ($statsURL.length() > 0)
780: <li #if ($view == "profile") class="active" #end><a href="${page.url}?view=profile">Player Profile</a></li>
781: <li #if ($view == "gamelog") class="active" #end><a href="${page.url}?view=gamelog">Game Log</a></li>
782: #if ($showCareer)
783: <li #if ($view == "career") class="active" #end><a href="${page.url}?view=career">Career Stats</a></li>
784: #end
785: <li #if ($view == "splits") class="active" #end><a href="${page.url}?view=splits">Split Stats</a></li>
786: #end
787:
788: #if ($hasHTMLStats)
789: <li #if ($view == "htmlstats") class="active" #end><a href="${page.url}?view=htmlstats">HTML Stats</a></li>
790: #end
791:
792: #if ($releases.size() > 0)
793: <li #if ($view == "news") class="active" #end><a href="${page.url}?view=news">News</a></li>
794: #end
795:
796: #if ($playerPhotos.size() > 0)
797: <li #if ($view == "photos") class="active" #end><a href="${page.url}?view=photos">Photos</a></li>
798: #end
799:
800: #if ($playerVideos.size() > 0)
801: <li #if ($view == "videos") class="active" #end><a href="${page.url}?view=videos">Videos</a></li>
802: #end
803: </ul>
804: </div>
805: </div> ## tab-nav
806:
807: <div class="tab-panels clearfix">
808:
809: ## BIO
810: #if ($hasSynopsis || $hasBioBrief)
811:
812: #set ($class = "tab-panel clearfix")
813: #if ($view == "bio")
814: #set ($class = "tab-panel active clearfix")
815: #end
816: <div class="${class}">
817:
818: <div class="synopsis clearfix">
819: #if ($hasSynopsis)
820: $synopsis
821: #elseif ($hasBioBrief)
822: $website.include("$bioBriefURL")
823: #end
824: </div>
825:
826: </div> ## tab-panel
827: #end
828: ## BIO
829:
830: ## STATS
831: #if ($statsURL.length() > 0)
832:
833: ## PROFILE
834: #set ($class = "tab-panel clearfix")
835: #if ($view == "profile")
836: #set ($class = "tab-panel active clearfix")
837: #end
838: <div class="${class}">
839: <div class="stats-wrap clearfix">
840:
841: ## LAST SIX GAMES
842: <div class="stats-box half">
843: #printRecentGames()
844: </div>
845:
846: ## RANKING
847: <div class="stats-box half">
848: #if ($statPos.length() > 0)
849: $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
850: #end
851: </div>
852:
853: </div> ## stats-wrap
854: </div> ## tab-content
855: ## PROFILE
856:
857: ## GAMELOG
858: #set ($class = "tab-panel clearfix")
859: #if ($view == "gamelog")
860: #set ($class = "tab-panel active clearfix")
861: #end
862:
863: #set ($activePos = $statPos)
864: #if ($view == "gamelog" && $paramPos.length() > 0)
865: #if ($positions.get($paramPos).length() > 0)
866: #set ($activePos = $positions.get($paramPos))
867: #end
868: #end
869:
870: <div class="${class}">
871:
872: #if ($gamelogsCategoriesLabels)
873: <div class="tab-container clearfix secondary" data-module="stats/tabs" data-type="secondary">
874: <div class="tab-nav" data-module="jscroll" data-momentum="false">
875: <div>
876: <ul class="clearfix">
877: #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
878: #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
879:
880: #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
881: #set($gamelogsCatLabelVal = "Defence")
882: #end
883:
884: <li #if ($activePos == $gamelogsCatLabel.key) class="active" #end><a href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}" role="button" aria-label="Game Log: ${gamelogsCatLabelVal}">$gamelogsCatLabelVal</a></li>
885: #end
886: </ul>
887: </div>
888: </div>
889: <div class="tab-panels">
890: #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
891: #set ($class = "tab-panel clearfix")
892: #if ($gamelogsCatLabel.key == $activePos)
893: #set ($class = "tab-panel active clearfix")
894: #end
895: <div class="${class}">
896: <div class="stats-wrap clearfix">#gamelogData($gamelogsCatLabel.key)</div>
897: </div>
898: #end
899: </div>
900: </div>
901: #else
902: <div class="stats-wrap clearfix">#gamelogData($pos)</div>
903: #end
904:
905: </div> ## tab-panel
906: ## GAMELOG
907:
908:
909: ## CAREER
910: #if ($showCareer)
911:
912: #set ($activePos = $statPos)
913: #if ($view == "career" && $paramPos.length() > 0)
914: #if ($positions.get($paramPos).length() > 0)
915: #set ($activePos = $positions.get($paramPos))
916: #end
917: #end
918:
919: #set ($class = "tab-panel clearfix")
920: #if ($view == "career")
921: #set ($class = "tab-panel active clearfix")
922: #end
923:
924: <div class="${class}">
925:
926: #if ($briefsCategoriesLabels)
927: #printCategories($briefsCategoriesLabels "career" "Career Stats")
928: #else
929: <div class="stats-wrap clearfix">#careerData($activePos)</div>
930: #end
931:
932: </div> ## tab-panel
933: #end
934: ## CAREER
935:
936: ## SPLITS
937: #set ($class = "tab-panel clearfix")
938: #if ($view == "splits")
939: #set ($class = "tab-panel active clearfix")
940: #end
941:
942: #set ($activePos = $statPos)
943: #if ($view == "splits" && $paramPos.length() > 0)
944: #if ($positions.get($paramPos).length() > 0)
945: #set ($activePos = $positions.get($paramPos))
946: #end
947: #end
948:
949: <div class="${class}">
950:
951: #if ($briefsCategoriesLabels)
952: #printCategories($briefsCategoriesLabels "splits" "Splits Stats")
953: #else
954: <div class="stats-wrap clearfix">#splitsData($pos)</div>
955: #end
956:
957: </div> ## tab-panel
958: ## SPLITS
959:
960: #end
961: ## STATS
962:
963: ## HTML STATS
964: #if ($hasHTMLStats)
965:
966: #set ($class = "tab-panel clearfix")
967: #if ($view == "htmlstats")
968: #set ($class = "tab-panel active clearfix")
969: #end
970: <div class="${class}">
971: <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
972: </div>
973:
974: #end
975: ## HTML STATS
976:
977: ## NEWS
978: #if ($releases.size() > 0)
979: #set ($class = "tab-panel clearfix")
980: #if ($view == "news")
981: #set ($class = "tab-panel active clearfix")
982: #end
983: <div class="${class}">
984: #printGrid($releases, "article")
985: </div> ## tab-content
986: #end
987: ## NEWS
988:
989: ## PHOTOS
990: #if ($playerPhotos.size() > 0)
991: #set ($class = "tab-panel clearfix")
992: #if ($view == "photos")
993: #set ($class = "tab-panel active clearfix")
994: #end
995: <div class="${class}">
996: $website.includeAgain("${page.url}?tmpl=bio-photos-template")
997: </div> ## tab-content
998: #end
999: ## PHOTOS
1000:
1001: ## VIDEOS
1002: #if ($playerVideos.size() > 0)
1003: #set ($class = "tab-panel clearfix")
1004: #if ($view == "videos")
1005: #set ($class = "tab-panel active clearfix")
1006: #end
1007: <div class="${class}">
1008: #printGrid($playerVideos, "video")
1009: </div> ## tab-content
1010: #end
1011: ## VIDEOS
1012:
1013: </div> ## tab-panels
1014: </div> ## tab-container
1015: </div> ## body
1016: #end
1017:
1018: $wiki
1019: </div> ## ends bio-wrap
1020:
1021: ## GLOBAL ADS SERVER
1022: #if ($website.ads.isAdvertisingEnabled('BIOS'))
1023: $website.includeAgain("global-adserver-slots?adSlot=bios")
1024: #end
|
Scoreboard
-
Sat, 10/03
| Football
at
Saginaw Valley
(Cancelled)
LS
-
Sat, 11/16
| Football
at
Michigan Tech
L, 34-21
(Final)
RC
|
RC
|
BX
|
V
-
Sat, 11/09
| Football
at
Davenport
L, 21-14
(Final)
RC
|
BX
-
Sat, 11/02
| Football
vs.
Northern Mich.
W, 28-10
(Final)
RC
|
BX
|
PH
-
Sat, 10/26
| Football
vs.
Wayne St. (Mich.)
L, 31-10
(Final)
RC
|
BX
|
PH
-
Sat, 10/19
| Football
at
Ferris St.
L, 44-17
(Final)
RC
|
BX
-
Sat, 10/12
| Football
vs.
Hillsdale
L, 37-30
(Final - OT)
RC
|
BX
|
PH
-
Sat, 10/05
| Football
at
Saginaw Valley
L, 55-29
(Final)
RC
|
BX
|
PH
-
Sat, 09/28
| Football
vs.
Ashland
L, 31-28
(Final)
RC
|
BX
|
PH
-
Sat, 09/21
| Football
vs.
Grand Valley St.
L, 27-3
(Final)
RC
|
BX
|
PH
-
Sat, 09/14
| Football
at
Findlay
L, 31-21
(Final)
RC
|
BX
|
PH