Skip to content

Commit cb9ef74

Browse files
authored
Merge pull request #66 from Nefariusek/feature/issue-50
Feature/issue 50
2 parents 5d8d1e2 + 83c05b6 commit cb9ef74

File tree

4 files changed

+82
-26
lines changed

4 files changed

+82
-26
lines changed

src/views/Leaderboard/Leaderboard.css

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ div#scorePage > * {
33
background-color: #8ab0ab;
44
margin: 0;
55
padding: 0;
6-
font-family: 'Bebas Neue', cursive;
76
}
87

98
#scorePage {
@@ -30,7 +29,7 @@ div#scorePage > * {
3029
display: flex;
3130
justify-content: center;
3231
text-transform: uppercase;
33-
font-size: 2rem;
32+
font-size: 1.5rem;
3433
word-wrap: break-word;
3534
max-width: 180px;
3635
color: whitesmoke;
@@ -73,10 +72,11 @@ td.step div:first-of-type {
7372

7473
.listItem {
7574
display: inline-block;
76-
width: 6rem;
77-
margin: 1rem;
75+
width: 100%;
76+
height: 50%;
77+
margin: 0.8rem 0.5rem;
7878
text-transform: uppercase;
79-
font-size: 2rem;
79+
font-size: 1.4rem;
8080
color: whitesmoke;
8181
}
8282

@@ -93,9 +93,29 @@ button.resetButton {
9393
}
9494

9595
@media (max-width: 960px) {
96+
.podiumNick {
97+
font-size: 1rem;
98+
}
99+
.listItem {
100+
font-size: 0.8rem;
101+
}
102+
103+
#scorePageTitle {
104+
font-size: 3rem;
105+
}
106+
107+
button.leaderboardMenuButton {
108+
bottom: 0;
109+
left: 0;
110+
width: min-content;
111+
}
112+
td.step div:first-of-type {
113+
width: 100px;
114+
}
115+
96116
button.resetButton {
97117
bottom: 0;
98118
right: 0;
99119
width: min-content;
100120
}
101-
}
121+
}

src/views/Leaderboard/Leaderboard.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,17 @@ function renderPodium() {
5454

5555
function getScoreFromLocalStorage() {
5656
const highScores = JSON.parse(localStorage.getItem('quizScores')) || [];
57-
highScores.sort((a, b) => b.score - a.score);
57+
highScores.sort((a, b) => b.SCORE - a.SCORE);
5858
function showScore() {
59-
// nick1.innerText = `pts: ${Object.values(highScores[0])}`;
60-
// nick2.innerText = `pts: ${Object.values(highScores[1])}`;
61-
// nick3.innerText = `pts: ${Object.values(highScores[2])}`;
62-
// nick4.innerText = Object.values(highScores[3]);
63-
// nick5.innerText = Object.values(highScores[4]);
64-
// nick6.innerText = Object.values(highScores[5]);
65-
// nick7.innerText = Object.values(highScores[6]);
66-
// nick8.innerText = Object.values(highScores[7]);
67-
// nick9.innerText = Object.values(highScores[8]);
59+
nick1.innerText = `${highScores[0].NAME} Pts:${highScores[0].SCORE}`;
60+
nick2.innerText = `${highScores[1].NAME} Pts:${highScores[1].SCORE}`;
61+
nick3.innerText = `${highScores[2].NAME} Pts:${highScores[2].SCORE}`;
62+
nick4.innerText = `${highScores[3].NAME} Pts:${highScores[3].SCORE}`;
63+
nick5.innerText = `${highScores[4].NAME} Pts:${highScores[4].SCORE}`;
64+
nick6.innerText = `${highScores[5].NAME} Pts:${highScores[5].SCORE}`;
65+
nick7.innerText = `${highScores[6].NAME} Pts:${highScores[6].SCORE}`;
66+
nick8.innerText = `${highScores[7].NAME} Pts:${highScores[7].SCORE}`;
67+
nick9.innerText = `${highScores[8].NAME} Pts:${highScores[8].SCORE}`;
6868
}
6969
return showScore();
7070
}

src/views/ScorePage/ScorePage.css

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,25 @@ h2 {
1111

1212
#nickFormDiv {
1313
margin-top: 10px;
14+
display: flex;
1415
justify-content: center;
1516
width: 70%;
1617
margin: auto;
17-
display: flex;
1818
gap: 5%;
1919
}
2020

2121
#nickname {
2222
border: 0px solid;
23-
width: 400px;
23+
width: 250px;
2424
height: 48px;
2525
}
2626

2727
#nickname:hover {
2828
color: white;
2929
}
30+
#nickname:disabled {
31+
opacity: 0;
32+
}
3033

3134
#nickname::placeholder {
3235
color: lightgray;
@@ -50,6 +53,11 @@ input {
5053
bottom: 2%;
5154
right: 4%;
5255
}
56+
57+
.saveScoreBtn:disabled {
58+
opacity: 0;
59+
}
60+
5361
#finalScore {
5462
height: 70px;
5563
}

src/views/ScorePage/ScorePage.js

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,54 @@ import { userAnswers } from '../QuizView/quizView';
77

88
export function renderScorePage() {
99
const recentUserScore = getCurrentScore(userAnswers);
10-
10+
const totalNumber = QuizSettings.questionsNum;
1111
const container = document.createElement('div');
1212
container.setAttribute('id', 'scorePage');
1313
container.append(
1414
renderGraphics(),
15-
renderScore(recentUserScore),
15+
renderScore(recentUserScore, totalNumber),
1616
renderNickForm(),
1717
renderMenuButton(),
1818
renderPlayAgainButton(),
1919
);
2020
document.querySelector('#app').append(container);
21+
renderCongratsMessage(recentUserScore, totalNumber);
22+
document.querySelector('.saveScoreBtn').disabled = true;
2123
}
2224

23-
function renderScore(score) {
25+
function renderScore(score, totalNumber) {
2426
const container = document.createElement('div');
2527
const congratsText = document.createElement('h2');
2628
const scoreText = document.createElement('h2');
2729
const finalScore = document.createElement('h2');
2830
finalScore.setAttribute('id', 'finalScore');
2931
congratsText.innerText = 'CONGRATS!';
3032
scoreText.innerText = `YOUR SCORE IS: ${score}`;
33+
congratsText.setAttribute('id', 'congratsText');
34+
congratsText.innerText = '';
35+
scoreText.innerText = `YOUR SCORE IS: ${score} / ${totalNumber}`;
3136
container.append(congratsText, scoreText, finalScore);
3237
return container;
3338
}
3439

40+
function getCongratsMessage(recentUserScore, totalNumber) {
41+
let message;
42+
const totalPercent = Math.floor((recentUserScore / totalNumber) * 100);
43+
if (totalPercent >= 80) {
44+
message = `"WOW"! Your score is ${totalPercent}%! You are True animal lover!`;
45+
} else if (totalPercent >= 50) {
46+
message = `You could use a litte practice! Your score is ${totalPercent}% Would you like to do the quiz again?`;
47+
} else {
48+
message = `Well, it could be better! Your score is ${totalPercent}% Would you like to do the quiz again?`;
49+
}
50+
return message;
51+
}
52+
53+
function renderCongratsMessage(recentUserScore, totalNumber) {
54+
const finalMessage = document.getElementById('congratsText');
55+
finalMessage.innerText = getCongratsMessage(recentUserScore, totalNumber);
56+
}
57+
3558
function renderGraphics() {
3659
const img = document.createElement('img');
3760
img.src = './cat.png';
@@ -50,6 +73,9 @@ function renderNickForm() {
5073
input.setAttribute('placeholder', 'Enter Nickname');
5174
input.setAttribute('type', 'text');
5275
input.setAttribute('style', 'text-transform: uppercase');
76+
input.addEventListener('keyup', () => {
77+
document.querySelector('.saveScoreBtn').disabled = !input.value;
78+
});
5379
nickFormContainer.append(input, Button('SUBMIT', 'saveScoreBtn', false, 'click', saveQuizScore));
5480
return nickFormContainer;
5581
}
@@ -60,7 +86,7 @@ function getCurrentScore(Answers) {
6086

6187
function nicknameValidation() {
6288
const input = document.getElementById('nickname');
63-
if (input.value !== '' && input.value !== 'NICKNAME') {
89+
if (input.value !== '') {
6490
return true;
6591
}
6692
return false;
@@ -69,18 +95,20 @@ function nicknameValidation() {
6995
function saveQuizScore() {
7096
const quizScores = JSON.parse(localStorage.getItem('quizScores')) || [];
7197
const recentUserScore = getCurrentScore(userAnswers);
72-
if (!nicknameValidation()) {
73-
alert('Type in your nickname!');
74-
} else {
98+
const nickName = document.getElementById('nickname');
99+
if (nicknameValidation()) {
75100
const score = {
76101
SCORE: recentUserScore,
77102
ABOUT: QuizSettings.quizAbout,
78103
NUMBER: QuizSettings.questionsNum,
79104
TYPE: QuizSettings.questionsType,
80-
NAME: document.getElementById('nickname').value,
105+
NAME: nickName.value,
81106
};
82107
quizScores.push(score);
83108
localStorage.setItem('quizScores', JSON.stringify(quizScores));
109+
nickName.value = null;
110+
nickName.disabled = true;
111+
document.querySelector('.saveScoreBtn').disabled = true;
84112
}
85113
}
86114

0 commit comments

Comments
 (0)