summaryrefslogtreecommitdiff
path: root/skins/common/block.js
diff options
context:
space:
mode:
Diffstat (limited to 'skins/common/block.js')
-rw-r--r--skins/common/block.js48
1 files changed, 40 insertions, 8 deletions
diff --git a/skins/common/block.js b/skins/common/block.js
index ad04f810..fb86cbd6 100644
--- a/skins/common/block.js
+++ b/skins/common/block.js
@@ -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 );