-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
138 lines (124 loc) · 4.26 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
//Inicialización de objetos a utilizar
const btnStart = document.getElementById('btn-start');
const btnSettings = document.getElementById('btn-settings');
const btnsGroups = document.getElementsByClassName('btn-selection');
const btnServerSettings = document.getElementById('btn-url');
const btnRedirectTable = document.getElementById('btn-table');
function saveSettings() {
settings.team = document.getElementById('nameGroupInput').value;
settings.type = document.getElementById('typeTest').value;
sessionStorage.setItem('settings', JSON.stringify(settings));
}
function resetPlayers() {
players = [];
sessionStorage.removeItem('players');
}
function saveGameData(questions) {
let isValidPlayersData = true;
for (let currentPlayer in players) {
if (players[currentPlayer] === null) {
isValidPlayersData = false;
break;
}
}
if (isValidPlayersData) {
sessionStorage.setItem('players', JSON.stringify(players));
sessionStorage.setItem('questions', JSON.stringify(questions));
} else {
Swal.fire('Error', 'Asegurese de completar la información de los jugadores', 'error');
}
}
async function createPlayer(position) {
if (players[position] !== undefined) {
return;
}
const { value: nickName } = await Swal.fire({
title: `Ingrese nombre de jugador ${position + 1}`,
input: 'text',
inputLabel: 'Nombre:',
showCancelButton: false,
allowOutsideClick: false,
confirmButtonColor: '#4d908e',
inputValidator: (value) => {
if (!value) {
return 'El nombre no puede ser vacio';
}
}
});
if (nickName !== undefined) {
players[position] = {
"name": nickName,
"score": 0,
"correctQuestions": 0
};
}
}
function loadGroupData(event) {
for (let i = 0; i < btnsGroups.length; i++) {
const stylesCurrentNode = btnsGroups[i].classList;
if (stylesCurrentNode.contains('radio-selection')) {
stylesCurrentNode.remove('radio-selection');
}
}
settings.members = Number(event.target.innerText);
event.target.classList.add('radio-selection');
}
async function consultQuestions() {
try {
return await get(`/questions?category=${settings.type}`);
} catch (error) {
return null;
}
}
// Manejadores de eventos
window.addEventListener('load', () => {
loadData();
for (let i = 0; i < btnsGroups.length; i++) {
btnsGroups[i].addEventListener('click', loadGroupData);
}
});
function cleanBooleanValues(questions){
const response = [...questions];
for(let i = 0; i < questions.length; i++){
if(response[i].type === 'Verdadero Falso'){
response[i].answer = (response[i].answer)? 'Verdadero' : 'Falso';
}
}
return response;
}
btnStart.addEventListener('click', async () => {
if (settings.members === null) {
Swal.fire('Error', 'Asegurese de realizar los ajustes de la partida', 'error');
return;
}
for (let position = 0; position < settings.members; position++) {
await createPlayer(position);
}
const questions = await consultQuestions(server);
if (questions === null) {
Swal.fire('Error', 'No hay conexion con el servidor o no se encuentra configurado', 'error');
return;
}else if(questions.length === 0){
Swal.fire('Error', 'Hubo un error en la consulta de preguntas', 'error');
return;
}
saveGameData(cleanBooleanValues(questions));
window.location.replace("pages/main.html");
});
btnSettings.addEventListener('click', () => {
saveSettings();
resetPlayers();
});
btnServerSettings.addEventListener('click', () => {
let url = String(document.getElementById('serverInput').value);
if(url === '' || url === null || url === undefined){
Swal.fire('Error', 'La dirección no puede ser vacia', 'error');
return;
}
url = (url.charAt(url.length-1) === '/') ? url.substring(0,url.length-2) : url;
localStorage.setItem('server', url);
Swal.fire('Info', 'Información guardada de forma exitosa', 'success');
});
btnRedirectTable.addEventListener('click',() => {
window.location.replace("pages/scores.html");
});