diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2015-12-17 09:15:42 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2015-12-17 09:44:51 +0100 |
commit | a1789ddde42033f1b05cc4929491214ee6e79383 (patch) | |
tree | 63615735c4ddffaaabf2428946bb26f90899f7bf /resources/src/mediawiki/mediawiki.confirmCloseWindow.js | |
parent | 9e06a62f265e3a2aaabecc598d4bc617e06fa32d (diff) |
Update to MediaWiki 1.26.0
Diffstat (limited to 'resources/src/mediawiki/mediawiki.confirmCloseWindow.js')
-rw-r--r-- | resources/src/mediawiki/mediawiki.confirmCloseWindow.js | 68 |
1 files changed, 56 insertions, 12 deletions
diff --git a/resources/src/mediawiki/mediawiki.confirmCloseWindow.js b/resources/src/mediawiki/mediawiki.confirmCloseWindow.js index 7fc5c424..4d0c1352 100644 --- a/resources/src/mediawiki/mediawiki.confirmCloseWindow.js +++ b/resources/src/mediawiki/mediawiki.confirmCloseWindow.js @@ -1,3 +1,4 @@ +/* jshint devel: true */ ( function ( mw, $ ) { /** * @method confirmCloseWindow @@ -7,11 +8,22 @@ * work in most browsers.) * * This supersedes any previous onbeforeunload handler. If there was a handler before, it is - * restored when you execute the returned function. + * restored when you execute the returned release() function. * * var allowCloseWindow = mw.confirmCloseWindow(); * // ... do stuff that can't be interrupted ... - * allowCloseWindow(); + * allowCloseWindow.release(); + * + * The second function returned is a trigger function to trigger the check and an alert + * window manually, e.g.: + * + * var allowCloseWindow = mw.confirmCloseWindow(); + * // ... do stuff that can't be interrupted ... + * if ( allowCloseWindow.trigger() ) { + * // don't do anything (e.g. destroy the input field) + * } else { + * // do whatever you wanted to do + * } * * @param {Object} [options] * @param {string} [options.namespace] Namespace for the event registration @@ -19,12 +31,13 @@ * @param {string} options.message.return The string message to show in the confirm dialog. * @param {Function} [options.test] * @param {boolean} [options.test.return=true] Whether to show the dialog to the user. - * @return {Function} Execute this when you want to allow the user to close the window + * @return {Object} An object of functions to work with this module */ mw.confirmCloseWindow = function ( options ) { var savedUnloadHandler, mainEventName = 'beforeunload', - showEventName = 'pageshow'; + showEventName = 'pageshow', + message; options = $.extend( { message: mw.message( 'mwe-prevent-close' ).text(), @@ -36,6 +49,12 @@ showEventName += '.' + options.namespace; } + if ( $.isFunction( options.message ) ) { + message = options.message(); + } else { + message = options.message; + } + $( window ).on( mainEventName, function () { if ( options.test() ) { // remove the handler while the alert is showing - otherwise breaks caching in Firefox (3?). @@ -47,11 +66,7 @@ }, 1 ); // show an alert with this message - if ( $.isFunction( options.message ) ) { - return options.message(); - } else { - return options.message; - } + return message; } } ).on( showEventName, function () { // Re-add onbeforeunload handler @@ -60,9 +75,38 @@ } } ); - // return the function they can use to stop this - return function () { - $( window ).off( mainEventName + ' ' + showEventName ); + /** + * Return the object with functions to release and manually trigger the confirm alert + * + * @ignore + */ + return { + /** + * Remove all event listeners and don't show an alert anymore, if the user wants to leave + * the page. + * + * @ignore + */ + release: function () { + $( window ).off( mainEventName + ' ' + showEventName ); + }, + /** + * Trigger the module's function manually: Check, if options.test() returns true and show + * an alert to the user if he/she want to leave this page. Returns false, if options.test() returns + * false or the user cancelled the alert window (~don't leave the page), true otherwise. + * + * @ignore + * @return {boolean} + */ + trigger: function () { + // use confirm to show the message to the user (if options.text() is true) + if ( options.test() && !confirm( message ) ) { + // the user want to keep the actual page + return false; + } + // otherwise return true + return true; + } }; }; } )( mediaWiki, jQuery ); |