X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.special%2Fmediawiki.special.preferences.confirmClose.js;h=244154b38a674deb5e987f29abd8e9653fa968f8;hb=7564624d1ca80a4d2f1cc2b4d3d32d5d2e0bca38;hp=45df37ffd2295def1aa8784c3a4f7b9ed995c6c3;hpb=565558f4ef6762df13613d3ef03804b39423cf2e;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js b/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js index 45df37ffd2..244154b38a 100644 --- a/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js +++ b/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js @@ -4,9 +4,12 @@ */ ( function ( mw, $ ) { $( function () { - var allowCloseWindow; + var allowCloseWindow, saveButton, restoreButton, + oouiEnabled = $( '#mw-prefs-form' ).hasClass( 'mw-htmlform-ooui' ); - // Check if all of the form values are unchanged + // Check if all of the form values are unchanged. + // (This function could be changed to infuse and check OOUI widgets, but that would only make it + // slower and more complicated. It works fine to treat them as HTML elements.) function isPrefsChanged() { var inputs = $( '#mw-prefs-form :input[name]' ), input, $input, inputType, @@ -26,7 +29,8 @@ return true; } } - } else if ( $input.is( 'input' ) ) { // has defaultValue or defaultChecked + } else if ( $input.is( 'input' ) || $input.is( 'textarea' ) ) { + // has defaultValue or defaultChecked inputType = input.type; if ( inputType === 'radio' || inputType === 'checkbox' ) { if ( input.checked !== input.defaultChecked ) { @@ -41,12 +45,22 @@ return false; } - // Disable the button to save preferences unless preferences have changed - // Check if preferences have been changed before JS has finished loading - if ( !isPrefsChanged() ) { - $( '#prefcontrol' ).prop( 'disabled', true ); - $( '#preferences > fieldset' ).one( 'change keydown mousedown', function () { - $( '#prefcontrol' ).prop( 'disabled', false ); + if ( oouiEnabled ) { + saveButton = OO.ui.infuse( $( '#prefcontrol' ) ); + restoreButton = OO.ui.infuse( $( '#mw-prefs-restoreprefs' ) ); + + // 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() ); + } ); + } else { + // Disable the button to save preferences unless preferences have changed + // Check if preferences have been changed before JS has finished loading + $( '#prefcontrol' ).prop( 'disabled', !isPrefsChanged() ); + $( '#preferences > fieldset' ).on( 'change keyup mouseup', function () { + $( '#prefcontrol' ).prop( 'disabled', !isPrefsChanged() ); } ); } @@ -57,7 +71,16 @@ message: mw.msg( 'prefswarning-warning', mw.msg( 'saveprefs' ) ), namespace: 'prefswarning' } ); - $( '#mw-prefs-form' ).submit( $.proxy( allowCloseWindow, 'release' ) ); - $( '#mw-prefs-restoreprefs' ).click( $.proxy( allowCloseWindow, 'release' ) ); + $( '#mw-prefs-form' ).on( 'submit', $.proxy( allowCloseWindow, 'release' ) ); + if ( oouiEnabled ) { + restoreButton.on( 'click', function () { + allowCloseWindow.release(); + // The default behavior of events in OOUI is always prevented. Follow the link manually. + // Note that middle-click etc. still works, as it doesn't emit a OOUI 'click' event. + location.href = restoreButton.getHref(); + } ); + } else { + $( '#mw-prefs-restoreprefs' ).on( 'click', $.proxy( allowCloseWindow, 'release' ) ); + } } ); }( mediaWiki, jQuery ) );