Utilisateur:Dr Brains/BacASable.js
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 MunicipalitiesPage = "Utilisateur:Dr Brains/MunicipalitesColombiennes.js";
importScript(MunicipalitiesPage);
if(mw.config.get('wgAction')=="edit" || mw.config.get('wgAction')=="submit") addOnloadHook(BacASable_Special);
var GetDataIndex = 0;
function BacASable_Special(){
for(var a=0,l=municipalites.length;a<l;a++){
if(mw.config.get('wgTitle') = municipalites[a]["article"]) return BacASable_SpecialGetDataLink(a);
}
BacASable_SpecialGetDataLink(0);
}
function BacASable_SpecialGetDataLink(index){
GetDataIndex = index;
var OngletsCactions = document.getElementById('p-cactions');
if(OngletsCactions){
var CactionsUl = OngletsCactions.getElementsByTagName('ul')[0];
CactionsUl.innerHTML += '<li>'
+ '<a href="javascript:BacASable_SpecialGetData(false, -1);">-1</a>'
+ ' '
+ '<a href="javascript:BacASable_SpecialGetThisData('+index+');">?</a>'
+ ' '
+ '<a href="javascript:BacASable_SpecialGetData(false, 1);">+1</a></li>';
$(OngletsCactions).removeClass("emptyPortlet");
}
}
function BacASable_SpecialGetThisData(index){
var TheIndex = prompt("Index ? " , index);
if(TheIndex || TheIndex===0) BacASable_SpecialGetData(TheIndex, 0)
}
function BacASable_SpecialGetData(index, diff){
GetDataIndex = (index===false ? GetDataIndex : index) + diff;
var Line = municipalites[GetDataIndex];
if(!Line) return;
var Text = "";
for(var thing in Line){
if(Line[thing]) Text += "| " + thing + " = " + Line[thing] + "\n";
}
var TextArea = document.getElementById("SpecialTextArea");
if(!TextArea){
TextArea = document.createElement('textarea');
TextArea.id = "SpecialTextArea";
TextArea.rows = "10";
var Target = document.getElementById("wpTextbox1");
Target.parentNode.insertBefore(TextArea, Target);
}
TextArea.value = Text;
}
var indexInterval = 1;
var BacASable_APILimit = ( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1 || mw.config.get('wgUserGroups').indexOf("bot")!=-1) ? 4999 : 499 );
var RequestsDone = new Array();
function BacASable_Run(index){
if(!index) index = 0;
if(index>3) return;
var Line = municipalites[index];
if(!Line){
window.location.reload();
return;
}
var AlertText = "";
var Article = Line["article"];
for(var thing in Line){
if(Line[thing]) AlertText += thing + " = " + Line[thing] + "\n";
}
alert(AlertText);
var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(Article) + "&action=edit";
BacASable_GetPage(URL, BacASable_GotPage, index);
}
var BacASable_Summary = "Bot : Mise à jour infobox";
function BacASable_GotPage(Req, data){
var index = data.params;
if(!index) index = 0;
BacASable_Summary = "Bot : Mise à jour infobox";
var Response = Req.responseText;
while(document.body.firstChild){ document.body.removeChild(document.body.firstChild); }
document.body.innerHTML = Response;
var TextArea = document.getElementById("wpTextbox1");
var SummaryBox = document.getElementById("wpSummary");
var Text = TextArea.value;
var NewText = BacASable_CheckInfoboxParams(Text, index);
TextArea.value = NewText;
SummaryBox.value = BacASable_Summary;
if(Text == NewText){
BacASable_Run((index+1));
return;
}
//BacASable_SavePage(function(){ BacASable_Run((index+1))});
}
var InfoboxParams = new Array("nom =",
"image =",
"légende =",
"blason =",
"lien blason =",
"drapeau =",
"lien drapeau =",
"dep =",
"latitude =",
"longitude =",
"géolocalisation =",
"altitude =",
"référence =",
"fondation =",
"supkm2 =",
"code =",
"gentilé =",
"maire =",
"site =",
"carte =");
function BacASable_CheckInfoboxParams(Text, index){
if(!index) index=0;
var Line = municipalites[index];
var TextLines = Text.split('\n');
var InfoboxLines = new Array();
var NewInfoboxLines = new Array();
var IsInfobox = false;
var GotInfobox = false;
var InfoboxRegExp = new RegExp("\\{\\{(I|i)nfobox (Municipalité|municipalité|Ville) de Colombie", "g");
for(var a=0,l=TextLines.length;a<l;a++){
if(GotInfobox) continue;
var ThisLine = TextLines[a];
if(ThisLine.match(InfoboxRegExp)!=null){
IsInfobox = true
continue;
}
if(!IsInfobox) continue;
if(ThisLine=="}}" || ThisLine.indexOf("}}")==0) GotInfobox = true;
if(GotInfobox) continue;
InfoboxLines.push(ThisLine);
}
var Recap = Line["article"] + "\n\n";
var ParamFound = false;
for(var a=0,l=InfoboxParams.length;a<l;a++){
var Param = InfoboxParams[a].replace(/ =/g, "=").replace(/=/g, "");
var ParamRegExp = new RegExp("\\|[ ]*"+Param+"[ ]*=");
ParamFound = false;
var OldValue = ""
var NewValue = Line[Param];
Recap += Param + " : " + Line[Param] + "\n";
var Value = "";
for(var b=0, m=InfoboxLines.length;b<m;b++){
if(ParamFound) continue;
var InfoboxLine = InfoboxLines[b];
if(InfoboxLine.indexOf("=")==-1) continue;
if(InfoboxLine.match(ParamRegExp)!=null){
ParamFound = true;
OldValue = InfoboxLine.split("=")[1].replace(/^ /g, "");
if(NewValue){
Value = NewValue;
}else if(OldValue){
Value = OldValue;
}
}
}
NewInfoboxLines[a] = " | "+InfoboxParams[a]+" "+Value;
}
alert(Recap);
var OldInfobox = InfoboxLines.join("\n");
var NewInfobox = NewInfoboxLines.join("\n").replace(/\n\n/g, "\n");
//alert(OldInfobox);
//alert(NewInfobox);
Text = Text.replace(OldInfobox, NewInfobox);
return Text;
}
// =================================================================================================================
// ///////////////////////////////////////////////////// FONCTION DE REQUÊTE ///////////////
// =================================================================================================================
function BacASable_Ajax(bundle) {
// mandatory: bundle.url
// optional: bundle.async
// optional: bundle.method
// optional: bundle.headers
// optional: bundle.data
// optional: bundle.onSuccess (xmlhttprequest, bundle)
// optional: bundle.onFailure (xmlhttprequest, bundle)
// optional: bundle.otherStuff OK too, passed to onSuccess and onFailure
var xmlhttp;
try {
xmlhttp = new XMLHttpRequest();
} catch(e) {
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlhttp = false
}
}
}
if (xmlhttp) {
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200 || xmlhttp.status == 302) {
if (bundle.onSuccess)
bundle.onSuccess(xmlhttp,bundle);
} else if (bundle.onFailure) {
bundle.onFailure(xmlhttp,bundle);
} else {
// A activer en debug mode ?
alert(xmlhttp.status+xmlhttp.responseText);
}
};
xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async == false ? false : true);
if (bundle.headers) {
for (var field in bundle.headers)
try {
xmlhttp.setRequestHeader(field,bundle.headers[field]);
} catch(err) {
//Argos42 : pour rendre LiveRC fonctionnel sur chrome
}
}
xmlhttp.send(bundle.data ? bundle.data : null);
}
return xmlhttp;
};
function BacASable_GetPage(URL, NextFunc, params){
BacASable_Ajax({ url: URL,
onSuccess:NextFunc,
params : (params ? params : false)
});
}
function BacASable_SavePage(NextFunc, params){
//if(!confirm("Publier ?")) return;
var Form = document.getElementById('editform');
var action = Form.action;
var headers = new Array();
headers['Content-Type'] = 'application/x-www-form-urlencoded';
BacASable_Ajax({ url: action,
method: "POST",
headers: headers,
data: BacASable_createURLFromParams(BacASable_getFormParams(Form)),
onSuccess:(NextFunc ? NextFunc : function(){ window.location.reload(); } ),
params : (params ? params : false)
});
}
function BacASable_getFormParams(Form){
var Params = new Array();
var Tags = new Array("textarea", "select", "input");
for(var a=0,l=Tags.length;a<l;a++){
var Elements = Form.getElementsByTagName(Tags[a]);
for(var b=0,m=Elements.length;b<m;b++){
var Element = Elements[b];
var ElName = Element.name;
var ElValue = Element.value;
var ElType = Element.type;
if(Tags[a].toLowerCase()=='input' && (ElType == "checkbox" || ElType == "radio") && Element.checked){
Params[ElName] = ElValue;
}else if(Tags[a].toLowerCase()=='input' && (ElType == "text" || ElType == "hidden") ){
Params[ElName] = ElValue;
}else if(Tags[a].toLowerCase()!='input'){
Params[ElName] = ElValue;
}
}
}
return Params;
}
function BacASable_createURLFromParams(Params){
var ParamsInURL = new Array();
for(var P in Params){
if(typeof(Params[P])=="string") ParamsInURL.push(P+"="+encodeURIComponent(Params[P]));
}
return ParamsInURL.join('&');
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(mw.config.get('wgTitle') == "Dr Brains/BacASable.js" && mw.config.get('wgNamespaceNumber')==2){
addOnloadHook(BacASable_Init);
}
function BacASable_Init(){
var Pre = document.getElementsByTagName("pre")[0];
if(!Pre) return;
var Button = document.createElement('img');
Button.src = "//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Crystal_Clear_action_exit.svg/100px-Crystal_Clear_action_exit.svg.png";
Button.alt = "Lancer le JS";
Button.title = "Lancer le JS";
Button.width = 100
Button.height = 100
var Link = document.createElement("a");
Link.href = "javascript:BacASable_Run();";
Link.appendChild(Button);
Pre.parentNode.insertBefore(Link, Pre);
var Control = document.createElement('ul');
Control.id = "Control";
Control.setAttribute('style', '-moz-column-count:15;-webkit-column-count:15;column-count:15;');
Pre.parentNode.insertBefore(Control, Pre);
}