diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa6506f --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# IDE generated files +.idea/ +.vscode/ + +# Dependency directories +node_modules/ + +# OS generated files +DS_Store \ No newline at end of file diff --git a/README.txt b/README.txt deleted file mode 100644 index 217a3a6..0000000 --- a/README.txt +++ /dev/null @@ -1,12 +0,0 @@ -# Liste des easter eggs : - -- Joyeux noël écologique ! : Répondez correctement à toutes les questions du quizz une nouvelle page s'ouvre. Nous avons choisi cet easter egg epuré pour suivre la tendance écologique tout en passant un message de joyeuses fêtes eco-friendly. - -- Konami code : Il faut saisir le code konami (haut, haut, bas, bas, gauche, droite, gauche, droite, b, a) depuis la page d'accueil pour accéder à une page cachée offrant un jeu de rythme inspiré de Dance Dance Revolution. - - -# Jeu de ryhtme : - -Le jeu de rythme que nous avons crée est inspiré de Dance Dance Revolution. La musique utilisée est libre de droit. -Voici comment y accéder : https://youtu.be/SPVopUAqIYI -Il faut effectivement utiliser le Konami Code (haut, haut, bas, bas, gauche, droite, gauche, droite, b, a), depuis la page d'accueil, afin d'y accéder. \ No newline at end of file diff --git a/back/fonctions.js b/back/fonctions.js deleted file mode 100644 index b7fece7..0000000 --- a/back/fonctions.js +++ /dev/null @@ -1,174 +0,0 @@ - -function getTitre (categorie ,indice){// Charger le contenu du fichier JSON - fetch(`./resources/${categorie}.json`) - .then(response => { - if (!response.ok) { - throw new Error(`Erreur de chargement du fichier JSON : ${response.status}`); - } - return response.json(); - }) - .then(objetJson => { - const questions = objetJson.questions; - if (indice >= 0 && indice < questions.length) { - const question = questions[indice].question; - console.log(`Question à l'indice ${indice}: ${question}`); - } else { - console.error(`Indice ${indice} hors de portée.`); - } - }) - .catch(erreur => { - console.error('Erreur lors du chargement du fichier JSON :', erreur.message); - }); -} -function getRep1(categorie, indice){// Charger le contenu du fichier JSON - fetch(`./resources/${categorie}.json`) - .then(response => { - if (!response.ok) { - throw new Error(`Erreur de chargement du fichier JSON : ${response.status}`); - } - return response.json(); - }) - .then(objetJson => { - const questions = objetJson.questions; - if (indice >= 0 && indice < questions.length) { - const rep = questions[indice].options[0].text; - console.log(`Reponse à l'indice ${indice}: ${rep}`); - return rep; - } else { - console.error(`Indice ${indice} hors de portée.`); - } - }) - .catch(erreur => { - console.error('Erreur lors du chargement du fichier JSON :', erreur.message); - }); -} -function getRep2(categorie, indice){// Charger le contenu du fichier JSON - fetch(`./resources/${categorie}.json`) - .then(response => { - if (!response.ok) { - throw new Error(`Erreur de chargement du fichier JSON : ${response.status}`); - } - return response.json(); - }) - .then(objetJson => { - const questions = objetJson.questions; - if (indice >= 0 && indice < questions.length) { - const rep = questions[indice].options[1].text; - console.log(`Reponse à l'indice ${indice}: ${rep}`); - return rep; - } else { - console.error(`Indice ${indice} hors de portée.`); - } - }) - .catch(erreur => { - console.error('Erreur lors du chargement du fichier JSON :', erreur.message); - }); -} -function getVrai(categorie, indice){ - fetch(`./resources/${categorie}.json`) - .then(response => { - if (!response.ok) { - throw new Error(`Erreur de chargement du fichier JSON : ${response.status}`); - } - return response.json(); - }) - .then(objetJson => { - const questions = objetJson.questions; - if (indice >= 0 && indice < questions.length) { - const vrai = questions[indice].reponse; - console.log(`vraie reponse ${indice}: ${vrai}`); - return vrai; - } else { - console.error(`Indice ${indice} hors de portée.`); - } - }) - .catch(erreur => { - console.error('Erreur lors du chargement du fichier JSON :', erreur.message); - }); -} -function getDescription(categorie, indice){ - fetch(`./resources/${categorie}.json`) - .then(response => { - if (!response.ok) { - throw new Error(`Erreur de chargement du fichier JSON : ${response.status}`); - } - return response.json(); - }) - .then(objetJson => { - const questions = objetJson.questions; - if (indice >= 0 && indice < questions.length) { - const description = questions[indice].description; - console.log(`description ${indice}: ${description}`); - return description; - } else { - console.error(`Indice ${indice} hors de portée.`); - } - }) - .catch(erreur => { - console.error('Erreur lors du chargement du fichier JSON :', erreur.message); - }); -} -function getImg1(categorie, indice){ - fetch(`./resources/${categorie}.json`) - .then(response => { - if (!response.ok) { - throw new Error(`Erreur de chargement du fichier JSON : ${response.status}`); - } - return response.json(); - }) - .then(objetJson => { - const questions = objetJson.questions; - if (indice >= 0 && indice < questions.length) { - const img = questions[indice].options[0].img; - console.log(`vraie reponse ${indice}: ${img}`); - return img; - } else { - console.error(`Indice ${indice} hors de portée.`); - } - }) - .catch(erreur => { - console.error('Erreur lors du chargement du fichier JSON :', erreur.message); - }); -} -function getImg2(categorie, indice){ - fetch(`./resources/${categorie}.json`) - .then(response => { - if (!response.ok) { - throw new Error(`Erreur de chargement du fichier JSON : ${response.status}`); - } - return response.json(); - }) - .then(objetJson => { - const questions = objetJson.questions; - if (indice >= 0 && indice < questions.length) { - const img = questions[indice].options[1].img; - console.log(`vraie reponse ${indice}: ${img}`); - return img; - } else { - console.error(`Indice ${indice} hors de portée.`); - } - }) - .catch(erreur => { - console.error('Erreur lors du chargement du fichier JSON :', erreur.message); - }); -} - -// function for random index of a function - - - function getIndex(tableauDentiers){ - if (tableauDentiers.length == 0){ - return -1; - } - const indiceAleatoire = Math.floor(Math.random() * tableauDentiers.length); - tableauDentiers.splice(indiceAleatoire, 1); - console.log(tableauDentiers); // Affiche : [1, 2, 4, 5] - return indiceAleatoire; - } - document.addEventListener('DOMContentLoaded', ()=> - { - const tableauDentiers = [1, 2, 3, 4, 5]; - } - ) - - diff --git a/back/indextest.html b/back/indextest.html deleted file mode 100644 index d3592a8..0000000 --- a/back/indextest.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Title - - - - - - \ No newline at end of file diff --git a/back/resources/Commerce.json b/back/resources/Commerce.json deleted file mode 100644 index 15d626c..0000000 --- a/back/resources/Commerce.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "nomcatCategorie": "Commerce", - "questions": [ - {"question": "Quel est l'impact environnemental des sacs réutilisables par rapport aux sacs plastiques jetables?", - "options": [ - { - "text": "Les sacs réutilisables ont généralement une empreinte carbone initiale plus élevée que les sacs plastiques jetables en raison de leur production, mais ils deviennent plus écologiques à long terme grâce à leur réutilisation fréquente.", - "img": "./img/Commerce/sac_lin.jpg" - }, - {"text": "Les sacs réutilisables ont une empreinte carbone beaucoup plus faible que les sacs plastiques jetables dès le départ, contribuant ainsi immédiatement à la lutte contre le réchauffement climatique.", - "img": "./img/Commerce/sac_plastique.jpg" - } - ], - "reponse": 0, - "description": "Pour que le sac de polypropylène tissé ait une moins grande incidence sur l’environnement que le cabas de plastique traditionnel, il doit être utilisé de 16 à 98 fois. Autrement dit, plus on l’utilise souvent, plus il est avantageux sur le plan écologique, et ce, notamment parce que sa conception entraîne une plus grande quantité de gaz à effet de serre (GES) que celle du sac de plastique traditionnel." - }, - {"question": "Quel est l'impact environnemental des batteries de téléphone remplaçables par rapport aux batteries intégrées?", - "options": [ - { - "text": "Les batteries intégrées sont plus écologiques car leur conception compacte et intégrée réduit la nécessité de ressources supplémentaires pour la fabrication de boîtiers et de connexions.", - "img": "./img/Commerce/iphone_moderne.jpg" - }, - {"text": "Les batteries de téléphone remplaçables ont tendance à être plus favorables à l'environnement à long terme, car elles permettent aux utilisateurs de remplacer uniquement la batterie défectueuse plutôt que l'ensemble du téléphone, réduisant ainsi la production de déchets électroniques.", - "img": "./img/Commerce/tel_demonte.jpg" - } - ], - "reponse": 1, - "description": "La fabrication d’un smartphone (de l’extraction des minerais à\nl’assemblage final) est responsable d’environ trois quarts de ces\nimpacts, qui sont en grande partie imputables à l’écran et aux\ncomposants électroniques complexes (microprocesseurs, etc.).\nLa distribution et l’utilisation du smartphone ont moins d’impacts.\nIls sont essentiellement liés à l’énergie consommée pour le trans-\nport et la production d’électricité. L’étape de la fin de vie a des\nimpacts variables selon que le smartphone est recyclé ou non" - }, - {"question": " Quel est l'impact environnemental des pailles en papier par rapport aux pailles en plastique?", - "options": [ - { - "text": " Les pailles en plastique sont plus respectueuses de l'environnement car leur production nécessite moins de ressources que celle des pailles en papier. Bien que les pailles en plastique posent des problèmes de déchets, les pailles en papier peuvent contribuer à la déforestation.\n", - "img": "./img/Commerce/paille_plastique.jpg" - }, - {"text": "Les pailles en papier sont généralement considérées comme plus écologiques que les pailles en plastique, car elles sont biodégradables et se décomposent plus rapidement. Cependant, leur production nécessite également des ressources en eau et en énergie.", - "img": "./img/Commerce/paille_papier.jpg" - } - ], - "reponse": 1, - "description": "Les pailles en papier sont considérées comme plus écologiques en raison de leur biodégradabilité, se décomposant naturellement sans créer de résidus nocifs. Fabriquées à partir de ressources renouvelables comme le bois, elles réduisent la dépendance aux combustibles fossiles par rapport aux pailles en plastique. Bien que la production de papier ait des impacts, les pailles en papier recyclables ou compostables offrent des options de gestion des déchets plus respectueuses de l'environnement que leurs homologues en plastique." - }, - {"question": "Quel est l'impact environnemental de l'achat local par rapport à l'achat de produits importés?", - "options": [ - { - "text": "L'achat local a souvent un impact environnemental moindre en raison de la réduction des émissions de gaz à effet de serre liées au transport. En favorisant les produits locaux, on encourage également le développement de pratiques agricoles durables et la préservation des ressources locales.", - "img": "./img/Commerce/achat_local.jpg" - }, - {"text": "L'achat de produits importés est plus écologique car il permet d'accéder à une plus grande variété de produits et de bénéficier des avantages comparatifs des différentes régions du monde. Les produits importés peuvent souvent être produits de manière plus efficace, compensant ainsi les émissions de carbone liées au transport.", - "img": "./img/Commerce/achat_importee_avion.jpg" - } - ], - "reponse": 0, - "description": "L'importation de biens a un impact significatif sur l'environnement en raison des émissions de gaz à effet de serre associées au transport international. Par exemple, le transport maritime, largement utilisé pour les importations, est responsable d'environ 2 à 3 % des émissions mondiales de CO2. De plus, l'importation de biens peut contribuer à des problèmes tels que la déforestation et l'exploitation non durable des ressources naturelles dans les pays exportateurs." - }, - {"question": "Quel est l'impact environnemental de l'achat de produits reconditionnés par rapport à l'achat de produits neufs?", - "options": [ - { - "text": " L'achat de produits neufs est plus respectueux de l'environnement car ils sont fabriqués selon les dernières normes technologiques et environnementales, garantissant une efficacité énergétique supérieure et une durée de vie plus longue. Les produits reconditionnés peuvent être moins fiables et nécessiter des réparations fréquentes, contribuant ainsi à un impact environnemental plus important.", - "img": "./img/Commerce/produit_neuf.jpg" - }, - {"text": "L'achat de produits reconditionnés est généralement plus écologique car cela contribue à réduire la production de déchets électroniques. En réutilisant des produits existants, on diminue la demande de nouvelles ressources et d'énergie nécessaires à la fabrication de produits neufs.", - "img": "./img/Commerce/reconditionne.jpg" - } - ], - "reponse": 1, - "description": "L'achat de produits reconditionnés a un impact environnemental positif en réduisant la production de déchets électroniques. Selon une étude menée par l'Agence de protection de l'environnement des États-Unis (EPA), la production d'un seul ordinateur portable neuf équivaut à environ 160 kg de déchets électroniques, tandis que les produits reconditionnés contribuent à prolonger la durée de vie utile des équipements. De plus, l'achat reconditionné peut aider à réduire la demande de nouvelles ressources et d'énergie nécessaires à la fabrication de produits neufs." - } - ] -} \ No newline at end of file diff --git a/back/resources/Habitat.json b/back/resources/Habitat.json deleted file mode 100644 index 40ca38d..0000000 --- a/back/resources/Habitat.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "nomCategorie": "Habitat", - "questions": [ - { - "question": "Les appareils en veille ne consomment pas beaucoup d'énergie", - - "options": [ - { - "text": "Vrai", - "img": "./Habitat/" - }, - - { - "text": "Faux", - "img": "./Habitat/" - } - ], - - "reponse": 1, - "description":"Selon l'ADEME, la veille des appareils électriques consomme 300 à 500 kWh par an, soit 11% de la facture d'électricité d'un foyer moyen. Cette énergie qui vous est facturée est consommée sans vous apporter du confort supplémentaire. Elle ne fait qu'alimenter des appareils qui sont « en pause »." - }, - - { - "question": "Qu'est-ce qui consomme plus d'eau ? ", - - "options": [ - { - "text": "Prendre une douche de 20 minutes", - "img": "./Habitat/douche.jpg" - }, - - { - "text": "Prendre un bain", - "img": "./Habitat/bain.jpg" - } - ], - - "reponse": 0, - "description": "Prendre un bain consomme en moyenne 150 à 200 litres d'eau et une douche consomme en general entre 15 et 20 litres par minutes. En passant trop de temps sous la douche on consomme plus qu'un bain." - }, - - { - "question": "Même si j'ai des pièces inutilisés il est preferable de chauffer toutes les pièces de la maison plutot", - - "options": [ - { - "text": "Vrai", - "img": "./img/Habitat/" - }, - - { - "text": "Faux", - "img": "./img/Habitat/" - } - ], - - "reponse": 1, - "description": "Un trop grand écart entre les températures des différentes pièces pourrait engendrer une surconsommation. En effet, l’air frais pourrait refroidir les pièces chauffées, et les radiateurs consommeraient donc davantage pour arriver à la température de consigne." - }, - - { - "question": "Pour faire la vaisselle j'utilise plus d'eau", - - "options": [ - { - "text": "En lavant à la main", - "img": "./img/Habitat/laver_vaisselle_alamain.jpg" - }, - - { - "text": "En utilisant un lave-vaisselle", - "img": "./img/Habitat/lavevaisselle.jpg" - } - ], - - "reponse": 0, - "description": "Si la consommation d'eau du lave-vaisselle est en moyenne de 10 litres par cycle, celle à la main est de 40 à 60 litres, sans compter la consommation électrique liée au chauffage de l'eau qui est beaucoup plus importante en vue de la durée prolongée du lavage." - }, - - { - "question": "Un chauffage electrique est toujours plus ecologique qu'un chauffage au bois", - - "options": [ - { - "text": "Oui", - "img": "./img/Habitat/chauffageelectrique.jpg" - }, - - { - "text": "Non", - "img": "./img/Habitat/chauffagebois.jpg" - } - ], - - "reponse": 1, - "description": "Ca dépend de la source d'electricite utilisee (energie renouvelable ou non). Le chauffage au bois reste le moins cher et une bonne isolation vaut mieux que n'importe quel type de chauffage." - } - - - ] -} \ No newline at end of file diff --git a/back/resources/Transport.json b/back/resources/Transport.json deleted file mode 100644 index 0c3e6c7..0000000 --- a/back/resources/Transport.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "nomCategorie": "transport", - "questions": [ - { - "question": "Quel moyen de transport a généralement la plus grande empreinte carbone par passager-kilomètre?", - "options": [ - { - "text": "Voiture individuelle", - "img": "./img/Transport/voiture.jpg" - }, - { - "text": "Avion", - "img": "./img/Transport/avion.jpg" - } - ], - "reponse": 1, - "description":"Les voitures individuelles, en particulier celles qui fonctionnent aux carburants fossiles, ont souvent une consommation élevée de carburant par kilomètre parcouru, ce qui contribue aux émissions de gaz à effet de serre." - }, - { - "question": "Le réseau de trains à grande vitesse (TGV) en France est-il souvent salué pour ses faibles émissions de gaz à effet de serre, principalement grâce à l'utilisation d'énergies renouvelables pour son fonctionnement ?", - "options": [ - { - "text": "Vrai", - "img": "./img/Transport/faibleEmissionGaz.jpg" - }, - { - "text": "Faux", - "img": "./img/Transport/forteEmissionGaz.jpg" - } - ], - "reponse": 0, - "description":" le réseau de trains à grande vitesse (TGV) en France utilise principalement des énergies renouvelables, réduisant ainsi ses émissions de gaz à effet de serre. Cela favorise un mode de transport respectueux de l'environnement." - }, - - { - "question": "Comment la France encourage-t-elle l'adoption de véhicules électriques?", - "options": [ - { - "text":"Par des incitations fiscales", - "img":"./img/Transport/incitation_fiscale.jpg" - }, - { - "text":"Par des limitations de circulation pour les véhicules à essence", - "img": "./img/Transport/vehiculeEssence.jpg" - } - ], - "reponse":0, - "description":" le gouvernement français offre des avantages fiscaux, tels que des réductions d'impôts ou des crédits d'impôt, pour inciter les citoyens à opter pour des véhicules électriques. Ces incitations fiscales visent à stimuler le marché des véhicules électriques en rendant ces alternatives plus attrayantes sur le plan financier, contribuant ainsi à réduire les émissions de gaz à effet de serre liées au secteur des transports." - }, - { - "question": "Quelle ville française a mis en œuvre un système de location de vélos très populaire pour promouvoir des modes de transport plus durables?", - "options": [ - { - "text": "Paris", - "img": "paris.jpg" - }, - { - "text": "Lyon", - "img": "lyon.jpg" - } - ], - "reponse": 0, - "description":"Paris a mis en place un système de location de vélos, connu sous le nom de velib, pour encourager des modes de transport durables. Cette initiative vise à réduire la dépendance aux véhicules individuels motorisés." - }, - { - "question": "Le réseau de trains à grande vitesse (TGV) en France utilise-t-il principalement des énergies renouvelables, ce qui contribue à des émissions de gaz à effet de serre plus faibles ?", - "options": [ - { - "text": "Vrai", - "img": "vrai.jpg" - }, - { - "text": "Faux", - "img": "faux.jpg" - } - ], - "reponse": 0, - "description":"Cette pratique souligne l'engagement en faveur du développement durable dans le domaine des transports en privilégiant des sources d'énergie propres et renouvelables, réduisant ainsi l'impact environnemental du TGV." - } - - ] - } \ No newline at end of file diff --git a/back/resources/img/Commerce/f b/back/resources/img/Commerce/f deleted file mode 100644 index e69de29..0000000 diff --git a/back/resources/img/Habitat/f b/back/resources/img/Habitat/f deleted file mode 100644 index e69de29..0000000 diff --git a/back/resources/img/Phénomènes (Catastrophes)/f b/back/resources/img/Phénomènes (Catastrophes)/f deleted file mode 100644 index e69de29..0000000 diff --git a/back/resources/img/Source Énergie/f b/back/resources/img/Source Énergie/f deleted file mode 100644 index e69de29..0000000 diff --git a/back/resources/img/Transport/f b/back/resources/img/Transport/f deleted file mode 100644 index e69de29..0000000 diff --git a/back/resources/phenomene_naturelle.json b/back/resources/phenomene_naturelle.json deleted file mode 100644 index 01080f7..0000000 --- a/back/resources/phenomene_naturelle.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "nomCategorie":"Phenomene_naturel", - "questions": [ - { - "question": "Comment les tempêtes hivernales de l'océan Atlantique affectent-elles annuellement certaines régions de la France?", - "options": [ - { - "text": "Impact significatif", - "img": "./img/Phenomenes/impactSignificatif.jpg" - }, - { - "text": "Aucun impact", - "img": "./img/Phenomenes/absenceImpact.jpg" - } - ], - "reponse": 0, - "description": "Les tempêtes hivernales de l'océan Atlantique ont un impact significatif sur la biodiversité, les forêts et les infrastructures en France, causant des conséquences environnementales importantes." - }, - { - "question": "Les inondations fréquentes dans les régions méditerranéennes, comme les Cévennes, contribuent-elles à la perte annuelle de biodiversité?", - "options": [ - { - "text": "Contribuent à la perte de biodiversité", - "img": "./img/Phenomenes/inondations.jpg" - }, - { - "text": "Aucun impact sur la biodiversité", - "img": "./img/Phenomenes/absencePerteBiodiversite.jpg" - } - ], - "reponse": 0, - "description": "Les inondations récurrentes dans les régions méditerranéennes, telles que les Cévennes, ont un impact sur l'écosystème local, entraînant la perte de biodiversité et des changements environnementaux." - }, - { - "question": "Quel est l'impact environnemental annuel des incendies de forêt en France, et comment cela contribue-t-il aux changements climatiques?", - "options": [ - { - "text": "Émissions de gaz à effet de serre", - "img": "./img/Phenomenes/incendiesForet.jpg" - }, - { - "text": "Érosion des sols", - "img": "./img/PhenomenesNaturels/erosionSols.jpg" - } - ], - "reponse": 0, - "description": "Les incendies de forêt ont des impacts environnementaux graves, contribuant principalement aux émissions de gaz à effet de serre et amplifiant les changements climatiques." - }, - { - "question": "Comment les avalanches récurrentes dans les régions montagneuses de la France affectent-elles la stabilité des écosystèmes alpins et des habitats naturels?", - "options": [ - { - "text": "Dommages écologiques", - "img": "./img/PhenomenesNaturels/avalanches.jpg" - }, - { - "text": "Mesures de conservation", - "img": "./img/PhenomenesNaturels/mesuresConservation.jpg" - } - ], - "reponse": 0, - "description": "Les avalanches peuvent causer des dommages écologiques importants, nécessitant des mesures de conservation pour restaurer la stabilité des écosystèmes alpins." - }, - { - "question": "Les vagues de chaleur annuelles provoquent-elles du stress sur les écosystèmes, des sécheresses et une détérioration de la qualité de l'air en France?", - "options": [ - { - "text": "Provoquent du stress sur les écosystèmes", - "img": "./img/Phenomenes/vaguesChaleur.jpg" - }, - { - "text": "Aucun effet sur les écosystèmes", - "img": "./img/Phenomenes/absenceEffetEcosysteme.jpg" - } - ], - "reponse": 0, - "description": "Les vagues de chaleur ont des conséquences écologiques, induisant un stress sur les écosystèmes, des sécheresses et une détérioration de la qualité de l'air en France." - } - ] - -} - diff --git a/back/resources/sources_energetiques.json b/back/resources/sources_energetiques.json deleted file mode 100644 index 3f97888..0000000 --- a/back/resources/sources_energetiques.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "nomcat": "Sources Énergetiques", - "questions": [ - { - "question": "Quel est l'impact environnemental de l'énergie nucléaire par rapport aux énergies fossiles?", - "options": [ - { - "text": "L'énergie nucléaire est plus néfaste pour l'environnement que les énergies fossiles, car elle génère des déchets radioactifs dangereux et pose des risques significatifs en cas d'accidents nucléaires, comme l'a montré l'accident de Tchernobyl.", - "img": "./img/energies/chernobyl_et_tout.jpg" - }, - { - "text": "L'énergie nucléaire produit une quantité d'énergie considérable tout en émettant très peu de gaz à effet de serre, réduisant ainsi son impact sur le changement climatique par rapport aux énergies fossiles comme le charbon et le pétrole.", - "img": "./img/energies/nucleaire_cool.jpg" - } - ], - "reponse": 1, - "description": "L'énergie nucléaire est souvent considérée comme ayant un impact environnemental relativement faible en raison de sa faible émission de gaz à effet de serre lors de la production d'électricité, contribuant ainsi à atténuer le changement climatique. Les centrales nucléaires génèrent une quantité importante d'électricité avec une émission de CO2 environ 10 à 20 fois inférieure à celle des centrales au charbon. De plus, les déchets radioactifs produits par l'énergie nucléaire sont gérés de manière sûre et sécurisée, avec des taux de confinement et de stockage élevés pour minimiser les risques pour la santé et l'environnement. Cependant, les préoccupations subsistent quant à la gestion à long terme des déchets radioactifs et aux risques associés à d'éventuels accidents nucléaires." - }, - { - "question": "Quelle est l'efficacité des panneaux solaires par rapport à d'autres sources d'énergie?", - "options": [ - { - "text": "Les panneaux solaires ont une efficacité croissante et peuvent atteindre jusqu'à 20-25%, ce qui en fait une source d'énergie renouvelable de plus en plus compétitive par rapport aux sources traditionnelles telles que le charbon ou le gaz.", - "img": "./img/energies/panneaux_solaires_cool.jpg" - }, - { - "text": "Les panneaux solaires sont moins efficaces que d'autres sources d'énergie, car leur rendement est limité et dépend fortement des conditions météorologiques. En outre, la production des panneaux solaires génère des déchets toxiques qui affectent l'environnement.", - "img": "./img/energies/panneaux_solaires_bof.jpg" - } - ], - "reponse": 0, - "description": "Les avancées technologiques ont contribué à l'efficacité croissante des panneaux solaires. L'utilisation de matériaux semi-conducteurs plus performants, tels que le silicium monocristallin et le silicium polycristallin, a amélioré le rendement énergétique. Les innovations dans la conception des cellules solaires, telles que les cellules bifaciales et les cellules à hétérojonction, ont également optimisé la capture de l'énergie solaire, augmentant ainsi l'efficacité des panneaux solaires au fil du temps. De plus, la recherche continue sur les matériaux et les techniques de fabrication vise à accroître davantage l'efficacité tout en réduisant les coûts." - }, - { - "question": "Quels sont les dangers potentiels associés aux éoliennes?", - "options": [ - { - "text": "Les éoliennes ne présentent aucun danger pour l'environnement ou la santé humaine. Les préoccupations concernant les impacts sur la faune sont souvent exagérées, et les avantages en termes d'énergie renouvelable surpassent largement les inconvénients potentiels.", - "img": "./img/energies/eolienne_bien.jpg" - }, - { - "text": "Certains des dangers potentiels des éoliennes comprennent le risque de collisions d'oiseaux et de chauves-souris avec les pales, ainsi que des préoccupations liées à la modification du paysage visuel dans certaines zones. Des études sont en cours pour évaluer ces impacts.", - "img": "./img/energies/eolienne_mal.jpg" - } - ], - "reponse": 1, - "description": "Les éoliennes peuvent présenter des dangers potentiels pour la vie locale, notamment le risque de collisions entre les pales et la faune aviaire, en particulier les oiseaux et les chauves-souris. Des études indiquent que certaines espèces peuvent être impactées, bien que la portée de cet impact varie selon les emplacements et les conditions environnementales spécifiques. De plus, des préoccupations ont été soulevées quant aux perturbations du paysage visuel, ce qui peut affecter la qualité de vie des habitants des zones où les éoliennes sont implantées." - }, - { - "question": "Question : Quel est le pourcentage approximatif mondial actuel d'utilisation des énergies renouvelables dans le mix énergétique?", - "options": [ - { - "text": "Environ 8% des besoins énergétiques mondiaux sont actuellement couverts par des sources d'énergie renouvelable, indiquant un progrès plus lent que prévu dans la transition vers ces sources d'énergie.", - "img": ".img/energies/photo_basique_transition_energetique.jpg" - }, - { - "text": "Environ 26% des besoins énergétiques mondiaux sont actuellement couverts par des sources d'énergie renouvelable, montrant une tendance à la hausse au fil des années.", - "img": ".img/energies/photo_basique_transition_energetique2.jpg" - } - ], - "reponse": 1, - "description": "Actuellement, environ 26% des besoins énergétiques mondiaux proviennent de sources d'énergie renouvelable, reflétant une augmentation constante de l'adoption de ces technologies. Cette croissance est stimulée par les efforts accrus de nombreux pays pour atteindre leurs objectifs en matière de climat et réduire leur dépendance aux combustibles fossiles. Les secteurs solaire et éolien ont été particulièrement dynamiques dans cette transition, contribuant de manière significative à la part croissante des énergies renouvelables dans le mix énergétique mondial." - }, - { - "question": "Le forage hydraulique est plus propre que l'éxtraction naturelle de gaz", - "options": [ - { - "text": "Vrai", - "img": "./img/energies/image_de_gaz_naturel.jpg" - }, - { - "text": "Faux", - "img": "./img/energies/extraction_petrole.jpg" - } - ], - "reponse": 1, - "description": "Le fracking peut avoir un impact environnemental plus important que l'extraction normale de pétrole en raison de la pollution potentielle des eaux souterraines, des émissions de gaz à effet de serre lors de la libération de méthane et des risques sismiques associés à cette technique." - } - ] -} \ No newline at end of file diff --git a/fichierplaceholder b/fichierplaceholder deleted file mode 100644 index 1a9cc2b..0000000 --- a/fichierplaceholder +++ /dev/null @@ -1 +0,0 @@ -p diff --git a/front/defis.md b/front/defis.md deleted file mode 100644 index 92baa3a..0000000 --- a/front/defis.md +++ /dev/null @@ -1,15 +0,0 @@ -# Easter egg : - -- Faire une liste (README) des easter egg et de la façon d'y accéder -- Evaluer sur la quantité et la qualité - -A la conquete de l'oeuf de paque : - -- Evaluer sur la complexité de la combinaison pour le trouver -- Evaluer sur la nature de l'EE -- Evaluation sur l'adequation avec le reste du site -- Faire un README avec la description de la démarche, les choix techniques, le - choix de l'EE - -Accessibilité : -- \ No newline at end of file diff --git a/front/easterEggEtoile.html b/front/easterEggEtoile.html deleted file mode 100644 index f3bace3..0000000 --- a/front/easterEggEtoile.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - Noël Écologique - - - - -

Joyeux Noël Écologique !

-

En cette période festive, pensons à la nature et à la durabilité.

-

Faites un geste écologique pendant les fêtes ! 🌲

- -
-

-
🎅
-

-
- - - - diff --git a/front/easter_eggs.md b/front/easter_eggs.md deleted file mode 100644 index 81f2b91..0000000 --- a/front/easter_eggs.md +++ /dev/null @@ -1,4 +0,0 @@ -# Liste des easter eggs : - -- Joyeux noël écologique ! : Répondez juste à toutes les questions du quizz une - nouvelle page s'ouvre. \ No newline at end of file diff --git a/front/font/inter/Inter-Black.ttf b/front/font/inter/Inter-Black.ttf deleted file mode 100644 index b27822b..0000000 Binary files a/front/font/inter/Inter-Black.ttf and /dev/null differ diff --git a/front/font/inter/Inter-Bold.ttf b/front/font/inter/Inter-Bold.ttf deleted file mode 100644 index fe23eeb..0000000 Binary files a/front/font/inter/Inter-Bold.ttf and /dev/null differ diff --git a/front/font/inter/Inter-ExtraBold.ttf b/front/font/inter/Inter-ExtraBold.ttf deleted file mode 100644 index 874b1b0..0000000 Binary files a/front/font/inter/Inter-ExtraBold.ttf and /dev/null differ diff --git a/front/font/inter/Inter-ExtraLight.ttf b/front/font/inter/Inter-ExtraLight.ttf deleted file mode 100644 index c993e82..0000000 Binary files a/front/font/inter/Inter-ExtraLight.ttf and /dev/null differ diff --git a/front/font/inter/Inter-Light.ttf b/front/font/inter/Inter-Light.ttf deleted file mode 100644 index 71188f5..0000000 Binary files a/front/font/inter/Inter-Light.ttf and /dev/null differ diff --git a/front/font/inter/Inter-Medium.ttf b/front/font/inter/Inter-Medium.ttf deleted file mode 100644 index a01f377..0000000 Binary files a/front/font/inter/Inter-Medium.ttf and /dev/null differ diff --git a/front/font/inter/Inter-Regular.ttf b/front/font/inter/Inter-Regular.ttf deleted file mode 100644 index 5e4851f..0000000 Binary files a/front/font/inter/Inter-Regular.ttf and /dev/null differ diff --git a/front/font/inter/Inter-SemiBold.ttf b/front/font/inter/Inter-SemiBold.ttf deleted file mode 100644 index ecc7041..0000000 Binary files a/front/font/inter/Inter-SemiBold.ttf and /dev/null differ diff --git a/front/font/inter/Inter-Thin.ttf b/front/font/inter/Inter-Thin.ttf deleted file mode 100644 index fe77243..0000000 Binary files a/front/font/inter/Inter-Thin.ttf and /dev/null differ diff --git a/front/font/manrope/Manrope-Bold.ttf b/front/font/manrope/Manrope-Bold.ttf deleted file mode 100644 index 98c1c3d..0000000 Binary files a/front/font/manrope/Manrope-Bold.ttf and /dev/null differ diff --git a/front/font/manrope/Manrope-ExtraBold.ttf b/front/font/manrope/Manrope-ExtraBold.ttf deleted file mode 100644 index 369d719..0000000 Binary files a/front/font/manrope/Manrope-ExtraBold.ttf and /dev/null differ diff --git a/front/font/manrope/Manrope-ExtraLight.ttf b/front/font/manrope/Manrope-ExtraLight.ttf deleted file mode 100644 index 8915d96..0000000 Binary files a/front/font/manrope/Manrope-ExtraLight.ttf and /dev/null differ diff --git a/front/font/manrope/Manrope-Light.ttf b/front/font/manrope/Manrope-Light.ttf deleted file mode 100644 index 4942924..0000000 Binary files a/front/font/manrope/Manrope-Light.ttf and /dev/null differ diff --git a/front/font/manrope/Manrope-Medium.ttf b/front/font/manrope/Manrope-Medium.ttf deleted file mode 100644 index 5eda9ec..0000000 Binary files a/front/font/manrope/Manrope-Medium.ttf and /dev/null differ diff --git a/front/font/manrope/Manrope-Regular.ttf b/front/font/manrope/Manrope-Regular.ttf deleted file mode 100644 index 1a07233..0000000 Binary files a/front/font/manrope/Manrope-Regular.ttf and /dev/null differ diff --git a/front/font/manrope/Manrope-SemiBold.ttf b/front/font/manrope/Manrope-SemiBold.ttf deleted file mode 100644 index b6e9c20..0000000 Binary files a/front/font/manrope/Manrope-SemiBold.ttf and /dev/null differ diff --git a/front/img/absenceEffetEcosysteme.jpg b/front/img/absenceEffetEcosysteme.jpg deleted file mode 100644 index 0a512b4..0000000 Binary files a/front/img/absenceEffetEcosysteme.jpg and /dev/null differ diff --git a/front/img/absenceImpact.jpg b/front/img/absenceImpact.jpg deleted file mode 100644 index 3523c74..0000000 Binary files a/front/img/absenceImpact.jpg and /dev/null differ diff --git a/front/img/absencePerteBiodiversite.jpg b/front/img/absencePerteBiodiversite.jpg deleted file mode 100644 index c3093c7..0000000 Binary files a/front/img/absencePerteBiodiversite.jpg and /dev/null differ diff --git a/front/img/achat_importee_avion.jpg b/front/img/achat_importee_avion.jpg deleted file mode 100644 index 6ad046f..0000000 Binary files a/front/img/achat_importee_avion.jpg and /dev/null differ diff --git a/front/img/achat_local.jpg b/front/img/achat_local.jpg deleted file mode 100644 index 2720be8..0000000 Binary files a/front/img/achat_local.jpg and /dev/null differ diff --git a/front/img/arrow.svg b/front/img/arrow.svg deleted file mode 100644 index 52ac5df..0000000 --- a/front/img/arrow.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/front/img/avanlanches.jpg b/front/img/avanlanches.jpg deleted file mode 100644 index 9c92ad6..0000000 Binary files a/front/img/avanlanches.jpg and /dev/null differ diff --git a/front/img/avion.jpg b/front/img/avion.jpg deleted file mode 100644 index 02cc3ba..0000000 Binary files a/front/img/avion.jpg and /dev/null differ diff --git a/front/img/bain.jpg b/front/img/bain.jpg deleted file mode 100644 index 620592d..0000000 Binary files a/front/img/bain.jpg and /dev/null differ diff --git a/front/img/chauffage_bois.jpg b/front/img/chauffage_bois.jpg deleted file mode 100644 index bbf963e..0000000 Binary files a/front/img/chauffage_bois.jpg and /dev/null differ diff --git a/front/img/chauffage_electrique.jpg b/front/img/chauffage_electrique.jpg deleted file mode 100644 index ef2d94e..0000000 Binary files a/front/img/chauffage_electrique.jpg and /dev/null differ diff --git a/front/img/chernobyl_et_tout.jpg b/front/img/chernobyl_et_tout.jpg deleted file mode 100644 index 9b0af75..0000000 Binary files a/front/img/chernobyl_et_tout.jpg and /dev/null differ diff --git a/front/img/douche.jpg b/front/img/douche.jpg deleted file mode 100644 index d6b05c2..0000000 Binary files a/front/img/douche.jpg and /dev/null differ diff --git a/front/img/eolienne_bien.jpg b/front/img/eolienne_bien.jpg deleted file mode 100644 index 5e198f1..0000000 Binary files a/front/img/eolienne_bien.jpg and /dev/null differ diff --git a/front/img/eolienne_mal.jpg b/front/img/eolienne_mal.jpg deleted file mode 100644 index ed29a51..0000000 Binary files a/front/img/eolienne_mal.jpg and /dev/null differ diff --git a/front/img/erosionSol.jpg b/front/img/erosionSol.jpg deleted file mode 100644 index a83256c..0000000 Binary files a/front/img/erosionSol.jpg and /dev/null differ diff --git a/front/img/extraction_petrole.jpg b/front/img/extraction_petrole.jpg deleted file mode 100644 index 9531d20..0000000 Binary files a/front/img/extraction_petrole.jpg and /dev/null differ diff --git a/front/img/faibleEmissionGaz.jpg b/front/img/faibleEmissionGaz.jpg deleted file mode 100644 index c94e632..0000000 Binary files a/front/img/faibleEmissionGaz.jpg and /dev/null differ diff --git a/front/img/faux.jpg b/front/img/faux.jpg deleted file mode 100644 index 5f09dc5..0000000 Binary files a/front/img/faux.jpg and /dev/null differ diff --git a/front/img/forteEmissionGaz.jpg b/front/img/forteEmissionGaz.jpg deleted file mode 100644 index 0b4d19c..0000000 Binary files a/front/img/forteEmissionGaz.jpg and /dev/null differ diff --git a/front/img/image_de_gaz_naturel.jpg b/front/img/image_de_gaz_naturel.jpg deleted file mode 100644 index acbaa25..0000000 Binary files a/front/img/image_de_gaz_naturel.jpg and /dev/null differ diff --git a/front/img/imgleft.png b/front/img/imgleft.png deleted file mode 100644 index 2091493..0000000 Binary files a/front/img/imgleft.png and /dev/null differ diff --git a/front/img/imgright.webp b/front/img/imgright.webp deleted file mode 100644 index 0a21e30..0000000 Binary files a/front/img/imgright.webp and /dev/null differ diff --git a/front/img/impactSignificatif.jpg b/front/img/impactSignificatif.jpg deleted file mode 100644 index 801e518..0000000 Binary files a/front/img/impactSignificatif.jpg and /dev/null differ diff --git a/front/img/incendiesForet.jpg b/front/img/incendiesForet.jpg deleted file mode 100644 index 998b425..0000000 Binary files a/front/img/incendiesForet.jpg and /dev/null differ diff --git a/front/img/incitation_fiscale.jpg b/front/img/incitation_fiscale.jpg deleted file mode 100644 index aaae5c5..0000000 Binary files a/front/img/incitation_fiscale.jpg and /dev/null differ diff --git a/front/img/inondation.jpg b/front/img/inondation.jpg deleted file mode 100644 index 2b0aa03..0000000 Binary files a/front/img/inondation.jpg and /dev/null differ diff --git a/front/img/iphone_moderne.jpg b/front/img/iphone_moderne.jpg deleted file mode 100644 index 058a207..0000000 Binary files a/front/img/iphone_moderne.jpg and /dev/null differ diff --git a/front/img/laver_vaisselle_alamain.jpg b/front/img/laver_vaisselle_alamain.jpg deleted file mode 100644 index 36163ff..0000000 Binary files a/front/img/laver_vaisselle_alamain.jpg and /dev/null differ diff --git a/front/img/lavevaisselle.jpg b/front/img/lavevaisselle.jpg deleted file mode 100644 index 580cf4d..0000000 Binary files a/front/img/lavevaisselle.jpg and /dev/null differ diff --git a/front/img/logo.svg b/front/img/logo.svg deleted file mode 100644 index 14704ff..0000000 --- a/front/img/logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/front/img/lyon.jpg b/front/img/lyon.jpg deleted file mode 100644 index 3e0f67a..0000000 Binary files a/front/img/lyon.jpg and /dev/null differ diff --git a/front/img/mesuresConservation.jpg b/front/img/mesuresConservation.jpg deleted file mode 100644 index 7c9d715..0000000 Binary files a/front/img/mesuresConservation.jpg and /dev/null differ diff --git a/front/img/nucleaire_cool.jpg b/front/img/nucleaire_cool.jpg deleted file mode 100644 index f3eed67..0000000 Binary files a/front/img/nucleaire_cool.jpg and /dev/null differ diff --git a/front/img/paille_papier.jpg b/front/img/paille_papier.jpg deleted file mode 100644 index 1d38f80..0000000 Binary files a/front/img/paille_papier.jpg and /dev/null differ diff --git a/front/img/paille_plastique.jpg b/front/img/paille_plastique.jpg deleted file mode 100644 index ba15546..0000000 Binary files a/front/img/paille_plastique.jpg and /dev/null differ diff --git a/front/img/panneau_solaire_bof.jpg b/front/img/panneau_solaire_bof.jpg deleted file mode 100644 index 2635160..0000000 Binary files a/front/img/panneau_solaire_bof.jpg and /dev/null differ diff --git a/front/img/panneau_solaire_cool.jpg b/front/img/panneau_solaire_cool.jpg deleted file mode 100644 index d60515d..0000000 Binary files a/front/img/panneau_solaire_cool.jpg and /dev/null differ diff --git a/front/img/paris.jpg b/front/img/paris.jpg deleted file mode 100644 index 6a1ffc5..0000000 Binary files a/front/img/paris.jpg and /dev/null differ diff --git a/front/img/photo_basique_transition_energetique.jpg b/front/img/photo_basique_transition_energetique.jpg deleted file mode 100644 index 1c8352d..0000000 Binary files a/front/img/photo_basique_transition_energetique.jpg and /dev/null differ diff --git a/front/img/photo_basique_transition_energetique2.jpg b/front/img/photo_basique_transition_energetique2.jpg deleted file mode 100644 index 5b980a6..0000000 Binary files a/front/img/photo_basique_transition_energetique2.jpg and /dev/null differ diff --git a/front/img/produit_neuf.jpg b/front/img/produit_neuf.jpg deleted file mode 100644 index 5de9c34..0000000 Binary files a/front/img/produit_neuf.jpg and /dev/null differ diff --git a/front/img/reconditionne.jpg b/front/img/reconditionne.jpg deleted file mode 100644 index 7f9f0ec..0000000 Binary files a/front/img/reconditionne.jpg and /dev/null differ diff --git a/front/img/sac_lin.jpg b/front/img/sac_lin.jpg deleted file mode 100644 index 4b142fa..0000000 Binary files a/front/img/sac_lin.jpg and /dev/null differ diff --git a/front/img/sac_plastique.jpg b/front/img/sac_plastique.jpg deleted file mode 100644 index d28a9a3..0000000 Binary files a/front/img/sac_plastique.jpg and /dev/null differ diff --git a/front/img/star.png b/front/img/star.png deleted file mode 100644 index 506307e..0000000 Binary files a/front/img/star.png and /dev/null differ diff --git a/front/img/tel_demonte.jpg b/front/img/tel_demonte.jpg deleted file mode 100644 index 22a8b66..0000000 Binary files a/front/img/tel_demonte.jpg and /dev/null differ diff --git a/front/img/vaguesChaleur..jpg b/front/img/vaguesChaleur..jpg deleted file mode 100644 index 2b22afb..0000000 Binary files a/front/img/vaguesChaleur..jpg and /dev/null differ diff --git a/front/img/vehiculeEssence.jpg b/front/img/vehiculeEssence.jpg deleted file mode 100644 index 698af26..0000000 Binary files a/front/img/vehiculeEssence.jpg and /dev/null differ diff --git a/front/img/voiture.jpg b/front/img/voiture.jpg deleted file mode 100644 index 1bcd175..0000000 Binary files a/front/img/voiture.jpg and /dev/null differ diff --git a/front/img/vrai.jpg b/front/img/vrai.jpg deleted file mode 100644 index 09e7902..0000000 Binary files a/front/img/vrai.jpg and /dev/null differ diff --git a/front/index.html b/front/index.html deleted file mode 100644 index 1c5a9ad..0000000 --- a/front/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - Mon site ecolo - - - - - - - - - -
- - - -
- -
-

Sauvons la planète,

-

distinguons la réalité
des idées reçues.

-

- Défiez les idées reçues sur l'écologie avec notre quiz captivant ! -
- Testez-vous dès maintenant pour une expérience éducative et - amusante. -

- -
- - - - diff --git a/front/jouer.html b/front/jouer.html deleted file mode 100644 index 307189d..0000000 --- a/front/jouer.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - Mon site ecolo | Jeu - - - - - - - - - - -
-
-
-
-
-
-
- -
-
-
- imgleft -
Votre texte ici
-
- - -
- -
-

Question

-

Lorem ipsum

- -
-
- - - - - \ No newline at end of file diff --git a/front/propos.html b/front/propos.html deleted file mode 100644 index 681103a..0000000 --- a/front/propos.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - Nuit de l'info | A Propos - - - -
- - - -
- -
-

A propos

- -
-

Qui sommes-nous

-

- Nous sommes une équipe de 6 étudiants en informatique à l'Université - de Pau et des Pays de l'Adour. - Ce site a été créé dans le cadre de la nuit de l'info 2023 qui - essaie de répondre à la problématique suivante : Faire face au - changement climatique: Le vrai du faux. -

-
- -
-

Inspirations

-

- Le concept de ce site est fortement inspiré du jeu "Plus ou moins". - Nous avons voulu créer un jeu qui permet de sensibiliser les - utilisateurs sur les problématiques écologiques. -

-
-
- - - \ No newline at end of file diff --git a/front/savoir.html b/front/savoir.html deleted file mode 100644 index 8630df3..0000000 --- a/front/savoir.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - Title - - - -
- - - -
- -
-

En savoir +

- -
-

Commerce

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Assumenda - debitis dolores eligendi, eum explicabo facilis fugit illum impedit - in inventore natus nisi obcaecati odio quae, sequi. Modi quaerat - reprehenderit rerum.

-
- -
-

Habitat

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. A aliquam - blanditiis deleniti impedit maxime perferendis quaerat quis. - Assumenda beatae blanditiis deserunt ducimus explicabo illo, impedit - ipsum iusto nemo reiciendis sunt?

-
- -
-

Phénomènes naturels

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiis - quisquam repellendus totam veritatis voluptatum. Debitis ea esse - harum hic iure molestiae, officiis quam ut. Consectetur deserunt - itaque neque omnis sed!

-
- -
-

Sources d’énergies

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad - architecto dignissimos dolor dolorem doloribus, dolorum eum eveniet - inventore ipsum, labore laboriosam modi molestias mollitia nulla - quia quo ratione tempore unde?

-
- -
-

Transport

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium - aliquam aperiam culpa delectus dignissimos iure iusto, nulla numquam - sit. Adipisci aspernatur beatae cupiditate ipsa iste odio pariatur, - perspiciatis praesentium reiciendis.

-
-
- - - \ No newline at end of file diff --git a/front/src/konami.js b/front/src/konami.js deleted file mode 100644 index 4dd1a9f..0000000 --- a/front/src/konami.js +++ /dev/null @@ -1,42 +0,0 @@ -const allowedKeys = { - 37: 'left', - 38: 'up', - 39: 'right', - 40: 'down', - 65: 'a', - 66: 'b', -}; - -const konamiCode = [ - 'up', - 'up', - 'down', - 'down', - 'left', - 'right', - 'left', - 'right', - 'b', - 'a', -]; - -let konamiCodePosition = 0; - -document.addEventListener('keydown', function(e) { - let key = allowedKeys[e.keyCode]; - let requiredKey = konamiCode[konamiCodePosition]; - - if (key === requiredKey) { - konamiCodePosition++; - - if (konamiCodePosition === konamiCode.length) { - activateCheats(); - konamiCodePosition = 0; - } - } else konamiCodePosition = 0; -}); - -const activateCheats = () => { - alert('cheats activated'); - // TODO redirect to easter egg page -}; \ No newline at end of file diff --git a/front/src/score.js b/front/src/score.js deleted file mode 100644 index 3ac53e2..0000000 --- a/front/src/score.js +++ /dev/null @@ -1,27 +0,0 @@ -let score = 0; - -function augmenterCompteur() { - score++; - handleScore() -} - -function handleScore() { - const total = 25; - const categories_step = 5; - const starsId = [ - "star1", - "star2", - "star3", - "star4", - "star5", - ] - - let starElements = starsId.map(id => document.getElementById(id)); - for(let i = 0; i < starElements.length; i++) { - if (score >= (i + 1) * categories_step) { - starElements[i].style.visibility = 'visible'; - } - } - - if (score === total) window.location.href = './easterEggEtoile.html'; -} \ No newline at end of file diff --git a/front/style/init.css b/front/style/init.css deleted file mode 100644 index 9af252a..0000000 --- a/front/style/init.css +++ /dev/null @@ -1,96 +0,0 @@ -@font-face { - font-family: 'Manrope'; - src: url('../font/manrope/Manrope-ExtraBold.ttf'); - font-weight: 800; - font-style: normal; -} - -@font-face { - font-family: 'Manrope'; - src: url('../font/manrope/Manrope-Bold.ttf'); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: 'Manrope'; - src: url('../font/manrope/Manrope-Medium.ttf'); - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: 'Manrope'; - src: url('../font/manrope/Manrope-Regular.ttf'); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: 'Manrope'; - src: url('../font/manrope/Manrope-Light.ttf'); - font-weight: 300; - font-style: normal; -} - -@font-face { - font-family: 'Manrope'; - src: url('../font/manrope/Manrope-ExtraLight.ttf'); - font-weight: 200; - font-style: normal; -} - -@font-face { - font-family: 'Inter'; - src: url('../font/inter/Inter-Black.ttf'); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: 'Inter'; - src: url('../font/inter/Inter-Bold.ttf'); - font-weight: 600; - font-style: normal; -} - -@font-face { - font-family: 'Inter'; - src: url('../font/inter/Inter-Medium.ttf'); - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: 'Inter'; - src: url('../font/inter/Inter-Regular.ttf'); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: 'Inter'; - src: url('../font/inter/Inter-Light.ttf'); - font-weight: 300; - font-style: normal; -} - -@font-face { - font-family: 'Inter'; - src: url('../font/inter/Inter-ExtraLight.ttf'); - font-weight: 200; - font-style: normal; -} - -@font-face { - font-family: 'Inter'; - src: url('../font/inter/Inter-Thin.ttf'); - font-weight: 100; - font-style: normal; -} - - -body { - margin: 0; - padding: 0; -} \ No newline at end of file diff --git a/front/style/jeu.css b/front/style/jeu.css deleted file mode 100644 index 9d28655..0000000 --- a/front/style/jeu.css +++ /dev/null @@ -1,137 +0,0 @@ -#starContainer { - position: fixed; - top: 10px; - right: 10px; - display: flex; - align-items: center; - visibility: hidden; - z-index: 2; -} - -.star { - width: 20px; - height: 20px; - margin: 0 2px; - background-image: url('../img/star.png'); - background-size: cover; -} - -body { - width: 100vw; - height: 100vh; - overflow: hidden; -} - -.container { - width: 100%; - height: 100vh; -} - -section { - flex: 1; - position: relative; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - transition: transform 0.3s ease; -} - -.hide { - display: none; -} - -.image { - width: 100%; - height: 100%; -} - -#imgleft.expanded, #imgright.expanded { - transform: scale(1.5); - z-index: 1; -} - -.image { - object-fit: cover; -} - -section a { - display: block; - height: 100%; - width: 100%; - background-size: cover; - background-position: center; - text-decoration: none; -} - -#left { - background-color: blue; -} - -#right { - background-color: red; -} - -.text-overlay { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - font-size: 24px; - font-family: 'inter', sans-serif; - font-weight: 400; - text-align: center; - padding: 10px; - color: white; - -} - -.question { - position: absolute; - top: 0; - left: 50%; - transform: translateX(-50%); - background-color: #FFF1DD; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5); - border-radius: 10px; - margin-top: 150px; - padding: 30px; - width: 400px; - height: auto; -} - -.question h2 { - font-family: 'inter', sans-serif; - font-weight: 400; - font-size: 35px; - color: black; - margin: 0; -} - -.question p { - font-family: 'Manrope', sans-serif; - font-size: 25px; - color: black; -} - -.choices { - display: flex; -} - -.choices > section { - flex: 1; -} - -button { - background-color: #357266; - color: white; - width: 214px; - height: 59px; - padding: 10px 20px; - margin-top: 90px; - font-family: 'Manrope', sans-serif; - font-size: 20px; - border: none; - border-radius: 10px; - cursor: pointer; -} \ No newline at end of file diff --git a/front/style/main.css b/front/style/main.css deleted file mode 100644 index 9a1b1af..0000000 --- a/front/style/main.css +++ /dev/null @@ -1,60 +0,0 @@ -body { - background: url('../img/heroBanner.jpg') fixed; - background-size: cover; -} - -main { - display: inline-block; - margin: auto auto auto 191px; - padding: 20px; -} - -@media screen and (max-width: 768px) { - main { - margin: 30px; - } -} - -h1 { - font-family: 'Manrope', sans-serif; - font-weight: 400; - font-size: 64px; - color: white; - text-shadow: 0 0 10px rgba(0, 0, 0, 0.5); - padding-bottom: 0; -} - -h2 { - font-family: 'Manrope', sans-serif; - font-weight: 400; - font-size: 48px; - color: white; - text-shadow: 0 0 10px rgba(0, 0, 0, 0.5); -} - -#sous-pres { - font-family: 'Manrope', sans-serif; - font-weight: 300; - font-size: 20px; - color: white; - text-shadow: 0 0 10px rgba(0, 0, 0, 0.5); -} - -#btnjouer { - background-color: #357266; - color: white; - width: 214px; - height: 59px; - padding: 10px 20px; - margin-top: 90px; - font-family: 'Manrope', sans-serif; - font-size: 20px; - border: none; - border-radius: 10px; - cursor: pointer; -} - -a { - text-decoration: none; - color: white; -} \ No newline at end of file diff --git a/front/style/navbarHorizontal.css b/front/style/navbarHorizontal.css deleted file mode 100644 index 2e280a0..0000000 --- a/front/style/navbarHorizontal.css +++ /dev/null @@ -1,30 +0,0 @@ -#logo { - width: 50px; - height: 50px; -} - -header { - background: linear-gradient(180deg, rgba(0, 0, 0, 0.60) 0.52%, rgba(0, 0, 0, 0.22) 53.65%, rgba(0, 0, 0, 0.00) 100%); - display: flex; - justify-content: space-between; - align-items: center; - padding: 20px; -} - -ul { - display: flex; - justify-content: space-between; - align-items: center; -} - -li { - list-style: none; - margin-left: 20px; -} - -li a { - text-decoration: none; - color: white; - font-family: 'Manrope', sans-serif; - font-size: 20px; -} \ No newline at end of file diff --git a/front/style/navbarVertical.css b/front/style/navbarVertical.css deleted file mode 100644 index 5e77369..0000000 --- a/front/style/navbarVertical.css +++ /dev/null @@ -1,66 +0,0 @@ -body { - /*//overflow-x: hidden;*/ -} - -.navbar { - z-index: 1; - height: 100vh; - /*width: 60px;*/ - background-color: #333; - position: fixed; - display: flex; - /*flex-direction: column;*/ - align-items: center; - justify-content: space-between; - transition: width 0.3s ease; -} - -.logo { - margin-top: 40px; - margin-bottom: 20px; -} - -.nav-links { - display: flex; - flex-direction: column; - align-items: center; - width: 100%; -} - -.nav-link { - padding: 20px; - margin-top: 20px; - text-align: center; - font-family: 'Manrope', sans-serif; - font-size: 20px; - color: #FFF1DD; - text-underline-offset: 8px; - transition: background-color 0.3s ease; -} - -.nav-link:hover { - background-color: #555; -} - -label { - padding: 10px 20px 10px 10px; - cursor: pointer; -} - -.arrow-icon { - cursor: pointer; - margin-bottom: 20px; - padding: 10px; -} - -#toggleNavbar { - cursor: pointer; - font-size: 30px; - color: #FFF1DD; - margin-bottom: 20px; - display: none; -} - -.nav-links:has(+ .arrow > #toggleNavbar:checked){ - display: none; -} \ No newline at end of file diff --git a/front/style/propos.css b/front/style/propos.css deleted file mode 100644 index 316b404..0000000 --- a/front/style/propos.css +++ /dev/null @@ -1,27 +0,0 @@ -body { - background-color: #457168; - font-family: 'Manrope', sans-serif; - font-size: 16px; - font-weight: 400; - line-height: 1.5; - color: white; -} - -main { - padding: 0 40px; -} - -h1 { - margin: 0; - padding: 0; -} - -section h2 { - color: #FFF; - font-family: "Manrope", sans-serif; - font-size: 40px; - font-style: normal; - font-weight: 300; - line-height: normal; - padding-bottom: 0; -} \ No newline at end of file diff --git a/front/style/savoir.css b/front/style/savoir.css deleted file mode 100644 index f99621f..0000000 --- a/front/style/savoir.css +++ /dev/null @@ -1,27 +0,0 @@ -body { - background-color: #457168; - font-family: 'Manrope', sans-serif; - font-size: 16px; - font-weight: 400;| - line-height: 1.5; - color: white; -} - -main { - padding: 0 40px; -} - -h1 { - margin: 0; - padding: 0; -} - -section h2 { - color: #FFF; - font-family: "Manrope", sans-serif; - font-size: 40px; - font-style: normal; - font-weight: 300; - line-height: normal; - padding-bottom: 0; -} \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..fe97be9 --- /dev/null +++ b/main.js @@ -0,0 +1,54 @@ +import express from 'express'; +import {createServer} from 'http'; +import {Server} from 'socket.io'; +import routes from './src/routes/index.js'; +import GameState from './src/GameState.mjs'; + +const app = express(); +const httpServer = createServer(app); +const io = new Server(httpServer); + +// Set up views engine +app.set('view engine', 'pug'); +app.set('views', './views'); + +// Set up static files +app.use(express.static('public')); +app.use(express.static('node_modules/bulma/css/')); + +// Set up routes +for (const {slug, route} of routes) app.get(slug, route); + +// Start server +httpServer.listen(3000, + () => console.log('Server is running: http://localhost:3000')); + +// Socket.io +io.on('connection', (socket) => { + const gameState = new GameState(); + + // Connection + const connectionMessage = `User connected as ${socket.id}`; + console.info(connectionMessage); + socket.emit('connected', connectionMessage); + + // Game Start + socket.emit('init_game', gameState.init()); + socket.emit('question', gameState.getCurrentQuestion()); + + // Answer Question -> Correct or Incorrect + socket.on('answer_question', (optionId) => { + const result = gameState.answerQuestion(optionId); + socket.emit('result', result); + }); + + // Next Question -> Question + socket.on('next_question', () => { + const nextQuestion = gameState.nextQuestion(); + if (nextQuestion) socket.emit('question', nextQuestion); + else socket.emit('game_end', gameState.score); + }); + + // Disconnect + socket.on('disconnect', () => console.error('user disconnected', socket.id)); +}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fdeab37 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1626 @@ +{ + "name": "nuitdelinfo-2023", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nuitdelinfo-2023", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bulma": "^0.9.4", + "express": "^4.18.2", + "http": "^0.0.1-security", + "pug": "^3.0.2", + "socket.io": "^4.7.2" + }, + "devDependencies": { + "nodemon": "^3.0.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", + "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bulma": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz", + "integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==" + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.2.tgz", + "integrity": "sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dependencies": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==" + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..95ebf7c --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "nuitdelinfo-2023", + "version": "1.0.0", + "description": "Projet de la nuit de l'info 2023", + "main": "main.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "nodemon . --watch . --ext .js,.pug" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/LucasVbr/nuitdelinfo-2023.git" + }, + "keywords": [ + "nuitdelinfo", + "2023" + ], + "authors": [ + "LucasVbr" + ], + "license": "ISC", + "bugs": { + "url": "https://github.com/LucasVbr/nuitdelinfo-2023/issues" + }, + "homepage": "https://github.com/LucasVbr/nuitdelinfo-2023#readme", + "dependencies": { + "bulma": "^0.9.4", + "express": "^4.18.2", + "http": "^0.0.1-security", + "pug": "^3.0.2", + "socket.io": "^4.7.2" + }, + "devDependencies": { + "nodemon": "^3.0.2" + } +} diff --git a/front/img/heroBanner.jpg b/public/img/hero.jpg similarity index 100% rename from front/img/heroBanner.jpg rename to public/img/hero.jpg diff --git a/src/GameState.mjs b/src/GameState.mjs new file mode 100644 index 0000000..1b3904b --- /dev/null +++ b/src/GameState.mjs @@ -0,0 +1,39 @@ +import fs from 'fs'; + +const questions = JSON.parse(fs.readFileSync('src/questions.json', 'utf8')); + +export default class GameState { + questionList = questions; + + constructor() { + this.score = 0; + this.currentQuestion = 0; + } + + init() { + return {score: this.score}; + } + + getCurrentQuestion() { + const question = {...this.questionList[this.currentQuestion]}; + delete question.answer; + + return {id: this.currentQuestion, ...question}; + } + + answerQuestion(optionId) { + const {option, description} = this.questionList[this.currentQuestion].answer; + + const isCorrect = optionId === option; + if (isCorrect) this.score++; + + return {isCorrect, description, score: this.score}; + } + + nextQuestion() { + this.currentQuestion++; + if (this.currentQuestion <= this.questionList.length - 1) + return this.getCurrentQuestion(); + return null + } +} \ No newline at end of file diff --git a/src/questions.json b/src/questions.json new file mode 100644 index 0000000..1d70385 --- /dev/null +++ b/src/questions.json @@ -0,0 +1,92 @@ +[ + { + "category": "commerce", + "question": "Quel est l'impact environnemental des sacs réutilisables par rapport aux sacs plastiques jetables?", + "options": [ + { + "text": "Les sacs réutilisables ont généralement une empreinte carbone initiale plus élevée que les sacs plastiques jetables en raison de leur production, mais ils deviennent plus écologiques à long terme grâce à leur réutilisation fréquente.", + "img": "./img/Commerce/sac_lin.jpg" + }, + { + "text": "Les sacs réutilisables ont une empreinte carbone beaucoup plus faible que les sacs plastiques jetables dès le départ, contribuant ainsi immédiatement à la lutte contre le réchauffement climatique.", + "img": "./img/Commerce/sac_plastique.jpg" + } + ], + "answer": { + "option": 0, + "description": "Pour que le sac de polypropylène tissé ait une moins grande incidence sur l’environnement que le cabas de plastique traditionnel, il doit être utilisé de 16 à 98 fois. Autrement dit, plus on l’utilise souvent, plus il est avantageux sur le plan écologique, et ce, notamment parce que sa conception entraîne une plus grande quantité de gaz à effet de serre (GES) que celle du sac de plastique traditionnel." + } + }, + { + "category": "commerce", + "question": "Quel est l'impact environnemental des batteries de téléphone remplaçables par rapport aux batteries intégrées?", + "options": [ + { + "text": "Les batteries intégrées sont plus écologiques car leur conception compacte et intégrée réduit la nécessité de ressources supplémentaires pour la fabrication de boîtiers et de connexions.", + "img": "./img/Commerce/iphone_moderne.jpg" + }, + { + "text": "Les batteries de téléphone remplaçables ont tendance à être plus favorables à l'environnement à long terme, car elles permettent aux utilisateurs de remplacer uniquement la batterie défectueuse plutôt que l'ensemble du téléphone, réduisant ainsi la production de déchets électroniques.", + "img": "./img/Commerce/tel_demonte.jpg" + } + ], + "answer": { + "option": 1, + "description": "La fabrication d’un smartphone (de l’extraction des minerais à\nl’assemblage final) est responsable d’environ trois quarts de ces\nimpacts, qui sont en grande partie imputables à l’écran et aux\ncomposants électroniques complexes (microprocesseurs, etc.).\nLa distribution et l’utilisation du smartphone ont moins d’impacts.\nIls sont essentiellement liés à l’énergie consommée pour le trans-\nport et la production d’électricité. L’étape de la fin de vie a des\nimpacts variables selon que le smartphone est recyclé ou non" + } + }, + { + "category": "commerce", + "question": " Quel est l'impact environnemental des pailles en papier par rapport aux pailles en plastique?", + "options": [ + { + "text": " Les pailles en plastique sont plus respectueuses de l'environnement car leur production nécessite moins de ressources que celle des pailles en papier. Bien que les pailles en plastique posent des problèmes de déchets, les pailles en papier peuvent contribuer à la déforestation.\n", + "img": "./img/Commerce/paille_plastique.jpg" + }, + { + "text": "Les pailles en papier sont généralement considérées comme plus écologiques que les pailles en plastique, car elles sont biodégradables et se décomposent plus rapidement. Cependant, leur production nécessite également des ressources en eau et en énergie.", + "img": "./img/Commerce/paille_papier.jpg" + } + ], + "answer": { + "option": 1, + "description": "Les pailles en papier sont considérées comme plus écologiques en raison de leur biodégradabilité, se décomposant naturellement sans créer de résidus nocifs. Fabriquées à partir de ressources renouvelables comme le bois, elles réduisent la dépendance aux combustibles fossiles par rapport aux pailles en plastique. Bien que la production de papier ait des impacts, les pailles en papier recyclables ou compostables offrent des options de gestion des déchets plus respectueuses de l'environnement que leurs homologues en plastique." + } + }, + { + "category": "commerce", + "question": "Quel est l'impact environnemental de l'achat local par rapport à l'achat de produits importés?", + "options": [ + { + "text": "L'achat local a souvent un impact environnemental moindre en raison de la réduction des émissions de gaz à effet de serre liées au transport. En favorisant les produits locaux, on encourage également le développement de pratiques agricoles durables et la préservation des ressources locales.", + "img": "./img/Commerce/achat_local.jpg" + }, + { + "text": "L'achat de produits importés est plus écologique car il permet d'accéder à une plus grande variété de produits et de bénéficier des avantages comparatifs des différentes régions du monde. Les produits importés peuvent souvent être produits de manière plus efficace, compensant ainsi les émissions de carbone liées au transport.", + "img": "./img/Commerce/achat_importee_avion.jpg" + } + ], + "answer": { + "option": 0, + "description": "L'importation de biens a un impact significatif sur l'environnement en raison des émissions de gaz à effet de serre associées au transport international. Par exemple, le transport maritime, largement utilisé pour les importations, est responsable d'environ 2 à 3 % des émissions mondiales de CO2. De plus, l'importation de biens peut contribuer à des problèmes tels que la déforestation et l'exploitation non durable des ressources naturelles dans les pays exportateurs." + } + }, + { + "category": "commerce", + "question": "Quel est l'impact environnemental de l'achat de produits reconditionnés par rapport à l'achat de produits neufs?", + "options": [ + { + "text": " L'achat de produits neufs est plus respectueux de l'environnement car ils sont fabriqués selon les dernières normes technologiques et environnementales, garantissant une efficacité énergétique supérieure et une durée de vie plus longue. Les produits reconditionnés peuvent être moins fiables et nécessiter des réparations fréquentes, contribuant ainsi à un impact environnemental plus important.", + "img": "./img/Commerce/produit_neuf.jpg" + }, + { + "text": "L'achat de produits reconditionnés est généralement plus écologique car cela contribue à réduire la production de déchets électroniques. En réutilisant des produits existants, on diminue la demande de nouvelles ressources et d'énergie nécessaires à la fabrication de produits neufs.", + "img": "./img/Commerce/reconditionne.jpg" + } + ], + "answer": { + "option": 1, + "description": "L'achat de produits reconditionnés a un impact environnemental positif en réduisant la production de déchets électroniques. Selon une étude menée par l'Agence de protection de l'environnement des États-Unis (EPA), la production d'un seul ordinateur portable neuf équivaut à environ 160 kg de déchets électroniques, tandis que les produits reconditionnés contribuent à prolonger la durée de vie utile des équipements. De plus, l'achat reconditionné peut aider à réduire la demande de nouvelles ressources et d'énergie nécessaires à la fabrication de produits neufs." + } + } +] diff --git a/src/routes/AboutUs.js b/src/routes/AboutUs.js new file mode 100644 index 0000000..5bbd0cd --- /dev/null +++ b/src/routes/AboutUs.js @@ -0,0 +1,9 @@ +import express from 'express'; + +const slug = "/about-us"; +const route = (req, res) => { + res.render('about_us'); + res.end(); +}; + +export default {slug, route}; \ No newline at end of file diff --git a/src/routes/Home.js b/src/routes/Home.js new file mode 100644 index 0000000..ca106dc --- /dev/null +++ b/src/routes/Home.js @@ -0,0 +1,8 @@ + +const slug = "/"; +const route = (req, res) => { + res.render('home'); + res.end(); +}; + +export default {slug, route}; \ No newline at end of file diff --git a/src/routes/MoreInfo.js b/src/routes/MoreInfo.js new file mode 100644 index 0000000..ae3180a --- /dev/null +++ b/src/routes/MoreInfo.js @@ -0,0 +1,9 @@ +import express from 'express'; + +const slug = "/more-info"; +const route = (req, res) => { + res.render('more_info'); + res.end(); +}; + +export default {slug, route}; \ No newline at end of file diff --git a/src/routes/Play.js b/src/routes/Play.js new file mode 100644 index 0000000..3b6b257 --- /dev/null +++ b/src/routes/Play.js @@ -0,0 +1,7 @@ +const slug = "/play"; +const route = (req, res) => { + res.render('play'); + res.end(); +}; + +export default {slug, route}; \ No newline at end of file diff --git a/src/routes/index.js b/src/routes/index.js new file mode 100644 index 0000000..62b1af9 --- /dev/null +++ b/src/routes/index.js @@ -0,0 +1,13 @@ +import home from './Home.js'; +import play from './Play.js'; +import more_info from './MoreInfo.js'; +import about from './AboutUs.js'; + +const routes = [ + home, + play, + more_info, + about, +]; + +export default routes; \ No newline at end of file diff --git a/views/about_us.pug b/views/about_us.pug new file mode 100644 index 0000000..67dec1b --- /dev/null +++ b/views/about_us.pug @@ -0,0 +1,11 @@ +include components/navbar + +html + head + title About Us + link(rel='stylesheet', href='/bulma.css') + body + +navbar + + main.container.pt-6 + h1.title About Us \ No newline at end of file diff --git a/views/components/navbar.pug b/views/components/navbar.pug new file mode 100644 index 0000000..cecbabb --- /dev/null +++ b/views/components/navbar.pug @@ -0,0 +1,15 @@ +mixin navbar + nav.navbar.is-fixed-top + .navbar-brand + a.navbar-item Nuit de l'info + a.navbar-burger(role="button", aria-label="menu", aria-expanded=false) + span(aria-hidden=true) + span(aria-hidden=true) + span(aria-hidden=true) + + .navbar-menu + .navbar-end + a.navbar-item(href='/') Accueil + a.navbar-item(href='/play') Jouer + a.navbar-item(href='/more-info') En savoir+ + a.navbar-item(href='/about-us') A Propos \ No newline at end of file diff --git a/views/home.pug b/views/home.pug new file mode 100644 index 0000000..95d7290 --- /dev/null +++ b/views/home.pug @@ -0,0 +1,24 @@ +include components/navbar + +html + head + title Home + link(rel='stylesheet', href='/bulma.css') + + body + +navbar + + section.hero.is-fullheight(style='background-image: url(/img/hero.jpg)') + .hero-body + div + p.title.has-text-white + | Sauvons la planete, + br + | distinguons la réalité + br + | des idées reçues + p.subtitle.has-text-white + | Défiez les idées reçues sur l'écologie avec notre quiz captivant ! + br + | Testez-vous dès maintenant pour une expérience éducative et amusante. + a#playButton.button.is-primary(href="/play") Essayer ce jeu \ No newline at end of file diff --git a/views/more_info.pug b/views/more_info.pug new file mode 100644 index 0000000..08bca05 --- /dev/null +++ b/views/more_info.pug @@ -0,0 +1,11 @@ +include components/navbar + +html + head + title More Info + link(rel='stylesheet', href='/bulma.css') + body + +navbar + + main.container.pt-6 + h1.title More Info \ No newline at end of file diff --git a/views/play.pug b/views/play.pug new file mode 100644 index 0000000..e1b4c0e --- /dev/null +++ b/views/play.pug @@ -0,0 +1,25 @@ +include components/navbar + +html + head + title Play + link(rel='stylesheet', href='/bulma.css') + script(src="/socket.io/socket.io.js") + script(defer=true, type="module") + include scripts/play.js + body.is-fullheight.is-flex + +navbar + + section#option_0.is-flex.is-justify-content-center.is-align-items-center.p-4(style="cursor: pointer; width:50%; background-color: #88AB8E;") + p.is-centered.is-block.is-size-5 Hello + section#option_1.is-flex.is-justify-content-center.is-align-items-center.p-4(style="cursor: pointer; width:50%; background-color: #F2F1EB;") + p.is-centered.is-block.is-size-5 World + + section.card(style="position: fixed; bottom: 10%; left: 50%;transform: translateX(-50%);") + .card-content + h1#card_title.title Question + p#card_description Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit quaerat + | tempore vitae voluptates. Aperiam corporis excepturi expedita, fugiat + | illo magni molestiae molestias mollitia natus neque perferendis quas + | qui sed? Numquam? + button#next_question.is-hidden.button Prochaine question \ No newline at end of file diff --git a/views/scripts/play.js b/views/scripts/play.js new file mode 100644 index 0000000..2c302e4 --- /dev/null +++ b/views/scripts/play.js @@ -0,0 +1,47 @@ +const socket = io(); + +// Sockets +socket.on('connected', res => console.log(res)); + +const option0Element = document.querySelector('#option_0'); +const option1Element = document.querySelector('#option_1'); + + +socket.on('init_game', score => console.log(score)) + +socket.on('question', question => { + // TODO: Show score + + option0Element.querySelector("p").innerText = question.options[0].text; + option1Element.querySelector("p").innerText = question.options[1].text; + document.querySelector('#card_description').innerText = question.question; + + option0Element.addEventListener('click', handleOption0Click); + option1Element.addEventListener('click', handleOption1Click); +}); + +const handleOption0Click = () => { + socket.emit('answer_question', 0); + option0Element.removeEventListener('click', handleOption0Click); +} +const handleOption1Click = () => { + socket.emit('answer_question', 1) + option1Element.removeEventListener('click', handleOption1Click); +} + +socket.on("result", (result) => { + document.querySelector('#card_title').innerText = result.isCorrect ? "Correct!" : "Incorrect!"; + document.querySelector('#card_description').innerText = result.description; + document.querySelector('button#next_question').classList.remove('is-hidden'); +}); + +document.querySelector('button#next_question').addEventListener('click', () => { + socket.emit('next_question'); + document.querySelector('#card_title').innerText = "Question"; + document.querySelector('button#next_question').classList.add('is-hidden'); +}); + +socket.on('game_end', score => { + document.querySelector('#card_title').innerText = "Game Finished!"; + document.querySelector('#card_description').innerText = `Your score is ${score}`; +}); \ No newline at end of file