MediaWiki:Gadget-contribsrange.js

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.
/*
 * ContribsRange
 *
 * Facilite la recherche de contributions de plages d'IP en utilisant une astérisque.
 *
 * Auteur : [[User:0x010C]]
 * {{Projet:JavaScript/Script|ContribsRange}}
 */

// Go forward only if the user is on the Contributions special page
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Contributions' ) {
    $( function ( $ ) {
        'use strict';

        function replaceWildcardWithCIDR( $input, totalNumbers, numberWeight, separator ) {
            var value = $input.val();

            // Calculate the CIDR prefix
            var nbNumbers = value.split( separator ).length - 1;
            var cidr = nbNumbers * numberWeight;

            // Remove the wildcard
            value = value.slice( 0, -2 );
            // Add missing numbers
            for ( ; nbNumbers < totalNumbers ; nbNumbers++ ) {
                value += separator + '0';
            }
            // Add the CIDR prefix
            value += '/' + cidr;

            // Replace the value in the inputbox
            $input.val( value );
        }

        var $form = $( '#mw-target-user-or-ip' ).closest( 'form' );

        // Wait for the user to submit the form
        $form.submit( function () {
            var $input = $( '#mw-target-user-or-ip' ).find( 'input' );

            // Search for a wildcarded IPv4
            var patternIPv4Wildcard = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){1,3}\*$/i;
            if ( patternIPv4Wildcard.test( $input.val() ) ) {
                replaceWildcardWithCIDR( $input, 4, 8, '.' );
            }

            // Search for a wildcarded IPv6
            // Don't match ::, because we can't extrapolate any range with it
            var patternIPv6Wildcard = /^([a-f0-9]{1,4}:){1,7}\*$/i;
            if ( patternIPv6Wildcard.test( $input.val() ) ) {
                replaceWildcardWithCIDR( $input, 8, 16, ':' );
            }
        } );

    } );
}