From: Geoffrey Mon Date: Thu, 26 Nov 2015 21:41:41 +0000 (-0500) Subject: Check each Special:Preferences input for changes X-Git-Tag: 1.31.0-rc.0~8555^2 X-Git-Url: http://git.cyclocoop.org//%22javascript:ModifierStyle%28%27%22.%24id.%22%27%29/%22?a=commitdiff_plain;h=3d076c0ff0f6245cbd20576fb777ca6a31be0d1a;p=lhc%2Fweb%2Fwiklou.git Check each Special:Preferences input for changes When checking for changes in the Special:Preferences form, instead of serializing original form data (which fails with asynchronous loading of JS, if the user changes something before JS is done loading), compare the value of each input to the default value. Bug: T119732 Change-Id: Ib48a9b334f639e417a0642c6c090ba18afc477ce --- diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.js b/resources/src/mediawiki.special/mediawiki.special.preferences.js index f90f85914f..7f3de3899d 100644 --- a/resources/src/mediawiki.special/mediawiki.special.preferences.js +++ b/resources/src/mediawiki.special/mediawiki.special.preferences.js @@ -261,14 +261,44 @@ } ); } + // Check if all of the form values are unchanged + function isPrefsChanged() { + var inputs = $( '#mw-prefs-form :input' ), + input, $input, inputType, + index, optIndex, + opt; + + for ( index = 0; index < inputs.length; index++ ) { + input = inputs[ index ]; + $input = $( input ); + + // Different types of inputs have different methods for accessing defaults + if ( $input.is( 'select' ) ) { // has defaultValue or defaultChecked + inputType = input.type; + if ( inputType === 'radio' || inputType === 'checkbox' ) { + if ( input.checked !== input.defaultChecked ) { + return true; + } + } else if ( input.value !== input.defaultValue ) { + return true; + } + } + } + + return false; + } + // Set up a message to notify users if they try to leave the page without // saving. - $( '#mw-prefs-form' ).data( 'origdata', $( '#mw-prefs-form' ).serialize() ); allowCloseWindow = mw.confirmCloseWindow( { - test: function () { - return $( '#mw-prefs-form' ).serialize() !== $( '#mw-prefs-form' ).data( 'origdata' ); - }, - + test: isPrefsChanged, message: mw.msg( 'prefswarning-warning', mw.msg( 'saveprefs' ) ), namespace: 'prefswarning' } );