MediaWiki:Gadget-categoryTreeLanguageNames.js
Jump to navigation
Jump to search
Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as MediaWiki:Common.css, it will take 5-10 minutes before the changes take effect, even if you clear your cache.
- Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh);
- Konqueror and Chrome: click Reload or press F5;
- Opera: clear the cache in Tools → Preferences;
- Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.
- The following documentation is located at MediaWiki:Gadget-categoryTreeLanguageNames.js/documentation. [edit]
- This script is a part of the
categoryTreeLanguageNames
gadget (edit definitions)- Description (edit): Tag category names containing language codes with language names.
- Useful links: subpage list • links • redirects
See also: Special:Gadgets.
"use strict";
// {{documentation}}
// <nowiki>
(function categoryTreeLanguageNamesGadget() {
var CACHE_DURATION = 24 * 60 * 60; // 24 hours
var ALLOWED_NAMESPACES = [
0, // main
14, // Category
100, // Appendix
118 // Reconstruction
];
var CATEGORY_PREFIX = mw.config.get("wgFormattedNamespaces")[14] + ":";
function getLanguageCodeToCanonicalName(callback, cacheDuration) {
var KEY = "enwiktLanguageCodeToCanonicalNameJson";
var timeNow = new Date().getTime() * 1e-3;
try {
var cachedData = JSON.parse(localStorage.getItem(KEY));
if (timeNow - cachedData.timestamp < cacheDuration) {
callback(cachedData.data);
return;
}
} catch (e) { }
var request = new mw.Api().get({
"action": "parse",
"page": "Module:languages/code to canonical name.json",
"prop": "wikitext",
"formatversion": 2,
"format": "json"
});
request.done(function(response) {
var languageData = JSON.parse(response.parse.wikitext);
callback(languageData);
localStorage.setItem(KEY, JSON.stringify({
timestamp: timeNow,
data: languageData
}));
});
}
function addCategoryTreeLanguageName(codeToCanonicalName, element, doNotTagLanguageCode) {
// not a category link/name
if (element.href.indexOf(CATEGORY_PREFIX) < 0)
return;
var firstTextNode = Array.prototype.find.call(element.childNodes, function(node) {
return node.nodeType === 3;
});
if (!firstTextNode)
return;
var categoryName = firstTextNode.textContent;
var parseCategoryTreeName = categoryName.match(/^([a-z-]+):(.+)/);
if (!parseCategoryTreeName)
return;
var languageCode = parseCategoryTreeName[1];
var subcategoryName = parseCategoryTreeName[2];
var canonicalName = codeToCanonicalName[languageCode];
if (!canonicalName)
return;
if (element.title === categoryName || element.title === CATEGORY_PREFIX + categoryName)
element.title += " [" + canonicalName + ": " + subcategoryName + "]";
if (languageCode !== doNotTagLanguageCode)
element.appendChild($('<span></span>').addClass("wikt-category-tree-language-name").text(" [" + canonicalName + "]")[0]);
}
mw.hook("wikipage.content").add(function() {
if (mw.config.get("wgAction") === "view" &&
ALLOWED_NAMESPACES.indexOf(mw.config.get("wgNamespaceNumber")) >= 0) {
mw.util.addCSS(`
.wikt-category-tree-language-name {
font-size: 85%;
}
`);
var thisLanguageCode = null;
if (mw.config.get("wgNamespaceNumber") === 14) {
var categoryName = mw.config.get("wgTitle");
var parseCategoryTreeName = categoryName.match(/^([a-z-]+):(.+)/);
if (parseCategoryTreeName)
thisLanguageCode = parseCategoryTreeName[1];
}
getLanguageCodeToCanonicalName(function (codeToCanonicalName) {
$('#catlinks ul > li a').each(function () {
addCategoryTreeLanguageName(codeToCanonicalName, this, thisLanguageCode);
});
if (mw.config.get("wgNamespaceNumber") === 14) {
$('#mw-subcategories a').each(function () {
addCategoryTreeLanguageName(codeToCanonicalName, this, thisLanguageCode);
});
}
}, CACHE_DURATION);
}
});
})();
// </nowiki>