From c482e27eaca2d82c711aa0dc0f6b0b87b1c49fe0 Mon Sep 17 00:00:00 2001 From: Sereza7 Date: Fri, 29 Nov 2024 16:43:01 +0100 Subject: [PATCH 1/5] XWIKI-22492: Livedata filter options are misread * Added a bit of semantics on the options * Added a live update region for the state of the `active` option. --- .../uicomponents/suggest/xwiki.selectize.js | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js index bc3aa30f81db..c6ff4af7aa56 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js @@ -31,7 +31,7 @@ define('xwiki-selectize', [ 'xwiki-events-bridge' ], function($, Selectize, l10n) { var optionTemplate = [ - '
', + '
', '', '', '
' @@ -203,6 +203,29 @@ define('xwiki-selectize', [ }); } } + let oldOnPositionDropdown = this.selectize.onOptionSelect; + this.selectize.onOptionSelect = function(e) { + oldOnPositionDropdown.call(this, e); + this.get$('dropdown').find('.option').attr('aria-selected','false'); + // clear selection on all previously selected elements first + this.get$('dropdown').find('.selected').attr('aria-selected','true'); + } + let oldSetActiveOption = this.selectize.setActiveOption; + this.selectize.setActiveOption = function(option, scroll, animate) { + if (this.liveRegion && option) { + if (option instanceof jQuery) { + this.liveRegion.text(option.text()); + } else { + this.liveRegion.text(option.innerText); + } + } + oldSetActiveOption.call(this, option, scroll, animate); + } + /* Create a live region to store the value of the currently active option.*/ + this.selectize.liveRegion = $(''); + this.selectize.liveRegion.attr('aria-live', 'assertive'); + this.selectize.liveRegion.addClass('sr-only'); + this.selectize.get$('input').after(this.selectize.liveRegion); setDropDownAlignment(this.selectize); if (this.selectize.settings.takeInputWidth) { this.selectize.get$('control').width($(this).data('initialWidth')); From 751d12a69beaa2f1f624727549038b6d7e33555e Mon Sep 17 00:00:00 2001 From: Sereza7 Date: Fri, 29 Nov 2024 17:22:26 +0100 Subject: [PATCH 2/5] XWIKI-22485: Livedata option dropdown has no grouping semantics * Fixed when navigating with arrows and validating with Enter. --- .../resources/uicomponents/suggest/xwiki.selectize.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js index c6ff4af7aa56..288075a2bd42 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js @@ -212,11 +212,13 @@ define('xwiki-selectize', [ } let oldSetActiveOption = this.selectize.setActiveOption; this.selectize.setActiveOption = function(option, scroll, animate) { - if (this.liveRegion && option) { + if (this.liveRegion) { if (option instanceof jQuery) { this.liveRegion.text(option.text()); - } else { + } else if (option instanceof HTMLElement) { this.liveRegion.text(option.innerText); + } else { + this.liveRegion.text(""); } } oldSetActiveOption.call(this, option, scroll, animate); From 689f587b50b402acce170ba161d9be9d97d88489 Mon Sep 17 00:00:00 2001 From: LucasC Date: Wed, 8 Jan 2025 17:09:08 +0100 Subject: [PATCH 3/5] XWIKI-22492: Livedata filter options are misread * Fixed function name * Fixed the faulty overridding * Improved comments --- .../resources/uicomponents/suggest/xwiki.selectize.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js index 8a6c5e7d521e..2550228a333a 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js @@ -203,12 +203,14 @@ define('xwiki-selectize', [ }); } } - let oldOnPositionDropdown = this.selectize.onOptionSelect; - this.selectize.onOptionSelect = function(e) { - oldOnPositionDropdown.call(this, e); + let oldOnOptionSelect = this.selectize.onOptionSelect; + this.selectize.onOptionSelect = function(...args) { + const result = oldOnOptionSelect.apply(this, args); + // clear aria-selected state on all previously selected elements first this.get$('dropdown').find('.option').attr('aria-selected','false'); - // clear selection on all previously selected elements first + // then set the aria-selected state of the newly selected element. this.get$('dropdown').find('.selected').attr('aria-selected','true'); + return result; } let oldSetActiveOption = this.selectize.setActiveOption; this.selectize.setActiveOption = function(option, scroll, animate) { From 017fe211981215802a8a19a5fbaceca40a321e0f Mon Sep 17 00:00:00 2001 From: LucasC Date: Wed, 8 Jan 2025 18:21:41 +0100 Subject: [PATCH 4/5] XWIKI-22492: Livedata filter options are misread * Fixed the faulty overridding * Fixed codestyle * Simplified code --- .../uicomponents/suggest/xwiki.selectize.js | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js index 2550228a333a..a19dbcd4ad82 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js @@ -213,19 +213,11 @@ define('xwiki-selectize', [ return result; } let oldSetActiveOption = this.selectize.setActiveOption; - this.selectize.setActiveOption = function(option, scroll, animate) { - if (this.liveRegion) { - if (option instanceof jQuery) { - this.liveRegion.text(option.text()); - } else if (option instanceof HTMLElement) { - this.liveRegion.text(option.innerText); - } else { - this.liveRegion.text(""); - } - } - oldSetActiveOption.call(this, option, scroll, animate); + this.selectize.setActiveOption = function(option, ...args) { + this.liveRegion?.text($(option).text()); + oldSetActiveOption.call(this, option, ...args); } - /* Create a live region to store the value of the currently active option.*/ + // Create a live region to store the value of the currently active option. this.selectize.liveRegion = $(''); this.selectize.liveRegion.attr('aria-live', 'assertive'); this.selectize.liveRegion.addClass('sr-only'); From 48f43d78cdf12abad93301b81561ec49538932e2 Mon Sep 17 00:00:00 2001 From: LucasC Date: Mon, 13 Jan 2025 17:44:06 +0100 Subject: [PATCH 5/5] XWIKI-22492: Livedata filter options are misread * Improved stability of the function overriding implementation Co-authored-by: Marius Dumitru Florea --- .../webapp/resources/uicomponents/suggest/xwiki.selectize.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js index a19dbcd4ad82..ab7090f265fb 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-war/src/main/webapp/resources/uicomponents/suggest/xwiki.selectize.js @@ -215,7 +215,7 @@ define('xwiki-selectize', [ let oldSetActiveOption = this.selectize.setActiveOption; this.selectize.setActiveOption = function(option, ...args) { this.liveRegion?.text($(option).text()); - oldSetActiveOption.call(this, option, ...args); + return oldSetActiveOption.call(this, option, ...args); } // Create a live region to store the value of the currently active option. this.selectize.liveRegion = $('');