]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blobdiff - skins/common/block.js
MediaWiki 1.17.4
[autoinstalls/mediawiki.git] / skins / common / block.js
index ad04f8103be748c791616a63fde04b53ce062371..fb86cbd62e2a875b8f4b255215bba3d4026e1567 100644 (file)
@@ -1,6 +1,34 @@
-addOnloadHook( considerChangingExpiryFocus );
+// @TODO: find some better JS file for this
+// Note: borrows from IP.php
+window.isIPv4Address = function( address, allowBlock ) {
+       var block = allowBlock ? '(?:\\/(?:3[0-2]|[12]?\\d))?' : '';
+       var RE_IP_BYTE = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9])';
+       var RE_IP_ADD = '(?:' + RE_IP_BYTE + '\\.){3}' + RE_IP_BYTE;
+       return address.search( new RegExp( '^' + RE_IP_ADD + block + '$' ) ) != -1;
+};
+
+// @TODO: find some better JS file for this
+// Note: borrows from IP.php
+window.isIPv6Address = function( address, allowBlock ) {
+       var block = allowBlock ? '(?:\\/(?:12[0-8]|1[01][0-9]|[1-9]?\\d))?' : '';
+       var RE_IPV6_ADD =
+       '(?:' + // starts with "::" (including "::")
+               ':(?::|(?::' + '[0-9A-Fa-f]{1,4}' + '){1,7})' +
+       '|' + // ends with "::" (except "::")
+               '[0-9A-Fa-f]{1,4}' + '(?::' + '[0-9A-Fa-f]{1,4}' + '){0,6}::' +
+       '|' + // contains no "::"
+               '[0-9A-Fa-f]{1,4}' + '(?::' + '[0-9A-Fa-f]{1,4}' + '){7}' +
+       ')';
+       if ( address.search( new RegExp( '^' + RE_IPV6_ADD + block + '$' ) ) != -1 ) {
+               return true;
+       }
+       var RE_IPV6_ADD = // contains one "::" in the middle (single '::' check below)
+               '[0-9A-Fa-f]{1,4}' + '(?:::?' + '[0-9A-Fa-f]{1,4}' + '){1,6}';
+       return address.search( new RegExp( '^' + RE_IPV6_ADD + block + '$' ) ) != -1
+               && address.search( /::/ ) != -1 && address.search( /::.*::/ ) == -1;
+};
 
-function considerChangingExpiryFocus() {
+window.considerChangingExpiryFocus = function() {
        if ( !document.getElementById ) {
                return;
        }
@@ -18,9 +46,9 @@ function considerChangingExpiryFocus() {
        } else {
                field.style.display = 'none';
        }
-}
+};
 
-function updateBlockOptions() {
+window.updateBlockOptions = function() {
        if ( !document.getElementById ) {
                return;
        }
@@ -30,9 +58,10 @@ function updateBlockOptions() {
                return;
        }
 
-       var addy = target.value;
-       var isEmpty = addy.match(/^\s*$/);
-       var isIp = addy.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|:(:[0-9A-Fa-f]{1,4}){1,7}|[0-9A-Fa-f]{1,4}(:{1,2}[0-9A-Fa-f]{1,4}|::$){1,7})(\/\d+)?$/);
+       var addy = target.value.replace( /(^\s*|\s*$)/, '' ); // trim
+       var isEmpty = (addy == ""); 
+
+       var isIp = isIPv4Address( addy, true ) || isIPv6Address( addy, true );
        var isIpRange = isIp && addy.match(/\/\d+$/);
 
        var anonymousRow = document.getElementById( 'wpAnonOnlyRow' );
@@ -54,4 +83,7 @@ function updateBlockOptions() {
        if( watchuserRow ) {
                watchuserRow.style.display = isIpRange && !isEmpty ? 'none' : '';
        }
-}
+};
+
+addOnloadHook( updateBlockOptions );
+addOnloadHook( considerChangingExpiryFocus );