diff options
Diffstat (limited to 'resources/mediawiki.action/mediawiki.action.edit.editWarning.js')
-rw-r--r-- | resources/mediawiki.action/mediawiki.action.edit.editWarning.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/resources/mediawiki.action/mediawiki.action.edit.editWarning.js b/resources/mediawiki.action/mediawiki.action.edit.editWarning.js new file mode 100644 index 00000000..89bb64df --- /dev/null +++ b/resources/mediawiki.action/mediawiki.action.edit.editWarning.js @@ -0,0 +1,56 @@ +/* + * Javascript for module editWarning + */ +( function ( mw, $ ) { + $( function () { + // 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, #wpSummary' ).each( function () { + $( this ).data( 'origtext', $( this ).val() ); + }); + var savedWindowOnBeforeUnload; + $( 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' ).val() || + $( '#wpSummary' ).data( 'origtext' ) !== $( '#wpSummary' ).val() + ) { + // 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 ) ); + |