summaryrefslogtreecommitdiff
path: root/www/wiki/resources/src/mediawiki/page/rollback.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/resources/src/mediawiki/page/rollback.js')
-rw-r--r--www/wiki/resources/src/mediawiki/page/rollback.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki/page/rollback.js b/www/wiki/resources/src/mediawiki/page/rollback.js
new file mode 100644
index 00000000..6db518db
--- /dev/null
+++ b/www/wiki/resources/src/mediawiki/page/rollback.js
@@ -0,0 +1,67 @@
+/*!
+ * Enhance rollback links by using asynchronous API requests,
+ * rather than navigating to an action page.
+ *
+ * @since 1.28
+ * @author Timo Tijhof
+ */
+( function ( mw, $ ) {
+
+ $( function () {
+ $( '.mw-rollback-link' ).on( 'click', 'a[data-mw="interface"]', function ( e ) {
+ var api, $spinner,
+ $link = $( this ),
+ url = this.href,
+ page = mw.util.getParamValue( 'title', url ),
+ user = mw.util.getParamValue( 'from', url );
+
+ if ( !page || user === null ) {
+ // Let native browsing handle the link
+ return true;
+ }
+
+ // Preload the notification module for mw.notify
+ mw.loader.load( 'mediawiki.notification' );
+
+ // Remove event handler so that next click (re-try) uses server action
+ $( e.delegateTarget ).off( 'click' );
+
+ // Hide the link and create a spinner to show it inside the brackets.
+ $spinner = $.createSpinner( { size: 'small', type: 'inline' } );
+ $link.hide().after( $spinner );
+
+ // @todo: data.messageHtml is no more. Convert to using errorformat=html.
+ api = new mw.Api();
+ api.rollback( page, user )
+ .then( function ( data ) {
+ mw.notify( $.parseHTML( data.messageHtml ), {
+ title: mw.msg( 'actioncomplete' )
+ } );
+
+ // Remove link container and the subsequent text node containing " | ".
+ if ( e.delegateTarget.nextSibling && e.delegateTarget.nextSibling.nodeType === Node.TEXT_NODE ) {
+ $( e.delegateTarget.nextSibling ).remove();
+ }
+ $( e.delegateTarget ).remove();
+ }, function ( errorCode, data ) {
+ var message = data && data.error && data.error.messageHtml ?
+ $.parseHTML( data.error.messageHtml ) :
+ mw.msg( 'rollbackfailed' ),
+ type = errorCode === 'alreadyrolled' ? 'warn' : 'error';
+
+ mw.notify( message, {
+ type: type,
+ title: mw.msg( 'rollbackfailed' ),
+ autoHide: false
+ } );
+
+ // Restore the link (enables user to try again)
+ $spinner.remove();
+ $link.show();
+ } );
+
+ e.preventDefault();
+ } );
+ } );
+
+}( mediaWiki, jQuery ) );