Utilisateur:Mabot/monobook.js
Apparence
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.var debugFlag = true;
importScript("Utilisateur:Mabot/featuredTemplateSwitch.js")
function wpURLEncode(string)
{
if (!string) return "";
return string.replace(/ /g, "_").replace(/[\x00-\x2C\x3B-\x40\x5B-\x5E\x60\x7B-\uFFFF]/g,
function (match) {
var c = match.charCodeAt(0);
var s = new Array();
if (c < 0x80) s.push(c);
else if (c < 0x0800) s.push(c >> 6 | 0xC0, c & 0x3F | 0x80);
else if (c < 0x010000) s.push(c >> 12 | 0xE0, c >> 6 & 0x3F | 0x80, c & 0x3F | 0x80);
else if (c < 0x110000) s.push(c >> 18 | 0xF0, c >> 12 & 0x3F | 0x80, c >> 6 & 0x3F | 0x80, c & 0x3F | 0x80);
for (var i = 0, len = s.length; i < len; i++)
s[i] = (s[i] < 16 ? "%0" : "%") + s[i].toString(16).toUpperCase();
return s.join("");
});
}
function getElementById(id)
{
var element = null;
if (this.id == id)
{
element = this;
element.getElementsByClassName = document.getElementsByClassName;
}
for (var child = this.firstChild; !element && child; child = child.nextSibling)
if (child.nodeType == 1)
{
child.getElementById = getElementById;
element = child.getElementById(id);
}
return element;
}
function httpRequest(url, options, data)
{
// options.async
// options.method
// options.headers
// options.content
// options.onSuccess(request,data)
// options.onFailure(request,data)
var request= new XMLHttpRequest();
request.onreadystatechange = function()
{
if (request.readyState == 4)
{
if(request.status==500) httpRequest(url, options, data)
else httpComplete(request, options, data);
}
}
request.open(options.method ? options.method : "GET", url, options.async == false ? false : true);
if (options.headers)
{
for (var field in options.headers)
request.setRequestHeader(field, options.headers[field]);
}
request.send(options.content ? options.content : null);
return request;
}
function httpComplete(request, options, data)
{
if (request.status >= 200 && request.status < 300)
{
if (options.onSuccess)
{
var contentType = request.getResponseHeader("Content-Type");
var regex = new RegExp(/^([^\/]+\/[^;]+).*/);
contentType = contentType.replace(regex, "$1");
if (contentType == "text/html")
{
var doc = document.createElement("div");
doc.innerHTML = request.responseText;
doc.getElementsByClassName = document.getElementsByClassName;
doc.getElementById = getElementById;
options.onSuccess(doc, data);
}
else if (contentType == "text/xml")
{
var xml = new DOMParser();
xml = xml.parseFromString(request.responseText, 'text/xml');
options.onSuccess(xml, data);
}
else
{
options.onSuccess(request, data);
}
}
}
else if (options.onFailure)
{
options.onFailure(request, data);
}
else
{
alert(request.statusText);
}
}
function wpEditPage (title, params, editFunction, saveFunction, data)
{
var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + wpURLEncode(title)
+ '&action=edit';
for (var name in params)
url += '&' + name + '=' + wpURLEncode(params[name]);
var options = { onSuccess: wpSavePage };
data.title = title;
data.editFunction = editFunction;
data.saveFunction = saveFunction;
httpRequest(url, options, data);
}
function wpSavePage(doc, data)
{
var inputs = doc.getElementById('editform').getElementsByTagName('input');
var editform = new Array();
for (var i = 0, len = inputs.length; i < len; i++)
{
var value = inputs[i].value
if(inputs[i].type != "checkbox" || inputs[i].checked)
editform[inputs[i].name] = value;
}
var wpTextbox1 = doc.getElementById('wpTextbox1').value;
var wpSummary = editform['wpSummary'];
var regex = new RegExp(/var mw.config.get('wgArticleId') = "(\d+)";(?:\n.*)*var mw.config.get('wgCurRevisionId') = "(\d+)";/m);
var match = regex.exec(doc.textContent);
if (match) {
data.pageId = match[1];
data.curRevId = match[2];
}
var edit = data.editFunction(wpTextbox1, wpSummary, doc, data);
if(edit.wpTextbox1 == wpTextbox1) return
if (typeof(edit.error) == "undefined") {
editform['wpTextbox1'] = edit.wpTextbox1;
editform['wpSummary'] = edit.wpSummary;
var params = [ 'wpTextbox1', 'wpSummary', 'wpSection',
'wpStarttime', 'wpEdittime', 'wpEditToken', 'wpSave' ];
if(editform['wpWatchthis']) params.push('wpWatchthis')
var content = params.map(function(name) { return name + '=' + encodeURIComponent(editform[name]); }).join("&");
var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + wpURLEncode(data.title)
+ '&action=submit';
var headers = new Array();
headers['Content-Type'] = 'application/x-www-form-urlencoded';
var options = { method: 'POST', headers: headers, content: content, onSuccess: data.saveFunction };
data = edit.data;
httpRequest(url, options, data);
} else {
edit.error(edit.data);
}
}
function jsonRequest(url, type, handler, data)
{
var request= new XMLHttpRequest();
var res = [];
var doRequest = function(extraUrl)
{
setTimeout(function()
{
console.log(res.length)
request.open("GET", mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/" + url + "&format=json" + extraUrl , true);
request.send( null);
}
,10)
}
var onreadystatechange = function()
{
if (request.readyState == 4)
if (request.status >= 200 && request.status < 300)
{
var dum = eval ("(" + request.responseText + ")")
for(var i in dum.query[type])
res[i] = dum.query[type][i]
if(dum["query-continue"])
{
var ex = ""
for(var val in dum["query-continue"][type])
for(var val in dum["query-continue"][type])
ex = ex + "&" + val + "=" + dum["query-continue"][type][val]
doRequest(ex)
}
else
handler(res, data)
}
else
{
console.error("request error : " + request.status)
}
}
request.onreadystatechange = onreadystatechange
doRequest("")
return request;
}
function getPageListUsingTemplate(templateName, handler)
{
var url = "api.php?action=query&list=embeddedin&eilimit=500&eititle=" + encodeURIComponent(templateName)
if(debugFlag) url = url + "&einamespace=2"
jsonRequest(url, "embeddedin", handler)
}
function processList(list, handler, delay)
{
if(!delay) delay = 30
var foo = function()
{
for(var i in list)
{
var actionMaded = handler(list[i])
delete list[i]
if(actionMaded)
break
}
setTimeout(foo, delay*1000)
}
foo()
}
function modifyPage(title, handler, summary)
{
var editFunction = function(wpTextbox1, wpSummary, doc, data)
{
var res = {}
res.wpTextbox1 = handler(wpTextbox1, title)
res.wpSummary = summary
return res
}
if(debugFlag && title.indexOf("Utilisateur:Mabot/")!=0) return false
if(title.indexOf("Utilisateur:Mabot/")!=0)
{
if(title.indexOf("Utilisateur:")==0) return false
if(title.indexOf("Utilisatrice:")==0) return false
if(title.indexOf("utilisateur:")==0) return false
if(title.indexOf("utilisatrice:")==0) return false
if(title.indexOf("User:")==0) return false
if(title.indexOf("user:")==0) return false
}
wpEditPage(title, {}, editFunction, function(){}, {})
return true
}
function getPageListInCategory(categoryName, handler)
{
var url = "api.php?action=query&list=categorymembers&cmlimit=500&cmtitle=Category:" + encodeURIComponent(categoryName)
jsonRequest(url, "categorymembers", handler)
}
function setArticleThumbEvaluation(content)
{
var ArticleThumbEvaluationRes = {}
ArticleThumbEvaluationRes.fixedSize = 0
ArticleThumbEvaluationRes.nbImage = 0
ArticleThumbEvaluationRes.nbImagesTemplate = 0
var stack = content.split(/(\[\[[Ii]mage ?:|<[Gg]allery|<\/[Gg]allery|\{\{ ?[Ii]mages)/)
for(i=1;i<stack.length;i++)
{
switch (stack[i].toLowerCase().replace(/ /g,""))
{
case "{{images":
{
var nb = stack[i+1].split(/\| ?[Ii]mage ?:/).length
var match = stack[i+1].substring(0,stack[i+1].indexOf("}}")).match(/largeur ?= ?"?(\d*)"?/)
if(match)
ArticleThumbEvaluationRes.fixedSize+= parseInt(match[1]) * parseInt(match[1]) * nb
ArticleThumbEvaluationRes.nbImage += nb
ArticleThumbEvaluationRes.nbImagesTemplate += nb
i++;
break;
}
case "[[image:":
{
var params = stack[i+1].split("|")
var size = 0
for(j=0;j!=params.length;j++)
{
if(params[j].indexOf("]]")!=-1) break
if(params[j].indexOf("px")!=-1)
{
size = parseInt(params[j].replace("px",""))
size = isNaN(size) ? 0 : size
break
}
}
if(size > 50)
{
ArticleThumbEvaluationRes.fixedSize += size*size
ArticleThumbEvaluationRes.nbImage ++
}
i++;
break;
}
case "<gallery":
{
var nb = stack[i+1].split(/[Ii]mage ?:/).length
var match = stack[i+1].substring(0,stack[i+1].indexOf(">")).match(/widths ?= ?"?(\d*)"?/)
if(match)
{
ArticleThumbEvaluationRes.fixedSize+= parseInt(match[1]) * parseInt(match[1]) * nb
}
else
{
var match = stack[i+1].substring(0,stack[i+1].indexOf(">")).match(/heights ?= ?"?(\d*)"?/)
if(match)
ArticleThumbEvaluationRes.fixedSize+= parseInt(match[1]) * parseInt(match[1]) * nb
}
ArticleThumbEvaluationRes.nbImage += nb
i=i+2;
break;
}
}
}
var toMuch = ArticleThumbEvaluationRes.nbImage - content.length/2000
var res = ArticleThumbEvaluationRes.fixedSize + ArticleThumbEvaluationRes.nbImagesTemplate * 200*200
if(toMuch > 0) res+=toMuch*100*100
return (parseInt(Math.sqrt(res+1)*10)/10)
}
function auditImages()
{
createImageAudit("Article de qualité", "Utilisateur:Mabot/Audit des images des AdQ")
createImageAudit("Bon article", "Utilisateur:Mabot/Audit des images des BA")
}
function createImageAudit(categoryName, reportPage)
{
debugFlag = false
var report = {}
var saveAudit = function()
{
modifyPage(reportPage, function(txt)
{
var res= "{|class='wikitable sortable'\n"
res += "!Article\n";
res += "!Indice\n";
res += "|-\n";
for(i in report)
{
res += "|-\n";
res += "|[["+i+"]]||"+report[i]+"\n";
}
res+="|}"
return res;
}, "Mise à jour de l'audit des images de ["+"[Category:"+categoryName+"]]");
}
getPageListInCategory(categoryName, function(list)
{
var l = list.length
processList(list, function(elt)
{
if(elt.ns==0)
{
report[decodeURI(elt.title)] = 0
modifyPage(elt.title, function(txt, article)
{
l--
report[decodeURI(article)] = setArticleThumbEvaluation(txt)
if(l==0) saveAudit()
return txt;
}, "")
}
else
l--
return true
}, 2)
})
}
function removeTemplateFromArticles(templateName, summary)
{
debugFlag=false
getPageListUsingTemplate("Modèle:"+templateName, function(list)
{
processList(list, function(elt)
{
modifyPage(elt.title, function(txt, article)
{
return txt.replace("{{"+templateName+"}}","")
}, summary)
return true
}, 10)
})
}