L'antisèche de JavaScript - Bloc 2
Le langage JavaScript
Généralités
- Outils d'édition
- Éditeur en ligne JS.do ou IDE PHPStorm
- Java vs JavaScript
- Langages qui ne partagent presque que le nom et une syntaxe inspirée du C
- Types de variables
- Les différents types primitifs et les objets
- Conversion de types
- Implicite et fonctions de conversion: parseInt, ...
- Déclaration et portée
- let, var, ...
- Déclaration de constantes
- const
- Mécanisme de hoisting
- L'utilisation de fonction et variable avant déclaration
- Mode "strict"
- Imposer de bonnes pratiques
- Le mot-clef this
- Ses différentes significations en fonction du contexte
- Interpolation d'expression/variable
- `chaine formatée contenant des ${expressions}`
- PHPStorm et Babel
- Transpilation du code JS
- JSDoc
- Documentation de fichiers, modules, classes et fonctionschsh-jsdoc
- Opérateur de coalescence des nuls
- opérateur "??" qui retourne la première valeur ni null ni undefined
Structures de contrôles
- Conditionnelles
- if, if else, opérateur ternaire "?", switch
- Itératives
- while, do while, for
- Particulières
- With (obsolète) et debugger...
- Les exceptions
- bloc try{}catch(){}finally{} et objet Error...
Fonctions
- Déclaration
- mot-clef function, déclaration par expression,...
- Fonctions fléchées
- Opérateur =>
- Valeurs par défaut des arguments
- Implicite et fonctions de conversion: parseInt, ...
- Fonctions imbriquées
- la déclaration d'un fonction dans une autre
- Fonction de 1ier ordre
- Une fonction passée en argument
- Fonction d'ordre supérieur
- Une fonction qui retourne une fonction
- Les fonctions génératrices
- Mots-clefs function*, yield et yield*
- Les fermetures (closures)
- L'objet fonction et son enchainement de portées à la déclaration
Tableaux
- Déclaration et accès à un élément
- La création de tableaux et accès au iième élément [i]
- Longueur d'un tableau
- Propriété tab.length
- Ajout d'un élément
- tab[tab.length] ou tab.push()
- L'opérateur spread ...
- Scinder un tableau ou un objet itérable en ses valeurs individuelles
- Supprimer un élément
- delete, pop, splice, ...
- La méthode forEach
- Appliquer une fonction à chaque élément
- La méthode map
- Obtenir un tableau en appliquant une fonction à chaque élément
- La méthode filter
- Filtrer les éléments d'un tableau
- Les méthodes find et findIndex
- Trouver la valeur ou la position d'un élément
- Les méthodes some et every
- Déterminer si un ou tous les éléments vérifient des critères
- Les méthodes reduce et reduceRight
- Réduire un tableau en une valeur accumulative
- Le tri de tableaux
- array.sort(function comparator(a,b){})
Objets
- Initialisation
- Affectation d'ensemble de propriété-valeur
- Appel d'une propriété ou d'une méthode
- obj.propriete ou obj["propriete"]
- Supprimer une propriété
- Fonction delete(obj.propriete)
- Vérification de l'existence d'une propriété
- Méthode obj.hasOwnProperty("propriete")
- Accès conditionnel à une propriété
- obj?.propriété retourne la valeur ou undefined si inexistante
- Parcours des propriétés
- Méthode Object.keys(obj)
- Format JSON
- Sérialisation JSON.stringify() et désérialisation JSON.parse()
- Clonage d'objet
- Clonage en profondeur (via JSON) ou non (Object.assign({}, obj) ou {... obj})
- Affectation par décomposition
- Décomposition d'un objet en ses propriétés
- Invocation indirecte de méthodes
- Les méthodes fct.call(obj, args...) et fct.apply(obj, [args...])
Collections
- Itérateurs et itérables
-
- Conversion itérable en tableau
- Array.from(itérable)
- Les ensembles
- Objet Set
- Les dictionnaires
- Objet Map
Classes et modules
- Instance d'objet
- En JS, les objets sont liés à une chaine de prototypes
- Création d'instances d'objet
- Les différentes manières d'instancier des objets
- Classes
- Les classes depuis ES6
- Propriétés et méthodes statiques
- L'utilisation du mot-clef static
- Héritage
- L'utilisation du mot-clef extends
- Accesseurs (get) et mutateurs (set)
- Une méthode pour lire ou modifier une propriété ou variable locale
- Modules (version ES6+)
- Les mots-clefs import et export
- Modules conditionnels(version ES2020+)
- import() retourne une promesse
- Modules (version Node.js)
- La méthode module.exports et la fonction require
Fonctions asynchrones
- Principes
- JS est un langage monothread avec une "pile" des fonctions à exécuter
- Fonctions callback
- Fonctions appelées avec le résultat d'une fonction asynchrone
- Promesses
- Les objets Promise
- Chaînage de promesses
- Mise en oeuvre de promesses successives
- Async/await
- Écrire du code asynchrone comme du code séquentiel
La librairie jQuery
Généralités
- Librairie jQuery
- Importation d'une version locale ou via CDN
- Déclaration des scripts
- Exécution des scripts après le chargement de la page
- Sélecteurs
- Syntaxe similaire à CSS
- Objet jQuery vs élément de DOM
- un objet jQuery contient une collection d'éléments DOM
- Parcours des éléments DOM d'un objet jQuery
- .each()
- Sérialisation d'un objet/tableau version url
- $.param(objet)
DOM
- Parcours du DOM
- parent(), children(), find(), ...
- Lire/Modifier du contenu texte
- .text()
- Lire/Modifier du contenu HTML
- .html()
- Lire/Modifier la valeur d'un champ
- .val()
- Ajouter des éléments dans le DOM
- .append(), .preprend(), .appendTo(),...
- Supprimer du contenu ou un élément
- contenu: .empty(), élément: .remove()
- Modifier la CSS
- .css("style", "valeur"), .addClass("classe"), .removeClass("classe")
- Afficher/Masquer un élément
- .show(), .hide(), .toggle()
- Animations
- .animate({styles CSS})
Événements
- Ajouter un gestionnaire d'événements
- .on("event", function)
- Retirer un gestionnaire d'événements
- .off("event")
- Propagation d'événements
- stopPropagation(), ...
AJAX avec jQuery
- $.load()
- Placement du contenu d'une ressource HTML dans un élément du DOM
- $.script()
- Chargement d'un script JS distant et exécution dans la portée globale
- $.getJSON()
- Chargement d'une ressource distante et interprétation de son contenu au format JSON
- $.get() & $.post()
- Requêtes en mode GET ou POST personnalisables
- $.ajax()
- La méthode sur laquelle reposent les autres méthodes AJAX de jQuery
- $.ajax() et promesses
- L'implémentation des promesses selon jQuery
- Envoi de données de formulaire
- par sérialisation ou via l'objet FormData
L'API d'HTML5
Généralités
- inclure du JS dans une page web
- <script>, fichier externe, attribut HTML ou via URL
- Contraintes de sécurité
- Same Origin Policy
- Par défaut, un document ne peut être lu que par un script de même origine (protocole, domaine, port...)
- Cross-Origin Resource Sharing
- Autoriser l'accès à un document par un script d'une autre origine (Access-Control-Allow-Origin, ...)
- Synchronisation et modules
- defer, async et type="module"
DOM
- Objet Window
- Pour un script JS exécuté dans un navigateur, le contexte global est l'onglet (objet Window)
- Objet document
- Objet JS représentant le DOM
- Document Object Model
- Représentation mémoire en arbre des balises HTML et leur contenu
- Sélection d'éléments du DOM
- getElementById(), getElementsByTagName(), querySelector(), ...
- Lire/Modifier du contenu HTML
- .html()
- Ajouter des éléments dans le DOM
- createElement(), createTextNode(), appendChild(),...
- Supprimer du contenu ou un élément
- replaceChild(), removeChild(),...
- Modifier la CSS
- .style.proprieteCSS, .className, ...
Événements
- L'interface Event
- Les informations sur l'événement généré
- Ajouter un gestionnaire d'événements
- .addEventListener("event", function())
- Comprendre les événements
- la propagation, la capture, ...
Stockage: Cookie
- Les cookies
- Principes d'utilisation et fonctionnement d'un cookie
- Créer et modifier un cookie
- document.cookie
- Lecture d'un cookie
- decodeURIComponent(document.cookie) ...
- Suppression d'un cookie
- rendre le cookie obsolète...
Stockage: SessionStorage
- Les données en session
- Espace, unique par onglet, de données textuelles temporaires
- Créer et modifier une donnée
- sessionStorage.setItem("cle", "valeur")
- Lecture d'une donnée
- sessionStorage.getItem("cle")
- Suppression d'une donnée
- sessionStorage.removeItem("cle")
- Suppression de toutes les données
- sessionStorage.clear()
Stockage: LocalStorage
- Les données en local
- Espace, unique par domaine, de données textuelles permanentes
- Créer et modifier une donnée
- localStorage.setItem("cle", "valeur")
- Lecture d'une donnée
- localStorage.getItem("cle")
- Suppression d'une donnée
- localStorage.removeItem("cle")
- Suppression de toutes les données
- localStorage.clear()
Stockage: IndexedDB
- Base de données locale
- Espace, unique par domaine, d'objets JS permanents
- Syntaxe et utilisation
- L'utilisation d'IndexedDB expliquée et illustrée
Canvas
- Canvas API
- Réalisation de dessins dynamiquement dans une balise <canvas>
- Dessiner des rectangles
- .strokeRect(), .fillRect(), .clearRect(), ...
- Dessin à main levée (chemin)
- .beginPath(), .closePath(), .stroke(), ...
- Éléments d'un chemin
- .lineTo(), .moveTo(), .arc(), .arcTo(), .quadraticCurveTo(), .bezierCurveTo(), ...
- Styles de trait de dessin
- .strokeStyle(), .lineWidth(), .setLineDash(), ...
- Écriture de textes
- .strokeText(), .fillText(), ...
- Taille de textes
- Objet TextMetrics, .measureText(), ...
- Utilisation d'images
- Objet Image, .drawImage(), ...
- Changement de repère
- .translate(), .rotate(), .scale(), ...
- Sauvegarde et restauration de l'état du canevas
- état, .save(), .restore(), ...
AJAX
- Modèle AJAX
- Requêtes HTTP pour mises à jour partielles de pages
- XMLHttpRequest
- Requêtes régulières du client
- Envoi de données de formulaire
- en GET ou en POST
- Terminaison de requête AJAX
- XMLHttpRequest.timeout, XMLHttpRequest.abort()
- Requête AJAX avec <script>
- Envoi au format JSONP
- Requête AJAX avec API fetch
- fetch(url, options) retourne une promesse
Comet
- Modèle Comet
- Actualisation du client à l'initiative du serveur
- Polling
- Requêtes régulières du client
- SSE
- Principes du Server Sent Event API et due côté serveur
- SSE - Client
- Server Sent Event côté client
- WebSockets
- Communication bidirectionnelle client-serveur
Rappel Bloc1: Le langage HTML5
Environnement de travail
- Serveur Dartagnan
- Hébergement de votre site web
- FileZilla
- Client FTP installé sur les machines de laboratoire
- VPN
- Accès à Dartagnan depuis votre domicile
- UTF-8 (sans BOM!)
- Codage de caractères à utiliser avec votre éditeur de fichiers HTML
- Bonnes pratiques HTML5
- Quelques conseils à suivre pour la rédaction de votre code HTML
- Validateur W3C: HTML5
- Validez chaque page de votre site
Méta-données
- <!DOCTYPE html>
- Document en HTML 5
- HTML5 vs XHTML
- Comparaison de la syntaxe HTML5 et XHTML
- <head>
- Conteneur des balises de méta-données
- <link>
- Liaison d'une feuille de styles CSS externe
- <style>
- Spécification de styles CSS interne
Divers
- () <img alt="" >
- Image
- () <picture> <source srcset="" …
- Image adaptative
- <a href="" title="" >
- Hyperlien
- () <hr>
- Séparateur, barre horizontale
- Entités HTML
- Caractères spéciaux (accents, symboles, sinogrammes,…)
Balises sémantiques
- () <h1>, ...,<h6>
- Titres de niveaux 1 à 6
- () <main>
- Contenu spécifique de la page en cours (1 seul <main> visible à la fois!)
- () <article>
- Contenu qui garde du sens si partagé dans un autre site
- () <section>
- Groupement de contenus de la page, d'un article, d'une section...
- () <header>
- Entête de la page, d'un article, d'une section
- () <footer>
- Pied de la page, d'un article, d'une section
- () <nav>
- Conteneur d'éléments de navigation
- () <aside>
- Contenu facultatif lié à la page, un article ou une section
- () <figure>
- Conteneur d'un élément illustratif généralement légendé (photo, graphique, ...)
- () <figcaption>
- Légende d'une <figure>
- () <details>
- Conteneur dont le contenu peut être masqué/affiché
- () <summary>
- Résumé qui permet de voir/masquer le contenu d'un <details>
- () <div>
- Conteneur en bloc sans signification sémantique (à utiliser si aucune autre balise sémantique ne convient!)
Attributs
- id
- identifiant (doit être unique sur une même page)
- name
- nom (plusieurs occurrences possibles sur une même page)
- class
- Classe de styles CSS
- style
- Règles locales de styles CSS
Contenus textuels
- () <p>
- Paragraphe de texte
- () <br>
- Saut de ligne au sein d'un paragraphe (ne pas utiliser pour espacement vertical!)
- () <ul>
- Liste à puces (conteneur)
- () <ol>
- Liste numérotée (conteneur)
- () <li>
- Élément de liste à puces ou numérotée
- () <span>
- Conteneur en ligne sans signification sémantique
Tableaux
- () <table>
- Tableau (ne pas utiliser pour mise en page)
- <tr>
- Ligne de cellules d'un tableau
- <th>
- Cellule d'entête d'une colonne d'un tableau
- <td>
- Cellule d'un tableau
Formulaires
- <form>
- Conteneur d'éléments de formulaire
- <fieldset>
- Permet le regroupement d'éléments de formulaire
- () <input type="text" …
- Texte court (quelques mots)
- () <textarea rows="" cols="" …
- Texte long (plusieurs lignes)
- () <input type="password" …
- Mot de passe
- () <input type="url" …
- Url
- () <input type="email" …
- Courriel
- () <input type="number" …
- Valeur numérique
- () <input type="date" …
- Date
- () <input type="time" …
- Heure
- () <input type="hidden" …
- Champ non affiché
- () <input type="range" …
- Valeurs par palier (curseur)
- () <input type="radio" …
- Boutons radio (Choix exclusif)
- () <input type="checkbox" …
- Cases à cocher (Choix non exclusif)
- () <select>
- Liste déroulante
- <datalist>
- Liste de valeurs pour autocomplétion d'un champ texte
- () <input type="file"…
- Bouton de téléversement de fichier
- () <button type="button">
- Bouton d'action (sans soumission)
- () <button type="reset">
- Bouton de réinitialisation
- () <button [type="submit]">
- Bouton de soumission
Formulaires: attributs
- autofocus
- Élément actif au chargement de la page
- autocomplete
- Auto-complétion
- disabled
- Élément inactif
- pattern
- Validation par expression régulière
- placeholder
- Indication à destination de l'utilisateur
- readonly
- Élément en lecture seule
Rappel Bloc1: Le langage CSS3
Généralités
- Modèle Parent-Enfant
- Les enfants héritent des règles de style de leurs parents
- Viewport
- Portion affichée de la page
- Liaisons de règles de style
- Différentes liaisons possibles en cascade
- Le flux
- Ordre d'affichage et de placement des éléments par défaut
- Le Responsive Web Design
- Une mise en page qui s'adapte aux dimensions du support
- Validateur W3C: CSS3
- Validez la feuille de styles de votre site
Sélecteurs
- *
- Sélection de toutes les balises
- .class
.test{…}
Tous les éléments avec l'attribut class="test"
- .class1.class2
.test.essai{…}
Tous les éléments avec l'attribut class="test essai"
- #id
#test42{…}
L'élément avec l'attribut id="test42"
- balise
p{…}
Tous les éléments <p>
Combinaison de sélecteurs
- sélecteur1, sélecteur2
- Tous les éléments qui sont sélectionnés par au moins un des sélecteurs
- sélecteur1 sélecteur2
- Tous les éléments sélectionnés par sélecteur2 contenus dans un ancêtre sélectionné par sélecteur1
- sélecteur1 > sélecteur2
- Tous les éléments sélectionnés par sélecteur2 contenus dans un parent direct sélectionné par sélecteur1
- sélecteur1 + sélecteur2
- Tous les éléments sélectionnés par sélecteur2 voisins (contenus dans le même parent) d'un élément sélectionné par sélecteur1
- sélecteur ~ sélecteur
- Tous les éléments sélectionnés par sélecteur2 voisins directs (contenus dans le même parent et qui suivent) d'un élément sélectionné par sélecteur1
Le modèle boite
- width
- largeur du contenu d'un élément
- height
- hauteur du contenu d'un élément
- margin
- marges extérieures (autour de la bordure d'un élément)
- padding
- marges intérieures (entre la bordure et le contenu de l'élément)
- marges et espaces blancs
- Effondrement des marges verticales et gestion des espaces blancs
- overflow
- gestion du débordement du contenu hors de l'élément
display: none;
- Élément non affiché
- ()
display: block;
- Mode bloc (un élément par ligne, dimensions réglables)
- ()
display: inline;
- Mode en ligne (élément sur ligne courante si place restante, dimensions liées au contenu)
- ()
display: inline-block;
- Mode bloc en ligne (élément sur ligne courante si place restante, dimensions réglables)
box-sizing: border-box;
- Dimensions "width" et "height" comprennent alors le contenu, les paddings et les bordures
Positionnement avancé
position: relative;
- Positionnement relatif (décalage par rapport à la position dans le flux)
position: absolute;
- Positionnement absolu (décalage par rapport au coin supérieur gauche de la page ou du conteneur parent)
position: fixed;
- Positionnement fixe (décalage par rapport au coin supérieur gauche du viewport)
float: left|right;
- Positionnement flottant
z-index: number;
- Ordre d'affichage d'éléments superposés
Unités de dimensions
- () px
- en pixels
- () rem
- selon la taille de police par défaut (souvent 16px)
- ( ) em
- selon la taille de police de l'élément parent
- ( ) %
- 1% = 1/100 de la hauteur/largeur de la page entière
- () vw
- 1 vw = 1/100 de la largeur du viewport
- () vh
- 1 vh = 1/100 de la hauteur du viewport
- () vmin
- 1 vmin = 1/100 de la largeur(si portrait)/hauteur(si paysage) du viewport
- () vmax
- 1 vmax = 1/100 de la hauteur(si portrait)/largeur(si paysage) du viewport
- () mm
- en millimètres
- calc()
- valeur calculée d'une propriété de taille CSS
La couleur
- #rrggbb
- en hexadécimal (00-FF) selon les composantes Rouge, Verte et Bleue
- nom
- par le nom d'une des 140 couleurs prédéfinies
- rgb(rouge,vert,bleu)
- en décimal (0-255) selon les composantes Rouge, Verte et Bleue
- rgba(rouge,vert,bleu,alpha)
- en décimal (0-255) selon les composantes Rouge, Verte, Bleue, Transparence (0-1)
La police
- font-family
- la police de caractères
- font-weight
- texte en gras
- font-size
- taille de la police
- font-style
- texte en italique
- color
- la couleur du texte
- text-align
- alignement horizontal du texte
- text-decoration
- texte souligné
- line-height
- hauteur d'une ligne de texte
- list-style-type
- aspect des puces d'une liste
- text-shadow
- ombre d'un texte
- @font-face
- importer une police de caractères
Les bordures
- border
- les bordures d'un élément
- border-style
- le type de trait
- border-width
- l'épaisseur du trait
- border-color
- la couleur du trait
- border-radius
- les coins arrondis
- box-shadow
- ombre d'un élément
L'arrière-plan
- background-color
- la couleur d'arrière-plan d'un élément (contenu+padding)
- background-size
- les dimensions de l'image d'arrière-plan
Pseudo-classes
- :link
- hyperlien non consulté
- :visited
- hyperlien consulté
- :active
- hyperlien qui a le focus (exemple: via touche du clavier "tab")
- :hover
- élément survolé
- :focus
- élément de formulaire qui a le focus
- :nth-child(n)
- nième élément enfant de son parent
- :first-child
- premier élément enfant de son parent
- :last-child
- dernier élément enfant de son parent
Pseudo-éléments
- ::first-line
- première ligne d'un paragraphe
- ::first-letter
- première lettre d'un texte
- ::after
- insertion de contenu après un élément
- ::before
- insertion de contenu avant un élément
- ::selection
- éléments ou portion de textes sélectionnés
Conteneur Flex
display: flex|inline-flex;
- déclaration d'un conteneur FlexBox
- flex-direction
- orientation de l'axe principal
- flex-wrap
- une seule ou plusieurs rangées d'éléments
- justify-content
- répartition de l'espace restant d'une rangée selon l'axe principal
- align-items
- répartition de l'espace restant d'une rangée selon l'axe croisé
- align-content
- répartition de l'espace restant du conteneur selon l'axe croisé
- flex-flow
- version condensée de flex-direction & flex-wrap
Élément d'un conteneur Flex
- flex-basis
- taille par défaut avant redimensionnement
- order
- ordre d'affichage des éléments au sein du conteneur
- flex-grow
- ordre de dilatation de l'élément en fonction de l'espace disponible
- flex-shrink
- ordre de réduction de l'élément
- align-self
- répartition de l'espace libre autour d'un élément selon l'axe croisé
- flex
- version condensée de flex-grow, flex-shrink et flex-basis
Media Queries
- types de médias
- Liste des medias
- propriétés des médias
- width, height, orientation, device-width, ...
- combinaison de critères
- NON(not), ET(and), OU(,)
- @media
- Media query dans une feuille de styles