MediaWiki:Gadget-LinkPatroller.js
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);');
}