Aller au contenu

« Utilisateur:Prométhée/TitreGras.js » : différence entre les versions

Une page de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
correctif gestion des modèles et infobox
test nouvelle détection modèle
Ligne 86 : Ligne 86 :
}
}


var modelesOuverts = 0;
var lines = TextArea.value.split("\n");
var lines = TextArea.value.split("\n");
for (var i = 0; i < lines.length; i++) {
for (var i = 0; i < lines.length; i++) {
//Détection ouvertures modèles
//Position du titre dans la ligne
if (lines[i].indexOf("{{") != -1) {
var positionTitre = 0;
modelesOuverts++;
}


if (!modelesOuverts && lines[i].indexOf("==")!== 0 &&
if (lines[i].indexOf("==")!== 0 &&
lines[i].indexOf("[[Fichier:")!== 0 &&
lines[i].indexOf("[[Fichier:")!== 0 &&
lines[i].indexOf("[[File:")!== 0) {
lines[i].indexOf("[[File:")!== 0) {
Ligne 107 : Ligne 104 :
//Cas où le titre est en italique
//Cas où le titre est en italique
lines[i] = lines[i].replace(pageName, "'" + pageName + "'");
lines[i] = lines[i].replace(pageName, "'" + pageName + "'");
positionTitre = lines[i].indexOf("''" + pageName + "''");
changement = true;
changement = true;
} else if (lines[i].indexOf(pageName) != -1 && !changement) {
} else if (lines[i].indexOf(pageName) != -1 && !changement) {
lines[i] = lines[i].replace(pageName, "'''" + pageName + "'''");
lines[i] = lines[i].replace(pageName, "'''" + pageName + "'''");
positionTitre = lines[i].indexOf(pageName);
changement = true;
changement = true;
}
}
}
}
changement = detecterTitreDansCode();
//Détection fermeture modèles

if (lines[i].indexOf("}}") != -1 && modelesOuverts > 0) {
modelesOuverts--;
}
TexteFinal = TexteFinal + lines[i] + "\n";
TexteFinal = TexteFinal + lines[i] + "\n";
}
}
Ligne 135 : Ligne 131 :
document.getElementById('wpSummary').value = SommaireFinal;
document.getElementById('wpSummary').value = SommaireFinal;
if (Section_AutoEdit) document.editform.submit();
if (Section_AutoEdit) document.editform.submit();
}

function detecterTitreDansModele() {
//nbModeleOuvrantAvantTitre
var nbModeleOuvrantAvantTitre = 0;
var i = str.indexOf('{{');
while(i >= 0 && i < positionTitre) {
i = str.indexOf('x', i+1);
nbModeleOuvrantAvantTitre++;
}
//nbModeleFermantAvantTitre
var nbModeleFermantAvantTitre = 0;
i = str.indexOf('}}');
while(i >= 0 && i < positionTitre) {
i = str.indexOf('x', i+1);
nbModeleFermantAvantTitre++;
}
if(nbModeleOuvrantAvantTitre > nbModeleFermantAvantTitre) {
return false;
} else {
return true;
}
}
}



Version du 6 août 2017 à 19:51

/* **********************************************************************************************************************
ATTENTION : GADGET NON STABLE, il peut encore y avoir des bugs

TitreGras

Permet de mettre en gras la première occurence du titre dans le corps de l'article.
Fonctionne également dans le cas où le titre est à l'origine en italique.

Les cas des liens internes ne sont pas encore gérés. Le gadget est encore sensible à la casse.

{{Projet:JavaScript/Script}} 
*********************************************************************************************************************** */
// ==================================================================================================================== 
// DEBUT DU CODE
// ====================================================================================================================
// <source lang=javascript><pre><nowiki>
/////////////////////////////////////////////////////////////////////////////////// Variables personnalisables
// Publication automatique
if (typeof window.Section_AutoEdit === 'undefined') window.Section_AutoEdit = true;

// Modification mineure
if (typeof window.Section_MinorEdit === 'undefined') window.Section_MinorEdit = true;

// Ajout à la liste de suivi ( -1 = défaut préférences, 0 = jamais, 1 = toujours)
if (typeof window.Section_Watchthis === 'undefined') window.Section_Watchthis = -1;

/////////////////////////////////////////////////////////////////////////////////// Édition

var Section_ajax = {
    http: function(bundle) {
        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)
                    Section_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);
        }
    }
};

function Section_DoEditTitreGras(Req, data) {
    while (document.body.firstChild) {
        document.body.removeChild(document.body.firstChild);
    }
    document.body.innerHTML = Req.responseText;
    var TextArea = document.getElementById('wpTextbox1');
    if (!TextArea) return;
    if (Section_AutoEdit) document.editform.style.display = "none";

    var TexteFinal="";
    var regexp1 = /(\(.*\))/gi;
    var pageName =  mw.config.get('wgTitle');
    var changement = false;

    if (pageName.match(regexp1) && pageName.match(regexp1).length) {
        pageName = pageName.replace(/\(.[^(]*\)/g, '');
    }

    var lines = TextArea.value.split("\n");
    
    for (var i = 0; i < lines.length; i++) {
        
        //Position du titre dans la ligne
        var positionTitre = 0;

        if (lines[i].indexOf("==")!== 0  &&
        	lines[i].indexOf("[[Fichier:")!== 0 &&
        	lines[i].indexOf("[[File:")!== 0) {
            
            if (lines[i].indexOf("'''" + pageName + "'''") != -1) {
                alert("Le nom de l'article est déjà en gras");
                document.editform.style.display = "";
                return;
            } else if (lines[i].indexOf("''" + pageName + "''") != -1 && !changement) {
                //Cas où le titre est en italique
                lines[i] = lines[i].replace(pageName, "'" + pageName + "'");
                positionTitre = lines[i].indexOf("''" + pageName + "''");
                changement = true;
            } else if (lines[i].indexOf(pageName) != -1  && !changement) {
                lines[i] = lines[i].replace(pageName, "'''" + pageName + "'''");
                positionTitre = lines[i].indexOf(pageName);
                changement = true;
            } 
        }
        
        changement = detecterTitreDansCode();

        TexteFinal = TexteFinal + lines[i] + "\n";
    }
    
    if (!changement) {
          alert("Titre introuvable dans le corps du texte");
          document.editform.style.display = "";
          return;
     }

    var SommaireFinal = '[[Utilisateur:Prométhée/TitreGras.js|Mise en gras]] du titre de l\'article, #TitreGras #GadgetTest';
    document.getElementById('wpMinoredit').checked = Section_MinorEdit;
    if (Section_Watchthis === 1) document.getElementById('wpWatchthis').checked = "checked";
    if (Section_Watchthis === 0) document.getElementById('wpWatchthis').checked = false;
    document.getElementById('wpTextbox1').value = TexteFinal;
    document.getElementById('wpSummary').value = SommaireFinal;
    if (Section_AutoEdit) document.editform.submit();
}

function detecterTitreDansModele() {
	//nbModeleOuvrantAvantTitre
    var nbModeleOuvrantAvantTitre = 0;
    var i = str.indexOf('{{');
	while(i >= 0 && i < positionTitre) {
		i = str.indexOf('x', i+1);
		nbModeleOuvrantAvantTitre++;
	}
		
	//nbModeleFermantAvantTitre
	var nbModeleFermantAvantTitre = 0;
    i = str.indexOf('}}');
	while(i >= 0 && i < positionTitre) {
	     i = str.indexOf('x', i+1);
	     nbModeleFermantAvantTitre++;
	}
		
	if(nbModeleOuvrantAvantTitre > nbModeleFermantAvantTitre) {
	 	return false;
	} else {
		return true;
	}
}

function Section_EditTitreGras() {
    var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(mw.config.get('wgPageName')) + "&action=edit";
    Section_ajax.http({
        url: URL,
        onSuccess: Section_DoEditTitreGras,
    });
}

window.Section_AddTitreGras = function() {
    var OngletsCactions = document.getElementById('p-cactions');
    if (OngletsCactions) {
        var CactionsUl = OngletsCactions.getElementsByTagName('ul')[0];
        CactionsUl.innerHTML += '<li id="titre-gras-gadget"><a href="javascript:Section_EditTitreGras();">Titre Gras</a></li>';
        $(OngletsCactions).removeClass("emptyPortlet");
    }
};

/////////////////////////////////////////////////////////////////////////////////// Fonctions actives au chargement de la page

function utiliserTitreGras() {
    var Homonymie = document.getElementById("homonymie");
    var Pagesliees = document.getElementById("t-whatlinkshere");
    if (Homonymie || !Pagesliees) return;

    Section_AddTitreGras();
}

if ((mw.config.get('wgAction') === 'view' || mw.config.get('wgAction') === 'purge') && (mw.config.get('wgNamespaceNumber') === 0 || mw.config.get('wgNamespaceNumber') === 2)) {
    $(utiliserTitreGras);
}

//</nowiki></pre>
// ====================================================================================================================
// FIN DU CODE
// ==================================================================================================================== 
//</source>