Par Tristan LE GODAIS (@PolariTOON)
Les nouvelles de la semaine :
-
Firefox est sorti mardi dernier en version 71 avec comme d'habitude pas mal de changements :
-
Du côté des outils de développement :
-
La console se dote d'un éditeur multi-ligne qui vous permet d'exécuter plus facilement un ensemble d'instructions JavaScript et éventuellement à partir d'un fichier
-
Les messages Web Socket ont désormais un onglet dédié pour les inspecter
-
Parmi les autres changements, l'onglet "Réseau"" possède désormais une barre de recherche, un simulateur de requêtes bloquées et l'onglet "Débogueur" permet quant à lui de visualiser les valeurs des variables à n'importe quelle ligne arrivent de placer un point d'arrêt lors d'un évènement
-
L'inspecteur de grille a été amélioré pour tenir des comptes des nouvelles capacités des grilles CSS (voir ci-dessous)
-
-
Du coté du JS :
-
La méthode
Promise.allSettled()
a été ajoutée et permet d'attendre qu'un ensemble de promesses soit traité (settled), peut importe qu'elles soient accomplies ou rejetées -
Les méthodes génériques statiques non-standard d'
Array
introduites en novembre 2005 dans Firefox 1.5 ont enfin pu être retirées, malgré les problèmes de rétro-compatibilité que cela posait initialement ; voici la liste complète des méthodes supprimées :Array.concat()
,Array.every()
,Array.filter()
,Array.forEach()
,Array.indexOf()
,Array.lastIndexOf()
,Array.map()
,Array.pop()
,Array.push()
,Array.reduce()
,Array.reduceRight()
,Array.reverse
,Array.shift()
,Array.slice()
,Array.some()
,Array.sort()
,Array.splice()
etArray.unshift()
-
Les méthodes et propriétés non-standard de l'API
DataTransfer
(qui sert lorsque l'on fait du Drag & Drop) ont été retirées également :mozGetDataAt()
,mozSetDataAt()
,mozClearDataAt()
andmozTypesAt()
etmozItemCount
-
Le constructeur
StaticRange()
a été ajouté -
WebGL supporte désormais les extensions
OVR_multiview2
etOES_fbo_render_mipmap
(je ne sais pas ce que c'est) -
L'API Media Session a été partiellement implémentée
-
-
Du côté des CSS :
-
Vous connaissiez FlexBox et Grid et ça ne vous suffisait pas ? dites bonjour à
subgrid
, la nouvelle valeur des propriétésgrid-template-columns
etgrid-template-rows
qui permet à une grille de réutiliser les colonnes et / ou les lignes de la grille parente ; avec cette valeur, un certain nombre de designs qui ne pouvait jusqu'à être réalisés qu'avec des tableaux (ouh c'est pas bien) ou avec du JS sont désormais réalisables facilement ! à mon avis, cette grâce à cette valeur que la mise en page en CSS va devenir réellement puissante (mais c'est uniquement dans Firefox actuellement) -
Firefox rattrape enfin son retard quant aux colonnes CSS en ajoutant la propriété
column-span
qui permet à un élément de s'étendre sur plusieurs colonnes comme les chapeaux ou les sous-titres dans les journaux par exemple -
La propriété
clip-path
(l'alternative moderne à la propriétéclip
) supporte enfin comme valeur la fonctionpath()
qui permet de spécifier un chemin SVG quelconque pour rogner un élément -
Nouveauté qui peur sembler insignifiante mais qui pourtant devrait avoir de formidables conséquences pour les utilisateurs : les attributs
height=""
etwidth=""
des éléments<img/>
participent désormais au calcul de la propriétéaspect-ratio
(non exposée et interne à Firefox pour l'instant seulement, mais qui sera standardisée à terme) ; autrement dit, une image, même pas encore chargée, devrait respecter le ratio d'aspect spécifié et ne plus provoquer de sauts dans la page au moment effectif de son chargement ; il est donc désormais à nouveau recommandé de toujours spécifier les attributswidth=""
etheight=""
sur une image (et pas seulement les attributssrc=""
etalt=""
)
-
-
Du côté de MathML :
-
Il y avait bien longtemps que MathML n'avait pas reçu de modifications dans Firefox, mais avec l'implémentation en cours de MathML dans Chrome et la rédaction (en cours également) de la spécification qui devrait devenir MathML 4, tout ceci va changer !
-
Pour commencer, le DOM des éléments MathML obtient désormais la même structure que HTML et SVG ; autrement dit la propriété
style
et les gestionnaires d'évènements sont désormais disponibles sur ces éléments par exemple ! -
Ensuite, dans la perspective de les retirer prochainement, sont dépréciés : les attributs
align=""
sur les éléments<munderover></munderover>
,<munder></munder>
et<mover></mover>
,bevelled=""
, les attributsdenomalign=""
etnumalign=""
sur l'élément<mfrac></mfrac>
, l'attributradical=""
sur l'élément<menclose></menclose>
, les attributssubscriptshift=""
etsuperscriptshift=""
sur les éléments<msubsup></msubsup>
,<msub></msub>
et<msup></msup>
, l'élément<mfenced></mfenced>
et les attributs XLinkxlink:actuate="", xlink:href="", xlink:show=""
etxlink:type=""
-
-
Pour plus d'informations, consultez les pages https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/71, https://hacks.mozilla.org/2019/12/firefox-71-a-year-end-arrival/ et https://www.fxsitecompat.dev/en-CA/versions/71/
-
-
De mardi à jeudi se déroulait la réunion bimestrielle du TC39 qui standardise JavaScript et comment souvent, un certain nombre de fonctionnalités sont venues rejoindre la onzième édition de la spécification du langage, ES2020 :
-
La proposition Nullish coalescing Operator, c'est-à-dire l'opérateur
??
, a été standardisée ; à l'instar des opérateurs||
et&&
qui travaillent surtrue
etfalse
, ce nouvel opérateur permet de court-circuiter l'évaluation de l'opérande droit si l'opérande gauche n'est ninull
niundefined
; l'idée est de pouvoir donner une valeur par défaut à une expression :const articleTitle = article.title ?? "Pas de titre";
; consultez la proposition https://github.com/tc39/proposal-nullish-coalescing elle-même ou bien la documentation https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator -
La proposition Optional Chaining a également été standardisée ; elle apporte trois opérateurs :
?.
,?.[]
et?.()
, versions "court-circuitantes" (non, non, aucun néologisme) des opérateurs.
(accès à une propriété),[]
(accès à une propriété au nom calculé) et()
(appel de fonction) ; autrement dit, si l'opérande gauche estnull
ouundefined
, l'accès à la propriété ou bien l'appel de fonction n'est pas réalisé et l'expression retourneundefined
(en gros, si on avait été en Java, on aurait pu dire : "Le NullPointerException est mort, vive le NullPointerException !") consultez la proposition https://github.com/tc39/proposal-optional-chaining ou bien la documentation https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining -
Si vous connaissez bien JavaScript et JSON, alors vous savez que les objets sont des collections non-ordonnées de paires de clés et de valeurs (non-ordonnées, vous avez vu ?) ; en pratique ce n'est pas complètement le cas car lors du parcours d'un objet avec une boucle
for (... in ...) ...
, les navigateurs sont d'accord sur une partie de l'ordre d'énumération des clés ; eh bien la proposition for-in mechanics tout juste standardisée décrit et standardise désormais ce dénominateur commun de l'énumération avec une bouclefor (... in ...) ...
; pour les développeurs ça ne change rien, à part apporter une bonne piqûre de rappel : ne vous reposez pas sur l'ordre d'énumération des clés d'un objet avec la bouclefor (... in ...) ...
, c'est globalement imprévisible ! consultez la proposition https://github.com/tc39/proposal-for-in-order ou bien la documentation https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in -
Dernière nouveauté : l'API
Intl.RelativeTimeFormat
a été standardisée et permet, comme son nom l'indique, de formater des dates relativement au moment présent ("il y a un jour", "demain", "le mois dernier", "dans 2 minutes", "maintenant"...), le genre de truc qui serait super fastidieux à implémenter pour un développeur lambda, et ce surtout dans n'importe quelle locale (en gros dans n'importe langue) ; consultez la proposition https://github.com/tc39/proposal-intl-relative-time ou bien la documentation https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat
-