{
	"title": "Bulletin de la Web Academy no 32",
	"summary": "Sortie de Firefox 71 et ajout de quatre fonctionnalités à JavaScript",
	"date_published": "2019-12-07",
	"authors": [
		{
			"name": "PolariTOON"
		}
	],
	"tags": [],
	"external_url": "https://polaritoon.github.io/web-academy/news/32-2019-12-07/",
	"id": "web-academy-news-no-32",
	"image": "./*.svg",
	"content_html": "<p><strong>Cet article a initialement été publié sur <em>Discord</em> avant d'être archivé ici et sur <a href=\"//polaritoon.github.io/web-academy/news/32-2019-12-07/\"><em>GitHub</em></a>.</strong></p>\n<div lang=\"fr\">\n\t<p>Les nouvelles de la semaine :</p>\n\t<ul>\n\t\t<li>\n\t\t\t<p><em>Firefox</em> est sorti mardi dernier en version <em>71</em> avec comme d'habitude pas mal de changements :</p>\n\t\t\t<ul>\n\t\t\t\t<li>\n\t\t\t\t\t<p>Du côté des outils de développement :</p>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>La console se dote d'un éditeur multi-ligne qui vous permet d'exécuter plus facilement un ensemble d'instructions <em>JavaScript</em> et éventuellement à partir d'un fichier</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Les messages <em>Web Socket</em> ont désormais un onglet dédié pour les inspecter</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Parmi les autres changements, l'onglet &quot;Réseau&quot;&quot; possède désormais une barre de recherche, un simulateur de requêtes bloquées et l'onglet &quot;Débogueur&quot; 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</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>L'inspecteur de grille a été amélioré pour tenir des comptes des nouvelles capacités des grilles <em>CSS</em> (voir ci-dessous)</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<p>Du coté du <em>JS</em> :</p>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>La méthode <code>Promise.allSettled()</code> a été ajoutée et permet d'attendre qu'un ensemble de promesses soit traité (<em>settled</em>), peut importe qu'elles soient accomplies ou rejetées</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Les méthodes génériques statiques non-standard d'<code>Array</code> introduites en novembre 2005 dans <em>Firefox 1.5</em> 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 : <code>Array.concat()</code>, <code>Array.every()</code>, <code>Array.filter()</code>, <code>Array.forEach()</code>, <code>Array.indexOf()</code>, <code>Array.lastIndexOf()</code>, <code>Array.map()</code>, <code>Array.pop()</code>, <code>Array.push()</code>, <code>Array.reduce()</code>, <code>Array.reduceRight()</code>, <code>Array.reverse</code>, <code>Array.shift()</code>, <code>Array.slice()</code>, <code>Array.some()</code>, <code>Array.sort()</code>, <code>Array.splice()</code> et <code>Array.unshift()</code></p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Les méthodes et propriétés non-standard de l'API <code>DataTransfer</code> (qui sert lorsque l'on fait du <em>Drag &amp; Drop</em>) ont été retirées également : <code>mozGetDataAt()</code>, <code>mozSetDataAt()</code>, <code>mozClearDataAt()</code> and <code>mozTypesAt()</code> et <code>mozItemCount</code></p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Le constructeur <code>StaticRange()</code> a été ajouté</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p><em>WebGL</em> supporte désormais les extensions <code>OVR_multiview2</code> et <code>OES_fbo_render_mipmap</code> (je ne sais pas ce que c'est)</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>L'API <em>Media Session</em> a été partiellement implémentée</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<p>Du côté des <em>CSS</em> :</p>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Vous connaissiez <em>FlexBox</em> et <em>Grid</em> et ça ne vous suffisait pas ? dites bonjour à <code>subgrid</code>, la nouvelle valeur des propriétés <code>grid-template-columns</code> et <code>grid-template-rows</code> qui permet à une grille de réutiliser les colonnes et / ou les lignes de la grille parente ; avec cette valeur, un certain nombre de <em>designs</em> qui ne pouvait jusqu'à être réalisés qu'avec des tableaux (ouh c'est pas bien) ou avec du <em>JS</em> sont désormais réalisables facilement ! à mon avis, cette grâce à cette valeur que la mise en page en <em>CSS</em> va devenir réellement puissante (mais c'est uniquement dans <em>Firefox</em> actuellement)</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p><em>Firefox</em> rattrape enfin son retard quant aux colonnes <em>CSS</em> en ajoutant la propriété <code>column-span</code> qui permet à un élément de s'étendre sur plusieurs colonnes comme les chapeaux ou les sous-titres dans les journaux par exemple</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>La propriété <code>clip-path</code> (l'alternative moderne à la propriété <code>clip</code>) supporte enfin comme valeur la fonction <code>path()</code> qui permet de spécifier un chemin <em>SVG</em> quelconque pour rogner un élément</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Nouveauté qui peur sembler insignifiante mais qui pourtant devrait avoir de formidables conséquences pour les utilisateurs : les attributs <code>height=&quot;&quot;</code> et <code>width=&quot;&quot;</code> des éléments <code>&lt;img/&gt;</code> participent désormais au calcul de la propriété <code>aspect-ratio</code> (non exposée et interne à <em>Firefox</em> 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 attributs <code>width=&quot;&quot;</code> et <code>height=&quot;&quot;</code> sur une image (et pas seulement les attributs <code>src=&quot;&quot;</code> et <code>alt=&quot;&quot;</code>)</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<p>Du côté de <em>MathML</em> :</p>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Il y avait bien longtemps que <em>MathML</em> n'avait pas reçu de modifications dans <em>Firefox</em>, mais avec l'implémentation en cours de <em>MathML</em> dans <em>Chrome</em> et la rédaction (en cours également) de la spécification qui devrait devenir <em>MathML 4</em>, tout ceci va changer !</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Pour commencer, le DOM des éléments <em>MathML</em> obtient désormais la même structure que <em>HTML</em> et <em>SVG</em> ; autrement dit la propriété <code>style</code> et les gestionnaires d'évènements sont désormais disponibles sur ces éléments par exemple !</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<p>Ensuite, dans la perspective de les retirer prochainement, sont dépréciés : les attributs <code>align=&quot;&quot;</code> sur les éléments <code>&lt;munderover&gt;&lt;/munderover&gt;</code>, <code>&lt;munder&gt;&lt;/munder&gt;</code> et <code>&lt;mover&gt;&lt;/mover&gt;</code>, <code>bevelled=&quot;&quot;</code>, les attributs <code>denomalign=&quot;&quot;</code> et <code>numalign=&quot;&quot;</code> sur l'élément <code>&lt;mfrac&gt;&lt;/mfrac&gt;</code>, l'attribut <code>radical=&quot;&quot;</code> sur l'élément <code>&lt;menclose&gt;&lt;/menclose&gt;</code>, les attributs <code>subscriptshift=&quot;&quot;</code> et <code>superscriptshift=&quot;&quot;</code> sur les éléments <code>&lt;msubsup&gt;&lt;/msubsup&gt;</code>, <code>&lt;msub&gt;&lt;/msub&gt;</code> et <code>&lt;msup&gt;&lt;/msup&gt;</code>, l'élément <code>&lt;mfenced&gt;&lt;/mfenced&gt;</code> et les attributs <em>XLink</em> <code>xlink:actuate=&quot;&quot;, xlink:href=&quot;&quot;, xlink:show=&quot;&quot;</code> et <code>xlink:type=&quot;&quot;</code></p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<p>Pour plus d'informations, consultez les pages <a href=\"https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/71,\">https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/71,</a> <a href=\"https://hacks.mozilla.org/2019/12/firefox-71-a-year-end-arrival/\">https://hacks.mozilla.org/2019/12/firefox-71-a-year-end-arrival/</a> et <a href=\"https://www.fxsitecompat.dev/en-CA/versions/71/\">https://www.fxsitecompat.dev/en-CA/versions/71/</a></p>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</li>\n\t\t<li>\n\t\t\t<p>De mardi à jeudi se déroulait la réunion bimestrielle du <em>TC39</em> qui standardise <em>JavaScript</em> et comment souvent, un certain nombre de fonctionnalités sont venues rejoindre la onzième édition de la spécification du langage, <em>ES2020</em> :</p>\n\t\t\t<ul>\n\t\t\t\t<li>\n\t\t\t\t\t<p>La proposition <em>Nullish coalescing Operator</em>, c'est-à-dire l'opérateur <code>??</code>, a été standardisée ; à l'instar des opérateurs <code>||</code> et <code>&amp;&amp;</code> qui travaillent sur <code>true</code> et <code>false</code>, ce nouvel opérateur permet de court-circuiter l'évaluation de l'opérande droit si l'opérande gauche n'est ni <code>null</code> ni <code>undefined</code> ; l'idée est de pouvoir donner une valeur par défaut à une expression : <code>const articleTitle = article.title ?? &quot;Pas de titre&quot;;</code> ; consultez la proposition <a href=\"https://github.com/tc39/proposal-nullish-coalescing\">https://github.com/tc39/proposal-nullish-coalescing</a> elle-même ou bien la documentation <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator\">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator</a></p>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<p>La proposition <em>Optional Chaining</em> a également été standardisée ; elle apporte trois opérateurs : <code>?.</code>, <code>?.[]</code> et <code>?.()</code>, versions &quot;court-circuitantes&quot; (non, non, aucun néologisme) des opérateurs <code>.</code> (accès à une propriété), <code>[]</code> (accès à une propriété au nom calculé) et <code>()</code> (appel de fonction) ; autrement dit, si l'opérande gauche est <code>null</code> ou <code>undefined</code>, l'accès à la propriété ou bien l'appel de fonction n'est pas réalisé et l'expression retourne <code>undefined</code> (en gros, si on avait été en <em>Java</em>, on aurait pu dire : &quot;Le <em>NullPointerException</em> est mort, vive le <em>NullPointerException</em> !&quot;) consultez la proposition <a href=\"https://github.com/tc39/proposal-optional-chaining\">https://github.com/tc39/proposal-optional-chaining</a> ou bien la documentation <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining\">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining</a></p>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<p>Si vous connaissez bien <em>JavaScript</em> et <em>JSON</em>, 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 <code>for (... in ...) ...</code>, les navigateurs sont d'accord sur une partie de l'ordre d'énumération des clés ; eh bien la proposition <em>for-in mechanics</em> tout juste standardisée décrit et standardise désormais ce dénominateur commun de l'énumération avec une boucle <code>for (... in ...) ...</code> ; 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 boucle <code>for (... in ...) ...</code>, c'est globalement imprévisible ! consultez la proposition <a href=\"https://github.com/tc39/proposal-for-in-order\">https://github.com/tc39/proposal-for-in-order</a> ou bien la documentation <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in\">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in</a></p>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<p>Dernière nouveauté : l'API <code>Intl.RelativeTimeFormat</code> a été standardisée et permet, comme son nom l'indique, de formater des dates relativement au moment présent (&quot;il y a un jour&quot;, &quot;demain&quot;, &quot;le mois dernier&quot;, &quot;dans 2 minutes&quot;, &quot;maintenant&quot;...), 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 <a href=\"https://github.com/tc39/proposal-intl-relative-time\">https://github.com/tc39/proposal-intl-relative-time</a> ou bien la documentation <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat\">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat</a></p>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</li>\n\t</ul>\n</div>\n",
	"banner_image": "./*.png"
}