summaryrefslogtreecommitdiff
path: root/skins/common/block.js
blob: fb86cbd62e2a875b8f4b255215bba3d4026e1567 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// @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;
};

window.considerChangingExpiryFocus = function() {
	if ( !document.getElementById ) {
		return;
	}
	var drop = document.getElementById( 'wpBlockExpiry' );
	if ( !drop ) {
		return;
	}
	var field = document.getElementById( 'wpBlockOther' );
	if ( !field ) {
		return;
	}
	var opt = drop.value;
	if ( opt == 'other' ) {
		field.style.display = '';
	} else {
		field.style.display = 'none';
	}
};

window.updateBlockOptions = function() {
	if ( !document.getElementById ) {
		return;
	}

	var target = document.getElementById( 'mw-bi-target' );
	if ( !target ) {
		return;
	}

	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' );
	if( anonymousRow ) {
		anonymousRow.style.display = ( !isIp && !isEmpty ) ? 'none' : '';
	}

	var autoblockRow = document.getElementById( 'wpEnableAutoblockRow' );
	if( autoblockRow ) {
		autoblockRow.style.display = isIp && !isEmpty ? 'none' : '';
	}
	
	var hideuserRow = document.getElementById( 'wpEnableHideUser' );
	if( hideuserRow ) {
		hideuserRow.style.display = isIp && !isEmpty ? 'none' : '';
	}

	var watchuserRow = document.getElementById( 'wpEnableWatchUser' );
	if( watchuserRow ) {
		watchuserRow.style.display = isIpRange && !isEmpty ? 'none' : '';
	}
};

addOnloadHook( updateBlockOptions );
addOnloadHook( considerChangingExpiryFocus );