User:Sunrise/Scripts/AjaxInlineDiffs.js

/** * 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( ' ' );			$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 = $( ' ' )				.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%3AWrit%A0Keeper%2FScripts%2FcommonHistory.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 ) );