Skip to content

Commit 98e9b12

Browse files
committed
feat: implement Codam fonts on website and add login page
1 parent 140bcda commit 98e9b12

File tree

17 files changed

+184
-53
lines changed

17 files changed

+184
-53
lines changed

src/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ const main = async () => {
9797
setupExpressMiddleware(app);
9898

9999
// Set up routes
100-
setupLoginRoutes(app);
100+
setupLoginRoutes(app, prisma);
101101
setupHomeRoutes(app, prisma);
102102
setupProfileRoutes(app, prisma);
103103
setupResultsRoutes(app, prisma);

src/routes/home.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export const setupHomeRoutes = function(app: Express, prisma: PrismaClient): voi
112112
if (!totalBonusPoints || totalBonusPoints <= 0) {
113113
continue;
114114
}
115-
const bonusPointsPerHour = totalBonusPoints / (7 * 24);
115+
const bonusPointsPerHour = Math.floor(totalBonusPoints / (7 * 24));
116116
// Bonus points are awarded every hour during the last 7 days
117117
let awardedBonusPoints = 0;
118118
for (let dt = new Date(bonusPointsAwarding.startTime); dt < now; dt.setHours(dt.getHours() + 1)) {

src/routes/login.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,39 @@ import { Express } from 'express';
22
import passport from 'passport';
33
import { ExpressIntraUser } from '../sync/oauth';
44
import { CustomSessionData } from '../handlers/session';
5+
import { PrismaClient } from '@prisma/client';
6+
import { CoalitionScore, getCoalitionScore } from '../utils';
57

6-
export const setupLoginRoutes = function(app: Express): void {
8+
export const setupLoginRoutes = function(app: Express, prisma: PrismaClient): void {
79
app.get('/login', async (req, res) => {
8-
return res.render('login.njk');
10+
const coalitions = await prisma.codamCoalition.findMany({
11+
include: {
12+
intra_coalition: {
13+
select: {
14+
name: true,
15+
image_url: true,
16+
color: true,
17+
cover_url: true,
18+
},
19+
},
20+
},
21+
});
22+
23+
// Get current scores per coalition
24+
const coalitionScores: { [key: number]: CoalitionScore } = {};
25+
for (const coalition of coalitions) {
26+
coalitionScores[coalition.id] = await getCoalitionScore(prisma, coalition.id);
27+
}
28+
29+
// Sort the coalitions by score
30+
const sortedCoalitionScores = Object.entries(coalitionScores).sort((a, b) => b[1].score - a[1].score);
31+
const sortedCoalitions = sortedCoalitionScores.map(([coalitionId]) => {
32+
return coalitions.find(c => c.id === parseInt(coalitionId));
33+
}).filter(c => c !== undefined) as typeof coalitions;
34+
35+
return res.render('login.njk', {
36+
coalitions: sortedCoalitions,
37+
});
938
});
1039

1140
app.get('/login/failed', async (req, res) => {

static/css/bootstrap-overruler.css

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
@font-face {
2+
font-family: "Bebas Neue";
3+
src: url('/static/fonts/BebasNeue.otf');
4+
font-weight: normal;
5+
}
6+
7+
@font-face {
8+
font-family: "Museo Sans";
9+
src: url('/static/fonts/MuseoSans_500.otf');
10+
font-weight: normal;
11+
}
12+
13+
@font-face {
14+
font-family: "Museo Sans";
15+
src: url('/static/fonts/MuseoSans_700.otf');
16+
font-weight: bold;
17+
}
18+
19+
body {
20+
font-family: 'Museo Sans', sans-serif;
21+
}
22+
23+
h1, h2, h3, h4, h5, h6 {
24+
font-family: 'Bebas Neue', sans-serif;
25+
font-weight: normal;
26+
}
27+
28+
.navbar-brand h4 {
29+
display: inline;
30+
margin: 0;
31+
font-size: x-large;
32+
margin: 0;
33+
}
34+
35+
.card-header {
36+
font-size: x-large;
37+
}
38+
39+
.quiz-card .card-header {
40+
font-size: large;
41+
}
42+
43+
.card-header h1, .card-header h2, .card-header h3, .card-header h4, .card-header h5, .card-header h6 {
44+
margin: 0;
45+
}
46+
47+
.card-header .lh-lg {
48+
line-height: 1.25 !important;
49+
}
50+
151
.table.coalition-colored > :not(caption) > * > * {
252
background-color: transparent !important;
353
}
@@ -20,6 +70,10 @@
2070
color: #fff !important;
2171
}
2272

73+
#quiz-question {
74+
font-size: large;
75+
}
76+
2377
#quiz-results-container {
2478
margin-left: 0 !important;
2579
margin-right: 0 !important;
@@ -66,7 +120,7 @@
66120

67121
.quiz-result-coalition-name {
68122
word-break: break-all;
69-
font-weight: bold;
123+
font-size: xx-large;
70124
}
71125

72126
.quiz-result-coalition:has(input[type=radio]:checked) {
@@ -189,6 +243,11 @@
189243

190244
}
191245

246+
.big-coalition-content .coalition-name {
247+
letter-spacing: 1px;
248+
margin: 0;
249+
}
250+
192251
.big-coalition-content > *:last-child {
193252
margin-bottom: 0px !important;
194253
}
@@ -209,3 +268,35 @@
209268
.progress.extra-thick {
210269
height: 32px;
211270
}
271+
272+
.login-page-bg {
273+
display: flex;
274+
flex-direction: row;
275+
flex-wrap: nowrap;
276+
justify-content: center;
277+
align-items: center;
278+
gap: 0px;
279+
min-height: 100vh;
280+
}
281+
282+
.login-page-bg .coalition {
283+
height: 100vh;
284+
width: 100%;
285+
background-size: cover;
286+
background-repeat: no-repeat;
287+
background-position: center center;
288+
}
289+
290+
.login-page-content {
291+
position: absolute;
292+
text-align: center;
293+
top: 50%;
294+
left: 50%;
295+
width: 90%;
296+
max-width: 400px;
297+
transform: translate(-50%, -50%);
298+
padding: 32px;
299+
background-color: rgba(0, 0, 0, 0.3);
300+
backdrop-filter: blur(8px);
301+
border-radius: 8px;
302+
}

templates/admin/coalitions.njk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
{% for coalition in coalitions %}
1313
<div class="card w-100 mb-4" id="coalition-{{ coalition.id }}">
1414
<div class="card-header pe-2 d-flex align-items-center" style="background-color: {{ coalition.intra_coalition.color }};">
15-
<div class="d-inline-block pe-3 lh-lg flex-grow-1" style="color: #fff; font-weight: bold;">Coalition "{{ coalition.intra_coalition.name | striptags(true) | escape }}"</div>
15+
<h4 class="d-inline-block pe-3 lh-lg flex-grow-1 text-white">Coalition "{{ coalition.intra_coalition.name | striptags(true) | escape }}"</h4>
1616
<div class="d-inline-block">
1717

1818
</div>

templates/admin/dashboard.njk

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<div class="col-md-6">
1010
<div class="card h-100">
1111
<div class="card-header">
12-
<h5 class="card-title mb-0">User distribution</h5>
12+
<h4 class="card-title mb-0">User distribution</h4>
1313
</div>
1414
<div class="card-body">
1515
<canvas class="codam-chart" data-url="/admin/charts/coalitions/users/distribution" id="coalition-user-distribution"></canvas>
@@ -19,7 +19,7 @@
1919
<div class="col-md-6">
2020
<div class="card h-100">
2121
<div class="card-header">
22-
<h5 class="card-title mb-0">Season deadlines</h5>
22+
<h4 class="card-title mb-0">Season deadlines</h4>
2323
</div>
2424
<div class="card-body">
2525
{% if currentBlocDeadline %}
@@ -38,7 +38,7 @@
3838
<div class="col">
3939
<div class="card h-100">
4040
<div class="card-header">
41-
<h5 class="card-title mb-0">Scores for {{ coalition.intra_coalition.name | striptags(true) | escape }}</h5>
41+
<h4 class="card-title mb-0">Scores for {{ coalition.intra_coalition.name | striptags(true) | escape }}</h4>
4242
</div>
4343
<div class="card-body">
4444
<ul>
@@ -64,7 +64,7 @@
6464
<div class="col">
6565
<div class="card h-100">
6666
<div class="card-header">
67-
<h5 class="card-title mb-0">Coalitions score history</h5>
67+
<h4 class="card-title mb-0">Coalitions score history</h4>
6868
</div>
6969
<div class="card-body">
7070
<canvas height="300" class="codam-chart" data-url="/charts/coalitions/scores/history" id="coalition-score-history"></canvas>
@@ -78,7 +78,7 @@
7878
<div class="col">
7979
<div class="card h-100">
8080
<div class="card-header">
81-
<h5 class="card-title mb-0">Score history for {{ coalition.intra_coalition.name | striptags(true) | escape }}</h5>
81+
<h4 class="card-title mb-0">Score history for {{ coalition.intra_coalition.name | striptags(true) | escape }}</h4>
8282
</div>
8383
<div class="card-body">
8484
<canvas height="500" class="codam-chart" data-url="/charts/coalitions/{{ coalition.id }}/scores/history" id="coalition-{{ coalition.id }}-scores-history"></canvas>
@@ -93,7 +93,7 @@
9393
<div class="col">
9494
<div class="card h-100">
9595
<div class="card-header">
96-
<h5 class="card-title mb-0">Current score distribution for {{ coalition.intra_coalition.name | striptags(true) | escape }}</h5>
96+
<h4 class="card-title mb-0">Current score distribution for {{ coalition.intra_coalition.name | striptags(true) | escape }}</h4>
9797
</div>
9898
<div class="card-body">
9999
<canvas height="500" class="codam-chart" data-url="/admin/charts/coalitions/{{ coalition.id }}/scores/distribution" id="coalition-{{ coalition.id }}-scores-distribution"></canvas>
@@ -107,7 +107,7 @@
107107
<div class="col-md-6">
108108
<div class="card h-100">
109109
<div class="card-header">
110-
<h5 class="card-title mb-0">Previous 10 seasons</h5>
110+
<h4 class="card-title mb-0">Previous 10 seasons</h4>
111111
</div>
112112
<div class="card-body">
113113
<ul>
@@ -122,7 +122,7 @@
122122
<div class="col-md-6">
123123
<div class="card h-100">
124124
<div class="card-header">
125-
<h5 class="card-title mb-0">Last synchronization</h5>
125+
<h4 class="card-title mb-0">Last synchronization</h4>
126126
</div>
127127
<div class="card-body">
128128
<p>The last synchronization with the 42 API was <u id="last-sync-timestamp" style="cursor: help;" title="{{ lastSyncTimestamp | datetimeISO }}" data-date="{{ lastSyncTimestamp | timestamp }}">{{ lastSyncTimestamp | timeAgo }}</u></p>

templates/admin/hooks/secrets.njk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
{% for secret in secrets %}
1414
<div class="card w-100 mb-4" id="secret-{{ secret.model }}-{{ secret.event }}">
1515
<div class="card-header pe-2 d-flex align-items-center">
16-
<div class="d-inline-block pe-3 lh-lg flex-grow-1" >Secret for {{ secret.model }} {{ secret.event }}</div>
16+
<h4 class="d-inline-block pe-3 lh-lg flex-grow-1" >Secret for {{ secret.model }} {{ secret.event }}</h4>
1717
</div>
1818
<div class="card-body">
1919
<form action="/admin/hooks/secrets/{{ secret.model }}/{{ secret.event }}/edit" method="post" class="">
@@ -44,7 +44,7 @@
4444

4545
<div class="card w-100 mb-4" id="webhook-secret-new">
4646
<div class="card-header pe-2 d-flex align-items-center">
47-
<div class="d-inline-block pe-3 lh-lg flex-grow-1">Create a new webhook secret</div>
47+
<h4 class="d-inline-block pe-3 lh-lg flex-grow-1">Create a new webhook secret</h4>
4848
<div class="d-inline-block">
4949

5050
</div>

templates/admin/quiz/overview.njk

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<h2 class="mt-4">Basic settings</h2>
1313
<div class="card w-100 mb-4">
1414
<div class="card-header pe-2 d-flex align-items-center">
15-
<div class="d-inline-block pe-3 lh-lg flex-grow-1">Questionnaire settings</div>
15+
<h4 class="d-inline-block pe-3 lh-lg flex-grow-1">Questionnaire settings</h4>
1616
</div>
1717
<div class="card-body">
1818
<form action="/admin/quiz" method="post" class="row g-3 mb-3">
@@ -58,7 +58,7 @@ document.getElementById('quiz_start').addEventListener('change', limitQuizDateRa
5858
{% for question in questions %}
5959
<div class="card w-100 mb-4" id="question-{{ question.id }}">
6060
<div class="card-header pe-2 d-flex align-items-center">
61-
<div class="d-inline-block pe-3 lh-lg flex-grow-1">Question {{ question.id }}</div>
61+
<h4 class="d-inline-block pe-3 lh-lg flex-grow-1">Question {{ question.id }}</h4>
6262
<div class="d-inline-block">
6363
<a href="/admin/quiz/questions/{{ question.id }}/edit" class="btn btn-sm btn-secondary">Edit question</a>
6464
<form class="d-inline-block" action="/admin/quiz/questions/{{ question.id }}/delete" method="post">
@@ -123,7 +123,7 @@ document.getElementById('quiz_start').addEventListener('change', limitQuizDateRa
123123

124124
<div class="card w-100 mb-4" id="question-new">
125125
<div class="card-header pe-2 d-flex align-items-center">
126-
<div class="d-inline-block pe-3 lh-lg flex-grow-1">Create a new question</div>
126+
<h4 class="d-inline-block pe-3 lh-lg flex-grow-1">Create a new question</h4>
127127
<div class="d-inline-block">
128128

129129
</div>

templates/admin/rankings.njk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
<div class="card w-100 mt-4 mb-4" id="ranking-new">
4545
<div class="card-header pe-2 d-flex align-items-center">
46-
<div class="d-inline-block pe-3 lh-lg flex-grow-1">Create a new ranking</div>
46+
<h4 class="d-inline-block pe-3 lh-lg flex-grow-1">Create a new ranking</h4>
4747
<div class="d-inline-block">
4848

4949
</div>

templates/admin/titles.njk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
<div class="card w-100 mt-4 mb-4" id="title-new">
4141
<div class="card-header pe-2 d-flex align-items-center">
42-
<div class="d-inline-block pe-3 lh-lg flex-grow-1">Create a new title</div>
42+
<h4 class="d-inline-block pe-3 lh-lg flex-grow-1">Create a new title</h4>
4343
<div class="d-inline-block">
4444

4545
</div>

0 commit comments

Comments
 (0)