/**
* A script that combines the Ajax watchlist
* User:Theopolisme/Scripts/ajaxWatchlist.js
* with the inline diff link script
* User:Writ Keeper/Scripts/commonHistory.js
* by Theopolisme and Writ Keeper respectively.
*/
( function ( $, mw ) {
"use strict";
function updateWatchlist () {
var $loadingIndicator = $( '.watchlistLoadingIndicator' ),
$content = $( '#mw-content-text' ),
$ajaxWatchlist = $( '#ajaxWatchlist' );
// If this is the first time we run the script, wrap everything
// after and including the watchlist form in a div with the id
// "ajaxWatchlist".
if ( $ajaxWatchlist.length === 0 ) {
$content.find( '#mw-watchlist-form' ).nextAll().addBack().wrapAll( '<div id="ajaxWatchlist"></div>' );
$ajaxWatchlist = $( '#ajaxWatchlist' );
}
// Create a new loading indicator if it doesn't already
// exist. If it already exists, just show it.
if ( $loadingIndicator.length === 0 ) {
$loadingIndicator = $( '<span>' )
.appendTo( '.firstHeading' )
.addClass( 'watchlistLoadingIndicator' )
.append(
$.createSpinner( {
size: 'medium',
type: 'inline'
} ),
' Updating watchlist...'
);
} else {
$loadingIndicator.show();
}
// Make the ajax request to actually update the watchlist
$.ajax( {
url: location.href,
dataType: 'html',
success: function ( data ) {
// If the watchlist contents have changed, update the page
// to display the new contents.
var $newContent = $( data ).find( '#mw-content-text #mw-watchlist-form' ).nextAll().addBack(); // Same selector as $ajaxWatchlist
if ( $ajaxWatchlist.text() !== $newContent.text() ) {
$ajaxWatchlist.empty().append( $newContent );
mw.hook( 'wikipage.content' ).fire( $ajaxWatchlist ); // So scripts will run on the updated content
}
$loadingIndicator.hide();
},
error: function () {
// Hide the indicator and then display an error notification
$loadingIndicator.hide();
mw.notify( 'ajaxWatchlist: Unable to automatically update watchlist.' );
},
complete: function () {
// Each time the Ajax request runs, load commonHistory.js
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Writ�Keeper/Scripts/commonHistory.js&action=raw&ctype=text/javascript');
}
} );
}
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
// Add custom css for the loading indicator
mw.util.addCSS( '.watchlistLoadingIndicator { float: right; font-size: 12px; } ' );
// Run updateWatchlist() every 20 seconds by default (can be configured via window.watchlistUpdateFrequency)
mw.loader.using( [ 'jquery.spinner' ], function () {
setInterval( updateWatchlist, window.watchlistUpdateFrequency || 20000 );
} );
}
}( jQuery, mediaWiki ) );