Aller au contenu

Travail pratique #2

Travail pratique à remettre

Ce travail pratique est à remettre et compte dans le cumul de la note finale du cours.

Pondération : 5% de la session

Détails :
- Ce travail peut être fait en équipe de 2
- Bien lire les instructions
- Valider le code avec le validateur avant la remise
- La remise se fait sur LÉA
- La date limite de remise est disponible sur LÉA

Ce travail met en pratique :

  • La création de formulaires web HTML et CSS
  • Le traitement de formulaires par Javascript

Lire les notes de cours

Les notes de cours sont très importantes pour ce TP et vous y trouverez des exemples pour vous aider.

Le projet

➡️ Télécharger le projet

Extraire le projet du dossier ZIP et le conserver dans votre espace de travail.

⚠️ Le projet a déjà la bonne structure. Il suffit d'ajouter les portions manquantes dans les bons fichiers.

N'oubliez pas d'indiquer votre/vos noms complets dans la balise d'auteur

✔️ Vous pouvez modifier le CSS existant pour votre mise en page.

Compléter le projet

Ce travail consiste à mettre en pratique :

  • La création de formulaires HTML
  • La mise en page CSS de formulaires
  • Le traitement Javascript de formulaires

Exemple de l'interface complétée :

TP2

Les formulaires

L'interface finale comprend 2 formulaires délimités avec une balise <form>.

Chaque formulaire comprend des divisions <div> pour le positionnement des éléments.

Créer les formulaires demandés avec les informations suivantes :

Formulaire de création de pizza

Dans la div ayant l'ID optionsPizza, créer les éléments HTML du formulaire suivant :

TP2

⚠️ La balise <form> existe déjà plus haut dans le code, ne pas modifier cela, car le CSS l'utilise!

⚠️ Regrouper un champ et un libellé dans une div pour pouvoir les traiter en bloc et pour qu'ils s'affichent automatiquement un en-dessous de l'autre.

⚠️ C'est le CSS qui permettra de donner les styles aux champs du formulaire.

Le CSS

Dans pizza.css :

Ajouter ce qu'il faut pour :

  1. Donner une hauteur et largeur aux champs input pour les agrandir
  2. Les champs input ont une couleur d'accent (couleur lorsque coché)
  3. Le champ select a :

    • une largeur en %
    • une hauteur en rem
    • une couleur de fond

Formulaire de commande

Dans le formulaire ayant l'id info_commande, créer les éléments HTML du formulaire suivant :

cliquer sur l'image pour l'agrandir

TP2

⚠️ Tous les champs sont requis sauf pour la case à cocher

⚠️ Tous les champs on un libellé associé

Le CSS

Dans commande.css :

  • Ajouter lez styles nécessaires pour positionner les champs et leur libellés de façon structurée

    Vous êtes libres de créer l'interface de votre choix, tant que c'est structuré

    Il y a des exemples dans les notes de cours

  • Respectez le standard d'interfaces qui dicte que les boutons se trouvent au bas à droite d'une interface

Le Javascript

Maintenant que l'interface est prête, nous allons programmer les fonctionnalités.

Nous allons écrire les deux scripts du projet :

  • pizzaBuilder.js : traite le formulaire de création de pizza
  • commande.js : traite le formulaire de commande

commande.js

Le script de commande est plus simple, nous allons donc débuter par ce dernier.

Une fonction de soumission de commande est appelée sur le clic du bouton "Soumettre la commande".

Ajouter l'événement sur le bouton dans le HTML et l'appel de fonction.

Écrire le code javascript du pseudo-algorithme suivant :

1. Trouver le formulaire de commande avec son ID (getElementByID)
2. Vérifier la validité des champs (reportValidity() -> voir notes de cours)
3. Si pas valide -> sortir de la fonction
4. Lire les informations des formulaires nécessaires pour afficher le message
5. Afficher (alert) le message :

    "Merci [prénom nom], votre commande a bien été reçue pour le [date de commande] à [heure de commande], pour une pizza [taille de pizza choisie] pouces. Lorsque votre commande sera prête, nous communiquerons avec vous au numéro [téléphone fourni]."

⚠️ Remplacer les informations entre crochets "[ ]" par les valeurs fournies dans les champs de formulaire.

✔️ Utilisez "n" pour insérer des retours de ligne dans une chaîne de caractères.

pizzaBuilder.js

Ce script permet de construire l'image de la pizza dès qu'on ajoute un choix.

Ainsi, les événements sont appelés lorsque les champs changent de valeur et non sur le clic d'un bouton.

  • Sur les cases à cocher : événement onchange
  • Sur la liste déroulante : événement onchange
  • Les boutons radio ne déclenchent pas de fonction
  • Sur le bouton réinitialiser de type reset, on ajoute l'événement onclick pour ajouter du traitement

Cases à cocher

Chaque case à cocher appelle sa fonction, exemple : "ajouterChampignons()".

Vous aurez donc une fonction par ingrédient.

L'algorithme est le même pour toutes les cases à cocher :

1. Trouver la zone d'affiche avec son ID (*pizza*)
2. Si la case à cocher est cochée (checked)
    * Créer une balise image
    * lui donner la source de l'image de l'ingrédient
    * lui donner le texte alternatif (nom de l'ingrédient)
    * lui ajouter la classe nommée *ingredient_affiche* (déjà dans le CSS)
    * lui donner un id unique
    * ajouter l'image dans la zone d'affichage
3. Sinon (la case est décochée)
    * supprimer l'image de cet ingrédient dans la zone d'affichage

Liste déroulante

La liste déroulante est différente, car elle gère 3 images différentes, selon le choix de fromage.

Lorsque la valeur de la liste change <select onchange="ajouterFromage()">, on appelle donc sa fonction.

L'algorithme est :

1. Trouver la zone d'affiche avec son ID (*pizza*)
2. Si la valeur (value) de la liste déroulante n'est pas "aucun"
    * Si l'image de fromage existe déjà (getElementById != null)
        * Modifier la source de l'image pour le choix de fromage
    * Sinon
        * Créer une nouvelle balise image
        * lui donner la source de l'image de l'ingrédient
        * lui donner le texte alternatif (nom du fromage)
        * lui ajouter la classe nommée *ingredient_affiche*
        * lui donner un id (le même id est utilisé pour tous les fromages, car un remplace l'autre)
        * ajouter l'image dans la zone d'affichage
3. Sinon (donc aucun fromage)
    * supprimer l'image du fromage dans la zone d'affichage

Bouton réinitialiser

Le bouton est de type reset et remet donc le formulaire à vide automatiquement.

Toutefois, on doit s'assurer que l'image de pizza soit réinitialisée aussi.

Sur le clic du bouton, on appelle une fonction qui réinitialise la pizza :

1. Trouver l'image de pâte à pizza avec son ID
2. Dans la zone d'affichage *pizza*, retirer tous les enfants (replaceChildren)
3. Dans la zone d'affichage *pizza*, ajouter l'image de pâte

Défi et bonus

❗️ ❗️ ❗️ Voici l'occasion d'obtenir un point bonus sur votre total de la session -> 1% ajouté à votre note finale ! (ce qui veut dire que vous pouvez obtenir 5% + 1% pour ce TP)

  • Si chaque option d'une case à cocher vaut 1$ lorsque sélectionnée
  • Si l'ajout de fromage vaut 3$ peu importe le fromage
  • Si les prix par taille de pizza sont :

    • 8 pouces : 10$
    • 12 pouces : 12$
    • 20 pouces : 15$

Lors de la commande, après avoir affiché le message de réception de la commande :

Afficher un autre message (alert) pour afficher le prix total de la pizza.

⚠️ Ne pas utiliser de variables globales (pas de variable déclarée hors fonction) !

⚠️ Appeler une autre fonction pour exécuter ce traitement (voir notes de cours).

Les points bonus sont corrigés à la méthode "tout ou rien" : on a le point ou on l'a pas.

Valider et corriger

Valider le code à l'aide du validateur.

Validateur HTML

Validateur CSS

S'il reste des erreurs, on perd automatiquement des points!


Assurez-vous que votre code respecte les règles de programmation !

Règles de programmation

Si les règles ne sont pas respectées, on perd des points!

Barème de correction

Élément de correction points
Règles de programmation 2pts
Formulaire de création de pizza (HTML + CSS) 4 pts
Formulaire de commande (HTML + CSS) 5 pts
Script de création de pizza 5 pts
Script de commande 4 pts
TOTAL: 20 pts ramenés sur 5% session
BONUS: 1 % session

⚠️ -1 point /20 s'il reste des erreurs dans le validateur

Remise

La remise se fait sur LÉA à l'aide d'un dossier ZIP.

Date limite de remise affichée sur LÉA.

⚠️ Profitez de la semaine de lecture pour y mettre du temps! ⚠️