Jump to content

User:Anomie/talklink.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
( function ( mw, $ ) {
	var ns = mw.config.get( 'wgNamespaceNumber' ),
		title = mw.config.get( 'wgTitle' );

	if ( ns < 0 ) {
		return;
	}

	mw.loader.using( [ 'mediawiki.Title', 'mediawiki.api' ], function () {
		$( function () {
			var $catalk = $( '#ca-talk' );
			if ( !$catalk.length || $catalk.hasClass( 'new' ) ) {
				return;
			}

			new mw.Api().get( {
				action: 'query',
				titles: new mw.Title( title, ns | 1 ).getPrefixedText(),
				prop: 'revisions',
				rvprop: 'content',
				indexpageids: 1
			} ).done( function ( r ) {
				var p, s, o;

				if ( !r || !r.query || !r.query.pages || !r.query.pageids || !r.query.pageids[0] ) {
					return;
				}
				p = r.query.pages[r.query.pageids[0]];
				if ( !p || !p.revisions || !p.revisions[0] || !p.revisions[0]['*'] ) {
					return;
				}

				s = p.revisions[0]['*'].replace( /<!--[\s\S]*?-->/g, '' );
				if ( /^#REDIRECT:? *\[\[/i.test( s ) ) {
					$catalk.addClass( 'redirect' );
					return;
				}

				do {
					o = s;
					s = s.replace( /{{{([^{}]|{[^{]|}[^}])*?}}}/g, '' );
					s = s.replace( /{{([^{}]|{[^{]|}[^}])*?}}/g, '' );

				} while ( o !== s );

				if ( /^\s*$/.test( s ) ) {
					$catalk.addClass( 'empty' );
					return;
				}
			} );
		} );
	} );
}( mediaWiki, jQuery ) );