Pgehres has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/52582


Change subject: Refactoring CheckUser, moving cidr form JS and making it more 
like everything else.
......................................................................

Refactoring CheckUser, moving cidr form JS and making it more like everything 
else.

Change-Id: I5d6007d2aa221e3496e242bd65650d4354d86949
---
M CheckUser.php
D checkuser.js
A modules/ext.checkuser.cidr.js
3 files changed, 260 insertions(+), 256 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CheckUser 
refs/changes/82/52582/1

diff --git a/CheckUser.php b/CheckUser.php
index b140696..4be4f19 100644
--- a/CheckUser.php
+++ b/CheckUser.php
@@ -83,7 +83,7 @@
 $wgHooks['PerformRetroactiveAutoblock'][] = 
'CheckUserHooks::doRetroactiveAutoblock';
 
 $wgResourceModules['ext.checkUser'] = array(
-       'scripts'       => 'checkuser.js',
+       'scripts'       => 'modules/ext.checkuser.cidr.js',
        'dependencies'  => array( 'mediawiki.util' ), // IP stuff
        'localBasePath' => dirname( __FILE__ ),
        'remoteExtPath' => 'CheckUser',
diff --git a/checkuser.js b/checkuser.js
deleted file mode 100644
index cbb59c7..0000000
--- a/checkuser.js
+++ /dev/null
@@ -1,255 +0,0 @@
-/* -- (c) Aaron Schulz 2009 */
-
-var showResults = function(size, cidr) {
-       $( '#mw-checkuser-cidr-res' ).val( cidr );
-       $( '#mw-checkuser-ipnote' ).text( size );
-};
-
-/*
-* This function calculates the common range of a list of
-* IPs. It should be set to update on keyUp.
-*/
-var updateCIDRresult = function() {
-       var form = document.getElementById( 'mw-checkuser-cidrform' );
-       if( !form ) {
-               return; // no JS form
-       }
-       form.style.display = 'inline'; // unhide form (JS active)
-       var iplist = document.getElementById( 'mw-checkuser-iplist' );
-       if( !iplist ) {
-               return; // no JS form
-       }
-       var text = iplist.value, ips;
-       // Each line should have one IP or range
-       if( text.indexOf("\n") != -1 ) {
-               ips = text.split("\n");
-       // Try some other delimiters too...
-       } else if( text.indexOf("\t") != -1 ) {
-               ips = text.split("\t");
-       } else if( text.indexOf(",") != -1 ) {
-               ips = text.split(",");
-       } else if( text.indexOf("-") != -1 ) {
-               ips = text.split("-");
-       } else if( text.indexOf(" ") != -1 ) {
-               ips = text.split(" ");
-       } else {
-               ips = text.split(";");
-       }
-       var bin_prefix = 0;
-       var prefix_cidr = 0;
-       var prefix = new String( '' );
-       var foundV4 = false;
-       var foundV6 = false;
-       var ip_count;
-       // Go through each IP in the list, get its binary form, and
-       // track the largest binary prefix among them...
-       for( var i = 0; i < ips.length; i++ ) {
-               // ...in the spirit of mediawiki.special.block.js, call this 
"addy"
-               var addy = ips[i].replace(/^\s*|\s*$/, '' ); // trim
-               // Match the first IP in each list (ignore other garbage)
-               var ipV4 = mw.util.isIPv4Address( addy, true );
-               var ipV6 = mw.util.isIPv6Address( addy, true );
-               var ip_cidr = addy.match(/^(.*)(?:\/(\d+))?$/);
-               // Binary form
-               var bin = new String( '' );
-               // Convert the IP to binary form: IPv4
-               if( ipV4 ) {
-                       foundV4 = true;
-                       if ( foundV6 ) { // disjoint address space
-                               prefix = '';
-                               break;
-                       }
-                       var ip = ip_cidr[1];
-                       var cidr = ip_cidr[2] ? ip_cidr[2] : null; // CIDR, if 
it exists
-                       // Get each quad integer
-                       var blocs = ip.split('.');
-                       for( var x = 0; x < blocs.length; x++ ) {
-                               bloc = parseInt( blocs[x], 10 );
-                               var bin_block = bloc.toString( 2 ); // concat 
bin with binary form of bloc
-                               while( bin_block.length < 8 ) {
-                                       bin_block = '0' + bin_block; // pad out 
as needed
-                               }
-                               bin += bin_block;
-                       }
-                       prefix = ''; // Rebuild formatted bin_prefix for each IP
-                       // Apply any valid CIDRs
-                       if( cidr ) {
-                               bin = bin.substring( 0, cidr ); // truncate bin
-                       }
-                       // Init bin_prefix
-                       if( bin_prefix === 0 ) {
-                               bin_prefix = new String( bin );
-                       // Get largest common bin_prefix
-                       } else {
-                               for( var x = 0; x < bin_prefix.length; x++ ) {
-                                       // Bin_prefix always smaller than bin 
unless a CIDR was used on bin
-                                       if( bin[x] == undefined || 
bin_prefix[x] != bin[x] ) {
-                                               bin_prefix = 
bin_prefix.substring( 0, x ); // shorten bin_prefix
-                                               break;
-                                       }
-                               }
-                       }
-                       // Build the IP in CIDR form
-                       prefix_cidr = bin_prefix.length;
-                       // CIDR too small?
-                       if( prefix_cidr < 16 ) {
-                               showResults( '!',  '>' + Math.pow( 2, 32 - 
prefix_cidr ) );
-                               return; // too big
-                       }
-                       // Build the IP in dotted-quad form
-                       for( var z = 0; z <= 3; z++ ) {
-                               var bloc = 0;
-                               var start = z * 8;
-                               var end = start + 7;
-                               for( var x = start; x <= end; x++ ) {
-                                       if( bin_prefix[x] == undefined ) {
-                                               break;
-                                       }
-                                       bloc += parseInt( bin_prefix[x], 10 ) * 
Math.pow( 2, end - x );
-                               }
-                               prefix += ( z == 3 ) ? bloc : bloc + '.';
-                       }
-                       // Get IPs affected
-                       ip_count = Math.pow( 2, 32 - prefix_cidr );
-                       // Is the CIDR meaningful?
-                       if( prefix_cidr == 32 ) {
-                               prefix_cidr = false;
-                       }
-               // Convert the IP to binary form: IPv6
-               } else if( ipV6 ) {
-                       foundV6 = true;
-                       if ( foundV4 ) { // disjoint address space
-                               prefix = '';
-                               break;
-                       }
-                       var ip = ip_cidr[1];
-                       var cidr = ip_cidr[2] ? ip_cidr[2] : null; // CIDR, if 
it exists
-                       // Expand out "::"s
-                       var abbrevs = ip.match( /::/g );
-                       if( abbrevs && abbrevs.length > 0 ) {
-                               var colons = ip.match( /:/g );
-                               var needed = 7 - ( colons.length - 2 ); // 2 
from "::"
-                               var insert = '';
-                               while( needed > 1 ) {
-                                       insert += ':0';
-                                       needed--;
-                               }
-                               ip = ip.replace( '::', insert + ':' );
-                               // For IPs that start with "::", correct the 
final IP
-                               // so that it starts with '0' and not ':'
-                               if( ip[0] == ':' ) {
-                                       ip = '0' + ip;
-                               }
-                       }
-                       // Get each hex octant
-                       var blocs = ip.split(':');
-                       for( var x = 0; x <= 7; x++ ) {
-                               bloc = blocs[x] ? blocs[x] : '0';
-                               var int_block = hex2int( bloc ); // convert hex 
-> int
-                               bin_block = int_block.toString( 2 ); // concat 
bin with binary form of bloc
-                               while( bin_block.length < 16 ) {
-                                       bin_block = '0' + bin_block; // pad out 
as needed
-                               }
-                               bin += bin_block;
-                       }
-                       prefix = ''; // Rebuild formatted bin_prefix for each IP
-                       // Apply any valid CIDRs
-                       if( cidr ) {
-                               bin = bin.substring( 0, cidr ); // truncate bin
-                       }
-                       // Init bin_prefix
-                       if( bin_prefix === 0 ) {
-                               bin_prefix = new String( bin );
-                       // Get largest common bin_prefix
-                       } else {
-                               for( var x = 0; x < bin_prefix.length; x++ ) {
-                                       // Bin_prefix always smaller than bin 
unless a CIDR was used on bin
-                                       if( bin[x] == undefined || 
bin_prefix[x] != bin[x] ) {
-                                               bin_prefix = 
bin_prefix.substring( 0, x ); // shorten bin_prefix
-                                               break;
-                                       }
-                               }
-                       }
-                       // Build the IP in CIDR form
-                       var prefix_cidr = bin_prefix.length;
-                       // CIDR too small?
-                       if( prefix_cidr < 96 ) {
-                               showResults('!', '>' + Math.pow( 2, 128 - 
prefix_cidr ) );
-                               return; // too big
-                       }
-                       // Build the IP in dotted-quad form
-                       for( var z = 0; z <= 7; z++ ) {
-                               var bloc = 0;
-                               var start = z*16;
-                               var end = start + 15;
-                               for( var x = start; x <= end; x++ ) {
-                                       if( bin_prefix[x] == undefined ) {
-                                               break;
-                                       }
-                                       bloc += parseInt( bin_prefix[x], 10 ) * 
Math.pow( 2, end - x );
-                               }
-                               bloc = bloc.toString( 16 ); // convert to hex
-                               prefix += ( z == 7 ) ? bloc : bloc + ':';
-                       }
-                       // Get IPs affected
-                       ip_count = Math.pow( 2, 128 - prefix_cidr );
-                       // Is the CIDR meaningful?
-                       if( prefix_cidr == 128 ) {
-                               prefix_cidr = false;
-                       }
-               }
-       }
-       // Update form
-       if( prefix != '' ) {
-               var full = prefix;
-               if( prefix_cidr != false ) {
-                       full += '/' + prefix_cidr;
-               }
-               showResults( '~' + ip_count, full );
-       } else {
-               showResults( '?', '' );
-       }
-
-};
-
-// Utility function to convert hex to integers
-var hex2int = function( hex ) {
-       hex = new String( hex );
-       hex = hex.toLowerCase();
-       var intform = 0;
-       for( var i = 0; i < hex.length; i++ ) {
-               var digit = 0;
-               switch( hex[i] ) {
-                       case 'a':
-                               digit = 10;
-                               break;
-                       case 'b':
-                               digit = 11;
-                               break;
-                       case 'c':
-                               digit = 12;
-                               break;
-                       case 'd':
-                               digit = 13;
-                               break;
-                       case 'e':
-                               digit = 14;
-                               break;
-                       case 'f':
-                               digit = 15;
-                               break;
-                       default:
-                               digit = parseInt( hex[i], 10 );
-                               break;
-               }
-               intform += digit * Math.pow( 16, hex.length - 1 - i );
-       }
-       return intform;
-};
-
-$( function() {
-       updateCIDRresult();
-       $('#mw-checkuser-iplist').bind('keyup click', function() {
-               updateCIDRresult();
-       });
-});
diff --git a/modules/ext.checkuser.cidr.js b/modules/ext.checkuser.cidr.js
new file mode 100644
index 0000000..569491f
--- /dev/null
+++ b/modules/ext.checkuser.cidr.js
@@ -0,0 +1,259 @@
+/* -- (c) Aaron Schulz 2009 */
+
+( function( $, mw ) {
+
+    var showResults = function(size, cidr) {
+        $( '#mw-checkuser-cidr-res' ).val( cidr );
+        $( '#mw-checkuser-ipnote' ).text( size );
+    };
+
+    /*
+     * This function calculates the common range of a list of
+     * IPs. It should be set to update on keyUp.
+     */
+    var updateCIDRresult = function() {
+        var form = document.getElementById( 'mw-checkuser-cidrform' );
+        if( !form ) {
+            return; // no JS form
+        }
+        form.style.display = 'inline'; // unhide form (JS active)
+        var iplist = document.getElementById( 'mw-checkuser-iplist' );
+        if( !iplist ) {
+            return; // no JS form
+        }
+        var text = iplist.value, ips;
+        // Each line should have one IP or range
+        if( text.indexOf("\n") != -1 ) {
+            ips = text.split("\n");
+            // Try some other delimiters too...
+        } else if( text.indexOf("\t") != -1 ) {
+            ips = text.split("\t");
+        } else if( text.indexOf(",") != -1 ) {
+            ips = text.split(",");
+        } else if( text.indexOf("-") != -1 ) {
+            ips = text.split("-");
+        } else if( text.indexOf(" ") != -1 ) {
+            ips = text.split(" ");
+        } else {
+            ips = text.split(";");
+        }
+        var bin_prefix = 0;
+        var prefix_cidr = 0;
+        var prefix = new String( '' );
+        var foundV4 = false;
+        var foundV6 = false;
+        var ip_count;
+        // Go through each IP in the list, get its binary form, and
+        // track the largest binary prefix among them...
+        for( var i = 0; i < ips.length; i++ ) {
+            // ...in the spirit of mediawiki.special.block.js, call this "addy"
+            var addy = ips[i].replace(/^\s*|\s*$/, '' ); // trim
+            // Match the first IP in each list (ignore other garbage)
+            var ipV4 = mw.util.isIPv4Address( addy, true );
+            var ipV6 = mw.util.isIPv6Address( addy, true );
+            var ip_cidr = addy.match(/^(.*)(?:\/(\d+))?$/);
+            // Binary form
+            var bin = new String( '' );
+            // Convert the IP to binary form: IPv4
+            if( ipV4 ) {
+                foundV4 = true;
+                if ( foundV6 ) { // disjoint address space
+                    prefix = '';
+                    break;
+                }
+                var ip = ip_cidr[1];
+                var cidr = ip_cidr[2] ? ip_cidr[2] : null; // CIDR, if it 
exists
+                // Get each quad integer
+                var blocs = ip.split('.');
+                for( var x = 0; x < blocs.length; x++ ) {
+                    bloc = parseInt( blocs[x], 10 );
+                    var bin_block = bloc.toString( 2 ); // concat bin with 
binary form of bloc
+                    while( bin_block.length < 8 ) {
+                        bin_block = '0' + bin_block; // pad out as needed
+                    }
+                    bin += bin_block;
+                }
+                prefix = ''; // Rebuild formatted bin_prefix for each IP
+                // Apply any valid CIDRs
+                if( cidr ) {
+                    bin = bin.substring( 0, cidr ); // truncate bin
+                }
+                // Init bin_prefix
+                if( bin_prefix === 0 ) {
+                    bin_prefix = new String( bin );
+                    // Get largest common bin_prefix
+                } else {
+                    for( var x = 0; x < bin_prefix.length; x++ ) {
+                        // Bin_prefix always smaller than bin unless a CIDR 
was used on bin
+                        if( bin[x] == undefined || bin_prefix[x] != bin[x] ) {
+                            bin_prefix = bin_prefix.substring( 0, x ); // 
shorten bin_prefix
+                            break;
+                        }
+                    }
+                }
+                // Build the IP in CIDR form
+                prefix_cidr = bin_prefix.length;
+                // CIDR too small?
+                if( prefix_cidr < 16 ) {
+                    showResults( '!',  '>' + Math.pow( 2, 32 - prefix_cidr ) );
+                    return; // too big
+                }
+                // Build the IP in dotted-quad form
+                for( var z = 0; z <= 3; z++ ) {
+                    var bloc = 0;
+                    var start = z * 8;
+                    var end = start + 7;
+                    for( var x = start; x <= end; x++ ) {
+                        if( bin_prefix[x] == undefined ) {
+                            break;
+                        }
+                        bloc += parseInt( bin_prefix[x], 10 ) * Math.pow( 2, 
end - x );
+                    }
+                    prefix += ( z == 3 ) ? bloc : bloc + '.';
+                }
+                // Get IPs affected
+                ip_count = Math.pow( 2, 32 - prefix_cidr );
+                // Is the CIDR meaningful?
+                if( prefix_cidr == 32 ) {
+                    prefix_cidr = false;
+                }
+                // Convert the IP to binary form: IPv6
+            } else if( ipV6 ) {
+                foundV6 = true;
+                if ( foundV4 ) { // disjoint address space
+                    prefix = '';
+                    break;
+                }
+                var ip = ip_cidr[1];
+                var cidr = ip_cidr[2] ? ip_cidr[2] : null; // CIDR, if it 
exists
+                // Expand out "::"s
+                var abbrevs = ip.match( /::/g );
+                if( abbrevs && abbrevs.length > 0 ) {
+                    var colons = ip.match( /:/g );
+                    var needed = 7 - ( colons.length - 2 ); // 2 from "::"
+                    var insert = '';
+                    while( needed > 1 ) {
+                        insert += ':0';
+                        needed--;
+                    }
+                    ip = ip.replace( '::', insert + ':' );
+                    // For IPs that start with "::", correct the final IP
+                    // so that it starts with '0' and not ':'
+                    if( ip[0] == ':' ) {
+                        ip = '0' + ip;
+                    }
+                }
+                // Get each hex octant
+                var blocs = ip.split(':');
+                for( var x = 0; x <= 7; x++ ) {
+                    bloc = blocs[x] ? blocs[x] : '0';
+                    var int_block = hex2int( bloc ); // convert hex -> int
+                    bin_block = int_block.toString( 2 ); // concat bin with 
binary form of bloc
+                    while( bin_block.length < 16 ) {
+                        bin_block = '0' + bin_block; // pad out as needed
+                    }
+                    bin += bin_block;
+                }
+                prefix = ''; // Rebuild formatted bin_prefix for each IP
+                // Apply any valid CIDRs
+                if( cidr ) {
+                    bin = bin.substring( 0, cidr ); // truncate bin
+                }
+                // Init bin_prefix
+                if( bin_prefix === 0 ) {
+                    bin_prefix = new String( bin );
+                    // Get largest common bin_prefix
+                } else {
+                    for( var x = 0; x < bin_prefix.length; x++ ) {
+                        // Bin_prefix always smaller than bin unless a CIDR 
was used on bin
+                        if( bin[x] == undefined || bin_prefix[x] != bin[x] ) {
+                            bin_prefix = bin_prefix.substring( 0, x ); // 
shorten bin_prefix
+                            break;
+                        }
+                    }
+                }
+                // Build the IP in CIDR form
+                var prefix_cidr = bin_prefix.length;
+                // CIDR too small?
+                if( prefix_cidr < 96 ) {
+                    showResults('!', '>' + Math.pow( 2, 128 - prefix_cidr ) );
+                    return; // too big
+                }
+                // Build the IP in dotted-quad form
+                for( var z = 0; z <= 7; z++ ) {
+                    var bloc = 0;
+                    var start = z*16;
+                    var end = start + 15;
+                    for( var x = start; x <= end; x++ ) {
+                        if( bin_prefix[x] == undefined ) {
+                            break;
+                        }
+                        bloc += parseInt( bin_prefix[x], 10 ) * Math.pow( 2, 
end - x );
+                    }
+                    bloc = bloc.toString( 16 ); // convert to hex
+                    prefix += ( z == 7 ) ? bloc : bloc + ':';
+                }
+                // Get IPs affected
+                ip_count = Math.pow( 2, 128 - prefix_cidr );
+                // Is the CIDR meaningful?
+                if( prefix_cidr == 128 ) {
+                    prefix_cidr = false;
+                }
+            }
+        }
+        // Update form
+        if( prefix != '' ) {
+            var full = prefix;
+            if( prefix_cidr != false ) {
+                full += '/' + prefix_cidr;
+            }
+            showResults( '~' + ip_count, full );
+        } else {
+            showResults( '?', '' );
+        }
+
+    };
+
+// Utility function to convert hex to integers
+    var hex2int = function( hex ) {
+        hex = new String( hex );
+        hex = hex.toLowerCase();
+        var intform = 0;
+        for( var i = 0; i < hex.length; i++ ) {
+            var digit = 0;
+            switch( hex[i] ) {
+                case 'a':
+                    digit = 10;
+                    break;
+                case 'b':
+                    digit = 11;
+                    break;
+                case 'c':
+                    digit = 12;
+                    break;
+                case 'd':
+                    digit = 13;
+                    break;
+                case 'e':
+                    digit = 14;
+                    break;
+                case 'f':
+                    digit = 15;
+                    break;
+                default:
+                    digit = parseInt( hex[i], 10 );
+                    break;
+            }
+            intform += digit * Math.pow( 16, hex.length - 1 - i );
+        }
+        return intform;
+    };
+
+    // On ready initialization
+    $( function( $ ) {
+        updateCIDRresult();
+        $('#mw-checkuser-iplist').bind('keyup click', function() {
+            updateCIDRresult();
+        });
+    } );
+} ( jQuery, mediaWiki ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/52582
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5d6007d2aa221e3496e242bd65650d4354d86949
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CheckUser
Gerrit-Branch: master
Gerrit-Owner: Pgehres <pgeh...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to