jQueryize the toggle upload source type code
authorBryan Tong Minh <btongminh@users.mediawiki.org>
Wed, 16 Feb 2011 20:37:16 +0000 (20:37 +0000)
committerBryan Tong Minh <btongminh@users.mediawiki.org>
Wed, 16 Feb 2011 20:37:16 +0000 (20:37 +0000)
resources/mediawiki.special/mediawiki.special.upload.js
skins/common/upload.js

index e27761f..dcaa727 100644 (file)
@@ -3,6 +3,9 @@
  * Note that additional code still lives in skins/common/upload.js
  */
 
+/**
+ * Add a preview to the upload form
+ */
 jQuery( function( $ ) {
        /**
         * Is the FileAPI available with sufficient functionality?
@@ -203,3 +206,24 @@ jQuery( function( $ ) {
                } );
        }
 } );
+
+/**
+ * Disable all upload source fields except the selected one
+ */
+jQuery( function ( $ ) {
+       var rows = $( '.mw-htmlform-field-UploadSourceField' );
+       for ( var i = rows.length; i; i-- ) {
+               var row = rows[i - 1];
+               $( 'input[name="wpSourceType"]', row ).change( function () {
+                       var currentRow = row; // Store current row in our own scope
+                       return function () {
+                               if ( this.checked ) {
+                                       // Disable all inputs
+                                       $( 'input[name!="wpSourceType"]', rows ).attr( 'disabled', true );
+                                       // Re-enable the current one
+                                       $( 'input', currentRow ).attr( 'disabled', false );
+                               }
+                       };
+               }() );
+       }
+} );
index 4185ec9..99917c7 100644 (file)
@@ -35,11 +35,6 @@ window.wgUploadSetup = function() {
                }
        }
        
-       // Toggle source type
-       var sourceTypeCheckboxes = document.getElementsByName( 'wpSourceType' );
-       for ( var i = 0; i < sourceTypeCheckboxes.length; i++ ) {
-               sourceTypeCheckboxes[i].onchange = toggleUploadInputs;
-       }
        
        // AJAX wpDestFile warnings
        if ( wgAjaxUploadDestCheck ) {
@@ -86,44 +81,6 @@ window.wgUploadSetup = function() {
                };
 };
 
-/**
- * Iterate over all upload source fields and disable all except the selected one.
- * 
- * @return emptiness
- */
-window.toggleUploadInputs = function() {
-       // Iterate over all rows with UploadSourceField
-       var rows;
-       if ( document.getElementsByClassName ) {
-               rows = document.getElementsByClassName( 'mw-htmlform-field-UploadSourceField' );
-       } else {
-               // Older browsers don't support getElementsByClassName
-               rows = new Array();
-               
-               var allRows = document.getElementsByTagName( 'tr' );
-               for ( var i = 0; i < allRows.length; i++ ) {
-                       if ( allRows[i].className == 'mw-htmlform-field-UploadSourceField' )
-                               rows.push( allRows[i] );
-               }
-       }
-       
-       for ( var i = 0; i < rows.length; i++ ) {
-               var inputs = rows[i].getElementsByTagName( 'input' );
-               
-               // Check if this row is selected
-               var isChecked = true; // Default true in case wpSourceType is not found
-               for ( var j = 0; j < inputs.length; j++ ) {
-                       if ( inputs[j].name == 'wpSourceType' )
-                               isChecked = inputs[j].checked;
-               }
-               
-               // Disable all unselected rows
-               for ( var j = 0; j < inputs.length; j++ ) {
-                       if ( inputs[j].type != 'radio')
-                               inputs[j].disabled = !isChecked;
-               }
-       }
-};
 
 window.wgUploadWarningObj = {
        'responseCache' : { '' : '&nbsp;' },