/**
* Optional component for metadata script ([[MediaWiki:Gadget-metadata.js]]).
* This script adds a link to the toolbox. When clicked, the script finds the
* assessment of all articles linked from the current article and colors the
* links accordingly.
* @author Pyrospirit - Created the original script
* @author Nihiltres - Rewrote it to match his update to the gadget
*/
mw.loader.using("ext.gadget.metadata", function () {
assessment.links = (function () {
var assessmentLinksObj = {},
//internal shortcuts
al = assessmentLinksObj,
am = assessment.methods;
/**
* Assesses all the links on the page, making an AJAX query for each.
*/
al.assessLinks = function () {
var unassessedClass = "assess-wikilink " + am.renderAssessment({rating: "none"}).newClass,
rawArticlePath = mw.config.get("wgArticlePath").replace("$1", "");
$("#bodyContent a[href^=\"" + rawArticlePath + "\"]").each(function (i, e) {
var url = $(e).attr("href").replace(/#.*/, ""); //Bypass section links
if (url === "" || //empty string as the result of stripping out an internal section link
url === mw.config.get("wgPageName").replace(/(.*)/, mw.config.get("wgArticlePath")) || //Link to the current page
mw.Title.newFromText(decodeURIComponent(url.replace(rawArticlePath, ""))).namespace !== 0 //Link to non-mainspace page
) {
return true; //go back to the loop
}
$.ajax({
url: url.replace(
rawArticlePath,
mw.config.get("wgScript") + "?title=Talk:"
) + "&action=raw§ion=0",
cache: true,
async: true,
dataType: "text",
success: function (responseText) {
$(e).addClass("assess-wikilink " + am.renderAssessment(am.getAssessment(responseText)).newClass);
},
error: function (jqxhr) {
if (jqxhr.status === 404) {
$(e).addClass(unassessedClass);
}
}
});
});
};
/**
* Adds a link to activate the main assessLinks function.
*/
al.addToolboxLink = function () {
mw.util.addPortletLink(
"p-tb",
"#",
"Assess links",
"t-assess-article-links",
"Find the assessment of all articles linked and colour the links"
);
$("#t-assess-article-links").click(assessment.links.assessLinks);
};
/**
* Runs the part that adds the tab, and anything else necessary.
* Slightly redundant, but consistent form is nice.
*/
al.init = function () {
al.addToolboxLink();
};
return assessmentLinksObj;
}());
//Initializes the script on page load.
$(assessment.links.init);
mw.loader.load("//en.wikipedia.org/w/index.php?title=User:Pyrospirit/metadata/assesslinks.css&action=raw&ctype=text/css", "text/css");
});