From 52184e87c706dba4c3031f364a027c20bc1bbabc Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Thu, 18 Feb 2021 11:04:20 +0100 Subject: [PATCH] Fix #4543 : pas d'aria vaut mieux que du mauvais aria Les attributs aria-live &co sont a manier avec precaution car ils rendent la synthese vocale tres verbeuse et il est donc preferable de ne pas avoir d'aria qu'un aria automatique partout Sur les formulaires on garde la possibilite d'ajouter des attributs aria au cas par cas en ajoutant par exemple un data-aria='{"aria-live": "polite"}' sur le div.ajax Sur les blocs ajax cela disparait totalement --- prive/javascript/ajaxCallback.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/prive/javascript/ajaxCallback.js b/prive/javascript/ajaxCallback.js index efc37f0646..898f17680d 100644 --- a/prive/javascript/ajaxCallback.js +++ b/prive/javascript/ajaxCallback.js @@ -221,9 +221,21 @@ jQuery.fn.formulaire_setContainer = function(){ // eviter une double execution du js au moment de sa reinsertion dans le DOM par wrap() // cf http://bugs.jquery.com/ticket/7447 this.find('script').remove(); - this.wrap('<div class="ajax-form-container" aria-live="polite" aria-atomic="true" aria-relevant="additions"></div>'); - // dans un formulaire, le screen reader relit tout a chaque saisie d'un caractere si on est en aria-live - jQuery('form',this).not('[aria-live]').attr('aria-live','off'); + var aria = this.data('aria'); + var $container = jQuery('<div class="ajax-form-container"></div>'); + if (aria && typeof aria === 'object') { + for (var i in aria) { + $container = $container.attr(i, aria[i]); + } + } + else { + aria = false; + } + this.wrap($container); + if (aria) { + // dans un formulaire, le screen reader relit tout a chaque saisie d'un caractere si on est en aria-live + jQuery('form',this).not('[aria-live]').attr('aria-live','off'); + } } return this; } @@ -731,12 +743,13 @@ jQuery.fn.ajaxbloc = function() { if (jQuery.spip.ajaxReload(blocfrag,options)) // don't trig reload of parent blocks event.stopPropagation(); - }).addClass('bind-ajaxReload') - .attr('aria-live','polite').attr('aria-atomic','true'); + }).addClass('bind-ajaxReload'); + // "No aria is better than bad aria" + // blocfrag.attr('aria-live','polite').attr('aria-atomic','true') // dans un formulaire, le screen reader relit tout a chaque saisie d'un caractere si on est en aria-live // mettre un aria-live="off" sur les forms inclus dans ce bloc aria-live="polite" - jQuery('form',this).not('[aria-live]').attr('aria-live','off'); + // jQuery('form',this).not('[aria-live]').attr('aria-live','off'); jQuery(ajaxbloc_selecteur,this).not('.noajax,.bind-ajax') .click(function(){return jQuery.spip.ajaxClick(blocfrag,this.href,{force:jQuery(this).is('.nocache'),history:!(jQuery(this).is('.nohistory')||jQuery(this).closest('.box_modalbox').length)});}) -- GitLab