-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
162 lines (146 loc) · 4.52 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import * as clack from "@clack/prompts";
import { setTimeout } from "node:timers/promises";
import color from "picocolors";
let counterErrors;
async function main() {
console.clear();
counterErrors = 0;
await setTimeout(1000);
clack.intro(
`${color.underline("Let's see how much you know about web development.")}`
);
const project = await clack.group(
{
firstQ: () =>
clack.select({
message: `Question 1: What is the purpose of the "viewport" meta tag in HTML?`,
options: shuffleAnswers([
{
value: "1",
label: "Specifies the character encoding of the document",
},
{
value: "2",
label: "Defines the visible area of a web page on a device",
},
{ value: "3", label: "Manages the version control of the webpage" },
]),
}),
secondQ: () =>
clack.select({
message: `Question 2: In the context of JavaScript, what is a closure?`,
options: shuffleAnswers([
{
value: "1",
label: "A function that is called before the page is loaded",
},
{
value: "2",
label:
"A function that has access to an outer function's scope from within its own scope",
},
{
value: "3",
label:
"A variable declared inside a function using the 'var' keyword",
},
]),
}),
thirdQ: () =>
clack.select({
message: `Question 3: Which organization is responsible for defining web standards, including HTML and CSS?`,
options: shuffleAnswers([
{ value: "1", label: "W3C (World Wide Web Consortium)" },
{
value: "2",
label: "IETF (Internet Engineering Task Force)",
},
{
value: "3",
label: "ISO (International Organization for Standardization)",
},
]),
}),
fourthQ: () =>
clack.select({
message: `Question 4: What is the role of the "defer" attribute in the "script" tag?`,
options: shuffleAnswers([
{
value: "1",
label:
"Delays the execution of the script until after the page has been parsed",
},
{
value: "2",
label: "Specifies that the script should be executed immediately",
},
{
value: "3",
label:
"Determines the order in which multiple scripts are executed on a page",
},
]),
}),
fifthQ: () =>
clack.select({
message: `Question 5: What is the role of the "DOCTYPE" declaration in an HTML document?`,
options: shuffleAnswers([
{
value: "1",
label: "Specifies the character encoding of the document",
},
{
value: "2",
label: "Includes external stylesheets in the document",
},
{
value: "3",
label:
"Defines what elements and attributes are allowed to be used in a certain flavor of HTML",
},
]),
}),
},
{
onCancel: () => {
clack.cancel("Operation cancelled.");
process.exit(0);
},
}
);
const s = clack.spinner();
s.start("Checking answers...");
checkAnswers(project);
await setTimeout(2000);
s.stop(
`Answers checked, errors : ${
counterErrors ? `${counterErrors} ❌` : `${counterErrors} ✅ congrats!`
}`
);
const project2 = await clack.group({
confirm: () =>
clack.confirm({
message: `Want to try again ?`,
initialValue: false,
options: [
{ value: true, label: "Yes, please" },
{ value: false, label: "No, thanks" },
],
}),
});
project2.confirm ? main() : clack.outro(`Thanks for trying!`);
}
const checkAnswers = (project) => {
checkAnswer(project.firstQ, "2");
checkAnswer(project.secondQ, "2");
checkAnswer(project.thirdQ, "1");
checkAnswer(project.fourthQ, "1");
checkAnswer(project.fifthQ, "3");
};
const checkAnswer = (answer, rightAnswer) => {
return answer == rightAnswer ? "" : counterErrors++;
};
const shuffleAnswers = (answersArray) => {
return answersArray.sort(() => Math.random() - 0.5);
};
main().catch(console.error);