Merge "Make sure that SQLite uses no prefix"
[lhc/web/wiklou.git] / resources / mediawiki.special / mediawiki.special.block.js
index 4955545..077adcd 100644 (file)
@@ -1,57 +1,49 @@
-/* JavaScript for Special:Block */
-jQuery( function( $ ) {
+/**
+ * JavaScript for Special:Block
+ */
+( function ( mw, $ ) {
+       $( function ( $ ) {
 
-       $('#mw-bi-target').keyup(function(){
-               var isIPv4Address = function( address ) {
-                       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 + '(?:\\/(?:3[0-2]|[12]?\\d))?$' ) ) != -1;
-               };
-               var isIPv6Address = function( address ) {
-                       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 + '(?:\\/(?:12[0-8]|1[01][0-9]|[1-9]?\\d))?$' ) ) != -1 ) {
-                               return true;
-                       }
-                       var RE_IPV6_ADD_SHORT = // 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_SHORT + '(?:\\/(?:12[0-8]|1[01][0-9]|[1-9]?\\d))?$' ) ) != -1
-                               && address.search( /::/ ) != -1 && address.search( /::.*::/ ) == -1;
-               };
+               var $blockTarget = $( '#mw-bi-target' ),
+                       $anonOnlyRow = $( '#mw-input-wpHardBlock' ).closest( 'tr' ),
+                       $enableAutoblockRow = $( '#mw-input-wpAutoBlock' ).closest( 'tr' ),
+                       $hideUser = $( '#mw-input-wpHideUser' ).closest( 'tr' ),
+                       $watchUser = $( '#mw-input-wpWatch' ).closest( 'tr' );
 
-               var input = $('#mw-bi-target').val();
+               function updateBlockOptions( instant ) {
+                       if ( !$blockTarget.length ) {
+                               return;
+                       }
 
-               var isEmpty = ( input == "" );
-               var isIp = isIPv4Address( input ) || isIPv6Address( input );
-               var isIpRange = isIp && input.match(/\/\d+$/);
+                       var blocktarget = $.trim( $blockTarget.val() ),
+                               isEmpty = blocktarget === '',
+                               isIp = mw.util.isIPv4Address( blocktarget, true ) || mw.util.isIPv6Address( blocktarget, true ),
+                               isIpRange = isIp && blocktarget.match( /\/\d+$/ );
 
-               if( !isEmpty ){
-                       if( isIp ){
-                               $( '#wpAnonOnlyRow' ).stop( true, true ).delay(1000).fadeIn();
-                               $( '#wpEnableAutoblockRow, #wpEnableHideUser' ).stop( true, true ).delay(1000).fadeOut();
+                       if ( isIp && !isEmpty ) {
+                               $enableAutoblockRow.goOut( instant );
+                               $hideUser.goOut( instant );
+                       } else {
+                               $enableAutoblockRow.goIn( instant );
+                               $hideUser.goIn( instant );
+                       }
+                       if ( !isIp && !isEmpty ) {
+                               $anonOnlyRow.goOut( instant );
                        } else {
-                               $( '#wpAnonOnlyRow' ).stop( true, true ).delay(1000).fadeOut();
-                               $( '#wpEnableAutoblockRow, #wpEnableHideUser' ).stop( true, true ).delay(1000).fadeIn();
+                               $anonOnlyRow.goIn( instant );
                        }
-                       if( isIpRange ){
-                               $( '#wpEnableWatchUser' ).stop( true, true ).delay(1000).fadeOut();
+                       if ( isIpRange && !isEmpty ) {
+                               $watchUser.goOut( instant );
                        } else {
-                               $( '#wpEnableWatchUser' ).stop( true, true ).delay(1000).fadeIn();
+                               $watchUser.goIn( instant );
                        }
                }
-       }).keyup();
 
-       $('#wpBlockExpiry').change( function(){
-               if( $(this).val() == 'other' ){
-                       $('#wpBlockOther').stop( true, true ).fadeIn();
-               } else {
-                       $('#wpBlockOther').stop( true, true ).fadeOut();
-               }
-       }).change();
-} );
\ No newline at end of file
+               // Bind functions so they're checked whenever stuff changes
+               $blockTarget.keyup( updateBlockOptions );
+
+               // Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
+               updateBlockOptions( /* instant= */ true );
+       } );
+}( mediaWiki, jQuery ) );
+