Aller au contenu

Utilisateur:Prométhée/TitreGras.js

Une page de Wikipédia, l'encyclopédie libre.
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.
/* **********************************************************************************************************************
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.

{{Projet:JavaScript/Script}} 
*********************************************************************************************************************** */
// ==================================================================================================================== 
// DEBUT DU CODE
// ====================================================================================================================
// <syntaxhighlight 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 modelesOuverts = 0;
    var lines = textArea.value.split("\n");
    
    for (var i = 0; i < lines.length; i++) {
        if (lines[i].indexOf("{{") != -1) {
            modelesOuverts++;
        }
        if (lines[i].indexOf("}}") != -1 && modelesOuverts > 0) {
            modelesOuverts--;
        }

        if (!modelesOuverts && lines[i].indexOf("==")!== 0  &&
        	lines[i].indexOf("[[Fichier:")!== 0 &&
        	lines[i].indexOf("[[File:")!== 0) {
            
            if (lines[i].search(new RegExp("'''" + pageName + "'''", "i")) != -1) {
                alert("Le nom de l'article est déjà en gras");
                document.editform.style.display = "";
                return;
            } else if (lines[i].search(new RegExp("''" + pageName + "''", "i")) != -1 && !changement) {
                //Cas où le titre est en italique
                lines[i] = lines[i].replace(new RegExp(pageName, "i"), "'$&'");
                changement = true;
            } else if (lines[i].search(new RegExp(pageName, "i")) != -1  && !changement) {
                lines[i] = lines[i].replace(new RegExp(pageName, "i"), "'''$&'''");
                changement = true;
            } 
        }
        
        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';
    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 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 class="mw-list-item" id="titre-gras-gadget"><a href="javascript:Section_EditTitreGras();"><span><b>Titre Gras</b></span></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
// ==================================================================================================================== 
//</syntaxhighlight>