From db6db58144a8b5e1003953a3823902f8411874f6 Mon Sep 17 00:00:00 2001 From: Keryan SANIE Date: Fri, 1 Mar 2024 12:47:01 +0100 Subject: [PATCH 01/11] =?UTF-8?q?=F0=9F=90=9B=20fix(header):=20correction?= =?UTF-8?q?=20overflow=20hidden=20cache=20le=20focus=20[DS-3723]=20(#881)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - correction du focus caché par un overflow hidden, sur le lien du logo du header --- src/component/header/style/module/_brand.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/component/header/style/module/_brand.scss b/src/component/header/style/module/_brand.scss index c3c7ee5e3..a8d351043 100644 --- a/src/component/header/style/module/_brand.scss +++ b/src/component/header/style/module/_brand.scss @@ -11,7 +11,6 @@ @include margin-y(-4v, lg); @include size(100%); @include padding-x(1v); - overflow: hidden; @include media-query.respond-from(lg) { flex-wrap: nowrap; @@ -23,6 +22,7 @@ @include display-flex(row, center, flex-start); @include size(100%); @include size(auto, null, lg); + overflow: hidden; } @include hover-media-query { From eac4d5df82ba6b8053b4cd21eeb0c61676639d7b Mon Sep 17 00:00:00 2001 From: lab9 Date: Fri, 1 Mar 2024 12:52:33 +0100 Subject: [PATCH 02/11] =?UTF-8?q?=F0=9F=90=9B=20fix(analytics):=20correcti?= =?UTF-8?q?f=20h=C3=A9ritage=20listenClick=20[DS-3745]=20(#885)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - corrige un bug js au niveau de l'héritage du listenClick. Renommage de la fonction listenClick en listenActionClick car la fonction existe déja sur la classe héritée "Instance" --- .../component/breadcrumb/breadcrumb-link-actionee.js | 2 +- .../script/integration/component/button/button-actionee.js | 2 +- .../script/integration/component/card/card-actionee.js | 2 +- .../integration/component/connect/connect-actionee.js | 2 +- .../integration/component/connect/connect-link-actionee.js | 2 +- .../integration/component/download/download-actionee.js | 2 +- .../integration/component/footer/footer-link-actionee.js | 2 +- .../script/integration/component/link/link-actionee.js | 2 +- .../component/navigation/navigation-link-actionee.js | 2 +- .../component/pagination/pagination-link-actionee.js | 2 +- .../component/sidemenu/sidemenu-link-actionee.js | 2 +- .../integration/component/summary/summary-link-actionee.js | 2 +- .../script/integration/component/tag/tag-actionee.js | 4 ++-- .../script/integration/component/tile/tile-actionee.js | 2 +- src/analytics/script/integration/core/action/a-actionee.js | 2 +- src/analytics/script/integration/core/actionee.js | 6 +++--- src/core/script/api/modules/register/instance.js | 6 +++--- 17 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/analytics/script/integration/component/breadcrumb/breadcrumb-link-actionee.js b/src/analytics/script/integration/component/breadcrumb/breadcrumb-link-actionee.js index f2a21457e..52ce534be 100644 --- a/src/analytics/script/integration/component/breadcrumb/breadcrumb-link-actionee.js +++ b/src/analytics/script/integration/component/breadcrumb/breadcrumb-link-actionee.js @@ -11,7 +11,7 @@ class BreadcrumbLinkActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } handleClick () { diff --git a/src/analytics/script/integration/component/button/button-actionee.js b/src/analytics/script/integration/component/button/button-actionee.js index 0bcde3a4e..05edd9338 100644 --- a/src/analytics/script/integration/component/button/button-actionee.js +++ b/src/analytics/script/integration/component/button/button-actionee.js @@ -14,7 +14,7 @@ class ButtonActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } handleClick () { diff --git a/src/analytics/script/integration/component/card/card-actionee.js b/src/analytics/script/integration/component/card/card-actionee.js index 9c0e55bbf..0e1ef71fa 100644 --- a/src/analytics/script/integration/component/card/card-actionee.js +++ b/src/analytics/script/integration/component/card/card-actionee.js @@ -16,7 +16,7 @@ class CardActionee extends ComponentActionee { if (link) { this.link = link; this.detectInteractionType(link); - this.listenClick(link); + this.listenActionClick(link); } } diff --git a/src/analytics/script/integration/component/connect/connect-actionee.js b/src/analytics/script/integration/component/connect/connect-actionee.js index 694214571..84dd75c7d 100644 --- a/src/analytics/script/integration/component/connect/connect-actionee.js +++ b/src/analytics/script/integration/component/connect/connect-actionee.js @@ -12,7 +12,7 @@ class ConnectActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/connect/connect-link-actionee.js b/src/analytics/script/integration/component/connect/connect-link-actionee.js index dd042c97b..84961c765 100644 --- a/src/analytics/script/integration/component/connect/connect-link-actionee.js +++ b/src/analytics/script/integration/component/connect/connect-link-actionee.js @@ -12,7 +12,7 @@ class ConnectLinkActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/download/download-actionee.js b/src/analytics/script/integration/component/download/download-actionee.js index db495e548..0b9536a94 100644 --- a/src/analytics/script/integration/component/download/download-actionee.js +++ b/src/analytics/script/integration/component/download/download-actionee.js @@ -12,7 +12,7 @@ class DownloadActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/footer/footer-link-actionee.js b/src/analytics/script/integration/component/footer/footer-link-actionee.js index 8bafc5bd3..b41f517dc 100644 --- a/src/analytics/script/integration/component/footer/footer-link-actionee.js +++ b/src/analytics/script/integration/component/footer/footer-link-actionee.js @@ -11,7 +11,7 @@ class FooterLinkActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/link/link-actionee.js b/src/analytics/script/integration/component/link/link-actionee.js index fa8db6351..71e5ef9c1 100644 --- a/src/analytics/script/integration/component/link/link-actionee.js +++ b/src/analytics/script/integration/component/link/link-actionee.js @@ -12,7 +12,7 @@ class LinkActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/navigation/navigation-link-actionee.js b/src/analytics/script/integration/component/navigation/navigation-link-actionee.js index 5608139b8..6f914fd1b 100644 --- a/src/analytics/script/integration/component/navigation/navigation-link-actionee.js +++ b/src/analytics/script/integration/component/navigation/navigation-link-actionee.js @@ -12,7 +12,7 @@ class NavigationLinkActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/pagination/pagination-link-actionee.js b/src/analytics/script/integration/component/pagination/pagination-link-actionee.js index a2964d1c8..1bcb607da 100644 --- a/src/analytics/script/integration/component/pagination/pagination-link-actionee.js +++ b/src/analytics/script/integration/component/pagination/pagination-link-actionee.js @@ -11,7 +11,7 @@ class PaginationLinkActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/sidemenu/sidemenu-link-actionee.js b/src/analytics/script/integration/component/sidemenu/sidemenu-link-actionee.js index 303916283..1a0e84872 100644 --- a/src/analytics/script/integration/component/sidemenu/sidemenu-link-actionee.js +++ b/src/analytics/script/integration/component/sidemenu/sidemenu-link-actionee.js @@ -12,7 +12,7 @@ class SidemenuLinkActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/summary/summary-link-actionee.js b/src/analytics/script/integration/component/summary/summary-link-actionee.js index 592a4b1b3..db3ff9a33 100644 --- a/src/analytics/script/integration/component/summary/summary-link-actionee.js +++ b/src/analytics/script/integration/component/summary/summary-link-actionee.js @@ -12,7 +12,7 @@ class SummaryLinkActionee extends ComponentActionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/component/tag/tag-actionee.js b/src/analytics/script/integration/component/tag/tag-actionee.js index 2bde47d7f..b1b1e624c 100644 --- a/src/analytics/script/integration/component/tag/tag-actionee.js +++ b/src/analytics/script/integration/component/tag/tag-actionee.js @@ -19,12 +19,12 @@ class TagActionee extends ComponentActionee { case this.isInteractive && this.node.classList.contains(TagSelector.DISMISSIBLE): this.setDismissType(); - this.listenClick(); + this.listenActionClick(); break; case this.isInteractive: this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); break; } } diff --git a/src/analytics/script/integration/component/tile/tile-actionee.js b/src/analytics/script/integration/component/tile/tile-actionee.js index f5b7bda0f..9257f34d7 100644 --- a/src/analytics/script/integration/component/tile/tile-actionee.js +++ b/src/analytics/script/integration/component/tile/tile-actionee.js @@ -16,7 +16,7 @@ class TileActionee extends ComponentActionee { if (link) { this.link = link; this.detectInteractionType(link); - this.listenClick(link); + this.listenActionClick(link); } } diff --git a/src/analytics/script/integration/core/action/a-actionee.js b/src/analytics/script/integration/core/action/a-actionee.js index 12e8d7520..c79cad885 100644 --- a/src/analytics/script/integration/core/action/a-actionee.js +++ b/src/analytics/script/integration/core/action/a-actionee.js @@ -11,7 +11,7 @@ class AActionee extends Actionee { init () { this.detectInteractionType(); - this.listenClick(); + this.listenActionClick(); } get label () { diff --git a/src/analytics/script/integration/core/actionee.js b/src/analytics/script/integration/core/actionee.js index 66fd3f315..20df4d108 100644 --- a/src/analytics/script/integration/core/actionee.js +++ b/src/analytics/script/integration/core/actionee.js @@ -138,10 +138,10 @@ class Actionee extends api.core.Instance { this._type = Type.CLICK; } - listenClick (target) { + listenActionClick (target) { if (target) { this._clickTarget = target; - this._clickTarget.addEventListener('click', this.handlingClick, { capture: true }); + this._clickTarget.addEventListener('click', this._handlingClick, { capture: true }); } else this.listenClick({ capture: true }); } @@ -258,7 +258,7 @@ class Actionee extends api.core.Instance { dispose () { if (this._clickTarget) { - this._clickTarget.removeEventListener('click', this.handlingClick); + this._clickTarget.removeEventListener('click', this._handlingClick); } super.dispose(); } diff --git a/src/core/script/api/modules/register/instance.js b/src/core/script/api/modules/register/instance.js index b0e4a39be..c2227dc16 100644 --- a/src/core/script/api/modules/register/instance.js +++ b/src/core/script/api/modules/register/instance.js @@ -19,7 +19,7 @@ class Instance { this._isEnabled = true; this._isDisposed = false; this._listeners = {}; - this.handlingClick = this.handleClick.bind(this); + this._handlingClick = this.handleClick.bind(this); this._hashes = []; this._hash = ''; this._keyListenerTypes = []; @@ -140,11 +140,11 @@ class Instance { } listenClick (options) { - this.listen('click', this.handlingClick, options); + this.listen('click', this._handlingClick, options); } unlistenClick (options) { - this.unlisten('click', this.handlingClick, options); + this.unlisten('click', this._handlingClick, options); } handleClick (e) {} From 1b69c1600edcc3d3000b8153e0591fd15c0936e6 Mon Sep 17 00:00:00 2001 From: Keryan SANIE Date: Fri, 1 Mar 2024 12:54:33 +0100 Subject: [PATCH 03/11] =?UTF-8?q?=E2=9C=A8=20feat(core):=20ajout=20d'un=20?= =?UTF-8?q?retour=20=C3=A0=20la=20ligne=20des=20mots=20trop=20long=20[DS-3?= =?UTF-8?q?737]=20(#886)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ajout de la propriété `overflow-wrap: world-break` sur body permettant le passage à la ligne des mots plus grands que leur conteneur. --- src/core/style/reset/module/_body.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/style/reset/module/_body.scss b/src/core/style/reset/module/_body.scss index 5dc327653..f9e1cd8b0 100644 --- a/src/core/style/reset/module/_body.scss +++ b/src/core/style/reset/module/_body.scss @@ -10,5 +10,6 @@ @include margin(0); @include padding(0); @include text-style(md); + overflow-wrap: break-word; } } From 7350b0ddd74c26e7fd5eb519ced4658a7a96c4eb Mon Sep 17 00:00:00 2001 From: Keryan SANIE Date: Fri, 1 Mar 2024 12:56:10 +0100 Subject: [PATCH 04/11] =?UTF-8?q?=F0=9F=90=9B=20fix(tag):=20corrige=20le?= =?UTF-8?q?=20hover=20des=20tags=20cliquables=20[DS-3724]=20(#887)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - le hover des tags cliquables avait disparu --- src/component/tag/style/_scheme.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/component/tag/style/_scheme.scss b/src/component/tag/style/_scheme.scss index b6902a5c1..f6872e12e 100644 --- a/src/component/tag/style/_scheme.scss +++ b/src/component/tag/style/_scheme.scss @@ -22,7 +22,7 @@ } } - a[href], + a, button, input[type=button] { &#{ns(tag)} { From 994d99ca9d62b4cb9cca60c32e0050f9ff62f34d Mon Sep 17 00:00:00 2001 From: Keryan SANIE Date: Fri, 1 Mar 2024 12:58:01 +0100 Subject: [PATCH 05/11] =?UTF-8?q?=E2=9C=A8=20feat(doc):=20ajout=20d'infos?= =?UTF-8?q?=20sur=20la=20configuration=20dans=20la=20doc=20analytics=20[DS?= =?UTF-8?q?-3741]=20(#888)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ajoute dans la doc de configuration des analytics, la possibilité de surcharger la configuration du mode production via le paramètre dans l'url : ?production=false --- src/analytics/doc/analytics/installation/configuration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/analytics/doc/analytics/installation/configuration.md b/src/analytics/doc/analytics/installation/configuration.md index e65d1ca25..b2bf73bc7 100644 --- a/src/analytics/doc/analytics/installation/configuration.md +++ b/src/analytics/doc/analytics/installation/configuration.md @@ -25,5 +25,5 @@ La configuration doit être placée **avant** les fichiers `patch.module.js`, `d ``` -Utiliser le DSFR mode verbose permet d’afficher dans la console le résultat de la fonction collect(), montrant les -informations envoyées à Eulerian. +Les résultats de la fonction collect(), montrant les informations envoyées à Eulerian, sont affichés dans la console. +En mode production, les logs n'apparaissent pas dans la console. Il est alors possible de surcharger la configuration via le paramètre dans l'url : `?production=false` \ No newline at end of file From 4edc6732ab97f07164619954b7847c6623fbd378 Mon Sep 17 00:00:00 2001 From: lab9 Date: Fri, 1 Mar 2024 12:58:31 +0100 Subject: [PATCH 06/11] =?UTF-8?q?=F0=9F=90=9B=20fix(range):=20correctif=20?= =?UTF-8?q?dispose=20input=20[DS-3748]=20(#891)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - corrige un bug js sur l'écouteur d'événement --- src/component/range/script/range/range-input.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/component/range/script/range/range-input.js b/src/component/range/script/range/range-input.js index 2d5c4e4b1..e8a210a7c 100644 --- a/src/component/range/script/range/range-input.js +++ b/src/component/range/script/range/range-input.js @@ -10,8 +10,9 @@ class RangeInput extends api.core.Instance { init () { this._init(); this.node.value = this.getAttribute('value'); - this.changing = this.change.bind(this); - this.node.addEventListener(this.isLegacy ? 'change' : 'input', this.changing); + this._changing = this.change.bind(this); + this._listenerType = this.isLegacy ? 'change' : 'input'; + this.listen(this._listenerType, this._changing); if (this.isLegacy) this.addDescent(RangeEmission.ENABLE_POINTER, this._enablePointer.bind(this)); this.change(); } @@ -55,7 +56,7 @@ class RangeInput extends api.core.Instance { } dispose () { - this.removeEventListener('input', this.changing); + if (this._listenerType) this.unlisten(this._listenerType, this._changing); } } From bbacb813833998454e11ffd27ef1e799a23b4d11 Mon Sep 17 00:00:00 2001 From: lab9 Date: Fri, 1 Mar 2024 12:59:32 +0100 Subject: [PATCH 07/11] =?UTF-8?q?=F0=9F=90=9B=20fix(header):=20correctif?= =?UTF-8?q?=20erreur=20it=C3=A9rable=20null=20[DS-3747]=20(#893)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - corrige l'issue #890, la valeur null renvoyée par la fonction match est remplacée par un array vide pour permettre son itération --- src/component/header/script/header/header-links.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/component/header/script/header/header-links.js b/src/component/header/script/header/header-links.js index d02df8745..bfe8f0380 100644 --- a/src/component/header/script/header/header-links.js +++ b/src/component/header/script/header/header-links.js @@ -15,12 +15,12 @@ class HeaderLinks extends api.core.Instance { const toolsHtml = this.toolsLinks.innerHTML.replace(/ +/g, ' '); const menuHtml = this.menuLinks.innerHTML.replace(/ +/g, ' '); // Pour éviter de dupliquer des id, on ajoute un suffixe aux id et aria-controls duppliqués. - let toolsHtmlIdList = toolsHtml.match(/id="(.*?)"/gm); - if (toolsHtmlIdList) { - // on a besoin d'échapper les backslash dans la chaine de caractère - // eslint-disable-next-line no-useless-escape - toolsHtmlIdList = toolsHtmlIdList.map(element => element.replace('id=\"', '').replace('\"', '')); - } + let toolsHtmlIdList = toolsHtml.match(/id="(.*?)"/gm) || []; + + // on a besoin d'échapper les backslash dans la chaine de caractère + // eslint-disable-next-line no-useless-escape + toolsHtmlIdList = toolsHtmlIdList.map(element => element.replace('id=\"', '').replace('\"', '')); + const toolsHtmlAriaControlList = toolsHtml.match(/aria-controls="(.*?)"/gm); let toolsHtmlDuplicateId = toolsHtml.replace(/id="(.*?)"/gm, 'id="$1' + copySuffix + '"'); if (toolsHtmlAriaControlList) { From b76e36f697b1f807ac8e7ee45e9b4c116805f142 Mon Sep 17 00:00:00 2001 From: Keryan SANIE Date: Fri, 1 Mar 2024 13:00:04 +0100 Subject: [PATCH 08/11] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20chore(dependencies):?= =?UTF-8?q?=20met=20a=20jour=20les=20d=C3=A9pendances=20Node=20(#894)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - passage à postcss 8.4.32 --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index ecb423a25..5c001de57 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "pa11y": "^6.2.3", "parse-github-url": "^1.0.2", "path": "^0.12.7", - "postcss": "^8.4.21", + "postcss": "8.4.32", "postcss-banner": "^4.0.1", "postcss-combine-duplicated-selectors": "^10.0.3", "postcss-discard-duplicates": "^5.1.0", diff --git a/yarn.lock b/yarn.lock index a9653062f..0a73fc9a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4984,7 +4984,7 @@ mustache@~4.2.0: resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== -nanoid@^3.3.6: +nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -5770,11 +5770,11 @@ postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.2 source-map "^0.6.1" postcss@^8.2.2, postcss@^8.4.21: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + version "8.4.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" + integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== dependencies: - nanoid "^3.3.6" + nanoid "^3.3.7" picocolors "^1.0.0" source-map-js "^1.0.2" From 6dd1fc923d8d6c908991140a171ad7e86330e3a4 Mon Sep 17 00:00:00 2001 From: lab9 Date: Fri, 1 Mar 2024 13:07:52 +0100 Subject: [PATCH 09/11] =?UTF-8?q?=F0=9F=90=9B=20fix(analytics):=20document?= =?UTF-8?q?ation=20et=20correctif=20version=20standalone=20[DS-3746]=20(#8?= =?UTF-8?q?95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Apporte des éléments correctifs à l'issue #880 - correctifs dans la version standalone : - configuration appliquée au logging (verbose, production) - retrait de dépendances non requises - ajout de documentation sur la version standalone - installation - fonctionnalités disponibles - Extraction de Modes du fichier de la class Options pour réduire les dépendances --- src/analytics/doc/analytics.md | 2 +- src/analytics/doc/analytics/actions.md | 11 +++--- src/analytics/doc/analytics/collector.md | 2 +- src/analytics/doc/analytics/installation.md | 40 +++++++++++++++++---- src/analytics/standalone/api.js | 24 ++++++++++--- src/analytics/standalone/config.js | 3 -- src/analytics/standalone/example/index.ejs | 1 - src/core/script/api/api.js | 3 +- src/core/script/api/options/modes.js | 9 +++++ src/core/script/api/options/options.js | 11 +----- 10 files changed, 73 insertions(+), 33 deletions(-) delete mode 100644 src/analytics/standalone/config.js create mode 100644 src/core/script/api/options/modes.js diff --git a/src/analytics/doc/analytics.md b/src/analytics/doc/analytics.md index 799054cf8..d311db14f 100644 --- a/src/analytics/doc/analytics.md +++ b/src/analytics/doc/analytics.md @@ -14,7 +14,7 @@ > Les différents tests effectués semblent montrer un fonctionnement global sans que nous puissions garantir une compatibilité optimale sur ces versions. N'hésitez pas à nous remonter tous problèmes rencontrés. -Le système de design apporte avec lui un outil de collecte de données analytics basé sur la solution Eulérian. Ce package, bien que fourni par le DSFR, peut être utilisé indépendamment de celui-ci via une version standalone. +Le système de design apporte avec lui un outil de collecte de données analytics basé sur la solution Eulérian. Ce package, bien que fourni par le DSFR, peut être utilisé indépendamment de celui-ci via une [version standalone](analytics/installation.md#Version standalone). diff --git a/src/analytics/doc/analytics/actions.md b/src/analytics/doc/analytics/actions.md index 31c6c3a27..b930d66ad 100644 --- a/src/analytics/doc/analytics/actions.md +++ b/src/analytics/doc/analytics/actions.md @@ -12,6 +12,9 @@ Les actions correspondent aux évènements et aux interactions que l’on souhai * Les actions d'interaction sont limitées dans leur envoi à la seule première interaction avec l'élément dans la page, sauf si la donnée associée à l'envoi change. Par exemple, un bouton particulier dans le menu enverra des données au premier click, puis sera limité. Si la page change, il enverra de nouveau des données au premier click. Dans le cas d'un composant de recherche, chaque interaction enverra une requête de recherche différente et passera outre la règle de limitation. Si la requête de recherche est identique à la précédente, celle-ci ne sera pas envoyée. +> **Note** : +> Les actions ne sont pas supportées dans la [version standalone](./installation.md#Version standalone). Pour mesurer les actions avec l'API analytics, utiliser la version complète du DSFR + #### ActionName Lorsqu’une action est émise, un actionName est envoyé à Eulérian. @@ -23,8 +26,8 @@ Ce nom d’action est constitué de 3 éléments : * Title : la hiérarchie des intitulés des éléments ou la valeur de l'attribut `data-fr-analytics-action` * Id : l'id de l'élément (correspondant à l'attribut `id`sur l'élément) - obligatoire. -> **Important** -> ⚠️ **Un id est obligatoire sur tous les éléments traqués** (retrouvez les éléments du dsfr nécessitant un id dans la colonne “element” du [tableau d'actions des composants du dsfr](actions/component-actions.md)). +> **⚠️ Important :** +> **Un id est obligatoire sur tous les éléments traqués** (retrouvez les éléments du dsfr nécessitant un id dans la colonne “element” du [tableau d'actions des composants du dsfr](actions/component-actions.md)). >Il est nécessaire que l’id soit : > * unique : L’id doit être unique au site, par exemple: > * Deux boutons différents ne doivent pas avoir le même id, même sur des pages différentes @@ -33,7 +36,7 @@ Ce nom d’action est constitué de 3 éléments : exemple d’actionName : `(click)_titre_niveau_2_›_titre_niveau_3_›_label_de_l_element_[button-id-1]` -> **Note** +> **Note :** > Les espaces sont remplacé par des `_` [_ | low line (U+005F) @ Graphemica](https://graphemica.com/_) > Les niveaux de hiérarchie sont séparé par des `›` [› | single right-pointing angle quotation mark (U+203A) @ Graphemica](https://graphemica.com/%E2%80%BA) > Les caractères suivants `"'<>*$&~`|\?^~` étant restreints par Eulerian, ils sont remplacés par une équivalence en caractère fullwidth : [Graphemica | Halfwidth and Fullwidth Forms](https://graphemica.com/blocks/halfwidth-and-fullwidth-forms) @@ -49,7 +52,7 @@ L’API analytics utilise des actions pour suivre les interactions de l’utilis L'ajout de l'attribut `data-fr-analytics-rating` sur élément particulier permet d'activer la mesure du taux d’interaction sur cet élément, à savoir le rapport entre le nombre de fois où il a été affiché et le nombre de fois où une interaction a eu lieu. -> **Important** +> **⚠️ Important :** > Cette fonctionnalité entraîne un envoi de donnée plus important, la donnée d'affichage étant automatiquement envoyée tandis que l'envoi de la donnée d'interaction se fait à l'intervention de l'utilisateur. Pour rappel, le modèle de facturation dépend du volume d'appels envoyés à Eulerian et l'envoi de multiples affichages de composants entraîne donc une hausse de la consommation de données. Il est important de s’assurer de la pertinence de chaque élément où cette fonctionnalité est activée afin d'optimiser l'envoi de données. diff --git a/src/analytics/doc/analytics/collector.md b/src/analytics/doc/analytics/collector.md index 1a3dc0378..5ba9411c9 100644 --- a/src/analytics/doc/analytics/collector.md +++ b/src/analytics/doc/analytics/collector.md @@ -48,7 +48,7 @@ _Boolean_ Défini si la mesure d'audience des actions est activée ou non. -* Par défaut, la mesure d'audience des actions est activée. +* Par défaut, la mesure d'audience des actions est désactivée (`false`) * * * diff --git a/src/analytics/doc/analytics/installation.md b/src/analytics/doc/analytics/installation.md index 21e9bd84f..a91f565e3 100644 --- a/src/analytics/doc/analytics/installation.md +++ b/src/analytics/doc/analytics/installation.md @@ -1,18 +1,44 @@ ## Installation +#### Au sein du DSFR + Pour installer le système d’analytics, il suffit d’importer le fichier javascript : `/dist/analytics/analytics.module.js` **après** `dsfr.module.js` -Le script d’Eulerian est automatiquement chargé au sein du package, attention à ne pas l’insérer dans la page afin -d'éviter les doublons. +Fonctionnalités disponibles : +- Intégration CMP +- Optout +- Collecte de pages +- Actions dans les composants +- Actions hors composants + +Le script d’Eulerian est automatiquement chargé au sein du package, attention à ne pas l’insérer dans la page afin d'éviter les doublons. + +> **⚠️ Important :** +> Pour les versions du dsfr inférieures à dsfr-1.9.0 (minimum 1.3.0), il est nécessaire d’ajouter le fichier : `/dist/patch/patch.module.js` **avant** `dsfr.module.js` + +Il est préférable d'utiliser l'api dans ses dernières versions pour profiter des optimisations et correctifs + +Analytics est un package à part, il n’est pas compris dans le fichier js global du DSFR. Il n'est cependant pas totalement autonome et est dépendant du core du DSFR (compris dans le fichier global du DSFR) + +#### Version standalone + +Pour installer la version standalone du système d’analytics, il suffit d’importer le fichier javascript : +`/standalone/analytics/analytics.module.standalone.js` + +Fonctionnalités disponibles : +- Intégration CMP +- Optout +- Collecte de pages +- ~~Actions dans les composants~~ +- ~~Actions hors composants~~ -⚠️ Pour les versions du dsfr inférieures à dsfr-1.9.0 (minimum 1.3.0), il est nécessaire d’ajouter le fichier : `/dist/patch/patch.module.js` **avant** `dsfr.module.js` +Cette version permet d’effectuer la mesure d'audience sans dépendance au DSFR et peut fonctionner de manière autonome. -Il est préférable d'effectuer une montée de version en 1.9.3 pour profiter des optimisations optimales. +> **⚠️ Important :** +> La mesure des actions n'est pas disponible dans cette version -Analytics est un package à part, il n’est pas compris dans le fichier js global du dsfr. -Le package dispose tout de même d’une dépendance au DSFR, notamment au core. -Une version standalone des analytics permet d’utiliser ce package en dehors de toutes dépendances au DSFR. +#### Pour aller plus loin Pour le fonctionnement du package Analytics, une configuration particulière du dsfr est nécessaire : [Configuration](installation/configuration.md) diff --git a/src/analytics/standalone/api.js b/src/analytics/standalone/api.js index 485607ea8..814b30aa0 100644 --- a/src/analytics/standalone/api.js +++ b/src/analytics/standalone/api.js @@ -1,14 +1,28 @@ -import api from '../api.js'; import ns from '../../core/script/api/utilities/namespace'; -import { completeAssign } from '../../core/script/api/utilities/property/complete-assign'; -import { Modes } from '../../core/script/api/options/options.js'; +import { Modes } from '../../core/script/api/options/modes.js'; +import config from '../../core/config'; -api.inspector = completeAssign(console, {}); +const api = {}; + +const hasLoggingLevel = (level) => api.internals.configuration.production !== true && (level > 1 || api.internals.configuration.verbose); + +api.inspector = { + log: (...msg) => hasLoggingLevel(0) ? console.log.apply(console, msg) : null, + debug: (...msg) => hasLoggingLevel(1) ? console.debug.apply(console, msg) : null, + info: (...msg) => hasLoggingLevel(2) ? console.info.apply(console, msg) : null, + warn: (...msg) => hasLoggingLevel(3) ? console.warn.apply(console, msg) : null, + error: (...msg) => hasLoggingLevel(4) ? console.error.apply(console, msg) : null +}; + +const configuration = window[config.namespace]; api.internals = { - ns: ns + ns: ns, + configuration: configuration }; api.Modes = Modes; +api.mode = configuration.mode || Modes.AUTO; +window[config.namespace] = api; export default api; diff --git a/src/analytics/standalone/config.js b/src/analytics/standalone/config.js deleted file mode 100644 index 19c629260..000000000 --- a/src/analytics/standalone/config.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from '../../core/config'; -config.namespace = 'dsfra'; -export default config; diff --git a/src/analytics/standalone/example/index.ejs b/src/analytics/standalone/example/index.ejs index c7009f514..f38428e7c 100644 --- a/src/analytics/standalone/example/index.ejs +++ b/src/analytics/standalone/example/index.ejs @@ -5,7 +5,6 @@ Analytics standalone -