User:Equazcion/assesslinks.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:Equazcion/assesslinks. |
$(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;
$('<li/>', {'id': 't-assess-article-links'}).appendTo('#p-tb-list');
$('<a/>', {
'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('<span id="assess-gar-link">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 href="' + assessLink + '">A-class</a> article';
if (rating == 'a/ga') {
info.push('Also a <a href="' + path + 'Wikipedia:Good_Articles">good article</a>.');
}
} else if (rating == 'ga') {
newClass = 'assess-ga-text';
slogan = 'A <a href="' + path + 'Wikipedia:Good_Articles">good article</a>'
} else if (rating == 'b') {
newClass = 'assess-b-text';
slogan = 'A <a href="' + assessLink + '">B-class</a> article';
} else if (rating == 'bplus') {
newClass = 'assess-bplus-text';
slogan = 'A <a href="' + path + 'Wikipedia:WikiProject_Mathematics/Wikipedia_1.0'
+ '/Grading_scheme">B-plus-class</a> article';
} else if (rating == 'c') {
newClass = 'assess-c-text';
slogan = 'A <a href="' + assessLink + '">C-class</a> article';
} else if (rating == 'start') {
newClass = 'assess-start-text';
slogan = 'A <a href="' + assessLink + '">start-class</a> 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 = '<span class="assess-info-review">' + reviewText + '</span>';
}
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;
}
});