Garçon devant un ordinateur.jpg
Hollie Little Pink Laptop.jpg
À propos • Aide • Le Livre d'or
Les lecteurs de Vikidia demandent des articles en plus. Voyez la liste d'articles à créer, et venez nous aider à les rédiger !

Utilisateur:Bulest85/vikibreak.js

Aller à la navigation Aller à la recherche

Note : après avoir enregistré tes préférences, tu devras forcer le rechargement complet du cache de ton navigateur pour voir les changements. Mozilla Firefox / Safari : maintiens la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou presse Maj-Ctrl-R (Maj-Cmd-R sur Apple Mac) ; Internet Explorer / Opera : maintiens la touche Ctrl en cliquant sur le bouton Actualiser ou presse Ctrl-F5.

/* Seul moi et [[user:Matteo1234321|Matteo1234321]] sont autorisés à modifier cette page ([[Utilisateur:Bulest85/Bac_à_sable#affichage_d.27un_mod.C3.A8le_en_fonction_de_la_derni.C3.A8re_contrib|c'est pour faire ça]])
 Code pris de [[MediaWiki:Gadget-userinfoVikidia.js]] et de [[MediaWiki:Gadget-LastContrib.js]]
 globals mw, $, lastContribNiveau1, lastContribNiveau2, lastContribNiveau3 */
 
/* A mettre ?
setTimeout(function () {
    alert('Trois secondes se sont écoulées.');
}, 3000);

*/

if ( mw.config.get( 'wgArticleId' ) > 0 && (mw.config.get( 'wgAction' ) === 'view' || mw.config.get( 'wgAction' ) === 'edit') ) {
    $.when( mw.loader.using( [ 'mediawiki.api', 'mediawiki.util', 'user' ] ), $.ready ).done( function () {

        // Les temps sont en secondes,
        // et personnalisables via le JavaScript utilisateur, e.g. : window.lastContribNiveau1 = 120;
        var alertLevels = {
            1: typeof lastContribNiveau1 !== 'undefined' ? lastContribNiveau1 : 30 * 60,    // Niveau d'alerte fort
        };

        function lastContribCallback( timestampLastRevision ) {
            var last = new Date( timestampLastRevision );
            var now = new Date();
            var diff = Math.round( ( now - last ) / 1000 );

            if ( diff < -600 ) {
                mw.notify( "Erreur probable dans la concordance des horloges serveur-client. Vérifiez l'exactitude de l'heure de votre ordinateur et le fuseau horaire utilisé dans vos préférences globales wiki.", {
                    autoHide: true,
                    title: 'Gadget LastContrib',
                    type: 'error'
                } );
                return;
            }
            if ( diff < 0 ) {
                diff = 0;
            }

            if ( diff <= alertLevels[ 3 ] ) {
                var $contentSub = $( '#contentSub' );
                if ( !$contentSub.length ) { return; }

                var diffHeures = Math.floor( diff / 3600 );
                var diffMinutes = Math.floor( ( diff - diffHeures * 3600 ) / 60 );
                var diffSecondes = diff - diffHeures * 3600 - diffMinutes * 60;

                var icon;
                if ( diff <= alertLevels[ 1 ] ) {
                    icon = '{{vikibreak|pas là|texte à déterminer}}';
                }
                var ellapsed = ( diffHeures > 0 ? diffHeures + ' h ' : '' ) + ( diffMinutes > 0 ? diffMinutes + ' min ' : '' ) + diffSecondes + ' sec';
                var $link = $( '<a href="' + mw.util.getUrl( null, {
                    action: 'history'
                } ) + '" style="font-size:8pt; color:#545454;">' + last.toLocaleTimeString() + ' (Dernière modification il y a ' + ellapsed + '.) </a> ' );

                $contentSub.prepend( icon, $link );
            }
        }

        new mw.Api()
            .get( {
                'action': 'query',
                'prop': 'revisions',
                'titles': mw.config.get( 'wgPageName' ),
                'rvprop': 'timestamp',
                'formatversion': 2
            } )
            .then( function ( data ) {
                var page = data.query.pages[ 0 ];
                lastContribCallback( page.revisions[ 0 ].timestamp );
            } )
            .fail( function ( error, details ) {
                // L'objet Promise échoue quand l'utilisateur quitte la page avant que la requête soit achevée.
                if ( details && details.xhr && details.xhr.readyState < 4 ) {
                    return;
                }
                mw.notify( "Erreur rencontrée lors de la requête à l'API.", {
                    autoHide: true,
                    title: 'Gadget LastContrib',
                    type: 'error'
                } );
                console.log( error, details );
            } );

    } );
}



// Basé sur [[wp:en:User:Fran Rogers/dimorphism.js]] et [[wp:en:User:Splarka/sysopdectector.js]] ;
// Modifié et retravaillé par Bulest85 et Matteo1234321 ;
// Traduction en --> fr par Matteo1234321.

// Fonction qui met au pluriel au besoin.
function UserinfoJsFormatQty(qty, singular, plural) {
    return String(qty).replace(/\d{1,3}(?=(\d{3})+(?!\d))/g, "$& ") + "\u00a0" + (qty == 1 ? singular : plural);
}
// Afficher les infos utilisateur seulement sur la page utilisteur et de discussion dudit utilisateur...
if((mw.config.get("wgNamespaceNumber") == 2 || mw.config.get("wgNamespaceNumber") == 3) && !(/\//.test(mw.config.get("wgTitle")))) {   
    // Ajouter un crochet...
    mw.loader.using( ['mediawiki.util'], function() { $(function(){
        // Demander les informations de l'utilisateur via l'API.
        // Noter que ceci est autorisé jusqu'à l'âge de 5 minutes [traduction douteuse].
        var et = encodeURIComponent(mw.config.get("wgTitle"));
        
        $.getJSON(mw.config.get("wgScriptPath") + "/api.php?format=json&action=query&list=users|usercontribs&usprop=blockinfo|editcount|gender|registration|groups&uclimit=1&ucprop=timestamp&ususers=" + et + "&ucuser=" + et + "&meta=allmessages&amprefix=grouppage-&amincludelocal=1")
        .done(function(query) {
            // Quand l'information arrive, extrayons-en celes dont on a besoin.
            if(!query.query) { return; } // Suggéré [[wp:en:User:Gary]] pour éviter les erreurs JavaScript. --PS 25.08.2010
            query = query.query;
            var user, invalid, missing, groups, groupPages={}, editcount, registration, blocked, gender, lastEdited;
            try {
                user = query.users[0];
                invalid = typeof user.invalid != "undefined";
                missing = typeof user.missing != "undefined";
                groups = (typeof user.groups == "object") ? user.groups : [];
                editcount = (typeof user.editcount == "number") ? user.editcount : null;
                registration = (typeof user.registration == "string") ?
                    new Date(user.registration) : null;
                blocked = typeof user.blockedby != "undefined";
                gender = (typeof user.gender == "string") ? user.gender : null;
                lastEdited = (typeof query.usercontribs[0] == "object") &&
                    (typeof query.usercontribs[0].timestamp == "string") ?
                    new Date(query.usercontribs[0].timestamp) : null;
                for (var am=0; am<query.allmessages.length; am++) {
                	groupPages[query.allmessages[am]['name'].replace("grouppage-","")] = query.allmessages[am]["*"].replace("{{ns:project}}:","Project:");
                }
            } catch(e) {
                return; // Pas beaucoup à faira quand le serveur renvoie une erreur (par exemple le nom de l'utilisateur est mal formé)...
            }
            
            // Dernière modification --PS 27.06.2010
            // Ajout d'un lien à la page de contributions --PS 3.07.2010
            if(lastEdited) {
                statusText += " Dernière modification il y a <a href=\"" + mw.config.get("wgArticlePath").replace("$1", "Spécial:Contributions/" + encodeURIComponent(user.name)) + "\">" + UserinfoJsFormatDateRel(lastEdited) + "</a>";
            }
            genderSpan.appendChild(document.createTextNode(genderSymbol));
            fh.appendChild(genderSpan);

            // Maintenant, ajouter les autres informations. Pas standardes (?), mais au moins, elles font le taf ^^.
            // Ajouter un point après le texte en faisant ainsi. --PS 3.07.2010

            var ss = document.getElementById("siteSub");
            if(!ss) {
                ss = document.createElement("div");
                ss.id = "siteSub";
                ss.innerHTML = "";
                var bc = document.getElementById("bodyContent");
                bc.insertBefore(ss, bc.firstChild);
            }
            ss.innerHTML = '<span id="ps-userinfo">' + statusText + '</span>' + ss.innerHTML + '.';
            ss.style.display = "block";
            });
    }); });
}