2 * Enhance rollback links by using asynchronous API requests,
3 * rather than navigating to an action page.
11 $( '.mw-rollback-link' ).on( 'click', 'a[data-mw="interface"]', function ( e
) {
15 page
= mw
.util
.getParamValue( 'title', url
),
16 user
= mw
.util
.getParamValue( 'from', url
);
18 if ( !page
|| !user
) {
19 // Let native browsing handle the link
23 // Preload the notification module for mw.notify
24 mw
.loader
.load( 'mediawiki.notification' );
26 // Remove event handler so that next click (re-try) uses server action
27 $( e
.delegateTarget
).off( 'click' );
29 // Hide the link and create a spinner to show it inside the brackets.
30 $spinner
= $.createSpinner( { size
: 'small', type
: 'inline' } );
31 $link
.hide().after( $spinner
);
34 api
.rollback( page
, user
)
35 .then( function ( data
) {
36 mw
.notify( $.parseHTML( data
.messageHtml
), {
37 title
: mw
.msg( 'actioncomplete' )
40 // Remove link container and the subsequent text node containing " | ".
41 if ( e
.delegateTarget
.nextSibling
&& e
.delegateTarget
.nextSibling
.nodeType
=== Node
.TEXT_NODE
) {
42 $( e
.delegateTarget
.nextSibling
).remove();
44 $( e
.delegateTarget
).remove();
45 }, function ( errorCode
, data
) {
46 var message
= data
&& data
.error
&& data
.error
.messageHtml
47 ? $.parseHTML( data
.error
.messageHtml
)
48 : mw
.msg( 'rollbackfailed' ),
49 type
= errorCode
=== 'alreadyrolled' ? 'warn' : 'error';
53 title
: mw
.msg( 'rollbackfailed' ),
57 // Restore the link (enables user to try again)
66 }( mediaWiki
, jQuery
) );