Aller au contenu principal

Séminaire

Objectifs

  • Estimer son temps de travail.
  • Créer un site en HTML.

Rendu

Mise en place

  • Cloner le nouveau dépôt GitHub Classroom de cette semaine à côté de celui de la semaine précédente.
    • git clone {url_du_depot} depuis le répertoire du cours.
    • inf5/
      ├── sem01-environment-{pseudo}/
      └── sem02-html-{pseudo}/
  • Ouvrir le dossier du dépôt dans Visual Studio Code.
    • Avec le terminal : code sem02-html-{pseudo}
    • Avec Visual Studio Code : Fichier > Ouvrir dossier > sélectionner le dossier du dépôt
  • Créer un fichier .gitignore à la racine du dépôt avec le contenu suivant :
    # macOS
    .DS_Store

Estimation

  • Créer un ficher report.md dans le dossier du dépôt.
  • Estimer le temps nécessaire pour réaliser ce travail dans le rapport.
    • Découper le travail en tâches pour faciliter l'estimation.
  • Une fois terminé, comparer le temps estimé avec le temps réellement passé.
  • Le but n'est pas d'estimer correctement, mais de comprendre comment améliorer ses estimations.
TâcheTemps estiméTemps passéCommentaire
Estimation10m15m...
............
Total2h1h30...

Aventure d'exemple

On va créer un jeu interactif semblable au livre dont vous êtes le héros sur une page Web avec des liens pour naviguer entre les différentes étapes.

Voici un scénario d'exemple à réaliser dans un premier temps :

  • Installer l'extension Live Server sur Visual Studio Code.
  • Créer un fichier index.html à la racine du dépôt avec le contenu suivant :
    index.html
    <!doctype html>
    <html lang="fr">
    <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Page Web</title>
    </head>
    <body>
    <h1>Titre de la page</h1>
    <p>Contenu de la page</p>
    </body>
    </html>
  • Ouvrir le fichier index.html avec Live Server.
    • Clic droit sur le fichier index.html > Ouvrir avec Live Server.
    • Ou cliquer sur Go Live en bas à droite dans Visual Studio Code qui va ouvrir le fichier courant.
  • Modifier la page Web et observer les changements.
    • Modifier le titre de l'onglet (title).
    • Modifier le titre de la page (h1).
    • Modifier le contenu de la page (p).
  • Modifier le contenu du fichier index.html avec le contenu suivant :
    index.html
    <!doctype html>
    <html lang="fr">
    <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Aventure</title>
    </head>
    <body>
    <h1>Rangement</h1>
    <p>
    Vous décidez de faire du rangement dans votre maison. Par où commencer ?
    </p>
    <ul>
    <li>Descendre à la cave.</li>
    <li>Monter au grenier.</li>
    </ul>
    </body>
    </html>
  • Créer un fichier cave.html à la racine du dépôt avec le contenu suivant :
    cave.html
    <!doctype html>
    <html lang="fr">
    <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Aventure</title>
    </head>
    <body>
    <h1>Cave</h1>
    <p>Vous êtes à la cave. Que voulez-vous faire ?</p>
    <ul>
    <li>Dépoussiérer.</li>
    <li>Trier les affaires.</li>
    </ul>
    </body>
    </html>
  • Un clic sur Descendre à la cave. dans index.html devrait rediriger vers cave.html. Modifier le fichier index.html pour ajouter un lien vers cave.html :
    index.html
    <li><a href="cave.html">Descendre à la cave.</a></li>
  • De manière similaire, lorsqu'on choisit de dépoussiérer la cave, on aimerait être redirigé vers passage.html dont le contenu est :
    passage.html
    <!doctype html>
    <html lang="fr">
    <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Aventure</title>
    </head>
    <body>
    <h1>Passage</h1>
    <p>
    En dépoussiérant, vous découvrez une petite trappe. En l'ouvrant, vous
    trouvez un passage secret qui vous mènera vers d'autres aventures...
    </p>
    </body>
    </html>
  • Créer les pages tresor.html, grenier.html, souvenirs.html et lecture.html en suivant le même principe.
    • tresor.html : En triant les affaires, vous trouvez un vieux coffre rempli de pièces d'or !
    • grenier.html : Vous êtes dans le grenier. Que voulez-vous faire ? avec les liens :
      • Trier les affaires. vers tresor.html
      • Regarder les cartons. vers souvenirs.html
      • Lire les livres. vers lecture.html.
    • souvenirs.html : En regardant les cartons, vous tombez sur de vieux souvenirs d'enfance qui vous rendent nostalgique.
    • lecture.html : En lisant un des livres, vous découvrez une carte au trésor !
  • Le jeu doit être jouable et l'arborescence du projet doit ressembler à ceci :
    ./
    ├── cave.html
    ├── grenier.html
    ├── index.html
    ├── lecture.html
    ├── passage.html
    ├── souvenirs.html
    └── tresor.html
  • Créer un commit nommé Ajouter l'aventure d'exemple avec les changements.

Aventure personnalisée

Reprendre l'aventure d'exemple pour créer sa propre aventure personnalisée.

  • Prendre le temps pour réfléchir à un scénario pour son jeu :
    • Une histoire simple, courte et cohérente.
    • Des choix intéressants à faire.
    • Des conséquences différentes (et réutilisables).
    • Viser une petite histoire dans un premier temps (environ 7 étapes).
  • Commencer par dessiner l'organigramme pour avoir une idée claire des différentes étapes et des liens entre elles.
  • Modifier les fichiers HTML pour créer son propre jeu.
    • Renommer les fichiers HTML avec des mots-clefs (pas d'accents ni d'espaces).
      • Garder le fichier index.html comme page d'accueil.
    • Choisir un titre pour son histoire, l'indiquer dans le <title> et dans le rapport.
  • Créer un commit nommé Ajouter l'aventure personnalisée avec les changements.

Aventure améliorée

Une fois l'aventure personnalisée terminée, l'améliorer avec les éléments suivants :

  • Ajouter un lien pour recommencer le jeu à chacune des pages de fin.
    • Ajouter un lien comme pour les autres pages, mais redirigeant vers index.html.
  • Modifier les liens pour recommencer le jeu pour qu'ils s'ouvrent dans un nouvel onglet.
  • Ajouter des images.
    • Créer un dossier images dans le dossier à la racine du dépôt.
    • Télécharger une image depuis Internet (clic droit > Enregistrer l'image sous…), la placer dans le dossier images et la renommer avec un mot-clef (p. ex. carte.png) :
      ./
      ├── images/
      │ └── carte.png
      ├── ???.html
      ├── index.html
      └── ???.html
    • Ajouter la balise <img> dans un body.
      • Par exemple : <img src="images/carte.png" alt="Carte de l'île" />
      • L'attribut src indique le chemin vers l'image.
      • L'attribut alt indique un texte alternatif qui s'affiche si l'image ne peut pas être chargée.
    • Forcer la taille de l'image avec les attributs height ou width.
      • Par exemple : <img src="images/carte.png" alt="Carte de l'île" width="256" />
  • Ajouter une icône à toutes les pages.
    • Créer une icône pour le site web (favicon) sur favicon.cc.
    • Télécharger l'icône nommée favicon.ico et la placer dans la racine du dépôt.
    • Ajouter la ligne suivante dans le head de chaque fichier HTML pour indiquer l'icône du site web :
      <!doctype html>
      <html lang="fr">
      <head>
      ...
      <link rel="icon" href="favicon.ico" />
      </head>
      <body>
      ...
      </body>
      </html>
    • Dans un navigateur privé, vérifier que l'icône s'affiche dans l'onglet du navigateur pour toutes les pages.
  • Mettre plusieurs paragraphes dans une même page.
    • Ajouter plusieurs balises <p> dans un body.
  • Forcer un retour à la ligne dans le même paragraphe.
    • Ajouter la balise <br /> à l'endroit où on veut forcer le retour à la ligne.
  • Ajouter des titres de différentes tailles.
    • Utiliser les balises <h1>, <h2>, <h3>, … pour ajouter des titres de différentes tailles.
  • Commenter le code HTML.
    • Ajouter quelques commentaires pour expliquer ce qui a été fait.
  • Formatter le fichier avec Visual Studio Code.
  • Vérifier que le code HTML est valide avec le validateur W3C
  • Créer un commit nommé Ajouter l'aventure améliorée avec les changements et pousser les commits sur GitHub.

Hébergement

Utiliser GitHub Pages pour héberger son site en ligne.

  • Ajouter un fichier vide .nojekyll à la racine du dépôt pour indiquer à GitHub Pages de ne pas utiliser Jekyll.
  • Configurer GitHub Pages.
    • Aller sur le site du dépôt GitHub du projet.
    • Cliquer sur Settings.
    • Cliquer sur Pages dans la barre latérale gauche (dans la section Code and automation).
    • Sous Branch, sélectionner main et / (root), puis cliquer sur Save.
    • Rafraîchir la page et attendre quelques secondes pour que le site soit publié.
    • Cliquer sur le lien qui s'affiche Your site is live at https://hepl-bs1inf5.github.io/sem02-html-{pseudo}/ pour accéder au site web.
    • Ajouter le lien dans le rapport.
  • Ajouter le lien sur la page d'accueil du dépôt GitHub du projet.
    • Revenir sur la page d'accueil du dépôt GitHub du projet.
    • Cliquer sur à droite de About.
    • Cocher Use your GitHub Pages website et cliquer sur Save changes.
    • Observer que le lien s'affiche maintenant dans la section About du dépôt GitHub du projet.

Test

Créer un fichier test.js à la racine du dépôt avec le contenu suivant :

test.js
import test from "node:test";
import assert from "node:assert/strict";
import fs from "node:fs";
import { execSync } from "child_process";

test("présence des fichiers", () => {
// Liste des fichiers ou dossiers attendus dans le projet.
const expectedPaths = [
".git",
".gitignore",
".nojekyll",
"index.html",
"report.md",
"test.js",
];
// Vérifie que chaque fichier ou dossier existe dans le projet.
expectedPaths.forEach((path) => {
assert.ok(
fs.existsSync(path),
`Le fichier ou dossier ${path} doit exister.`,
);
});
});

test("validation des fichiers html", () => {
// Exécute la validation HTML en utilisant https://html-validate.org/
try {
const output = execSync(
"npx -y html-validate -p=recommended,prettier **/*.html",
).toString();
console.log(output);
} catch (error) {
assert.fail(error.output);
}
});

Vérifier que les tests passent avec la commande node --test et corriger le code si cela n'est pas le cas.

Exemple d'erreur de validation HTML :

C:\git\sem02-html-blueur\bleu.html
8:6 error Element <p> is implicitly closed by parent </body> no-implicit-close
10:21 error Trailing whitespace no-trailing-whitespace

Elle signifie que le fichier bleu.html contient deux erreurs :

  • Ligne 8, colonne 6 (6ème caractère) : l'élément <p> n'est pas fermé.
  • Ligne 10, colonne 21 (21ème caractère) : il y a des espaces à la fin de la ligne.

Pour exécuter la validation HTML manuellement en ligne de commande :

npx -y html-validate "-p=recommended,prettier" "**/*.html"

DOM

Outils de développement

  • Découvrir les outils de développement. Plusieurs façons d'y accéder depuis une page web :
    • Clic-droit > Inspecter.
    • ou appuyer sur la touche F12.
  • Utiliser les outils de développement pour :
    • Observer les éléments de la page :
      • Survoler les éléments HTML dans le panneau Inspecteur/Éléments pour les mettre en surbrillance.
    • Modifier le contenu d'un élément :
      • Supprimer un élément HTML de la page.
      • Rafraîchir la page (F5) pour réinitialiser le contenu.

Rapport

  • Expliquer brièvement les principales difficultés rencontrées et comment les résoudre.
  • Compléter les estimations.
Git

Ne pas oublier de pousser tous les commits sur le dépôt Git distant (et de vérifier sur GitHub).

Exercices supplémentaires

Références