Utilisateur:Céréales Killer/Tutoriel archive

Voici comment fonctionne mon archivage automatique des pages de discussions, rangées par mois... Chaque page est enregistrée sous le nom du mois et de l'année : /janvier 2007 par exemple.

Appel des pages modifier

Dans l'en-tête de ma page de discussion se trouve un petit bout de code conditionnel ainsi rédigé :

{{/{{PREVIOUSMONTHNAME}} {{#ifeq: {{CURRENTMONTHNAME}} 
                                  | janvier
                                  |{{PREVIOUSYEAR}}
                                  |{{CURRENTYEAR}}
                          }}
}}
{{/{{CURRENTMONTHNAME}} {{CURRENTYEAR}}}}

Le premier test permet de trouver la sous-page du mois précédent (en prenant en compte l'année). Le second code insère la sous-page du mois et de l'année en cours. C'est aussi simple que cela. Ainsi, à chaque changement de mois, ce petit bout de code permet de n'afficher que la sous-page du mois précédent et celle du mois en cours :

  • Là, c'est la page intitulée « /mars 2024 »
  • Là, c'est la page intitulée « /avril 2024 »

Alerte nouveau message modifier

Concernant le moyen de m'avertir d'un nouveau message, GôTô a concocté ce programme inséré dans mon monobook.js ou vector.js :

// fonction d'import de page, sur fr, en, ou autre (exemple sur en: importWikiPage('User:Lupin/popups.js', 'en'))
function importWikiPage(page, lng) {
        langue = (lng ? lng : 'fr')
        document.write('<script type="text/javascript" src="' 
             + 'http://' + langue + '.wikipedia.org/w/index.php?title=' + page
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}
// objets Ajax et cookies pour lecture des messages
importWikiPage('Utilisateur:GôTô/objects.js')
function getArticleName()
{
       var strOut = document.title
       // case search
       if (strOut == "Rechercher - Wikipédia")
               return document.getElementById("lsearchbox").value
       // case article being modified
       strOut = strOut.replace("modification de ", "").replace(" - Modifier", "")

       strOut = strOut.replace(" - Prévisualiser", "").replace(" - Wikipédia", "")
       return strOut
}
/***************** Lecture de messages ****************/
function getCurrentId(page) {
        var li = document.getElementById("t-permalink");
        if (li)
                return (li.getElementsByTagName("a")[0].href.split("oldid=")[1].split("&")[0]);
}

function getMessages() {
        var mois = new Array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");
        mois["janvier"] = 0; mois["février"] = 1; mois["mars"] = 2; mois["avril"] = 3; mois["mai"] = 4; mois["juin"] = 5; mois["juillet"] = 6; mois["août"] = 7; mois["septembre"] = 8; mois["octobre"] = 9; mois["novembre"] = 10; mois["décembre"] = 11;
        var article = getArticleName();
        var month = -1;
        var year = -1;
        if (article.indexOf("Discussion utilisateur:TON_PSEUDO_ICI/") > -1) {
                month = mois[article.split("Discussion utilisateur:TON_PSEUDO_ICI/")[1].split(" ")[0]];
                year = article.split("Discussion utilisateur:TON_PSEUDO_ICI/")[1].split(" ")[1];
                //first case: we are on a talk page of ours: we read and save the ''oldid'' in a cookie
                cookies.set("lastViewedMsg" + mois[month], getCurrentId(), 30*86400*1000);
        }
        var dNow = new Date();
        var page = encodeURI("Discussion utilisateur:TON_PSEUDO_ICI/").replace(/%20/g, "_") + encodeURI(mois[dNow.getMonth()]) + "_" + dNow.getFullYear() + "||" + encodeURI(mois[dNow.getMonth()]);
        //check the page of the current month
        if (month != dNow.getMonth() || year != dNow.getFullYear())
                checkPageForMessages(page);
        var prevMonth = dNow.getMonth() -1;
        var prevMonthYear = dNow.getFullYear();
        if (prevMonth == -1) {
                prevMonth = 11;
                prevMonthYear--;
                page = page.replace(dNow.getFullYear(), prevMonthYear);
        }
        page = page.replace(new RegExp(encodeURI(mois[dNow.getMonth()]), "g"), encodeURI(mois[prevMonth]));
        //check the page of the previous month
        if (month != prevMonth || year != prevMonthYear)
                checkPageForMessages(page);
}

function checkPageForMessages(page) {
        var ajaxObj = new objAJAX();
        ajaxObj.page = page;
        ajaxObj.conn.onreadystatechange = function () {
                        if (ajaxObj.conn.readyState == 4) {
                                if (ajaxObj.conn.status == 200) {
                                        var lastViewedId = (cookies.get("lastViewedMsg" + decodeURI(ajaxObj.page.split("||")[1])) ? cookies.get("lastViewedMsg" + decodeURI(ajaxObj.page.split("||")[1])) : 0);
                                        var currentId = ajaxObj.conn.responseText.split(ajaxObj.page.split("||")[0] + "&oldid=")[1].split('"')[0];
                                        if (parseInt(currentId, 10) > parseInt(lastViewedId, 10))
                                                alertMessage(ajaxObj.page);
                                }
                        }
                }
        return(ajaxObj.sendRequest("/w/index.php?title=" + page.split("||")[0] + "&limit=1&action=history", "GET", true));
}

function alertMessage(page) {
        var div = document.getElementById("nouveauMessage");
        if (!div) {
                div = document.createElement("div");
                div.className = "usermessage";
                div.id = "nouveauMessage";
                var cont = document.getElementById("content");
                cont.insertBefore(div, document.getElementById("bodyContent"));
        }
        var txt = document.createTextNode("Vous avez de nouveaux messages: ");
        var aDiff = document.createElement("a");
        aDiff.href = "/w/index.php?title=" + page.split("||")[0] + "&diff=cur";
        aDiff.innerHTML = "différences (" + decodeURI(page.split("||")[1]) + ")";
        div.appendChild(txt);
        div.appendChild(aDiff);
        div.appendChild(document.createElement("br"));
}

addOnloadHook(getMessages);
/************** Lecture de messages fin *****************/

Ne pas oublier de remplacer toutes les occurrences de TON_PSEUDO_ICI par le nom de ta page de discussion. Et voilà, c'est fini ! Bon amusement... :) ©éréales Kille® | Speak to me* | en ce 12 janvier 2007 à 11:31 (CET)