Utilisateur:Dr Brains/dfnGadget.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) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.//<source lang=javascript>//<pre><nowiki>
var dfnGadget_Template = "Terme défini";
var dfnGadget_Resume = "Ajout modèle [[Modèle:"+dfnGadget_Template+"|{{"+dfnGadget_Template+"}}]]";
var dfnGadget_ajax = {
http: function(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)
dfnGadget_ajax.httpComplete(xmlhttp,bundle);
};
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) {
}
}
xmlhttp.send(bundle.data ? bundle.data : null);
}
return xmlhttp;
},
httpComplete: function(xmlhttp,bundle) {
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);
}
}
};
function dfnGadget_GetPage(URL, NextFunc){
dfnGadget_ajax.http({ url: URL,
onSuccess:NextFunc
});
}
function dfnGadget_SavePage(NextFunc){
var Form = document.getElementById('editform');
var action = Form.action;
var headers = new Array();
headers['Content-Type'] = 'application/x-www-form-urlencoded';
dfnGadget_ajax.http({ url: action,
method: "POST",
headers: headers,
data: dfnGadget_createURLFromParams(dfnGadget_getFormParams(Form)),
onSuccess:(NextFunc ? NextFunc : function(){ window.location.reload(); } )
});
}
function dfnGadget_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 dfnGadget_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('wgNamespaceNumber')==0 || mw.config.get('wgNamespaceNumber')==2) addOnloadHook(dfnGadget_AddLink);
function dfnGadget_AddLink(){
var OldDFN = document.getElementsByTagName('dfn')[0];
if(OldDFN) return;
var OngletsCactions = document.getElementById('p-cactions');
if(OngletsCactions){
var CactionsUl = OngletsCactions.getElementsByTagName('ul')[0];
CactionsUl.innerHTML += '<li><a style="text-decoration:blink;" href="javascript:dfnGadget_Run();">dfn</a></li>';
$(OngletsCactions).removeClass("emptyPortlet");
}
}
function dfnGadget_Run(Page){
if(!Page) Page = mw.config.get('wgPageName');
dfnGadget_GetPage(mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(Page) + "&action=edit§ion=0", dfnGadget_Putdfn);
}
function dfnGadget_Putdfn(Req){
while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
document.body.innerHTML = Req.responseText;
var ContenuPage = document.getElementById("wpTextbox1").value;
var AncienResumeModif = document.editform.wpSummary.value;
// -------------------------------------------------------- Extraction des modèles
var AncienTexte = ContenuPage;
var TexteDecoupe = new Array();
while(AncienTexte!=""){
var TemplateStartIndex = AncienTexte.indexOf('{{');
var TemplateEndIndex = AncienTexte.indexOf('}}');
if(TemplateStartIndex==-1 && TemplateEndIndex==-1){
TexteDecoupe.push(AncienTexte);
AncienTexte = "";
}else{
var Index;
if(TemplateStartIndex==-1){
Index = TemplateEndIndex;
}else if(TemplateStartIndex > TemplateEndIndex){
Index = TemplateEndIndex;
}else if(TemplateEndIndex==-1){
Index = TemplateStartIndex;
}else if(TemplateStartIndex < TemplateEndIndex){
Index = TemplateStartIndex;
}
TexteDecoupe.push(AncienTexte.substring(0, Index));
TexteDecoupe.push(AncienTexte.substring(Index, (Index+2)));
AncienTexte = AncienTexte.substring((Index+2), AncienTexte.length);
}
}
var NiveauImbricationModele = new Array();
var Niveau = 0;
for(var a=0,l=TexteDecoupe.length;a<l;a++){
var CeBout = TexteDecoupe[a];
if(CeBout === "{{"){
Niveau++
NiveauImbricationModele[a] = Niveau;
}else if(CeBout === "}}"){
NiveauImbricationModele[a] = Niveau;
Niveau--
}else{
NiveauImbricationModele[a] = Niveau;
}
}
// -------------------------------------------------------- Extraction du premier texte en gras et remplacement
var Replaced = false;
for(var a=0,l=TexteDecoupe.length;a<l;a++){
if(NiveauImbricationModele[a]>0 || Replaced==true) continue;
var ThisTexte = TexteDecoupe[a];
var BeforeText = "";
var InsideText = "";
var AfterText = "";
while(ThisTexte!=""){
var BoldStartIndex = ThisTexte.indexOf("'''");
if(BoldStartIndex != -1){
BeforeText = ThisTexte.substring(0, (BoldStartIndex));
ThisTexte = ThisTexte.substring( (BoldStartIndex+3), ThisTexte.length);
var BoldEndIndex = ThisTexte.indexOf("'''");
if(BoldEndIndex != -1){
InsideText = ThisTexte.substring(0, BoldEndIndex);
AfterText = ThisTexte.substring( (BoldEndIndex+3), ThisTexte.length);
ThisTexte = "";
if(InsideText!=""){
InsideText = "{{"+dfnGadget_Template+"|" + InsideText + "}}";
InsideText = InsideText.replace(new RegExp("\\{\\{"+dfnGadget_Template+"\\|'","g"), "'{{"+dfnGadget_Template+"|");
TexteDecoupe[a] = BeforeText + InsideText + AfterText;
Replaced = true;
}
}else{
break;
}
}else{
break
}
}
}
// -------------------------------------------------------- Création résultat
var TexteFinal = TexteDecoupe.join("");
document.getElementById ("wpTextbox1").value = TexteFinal ;
document.editform.wpSummary.value = AncienResumeModif + dfnGadget_Resume ;
if(TexteFinal.indexOf("{{"+dfnGadget_Template+"|")==-1){
alert("Pas remplacé !")
return;
}
// -------------------------------------------------------- Sauvegarde
document.editform.wpMinoredit.checked = "checked";
document.editform.wpWatchthis.checked = "checked";
if(!confirm(TexteFinal + "\n\nOK ?")) return;
dfnGadget_SavePage();
}
//</nowiki></pre></source>