User:Equazcion/assesslinks.js

$(document).ready(function {

/* if (typeof(unsafeWindow) != 'undefined'){ console = unsafeWindow.console; importStylesheet = unsafeWindow.importStylesheet; mw = unsafeWindow.mw; sajax_init_object = unsafeWindow.sajax_init_object; } */

var showOldPeerReviews = false;

$('', {'id': 't-assess-article-links'}).appendTo('#p-tb-list'); $('', {	'title': 'Find the assessment of all articles linked and color the links',	'href': '#assessLinks',	'text': 'Assess links' }).click(function{assessLinks}).appendTo('#t-assess-article-links');

assessLinks; //run on load for debug, instead of waiting for link click

function assessLinks { importStylesheet('User:Pyrospirit/metadata/assesslinks.css'); $('#mw-content-text a').each(function{		var pre = location.protocol + '//' + wgPageContentLanguage + '.' + wgNoticeProject + '.org' + '/w/index.php';		var href = $(this).attr('href');		var localUrl = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1', );       var titlePre = ;		if (href.replace(/#.*/, ) != document.location.href && RegExp('^' + localUrl).test(href)) {			if (!/^[a-z]+([_ ]talk)?:[^_ ]/i.test(href.replace(localUrl, ))) {				titlePre = 'Talk:';			}		}		if ( $(this).attr('title').length > 0 ){			var url1 = ( titlePre + $(this).attr('title') ).replace(/ /g,'_');			var request1 = {				title:  encodeURIComponent(url1),				action: 'raw',				section: 0			}			$.get(pre, request1, function(response1){ var assess = {rating: 'none', pageLink: [null, null], extra: [], activeReview: null}; assess.rating = getRating(response1); var newClass = talkAssess(assess).newClass; $(this).addClass('assess-wikilink').addClass(newClass); });		}	}); }

function getExtraInfo (extra, pageLink) { var info = []; var page = encodePageName(mw.config.get('wgPageName')); if (extra.indexOf('fac') != -1) { info.push(makeInfoString('Currently a', pageLink[0], 'Wikipedia:Featured_article_candidates/' + page, 'featured article candidate', null)); } else if (extra.indexOf('flc') != -1) { info.push(makeInfoString('Currently a', pageLink[0], 'Wikipedia:Featured_list_candidates/' + page, 'featured list candidate', null)); } else if (extra.indexOf('gan') != -1) { info.push(makeInfoString('Currently a', pageLink[0], 'Wikipedia:Good_article_nominations', 'good article nominee', null)); } else if (extra.indexOf('far') != -1) { info.push(makeInfoString('Currently undergoing', pageLink[0], 'Wikipedia:Featured_article_review/' + page, 'review', 'of its featured status')); } else if (extra.indexOf('flrc') != -1) { info.push(makeInfoString('Currently a', pageLink[0], 'Wikipedia:Featured_list_removal_candidates/' + page, 'candidate', 'for removal as a featured list')); } else if (extra.indexOf('gar') != -1) { info.push(makeInfoString(' Currently undergoing a', pageLink[0], 'Wikipedia:Good_article_reassessment', 'good article reassessment', '<\/span>', true)); }	if (extra.indexOf('ffa') != -1) { info.push(makeInfoString('A', pageLink[1], 'Wikipedia:Featured_article_review/' + page, 'former', 'featured article')); } else if (extra.indexOf('ffl') != -1) { info.push(makeInfoString('A', pageLink[1], 'Wikipedia:Featured_list_removal_candidates/' + page, 'former', 'featured list')); } else if (extra.indexOf('dga') != -1) { info.push(makeInfoString('A', pageLink[1], 'Wikipedia:Good_article_reassessment', 'delisted', 'good article')); } else if (extra.indexOf('ffac') != -1) { info.push(makeInfoString('A former', pageLink[1], 'Wikipedia:Featured_article_candidates/' + page, 'featured article candidate', null)); } else if (extra.indexOf('fflc') != -1) { info.push(makeInfoString('A former', pageLink[1], 'Wikipedia:Featured_list_candidates/' + page, 'featured list candidate', null)); } else if (extra.indexOf('fgan') != -1) { info.push(makeInfoString('A former', pageLink[1], 'Wikipedia:Good_article_nominations', 'good article nominee', null)); }	return info; }

function getRating (text) { callHooks('getRating_before'); var rating = 'none'; if (text.match(/\|\s*(class|currentstatus)\s*=\s*fa\b/i)) rating = 'fa'; else if (text.match(/\|\s*(class|currentstatus)\s*=\s*fl\b/i)) rating = 'fl'; else if (text.match(/\|\s*class\s*=\s*a\b/i)) { if (text.match(/\|\s*class\s*=\s*ga\b|\|\s*currentstatus\s*=\s*(ffa\/)?ga\b/i)) rating = 'a/ga'; // A-class articles that are also GA's       else rating = 'a'; } else if (text.match(/\|\s*class\s*=\s*ga\b|\|\s*currentstatus\s*=\s*(ffa\/)?ga\b|\{\{\s*ga\s*\|/i)              && !text.match(/\|\s*currentstatus\s*=\s*dga\b/i)) rating = 'ga'; else if (text.match(/\|\s*class\s*=\s*b\b/i)) rating = 'b'; else if (text.match(/\|\s*class\s*=\s*bplus\b/i)) rating = 'bplus'; // used by WP Math else if (text.match(/\|\s*class\s*=\s*c\b/i)) rating = 'c'; else if (text.match(/\|\s*class\s*=\s*start/i)) rating = 'start'; else if (text.match(/\|\s*class\s*=\s*stub/i)) rating = 'stub'; else if (text.match(/\|\s*class\s*=\s*list/i)) rating = 'list'; else if (text.match(/\|\s*class\s*=\s*sl/i)) rating = 'sl'; // used by WP Plants else if (text.match(/\|\s*class\s*=\s*(dab|disambig)/i)) rating = 'dab'; else if (text.match(/\|\s*class\s*=\s*cur(rent)?/i)) rating = 'cur'; else if (text.match(/\|\s*class\s*=\s*future/i)) rating = 'future'; callHooks('getRating_after'); return rating; }

function talkAssess (assess) { callHooks('talkAssess_before'); var path = mw.config.get('wgArticlePath').replace('$1', ''); var assessLink = path + 'Wikipedia:Version_1.0_Editorial_Team/Assessment'; if (typeof assess.extra === 'undefined') assess.extra = ''; var extra = assess.extra, rating = assess.rating; var pageLink = assess.pageLink ? [encodePageName(assess.pageLink[0]), encodePageName(assess.pageLink[1])] : [null, null]; var peerReview = encodePageName(assess.review); var info = getExtraInfo(extra, pageLink); var peerReviewText = addPeerReview(peerReview, assess.activeReview); if (peerReviewText) info.push(peerReviewText); var newClass, slogan; if (rating == 'a' || rating == 'a/ga') { newClass = 'assess-a-text'; slogan = 'An A-class article'; if (rating == 'a/ga') { info.push('Also a good article.'); }   } else if (rating == 'ga') { newClass = 'assess-ga-text'; slogan = 'A good article' } else if (rating == 'b') { newClass = 'assess-b-text'; slogan = 'A B-class article'; } else if (rating == 'bplus') { newClass = 'assess-bplus-text'; slogan = 'A B-plus-class article'; } else if (rating == 'c') { newClass = 'assess-c-text'; slogan = 'A C-class article'; } else if (rating == 'start') { newClass = 'assess-start-text'; slogan = 'A start-class article'; } else if (rating == 'stub') { newClass = 'assess-stub-text'; slogan = 'A <a href="' + assessLink + '">stub-class</a> article'; } else if (rating == 'sl') { newClass = 'assess-sl-text'; slogan = 'A <a href="' + assessLink + '">stub-class</a> list'; } else if (rating == 'list') { newClass = 'assess-list-text'; slogan = 'A <a href="' + path + 'Wikipedia:Lists">list-class</a> article'; } else if (rating == 'dab') { newClass = 'assess-dab-text'; slogan = 'A <a href="' + path + 'Wikipedia:Disambiguation">disambiguation page</a>'; } else if (rating == 'setindex') { newClass = 'assess-setindex-text'; slogan = 'A <a href="' + path + 'Wikipedia:Disambiguation#Set_index_articles">' + 'set index article</a>'; } else if (rating == 'redir') { newClass = 'assess-redir-text'; slogan = 'A <a href="' + path + 'Help:Redirect">redirect page</a>'; } else if (rating == 'fl') { newClass = 'assess-fl-text'; slogan = 'A <a href="' + path + 'Wikipedia:Featured_lists">featured list</a>'; } else if (rating == 'fa') { newClass = 'assess-fa-text'; slogan = 'A <a href="' + path + 'Wikipedia:Featured_articles">featured article</a>'; } else if (rating == 'cur') { newClass = 'assess-cur-text'; slogan = 'A <a href="' + path + 'Portal:Current_events">current-class</a> article'; } else if (rating == 'future') { newClass = 'assess-future-text'; slogan = 'A <a href="' + path + 'Category:Future-Class_articles">future-class</a>' + ' article'; } else { newClass = 'assess-unassessed-text'; slogan = 'An <a href="' + assessLink + '">unassessed</a> article'; }   callHooks('talkAssess_after'); return {newClass: newClass, slogan: slogan, info: info}; }

function makeInfoString (start, pageLink, defLink, linkText, end, noEndSpace) { var output; var path = mw.config.get('wgArticlePath').replace('$1', ''); var page = pageLink ? path + pageLink : (defLink ? path + defLink : null); start = start ? start.toString + ' ' : ''; linkText = linkText ? linkText.toString : ''; end = (end ? (noEndSpace ? '' : ' ') + end.toString + '.' : '.'); output = start + (page ? '<a href="' + page + '"' + (linkText ? '>' : ' \/>') : )       + linkText + ((page && linkText) ? '<\/a>' : ) + end; return output; }

function makeInfoString (start, pageLink, defLink, linkText, end, noEndSpace) { var output; // path is usually just '/wiki/', but it's different on secure.wikimedia.org var path = mw.config.get('wgArticlePath').replace('$1', ''); var page = pageLink ? path + pageLink : (defLink ? path + defLink : null); start = start ? start.toString + ' ' : ''; linkText = linkText ? linkText.toString : ''; end = (end ? (noEndSpace ? '' : ' ') + end.toString + '.' : '.'); output = start + (page ? '<a href="' + page + '"' + (linkText ? '>' : ' \/>') : )		+ linkText + ((page && linkText) ? '<\/a>' : ) + end; return output; }

function encodePageName (inputText) { if (!inputText) return null; var outputText = encodeURIComponent(inputText); while (outputText != null && outputText.match(/(\%20|\%2F|\%253A)/i)) { outputText = outputText.replace(/\%20/i, '_'); // unescape spaces for readability outputText = outputText.replace(/\%2F/i, '\/'); // %2F must be unescaped outputText = outputText.replace(/\%253A/i, ':'); // "%253A" for special cases such as Metroid: Other M }   return outputText; }

function callHooks (hook) { for (funct in this[hook]) { this[hook][funct].call(this); } }

function addHook (hook, funct) { if (typeof this[hook] === 'undefined') this[hook] = []; this[hook][this[hook].length] = funct; return this; }

function decodeEntities (str) { var t = document.createElement("textarea"); t.innerHTML = str; return t.value; }

function addPeerReview (peerReview, activeReview) { var reviewText = null; var path = mw.config.get('wgArticlePath').replace('$1', ''); if (peerReview) { reviewText = (activeReview			? 'Currently being <a href="' + path + peerReview + '">peer reviewed</a>.'			: 'Previously <a href="' + path + peerReview + '">peer reviewed</a>.'); reviewText = ' ' + reviewText + ' '; }	return reviewText; }

function getGARLink (articleName, reviewNumber) { var communityTitle = 'Wikipedia:Good_article_reassessment\/' + articleName + '\/' + reviewNumber; var individualTitle = 'Talk:' + articleName + '\/GA' + reviewNumber; var request2 = { action: 'query', titles: communityTitle + '|' + individualTitle, prop: 'info', format: 'json' }	$.get(mw.config.get("wgScriptPath")+"/api.php", request2, function(response2){		var text = response2;		if (JSON && JSON.parse) {			var query = JSON.parse(text)['query'];		} else {			return;		}		var communityTitleNorm = communityTitle;		var individualTitleNorm = individualTitle;		var len = query['normalized'].length;		for (var j = 0; j < len; j++) {		   switch (query['normalized'][j]['from']) {		        case altTitles[0]:		            communityTitleNorm = query['normalized'][j]['to'];		            break;		        case altTitles[1]:		            individualTitleNorm = query['normalized'][j]['to'];		            break;		    }		}		var noCommunityAssessment = false;		for (var i = -1; i >= -2; i--) {			if (query['pages'][i] && typeof query['pages'][i]['missing'] === 'string') {				if (query['pages'][i]['title'] == individualTitleNorm) {					return;				} else if (query['pages'][i]['title'] == communityTitleNorm) { noCommunityAssessment = true; }			}		}		var garLink = $('#assess-gar-link a:first'); if (noCommunityAssessment && garLink.length){ garLink.attr('href', mw.config.get('wgArticlePath').replace('$1', '') + altTitles[1]); }	});	return communityTitle; }

});