/* This script adds an "unwatch" link to each entry in your watchlist, using the new
* ajax watchlist thing.
*/
var wlUnwatch = {
supported: true,
onLoad: function () {
var i, j, m, a, span, d, links, link;
// history links
links = $( '.mw-changeslist > ul > li .mw-changeslist-links' );
for ( i = links.length-1; i >= 0; i-- ) {
link = $( links[ i ] ).find( 'a' )[0];
if ( !link ) {
continue;
}
m = link.href.match( /title=([^&]*)/ );
if ( !m ) {
continue;
}
a = document.createElement( 'A' );
a.href = mw.util.wikiScript() + '?action=unwatch&title=' + m[ 1 ];
a.title = 'Unwatch ' + link.title;
a.unwatchInProgress = false;
a.onclick = wlUnwatch.onClick;
a.appendChild( document.createTextNode( 'unw' ) );
span = document.createElement( 'SPAN' );
span.appendChild( a );
links[ i ].appendChild( span );
}
// log entries
links = $( '.mw-changeslist > ul > li > .mw-changeslist-line-inner > a' );
for ( i = links.length-1; i >= 0; i-- ) {
if ( /\/Special:Log\/newusers$/.test( links[ i ].href ) ) {
j = i + 1;
} else if ( /\/Special:Log\//.test( links[ i ].href ) ) {
j = i + 2;
} else {
continue;
}
m = links[ j ].href.match( /title=([^&]*)/ );
if ( !m ) {
m = links[ j ].href.match( /\/wiki\/([^?]*)/ );
}
if ( !m ) {
continue;
}
a = document.createElement( 'A' );
a.href = mw.util.wikiScript() + '?action=unwatch&title=' + m[ 1 ];
a.title = 'Unwatch ' + links[ j ].title;
a.unwatchInProgress = false;
a.onclick = wlUnwatch.onClick;
a.appendChild( document.createTextNode( 'unw' ) );
links[ i ].parentNode.insertBefore( a, links[ i ].nextSibling );
// insert a delimiter between the two links
d = document.createTextNode( '\xa0| ' );
links[ i ].parentNode.insertBefore( d, a );
}
},
onClick: function () {
if ( !wlUnwatch.supported || false ) {
wlUnwatch.supported = false;
return true;
}
/* START - CONFIRMATION PROMPT ADDED */
/* ================================= */
if (!confirm('Remove this page from your watchlist?')) {
wlUnwatch.supported = true;
return false;
}
/* END - CONFIRMATION PROMPT ADDED */
/* ================================= */
var link = this;
if ( link.unwatchInProgress ) {
return false;
}
link.unwatchInProgress = true;
link.style.color = 'red';
var timeout = setTimeout( function() {
timeout = null;
link.unwatchInProgress = false;
link.style.color = '';
}, 10000 );
var api = new mw.Api();
api.postWithToken( 'watch', {
action: 'watch',
unwatch: 1,
titles: decodeURIComponent( link.href.match( /&title=(.+)/ )[ 1 ].replace( /_/g,' ' ) )
} ).done( function( data ) {
if ( timeout ) {
clearTimeout( timeout );
}
timeout = null;
link.unwatchInProgress = false;
link.style.color = '';
if ( data.watch[ 0 ].unwatched !== undefined ) {
var li;
for ( li = link; li && li.nodeName !== 'LI'; li = li.parentNode ); // Empty loop
if ( li ) {
var classes = li.className.split(' ');
var i, len, cl, matches, ns, assocCl;
for ( i = 0, len = classes.length; i < len; i++ ) {
cl = classes[i];
matches = cl.match( /^watchlist-(\d+)-(.*)/ );
if ( matches ) {
break;
}
}
if ( matches ) {
ns = Number( matches[ 1 ] );
ns ^= 1; // use bitwise XOR to get the associated namespace number
assocCl = 'watchlist-' + ns + '-' + matches[ 2 ];
$( '.' + cl ).remove();
$( '.' + assocCl ).remove();
} else {
li.parentNode.removeChild( li );
}
}
}
} ).fail( function ( error ) {
if ( timeout ) {
clearTimeout( timeout );
}
timeout = null;
link.unwatchInProgress = false;
link.style.color = '';
} );
return false;
}
};
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' && mw.config.get( 'wgAction' ) === 'view' ) {
mw.loader.using( [ 'mediawiki.util','mediawiki.api' ], function() {
$( document ).ready( wlUnwatch.onLoad );
} );
}