X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js b/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js new file mode 100644 index 00000000..45df37ff --- /dev/null +++ b/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js @@ -0,0 +1,63 @@ +/*! + * JavaScript for Special:Preferences: Enable save button and prevent the window being accidentally + * closed when any form field is changed. + */ +( function ( mw, $ ) { + $( function () { + var allowCloseWindow; + + // Check if all of the form values are unchanged + function isPrefsChanged() { + var inputs = $( '#mw-prefs-form :input[name]' ), + 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; + } + + // 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 ); + } ); + } + + // Set up a message to notify users if they try to leave the page without + // saving. + allowCloseWindow = mw.confirmCloseWindow( { + test: isPrefsChanged, + message: mw.msg( 'prefswarning-warning', mw.msg( 'saveprefs' ) ), + namespace: 'prefswarning' + } ); + $( '#mw-prefs-form' ).submit( $.proxy( allowCloseWindow, 'release' ) ); + $( '#mw-prefs-restoreprefs' ).click( $.proxy( allowCloseWindow, 'release' ) ); + } ); +}( mediaWiki, jQuery ) );