Examen

Consignes

Avec les fichiers fournis sur Moodle (index.hml, bootstrap.min.css, styles.css), cette page et les enseignements vu en cours (et rien d'autre : pas d'IA, pas de support de cours, pas d'exercices faits en cours), reproduire les comportements suivants, visibles sur cette page :

Ouverture de la navigation

  • Le bouton en haut à droite de la page doit ouvrir la navigation ;
  • La fermer si elle est ouverte (on a fait tout ça en cours 👌).

La navigation est encadrée par les commentaires <-- Navigation principale --> dans le html.

Rollover sur les cartes

  • Au survol (mouseover) avec la souris, les cartes doivent avoir un effet (évidemment réalisé avec l'aide de JS, mais peut être fait en combinaison avec CSS) ;
  • À la sortie de la souris (mouseout), les cartes doivent perdre cet effet (on l'a aussi vu en cours 😎🤙).

Voir les infos

Au clic sur le bouton View de chaque carte de la grille ci-dessous :

  • Affichage de la zone des informations de la même carte, présente par défaut dans le code de la page et encadrée par les commentaires <-- Infos étudiant --><-- /Infos étudiant -->
  • Elle est stylée en CSS pour être masquée avec la classe hidden (et visible sans).
  • Quand la zone d'informations est visible, le bouton View reçoit l'état actif (classe active).
  • Un nouveau clic sur le bouton ferme la zone et supprime l'état actif du bouton.

Ça semble familier ? Vu en cours ! 🤙

Éditer les infos

Chaque bouton Edit fait la même chose ET rend la zone d'informations éditable (attribut contenteditable="true")

Ok, pas vu en co… MAIS SI. 🤩

Classes CSS disponibles

  • show : affiche un élément autrement masqué
  • hidden : masque un élément autrement visible
  • over : ajoute un effet de grossissement (qui pourrait servir d'effet au survol…)

Rappels

Pour rappel, les enseignements de nos cours :

  • Bases : ⚠️ syntaxe, console ouverte (TOUT. LE. TEMPS.),
  • Types de données : String, Number, Boolean, [Array], {Object}
  • Variables : const VS let
  • Conditions : if, else if, else
  • Opérateurs : = ≠ ==
  • Fonctions : déclaration, exécution (appel), paramètres
  • DOM : sélectionner, modifier (texte, contenu HTML, attributs, classes)
  • Évènements : qui - quoi - pour quoi (action)
  • Boucles : for, for…of
D'autres rappels disponibles avec l'offre premium.

Syntaxe

Fonctions
function saluer(nom) { console.log("Bonjour " + nom); }
saluer("Maria");

DOM
document.getElementById("id")
document/element.querySelector("selecteur")
document/element.querySelectorAll("selecteur")
element.setAttribute("nom-de-l-attribut", "valeur-de-l-attribut")
element.getAttribute("nom-de-l-attribut")
element.removeAttribute("nom-de-l-attribut")
element.classList.add("nom-de-la-classe")
element.classList.remove("nom-de-la-classe")
element.classList.contains("nom-de-la-classe")
element.classList.toggle("nom-de-la-classe")

Évènements
element.addEventListener("évènement", function () { … });

Boucles
for (let i = 0; i < 3; i++) {
  console.log(i);
}
for (let item of tableau) {
  console.log(item);
}

Exemple
const elements = document.querySelectorAll(".element");
for (let element of elements) {
  element.addEventListener…
  element.classList…
}
Donne-moi la force (recueil de citations inspirantes) 💪🏻

Développer en Javascript sans la console ouverte, c'est comme courir sans baskets

Loïc Callback

Faites des console.log();

Dave Bug

J'ai toujours vu Javascript comme un montage de meuble : on crée un ensemble étape par étape , comme on fait une recette de cuisine étape par étape, pas tout d'un coup.

Jean-Michel Ikea-Etchebest

Quand je sèche, je prends un papier et je dessine ou je prends des notes : traduire le code en langue intelligible, c'est la moitié du travail. L'autre moitié, c'est les révisions. Et la dernière moitié le talent.

Philippe Calculmental

Parfois, pour se retrouver soi-même, il faut savoir s'éparpiller un peu partout : console.log("ICI"), console.log("LÀ"). C'est en balisant son propre chaos qu'on finit par voir la lumière. Et faites des console.log();.

Marc-Aurèle Log

J'ai toujours cru que commenter mon code pour décrire la logique de ce que je voulais faire pouvait valoir des points à un examen. Et c'était vrai.

Pierre Lapalissade

La console est un murmure discret que personne n'écoute. Si tu veux vraiment que la vie t'écoute, fais-lui surgir un message de log en plein visage. C'est brutal, mais au moins, on ne peut pas t'ignorer. Et faites des console.log(), bordel.

Arthur Rambo

Bonus 🎖️

Si les comportements précédents fonctionnent bien, commencez par relire votre code, tester les différents cas, essayez de simplifier, d'éviter les répétitions, … puis s'il vous reste du temps passez au bonus.

⚠️ Attention à ne pas casser quelque chose en vous lançant là-dedans dans les dernières minutes…

  1. Ajouter un étudiant à la grille en cliquant sur le bouton (code commenté préfixé par le message Le bouton pour ajouter un étudiant) depuis le fichier students.js disponible sur Moodle ; les boutons View et Edit doivent être fonctionnels.
  2. Lister les hobbies dans la zone d'informations sous forme de liste.
  3. Ajouter un <select> qui filtre les étudiants par pays. (code commenté préfixé par le message Le formulaire de filtre pays pour les points bonus). Les étudiants déjà présents au chargement peuvent être exclus des résultats.
  4. Ajouter un <select> qui filtre les étudiants par hobbies. (code commenté préfixé par le message Le formulaire de filtre hobbies pour les points bonus). Les étudiants déjà présents au chargement peuvent être exclus des résultats.
  5. Créer un algorithme qui donne les numéros du Loto.
  • Freddie Starlight
  • 21 ans
Strasbourg
  • Axl Rosewood
  • 24 ans
Dublin, Irlande
  • Mick Stone
  • 22 ans
Los Angeles, États-Unis
  • Dave Grohlsen
  • 21 ans
Liverpool, Royaume-Uni
  • Bruce Springfield
  • 23 ans
Seattle, États-Unis
  • Kurt Cobainville
  • 24 ans
Melbourne, Australie