From 3cd6154a72f6ffe5dcaba4a5370b2e689bf11dcf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Fri, 7 Sep 2018 19:58:34 +0200 Subject: [PATCH] mw.special.preferences/confirmClose: Catch clicks inside OOUI dropdowns I did what needed to be done. I am not proud of it. Bug: T203825 Change-Id: I57d6177cfb50641d8e085a48258e321e4d028712 --- .../mediawiki.special.preferences/confirmClose.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/resources/src/mediawiki.special.preferences/confirmClose.js b/resources/src/mediawiki.special.preferences/confirmClose.js index bf65ae92b9..c092682984 100644 --- a/resources/src/mediawiki.special.preferences/confirmClose.js +++ b/resources/src/mediawiki.special.preferences/confirmClose.js @@ -52,8 +52,18 @@ // Disable the button to save preferences unless preferences have changed // Check if preferences have been changed before JS has finished loading saveButton.setDisabled( !isPrefsChanged() ); - $( '#preferences .oo-ui-fieldsetLayout' ).on( 'change keyup mouseup', function () { - saveButton.setDisabled( !isPrefsChanged() ); + // Attach capturing event handlers to the document, to catch events inside OOUI dropdowns: + // * Use capture because OO.ui.SelectWidget also does, and it stops event propagation, + // so the event is not fired on descendant elements + // * Attach to the document because the dropdowns are in the .oo-ui-defaultOverlay element + // (and it doesn't exist yet at this point, so we can't attach them to it) + [ 'change', 'keyup', 'mouseup' ].forEach( function ( eventType ) { + document.addEventListener( eventType, function () { + // Make sure SelectWidget's event handlers run first + setTimeout( function () { + saveButton.setDisabled( !isPrefsChanged() ); + } ); + }, true ); } ); } else { // Disable the button to save preferences unless preferences have changed -- 2.20.1