Introduction

Les travaux pratiques de programmation web auront pour but la conception de l'interface utilisateur d'un micro site. Le respect des bonnes pratiques de programmation web est bien entendu de rigueur. Cela concerne en particulier la séparation du fond (HTML5) et de la forme (CSS3).

Il faudra veiller à ce que le code HTML5 produit soit syntaxiquement valide, ce qui peut être vérifié en utilisant le validateur en ligne du W3C, et au respect de la sémantique des balises.

Ce sujet sera complété chaque semaine afin de rajouter diverses "figures imposées" à votre projet web.

Ce travail sera à rendre avant le 30 mars 2025 23h59 sur l'ENT (dans la partie réservée aux TP de Technologies du Web — Client)

Note pour les redoublants: il est interdit de rendre le même travail que l'an dernier.

Dans le cadre de ce projet, seuls les langages html 5, css 3 et javascript sont autorisés. L'utilisation de frameworks est interdite (pas de bootstrap...)

Première étape (5 points)

Travail demandé

Dans cette étape il vous est demandé de réaliser, sans faire de mise en forme (pour l'instant...), un site web sur un sujet de votre choix (entre 3 et 5 pages web, sans compter les pages qui seront demandées dans les parties ultérieures). Il faut donc se concentrer uniquement sur le contenu dans cette étape. Il est important de faire apparaître à travers une utilisation correcte des balises du langage HTML5 la structure de la page.

Avant de saisir la moindre ligne de code, vous devrez analyser et décider du contenu et de l'organisation de votre site (ainsi que de la structure de vos pages) sur une feuille de papier. On ne code pas sans avoir une idée précise de ce que l'on veut faire !

À travers le contenu propre au sujet traité dans cette page, vous devrez :

  1. Mettre en place le squelette de votre page en utilisant le "doctype" propre au HTML5. Votre page devra avoir un titre et devra être au format (charset) UTF-8. (Voir balises html, head, body...)
  2. Mettre en place une structure hiérarchique claire et cohérente : En-tête, menu, article, ...(Voir balises header, nav, main, article, aside, section, footer,... Vous trouverez quelques exemples de structures ici)
  3. Organiser le texte en paragraphe, hierarchiser les différents titres et mettre les passages ou les éléments clefs en évidence.(Voir balises p, strong, em, mark, h1, h2...)
  4. Mettre en place divers éléments :
    1. une liste (à puces ou ordonnée)
    2. au moins une image avec une légende (utilisez les balises appropriées).
    3. un tableau.
  5. Mettre plusieurs types de lien hypertexte dans votre menu (un lien vers une seconde page de votre site, un lien vers une "ancre" et un lien vers un site extèrieur).

ATTENTION:
Le code HTML devra être vérifié avec le validateur en ligne du W3C. Si le code contient des erreurs (les warnings sont acceptés), la note de cette partie sera divisée par 2.
Ensuite, 2 pts seront enlevés si le code HTML n'est pas (ou mal) indenté.

Deuxième étape (6 points)

La visualisation de la page obtenue à la fin de la première étape dans un navigateur utilisera la mise en forme par défaut du navigateur. Cette mise en forme est bien souvent très simple dans son design et ne conviendra pas à un site internet moderne. Dans cette deuxième étape il vous est demandé de réaliser la mise en forme de cette page (CSS3).

Cela sera obtenu par l'utilisation d'une (ou plusieurs) feuille de style externe liée à votre page. Le fichier CSS réalisé doit être conforme aux spécifications CSS et validé grâce au validateur en ligne du W3C. Dans le principe du respect de la séparation entre le fond et la forme, aucun code CSS ne doit figuré dans le fichier HTML.

Travail demandé

  1. Il est demandé que la mise en forme ainsi réalisée soit relativement uniforme à la visualisation sur différents navigateurs. Pour cela il faut écraser les styles de base des navigateurs en définissant un style pour tous les éléments utilisés. Cela peut être fait en utilisant la technique du Reset ou du Normalize.
  2. La mise en forme produite devra contenir à minima tous les éléments suivants :
    • au moins une flexbox (voir aide en bas de la page où vous trouverez aussi une liste des différentes propriétés CSS3).
    • Vous utiliserez des "pseudo-formats" qui permettent de rendre l'apparence de votre page plus dynamique (au survol d'un élément, lors d'un clic ou lorqu'un lien a été consulté.). Vous utilisez aussi la propriété css "transition".

  3. Votre site devra s'adapter automatiquement à différentes résolutions d'écran (moniteurs, mobiles...). Vous utiliserez pour cela les propriétés "Media Queries" du CSS3 (l'utilisation des frameworks comme bootstrap est interdite).

  4. Votre site devra être parfaitement utilisable par les personnes souffrant de daltonisme (protanopie, deutéranopie, tritanopie ...). Pour simuler différents types de daltonisme afin de vérifier l'accessibilité de votre site, vous pouvez, selon votre navigateur utiliser l'une des solutions suivantes:
    • Sur Firefox : ouvrir les outils de développement (en appuyant sur f12), cliquer sur "Accessibilité", et enfin, cliquer sur "Simuler:" pour choisir un type de daltonisme.
    • Sur Chrome : Utiliser le plugin Daltonize.
    • Autres navigateurs : Vous utiliserez les bookmarklets suivants que vous ajouterez à vos favoris dans votre navigateur pour pouvoir les utiliser sur n'importe quel site web (Proptanopie, Deutéranopie, Tritanopie, Achromatomalie et Monochromie) pour tester les couleurs des votre site et vérifier que celui ci est toujours utilisable.

  5. L'aspect esthétique ET ergonomique de la page ainsi que la diversité des propriétés CSS utilisées seront évalués.

ATTENTION:
Le code CSS devra être vérifié avec le validateur en ligne du W3C. Si le code contient des erreurs (les warnings sont acceptés), la note de cette partie sera divisée par 2.
Ensuite, 2 pts seront enlevés si le code CSS n'est pas (ou mal) indenté.

Troisième étape (5 points)

Travail demandé

Prérequis pour les étapes 3 à 5

Avant de démarrer les prochaines parties du sujet, vous dervrez télécharger l'archive suivante (Cette archive fonctionne avec Python 3.13, en cas de problème, une version pour python 2.7 est disponible ici) et la décompresser dans le repertoire de votre choix. Vous obtiendrez un repertoire "Web" contenant les repertoires "data", "templates" et "www" ainsi que le fichier "httpd" (qui est un serveur web simplifié en python).
Dans un premier temps, vous copierez l'ensemble de votre site web à l'intèrieur du repertoire "www" puis vous lancerez le serveur web grâce à la commande ./httpd. Vous obtiendrez ainsi un numéro de port que nous nommerons xxxx et qui sera compris entre 8000 et 8999. Enfin, dans votre navigateur web, vous taperez l'adresse "localhost:xxxx" et vous devriez tomber directement sur la page index.html de votre site (pour cela, il faut que index.html soit situé à la racine du site - c.a.d dans le repertoire www).

Si vous utilisez un ordinateur personnel, vous devrez installer Python 3 (de préférence 3.13) pour faire fonctionner le script httpd. Si vous utilisez Windows, vous devrez utilisez la commande python httpd au lieu de ./httpd dans l'invite de commande.

Note: Si vous avez une version de python entre 3.0 et 3.12 et que vous avez des problèmes à pour faire fonctionner l'archive disponible ci-dessus, essayez alors avec cette version alternative.

De nos jours rares sont les sites qui ne permettent pas à leurs utilisateurs de s'enregistrer pour une raison ou une autre. Il sera demandé dans cette étape de créer dans le menu un lien vers une page contenant un formulaire permettant l'enregistrement de l'utilisateur. Cette page devra avoir un design uniforme avec les autres pages créées.
Rares sont aussi les sites n'interagissant pas avec les données que peuvent saisir l'utilisateur. Il sera donc demandé de réaliser une vérification des éléments à mesure qu'ils sont saisis (En javascript - sans utiliser jquery). Un code couleur ainsi qu'un message permettront à l'utilisateur d'apprécier visuellement la validité des informations qu'il saisit et la validation du formulaire ne devra être activée que lorsque toutes les informations saisies seront correctes. Les informations à demander sont les suivantes :

Vous devrez empêcher la soumission du formulaire tant que les champs ne seront pas saisis correctement.

Le formulaire devra être soumis à une page dynamique (fournie, il s'agît du script register.py dans le répertoire www/htbin. Ce script écrira les données reçues dans le fichiers data/user.dat). Dans le formulaire, les données devront être identifiées de la façon suivante:

Nom lastname
Prénom firstname
Date de naissance birthdate
Nom d'utilisateur username
Mot de passe userpwd
Adresse email useremail

Enfin, vous veillerez à prevenir l'utilisateur de l'utilisation de JavaScript sur votre site lorsque celui-ci est désactivé en utilisant la balise appropriée.

ATTENTION:


2 pts seront enlevés si le code JavaScript n'est pas (ou mal) indenté.

Quatrième étape (3 points)

Travail demandé

VOUS DEVEZ AVOIR FAIT LE PREREQUIS AVANT DE COMMENCER CETTE PARTIE.

Une fois l'utilisateur enregistré, il faut lui permettre de s'identifier sur le site afin d'accéder à un contenu personnalisé ou privé. Dans cette cinquième étape nous allons donc créer un petit formulaire d'identification sur la page principale du site. Ce formulaire sera envoyé au script login.py qui se trouve dans le répertoire www/htbin.

Ici il est question d'ajouter du dynamisme au site à l'aide de technologie de type AJAX (Vous devrez utiliser un objet XMLHttpRequest). Le contenu renvoyé par le script de login devra donc être affiché de manière dynamique grâce à Javascript. Il s'agît simplement d'un petit fichier texte contenant une unique ligne correspondant soit à un message d'erreur (nom d'utilisateur ou mot de pass invalide) soit à un message de salutations (cas où le nom d'utilisateur et le mot de passe sont valides).

Votre formulaire devra aussi pouvoir être soumis en appuyant sur la touche "Entrée" (return) du clavier.

ATTENTION: Vous ne devrez pas utiliser des "alert()" pour afficher les messages d'erreur ou de bienvenue, il faudra les inserrer dynamiquement dans votre page à l'aide du javascript. Il est interdit d'utiliser le jQuery pour cette question.
2 pts seront enlevés si le code JavaScript n'est pas (ou mal) indenté.

Cinquième étape (4 points)

Travail demandé

VOUS DEVEZ AVOIR FAIT LE PREREQUIS AVANT DE COMMENCER CETTE PARTIE.

Dans cette étape nous allons créer une petite "chatbox" dynamique sur une page qui sera accessible via un lien depuis une des pages de votre site. Cette chatbox sera basée sur l'utilisation d' AJAX (vous avez le choix entre utiliser le Javascript standard ou le framework jQuery), mais les deux scripts impliqués coté serveur retourneront du JSON.

Les deux scripts à appeller sont chatsend.py pour l'envoi d'un message et chatget.py pour récupérer l'ensemble des messages déjà envoyés.

ATTENTION: 2 pts seront enlevés si le code n'est pas (ou mal) indenté.