MediaWiki:Gadget-bkl-check.js

E Vicipaedia

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: 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&nbsp;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();