/* * 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 ) );