MediaWiki:Gadget-bkl-check.js
Appearance
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* *************************************************************************** */
/* Markierung setzen */
/* *************************************************************************** */
function markArticleLinkAndRedirectsAsDisambiguation(title, redirects)
{
markArticleLinkAsDisambiguation(title);
if(redirects == null) return;
for(var r in redirects)
{
markArticleLinkAsDisambiguation(redirects[r]);
}
}
function markArticleLinkAsDisambiguation(title)
{
// if (title == "Vicipaedia:Discretiva") return;
var contenttag = getContentTag();
if (typeof bodyContent == 'undefined' && !(bodyContent = document.getElementById(contenttag)))
bodyContent = document.getElementById('article');
var links = bodyContent.getElementsByTagName('a');
for(var i=0;i<links.length;i++)
{
if ((links[i].title == title) && (links[i].className != "image"))
{
links[i].innerHTML = '<span style="background-color:#FF9191;" class="bkl-link" title="' + title + ' (pagina discretiva)"><span class="bkl-link-inner">' + links[i].innerHTML + '<span class="bkl-link-sup" style="-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;"><sup>DIS</sup></span></span></span>';
}
}
}
// detect redirects to this page BEGIN
function markRedirectToThisPage(title)
{
// if (title == "Vicipaedia:Discretiva") return;
var contenttag = getContentTag();
if (typeof bodyContent == 'undefined' && !(bodyContent = document.getElementById(contenttag)))
bodyContent = document.getElementById('article');
var links = bodyContent.getElementsByTagName('a');
for(var i=0;i<links.length;i++)
{
if ((links[i].title == title) && (links[i].className != "image"))
{
links[i].innerHTML = '<span style="background-color:red;" class="redirtoself-link" title="' + title + ' (redirectio ad paginam istam)"><span class="redirtoself-link-inner">' + links[i].innerHTML + '<span class="redirtoself-link-sup" style="-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;"><sup>HIC REDIRIGIT</sup></span></span></span>';
}
}
}
// detect redirects to this page END
/* *************************************************************************** */
/* Hilfsfunktionen */
/* *************************************************************************** */
function getContentTag()
{
return (document.getElementById('bodyContent') != null) ? 'bodyContent' : 'mw_contentholder';
}
function getXMLRequest()
{
var xmlRequest = false;
// Mozilla/Safari
if (window.XMLHttpRequest)
{ xmlRequest = new XMLHttpRequest(); }
// IE
else if (window.ActiveXObject)
{ xmlRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
xmlRequest.open('POST', mw.config.get('wgServer') + wgScriptPath + '/api.php', true);
xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
return xmlRequest;
}
function getRedirects(redirectstag)
{
var redirects = new Object();
if (redirectstag.length > 0)
{
redirectstag = redirectstag.item(0);
for (var i = 0; i < redirectstag.childNodes.length; i++)
{
var node = redirectstag.childNodes.item(i);
var from = node.getAttribute("from");
var to = node.getAttribute("to");
if(redirects[to] == null) redirects[to]= new Array();
redirects[to].push(from);
}
}
return redirects;
}
function doBKLCheck(xmldoc)
{
var root = xmldoc.getElementsByTagName('query');
if (root.length < 1) { return; }
root = root.item(0);
var redirects = getRedirects(root.getElementsByTagName("redirects"));
root = root.getElementsByTagName('pages');
if (root.length < 1) { return; }
// detect redirects to this page BEGIN
if (!(redirects[mw.config.get('wgPageName')] == null))
{
for(var r in redirects[mw.config.get('wgPageName')])
{
markRedirectToThisPage(redirects[mw.config.get('wgPageName')][r]);
}
}
// detect redirects to this page END
root = root.item(0);
for (var i = 0; i < root.childNodes.length; i++) // root.childNodes.length
{
var node = root.childNodes.item(i);
if(node.getAttribute("missing") != null) continue;
var ns = node.getAttribute('ns');
if(ns != 0) continue;
var title = node.getAttribute('title');
var categories = node.getElementsByTagName('categories').item(0);
if (categories != null)
{
// check categories for disambiguation category
for (var j = 0; j < categories.childNodes.length; j++)
{
var category_title = categories.childNodes.item(j).getAttribute('title');
if (category_title == 'Categoria:Discretiva' ||
category_title == 'Categoria:Paginae de nominibus discretivae')
{
markArticleLinkAndRedirectsAsDisambiguation(title, redirects[title]);
}
}
}
}
}
/* *************************************************************************** */
/* Normaler Check (Anzeige eines Artikels) */
/* *************************************************************************** */
function BKL_Check()
{
BKL_Check_Continue("");
}
function BKL_Check_Continue(gplcontinue)
{
if ((typeof bklCheckOnlyCheckMainNS != "undefined") && (bklCheckOnlyCheckMainNS == true) && (mw.config.get('wgNamespaceNumber') > 0)) { return; }
if (mw.config.get('wgNamespaceNumber') < 0) { return; } // no check for special pages
if (location.href.indexOf("printable=yes") > -1) { return; } // not for print preview
var xmlRequest = getXMLRequest();
xmlRequest.onreadystatechange = function()
{
if (xmlRequest.readyState == 4)
{
if (xmlRequest.status == 200)
{
bkl_check_result_arrived(xmlRequest.responseXML);
}
}
}
xmlRequest.send('action=query&generator=links&titles=' + mw.config.get('wgPageName') + '&prop=categories&gpllimit=100&cllimit=500&format=xml&redirects=1' + gplcontinue + '&gplnamespace=0');
}
function bkl_check_result_arrived(xmldoc)
{
doBKLCheck(xmldoc);
root = xmldoc.getElementsByTagName('query-continue');
if (root.length > 0)
{
root = root.item(0).getElementsByTagName('links');
if (root.length < 1) { return; }
root = root.item(0);
var gplcontinue = "&gplcontinue=" + root.getAttribute('gplcontinue');
BKL_Check_Continue(gplcontinue);
}
}
/* *************************************************************************** */
/* Vorschau-Check (Vorschau eines Artikels) */
/* *************************************************************************** */
function BKL_Check_Preview_Partly(start)
{
if ((typeof bklCheckOnlyCheckMainNS != "undefined") && (bklCheckOnlyCheckMainNS == true) && (mw.config.get('wgNamespaceNumber') > 0)) { return; }
var links = document.getElementById(getContentTag()).getElementsByTagName('a');
if (start > links.length) { return; }
var titles = "";
for(var i=start;i<start+50;i++)
{
if (typeof links[i] != 'undefined' && links[i].title != "" &&
(links[i].href.indexOf('index.php') == -1) &&
(links[i].href.indexOf('la.wikipedia.org') > -1)
)
{
var title = links[i].href.replace(/http:\/\/la.wikipedia.org/i, "").replace(/https:\/\/la.wikipedia.org/i, "").replace(/\/\/la.wikipedia.org/i, "").replace(/\/wiki\//i, "");
if ((title.indexOf("Special:") != 0) && (title.indexOf("Specialis:") != 0))
{
titles = titles + "|" + title;
}
}
}
if (titles.length == 0) { BKL_Check_Preview_Partly(start + 50); return; }
titles = titles.substr(1);
var xmlRequest = getXMLRequest();
xmlRequest.onreadystatechange = function()
{
if (xmlRequest.readyState == 4)
{
if (xmlRequest.status == 200)
{
bkl_check_preview_result_arrived(xmlRequest.responseXML, start + 50);
}
}
}
xmlRequest.send('action=query&titles=' + titles + '&prop=categories&cllimit=500&format=xml&redirects=1');
}
function bkl_check_preview_result_arrived(xmldoc, nextstart)
{
doBKLCheck(xmldoc);
BKL_Check_Preview_Partly(nextstart);
}
function BKL_Check_Preview()
{
BKL_Check_Preview_Partly(0);
}
/* *************************************************************************** */
/* Bei jedem Aufruf eines Artikels */
/* *************************************************************************** */
if (mw.config.get('wgAction') == 'view')
BKL_Check();
else if (mw.config.get('wgAction') == 'submit')
BKL_Check_Preview();