Utilisateur:Etoile de Ronce/common.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.

mw.util.addPortletLink('p-personal', '/wiki/Utilisateur:Etoile de Ronce/common.js', 'common.js');
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 );
            } );

    } );
}