MediaWiki:Comments.js

// see Commentary pages on news events. // ========================================================================== // MediaWiki interface button for Comments page based on commons:mediawiki:extra-tabs.js. // Originally written by Dbenbenn, Avatar, Duesentrieb and Arnomane // Modified by bawolff for wikinews. fixed by darklama // re-written by bawolff in may 2010. // // If copying to another wiki, this also needs some css as well.

// Run a background check of api.php to see if the particular page exists, // so a non-existing comment page can be red, and an existing comment page // will look like a normal tab.

// This would be better if it could check multiple pages with one query. var checkCommentaryPageExist = function (pageName, id, query) { pageName = mw.util.wikiUrlencode( pageName ); var success = function (x) { if ( !x || !x.query || !x.query.pages ) { mw.log( "Error getting redlinks for opinion tab" ); return; }		if ( x.query.pages['-1'] ) { // Means its missing. var url = mw.config.get( 'wgScriptPath' ) + '/index.php?action=edit&redlink=1&title=' + pageName + '&' + query; $( '#' + id + ' a' ).attr( 'href', url ) $( '#' + id ).addClass( 'new' ); }	}	$.ajax(		mw.config.get( 'wgScriptPath' ) + '/api.php?action=query&format=json&titles=' + pageName,	).then(success);

}

$( function {	// Interface strings, if translating, change only these.	var OpinionTabName = 'Opinions';	var TalkTabName = 'Collaboration';	var ArticleTabName = 'Article';	var OpinionTabTooltip = 'Discuss your personal viewpoint on the topic at hand';	var OpinionNS = 102;	// Extra things to add to edit urls:	var OpinionParams = 'preload=Wikinews:Commentary_pages_on_news_events/body&editintro=Template:Editintro_comments&summary=create';                // Commentary pages on news events/body Template:Editintro comments	// End stuff to translate.	// ---

var title = mw.config.get('wgTitle'); var skin = mw.config.get('skin'); if (title === 'Main Page') return; var portlet = skin === 'vector' ? 'p-namespaces' : 'p-cactions'; switch(mw.config.get('wgNamespaceNumber')) { case 1: case 0: var targetPage = mw.config.get( 'wgFormattedNamespaces' )[OpinionNS] + ':' + title; var url = mw.util.getUrl( targetPage );

var res = mw.util.addPortletLink(				'p-namespaces',				url,				OpinionTabName,				'ca-comments',				OpinionTabTooltip			); if ( !res ) { // No p-namespaces portal. Must be monobook then. var res2 = mw.util.addPortletLink(					'p-cactions',					url,					OpinionTabName,					'ca-comments',					OpinionTabTooltip,					undefined, /* accesskey */					$('#ca-edit') /* nextnode */				); if ( !res2 ) { mw.log( "Error adding opinions tab" ); }			}			checkCommentaryPageExist(targetPage, 'ca-comments', OpinionParams); break; case 90: /* LQT thread */ var targetPage = mw.config.get( 'wgTitle' ).replace(/\/.*$/, ''); var talkTarget = mw.config.get( 'wgFormattedNamespaces' )[1] + ':' + targetPage;

var before = document.getElementById('ca-nstab-thread'); var talk = mw.util.addPortletLink(				portlet,				mw.util.getUrl( talkTarget ),				TalkTabName,				"ca-main-talk", undefined, undefined, before			); mw.util.addPortletLink(				portlet,				mw.util.getUrl( targetPage ),				ArticleTabName,				"ca-nstab-main",				undefined, undefined, talk			);

checkCommentaryPageExist(targetPage, 'ca-nstab-main', ''); checkCommentaryPageExist(talkTarget, 'ca-main-talk', ''); break; case OpinionNS: var targetPage = mw.config.get( 'wgTitle' ); var talkTarget = mw.config.get( 'wgFormattedNamespaces' )[1] + ':' + targetPage;

var before = document.getElementById('ca-nstab-' +				mw.config.get( 'wgFormattedNamespaces' )[OpinionNS].toLowerCase ); var talk = mw.util.addPortletLink(				portlet,				mw.util.getUrl( talkTarget ),				TalkTabName,				"ca-main-talk", undefined, undefined, before			); mw.util.addPortletLink(				portlet,				mw.util.getUrl( targetPage ),				ArticleTabName,				"ca-nstab-main",				undefined, undefined, talk			);

checkCommentaryPageExist(targetPage, 'ca-nstab-main', ''); checkCommentaryPageExist(talkTarget, 'ca-main-talk', '');

break; /* do stuff */ } });