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 stub-class article';

    } else if (rating == 'sl') {

    newClass = 'assess-sl-text';

    slogan = 'A stub-class list';

    } else if (rating == 'list') {

    newClass = 'assess-list-text';

    slogan = 'A list-class article';

    } else if (rating == 'dab') {

    newClass = 'assess-dab-text';

    slogan = 'A disambiguation page';

    } else if (rating == 'setindex') {

    newClass = 'assess-setindex-text';

    slogan = 'A '

    + 'set index article';

    } else if (rating == 'redir') {

    newClass = 'assess-redir-text';

    slogan = 'A redirect page';

    } else if (rating == 'fl') {

    newClass = 'assess-fl-text';

    slogan = 'A featured list';

    } else if (rating == 'fa') {

    newClass = 'assess-fa-text';

    slogan = 'A featured article';

    } else if (rating == 'cur') {

    newClass = 'assess-cur-text';

    slogan = 'A current-class article';

    } else if (rating == 'future') {

    newClass = 'assess-future-text';

    slogan = 'A future-class'

    + ' article';

    } else {

    newClass = 'assess-unassessed-text';

    slogan = 'An unassessed 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 ? '' : ' \/>') : '')

    + 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 ? '' : ' \/>') : '')

    + 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 peer reviewed.'

    : 'Previously peer reviewed.');

    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;

    }

    });