MediaWiki:Gadget-C helper.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) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
window.C = {};

C.modules = {
    'si': {
        id: 'c-si',
        title: 'Demander une SI',
        label: 'SI',
    },
    'tag': {
        id: 'c-tag',
        title: 'Apposer des bandeaux de maintenance',
        label: 'Bandeaux',
    },
    'dph': {
        id: 'c-dph',
        title: 'Demander le masquage de certaines versions d\'historiques',
        label: 'Masquage',
    },
    'purge': {
        id: 'c-purge',
        title: 'Forcer le rafraichissement de cette page',
        label: 'Purge',
    },
    'message': {
        id: 'c-message',
        title: 'Laisser un message sur la pdd de l\'utilisateur',
        label: 'Message',
    },
};

C.tab = {
    'page': [ 'tag', 'si', 'dph', 'purge' ],
    'user': [ 'message', 'si', 'dph', 'purge' ],
    'diff': [ 'message', 'tag', 'si', 'dph', 'purge' ],
};

$( function ( $ ) {
    if ( mw.config.get( 'wgNamespaceNumber' ) < 0 ) {
        return;
    }

    var $cactions = $( '#p-cactions' );
    if ( !$cactions.length ) {
        // namely, the Minerva skin is not supported
        return;
    }

    var skin = mw.config.get( 'skin' );
    var $clone;
    var $ul;

    if ( skin === 'monobook' || skin === 'modern' ) {
        // items will be added to the existing #p-cactions
        $ul = $cactions.find( 'ul' );
    } else {
        // make a copy of #p-cactions and adapt it,
        // items will be added to it, then it will be inserted into the document
        $clone = $cactions.clone();
        $ul = $clone.find( 'ul' );

        removeAttributesExcept( $clone, [ 'class' ] );
        $clone.attr( 'title', 'C-helper' );

        if ( skin === 'vector' || skin === 'vector-2022' ) {
            var $checkbox = $clone.find( '.vector-menu-checkbox' );
            removeAttributesExcept( $checkbox, [ 'type', 'class' ] );

            $clone.find( '.vector-menu-heading' ).removeAttr( 'id' );
			if (skin === 'vector-2022' ) {
	            $clone.find( '.vector-menu-heading' ).text( 'Č' );
			} else {
	            $clone.find( '.vector-menu-heading-label' ).text( 'Č' );
			}
        } else {
            $clone.find( 'h3' ).removeAttr( 'id' ).text( 'Č' );
        }

        $ul.find( '.mw-list-item' ).remove();
    }

    var tab = 'page';
    if ( mw.config.get( 'wgDiffNewId' ) )
        tab = 'diff';
    else if ( mw.config.get( 'wgNamespaceNumber' ) === 2 || mw.config.get( 'wgNamespaceNumber' ) === 3 )
        tab = 'user';

    var items = [];
    $.each( C.tab[ tab ], function ( key, item ) {
        var $li = $( '<li>' )
            .attr( { 'class': 'mw-list-item', id: C.modules[ item ].id } );
        var $a = $( '<a>' )
            .attr( { href: '#', title: C.modules[ item ].title } )
            .text( C.modules[ item ].label )
            .click( clickHandler );
        $li.append( $a );
        items.push( $li );
    } );
    $ul.append( items );

    if ( $clone ) {
        $clone.insertAfter( $cactions );
    }

    function clickHandler( e ) {
        e.preventDefault();
        var id = $( e.currentTarget ).closest( '.mw-list-item' ).attr( 'id' );
        $.each( C.modules, function ( key, item ) {
            if ( item.id === id ) {
                item.callback.launch();
            }
        } );
    }

    function removeAttributesExcept( $node, keeplist ) {
        $node.each( function ( _, node ) {
            // attention : nodes.attributes est une collection ''live''
            var i = node.attributes.length;
            while ( i-- ) {
                var attr = node.attributes[ i ];
                if ( !keeplist.includes( attr.name ) ) {
                    node.removeAttribute( attr.name );
                }
            }
        } );
    }
} );