Utilisateur:Céréales Killer/Tutoriel archive

Un article de Wikipédia, l'encyclopédie libre.

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.

[modifier] Appel des pages

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 « /mai 2008 »
  • Là, c'est la page intitulée « /juin 2008 »

[modifier] Alerte nouveau message

Concernant le moyen de m'avertir d'un nouveau message, GôTô a concocté ce programme inséré dans mon monobook.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"));
}

addLoadEvent(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)