diff options
Diffstat (limited to 'resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js')
-rw-r--r-- | resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js b/resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js new file mode 100644 index 00000000..b5654400 --- /dev/null +++ b/resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js @@ -0,0 +1,59 @@ +/* + * Javascript for module editWarning + */ +( function ( mw, $ ) { + 'use strict'; + + $( function () { + var savedWindowOnBeforeUnload, + $wpTextbox1 = $( '#wpTextbox1' ), + $wpSummary = $( '#wpSummary' ); + // Check if EditWarning is enabled and if we need it + if ( $wpTextbox1.length === 0 ) { + return true; + } + // Get the original values of some form elements + $wpTextbox1.add( $wpSummary ).each( function () { + $( this ).data( 'origtext', $( this ).val() ); + } ); + $( window ) + .on( 'beforeunload.editwarning', function () { + var retval; + + // Check if the current values of some form elements are the same as + // the original values + if ( + mw.config.get( 'wgAction' ) === 'submit' || + $wpTextbox1.data( 'origtext' ) !== $wpTextbox1.textSelection( 'getContents' ) || + $wpSummary.data( 'origtext' ) !== $wpSummary.textSelection( 'getContents' ) + ) { + // Return our message + retval = mw.msg( 'editwarning-warning' ); + } + + // Unset the onbeforeunload handler so we don't break page caching in Firefox + savedWindowOnBeforeUnload = window.onbeforeunload; + window.onbeforeunload = null; + if ( retval !== undefined ) { + // ...but if the user chooses not to leave the page, we need to rebind it + setTimeout( function () { + window.onbeforeunload = savedWindowOnBeforeUnload; + }, 1 ); + return retval; + } + } ) + .on( 'pageshow.editwarning', function () { + // Re-add onbeforeunload handler + if ( !window.onbeforeunload ) { + window.onbeforeunload = savedWindowOnBeforeUnload; + } + } ); + + // Add form submission handler + $( '#editform' ).submit( function () { + // Unbind our handlers + $( window ).off( '.editwarning' ); + } ); + } ); + +}( mediaWiki, jQuery ) ); |