MediaWiki:Gadget-LinkPatroller.js

Da Wikisource.

Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
  • Opera: premi Ctrl-F5.
/* Gadget-Patrol.js - */
/* addition of (patrol) links to RecentChanges, ajaxified */
/* for use *ONLY* with known good revisions. */
/* by [[User:Splarka]] */
 
 
var patroldata = [];
var totli = 0;
 
if(mw.config.get("wgCanonicalSpecialPageName") == 'Recentchanges') $(makePatrollLinks)
function makePatrollLinks() {
  var uls = getElementsByClassName(document,'ul','special');
  if(uls.length == 0) return
  for(var i=0;i<uls.length;i++) {
    var li = uls[i].getElementsByTagName('li');
    if(li.length == 0) continue;
    totli += li.length;
    for(var k=0;k<li.length;k++) {
      var up = getElementsByClassName(li[k],'span','unpatrolled');
      if(up.length == 0) continue;
      var a = li[k].getElementsByTagName('a');
      var arcid = false;
      for(var m=0;m<a.length;m++) {
        var href = a[m].href;
        if(href.indexOf('rcid') != -1 && href.indexOf('action') == -1) {
          arcid = href;
          continue;
        }
      }
      if(arcid) {
        var span = document.createElement('span');
        var pl = document.createElement('a');
        var id = arcid.match(/rcid\=[0-9]*/i)[0];
        id = id.substring(id.indexOf('=')+1);
        var title = arcid.match(/title\=[^&]*/i)[0];
        title = title.substring(title.indexOf('=')+1);
        pl.setAttribute('href','javascript:patrol("' + id + '","' + title + '", true)');
        li[k].setAttribute('id', 'patrolli-'+id);
        span.setAttribute('id', 'patrollink-' + id);
        pl.setAttribute('titel', 'patrol rcid=' + id);
        pl.appendChild(document.createTextNode('patrol'));
        span.appendChild(document.createTextNode('('));
        span.appendChild(pl);
        span.appendChild(document.createTextNode(') '));
        if(document.insertBefore) {
          li[k].insertBefore(span,li[k].firstChild);
        } else {
          up[0].appendChild(span);
        }
      }
    }
  }
  //var url = mw.config.get("wgServer") + mw.config.get("wgScriptPath") + '/api.php?action=query&list=recentchanges&rclimit=' + totli + '&rctoken=patrol&rcprop=user|ids&format=json';
  //ajaxRCID(url);
}
 
function ajaxRCID(url) {
  // this stuff is here because Splarka's brain no function properly
  if(window.XMLHttpRequest) { // Non-IE browsers
    var getReq = new XMLHttpRequest();
  } else if(window.ActiveXObject) { // IE
    var getReq = new ActiveXObject('Microsoft.XMLHTTP');
  }
  if(getReq) {
    getReq.onreadystatechange = function() {
      if(getReq.readyState==4 && getReq.status==200) {
        txt = getReq.responseText;
        eval('gettokens(' + txt + ')')
      }
    }
    try {
      getReq.open('GET', url, true);
      getReq.send('');
    } catch (e) {
      alert(e);
    }
  } else {
    alert('XMLHTTPRequest not supported');
  }
}
 
function gettokens(data) {
  if (!data['query'] || !data['query']['recentchanges']) return
  var rcdata = data['query-continue']['recentchanges'];
  for (var i in rcdata) {
     patroldata[rcdata[i]['rcid']] = rcdata[i]['patroltoken'];
  }
}
 
function replaceText(obj, newtext) {
    deleteText(obj);
    obj.appendChild(document.createTextNode(newtext));
}
 
function deleteText(obj) {
    while (obj.firstChild) {
        obj.removeChild(obj.firstChild);
    }
}
 
function patrol(id,title,hideli) {
  //if (!patroldata[id]) return;
  //var patroltoken = patroldata[id];
  var span = document.getElementById('patrollink-' + id);
  if (hideli) var li = document.getElementById('patrolli-' + id);
  var url = mw.config.get("wgServer") + mw.config.get("wgScriptPath") + '/index.php?title=' + title + '&rcid=' + id + '&action=markpatrolled';
  replaceText(span, '(Patrolling...) ');
  if(window.XMLHttpRequest) { // Non-IE browsers
    var getReq = new XMLHttpRequest();
  } else if(window.ActiveXObject) { // IE
    var getReq = new ActiveXObject('Microsoft.XMLHTTP');
  }
  if(getReq) {
    getReq.onreadystatechange = function() {
      if(getReq.readyState==4 && getReq.status==200) {
        txt = getReq.responseText;
        if (txt.search('The selected revision has been marked as patrolled.')!=-1) { 
            deleteText(span); 
            if (hideli) li.style.display='none';
        }
        else { replaceText(span, 'Could not patrol revision.'); }
      }
    }
    try {
      getReq.open('GET', url, true);
      getReq.send('');
    } catch (e) {
      alert(e);
    }
  } else {
    alert('XMLHTTPRequest not supported');
  }
}
 
$(changePatrolLinks);
function changePatrolLinks() {
  var patrol = getElementsByClassName(document, '*', 'patrollink');
  if (!patrol) return;
  if (patrol.length == 0) return;
  var a = patrol[0].getElementsByTagName('a');
  if(a && a[0].href.indexOf('rcid') != -1) { 
    var href = a[0].href;
  } else {
    return;
  }
  var id = href.match(/rcid\=[0-9]*/i)[0];
  id = id.substring(id.indexOf('=')+1);
  patrol[0].setAttribute('id', 'patrollink-' + id);
  a[0].setAttribute('href', 'JavaScript:patrol("' + id + '", "' + mw.config.get("wgTitle") + '", false);');
}