|  | @@ -127,6 +127,28 @@
 | 
	
		
			
				|  |  |        var url = options['url'];
 | 
	
		
			
				|  |  |        var self = this;
 | 
	
		
			
				|  |  |        
 | 
	
		
			
				|  |  | +      // Make sure the file type is allowed
 | 
	
		
			
				|  |  | +      if (this.tables[tname]['allowed_types']) {
 | 
	
		
			
				|  |  | +        var allowed_types = this.tables[tname]['allowed_types'];
 | 
	
		
			
				|  |  | +        var matches = file.name.match(/^.*\.(.+)$/);
 | 
	
		
			
				|  |  | +        if (!matches) {
 | 
	
		
			
				|  |  | +          alert('Please provide a file with a valid extension.');
 | 
	
		
			
				|  |  | +          return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        var type = matches[1];
 | 
	
		
			
				|  |  | +        var j;
 | 
	
		
			
				|  |  | +        var found = false;
 | 
	
		
			
				|  |  | +        for (j = 0; j < allowed_types.length; j++) {
 | 
	
		
			
				|  |  | +          if (allowed_types[j] == type) {
 | 
	
		
			
				|  |  | +            found = true;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (!found) {
 | 
	
		
			
				|  |  | +          alert('Please provide a file with a valid extension. The following are allowed: ' + allowed_types.join(','));
 | 
	
		
			
				|  |  | +          return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  |        if (!(category in this.files)) {
 | 
	
		
			
				|  |  |          this.files[category] = {}
 | 
	
		
			
				|  |  |        }      
 | 
	
	
		
			
				|  | @@ -140,6 +162,7 @@
 | 
	
		
			
				|  |  |          'links' : category + '-links-' + i,
 | 
	
		
			
				|  |  |          'module' : this.tables[tname]['module']
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  |        var guf = new TripalUploadFile(file, options)
 | 
	
		
			
				|  |  |        this.files[category][i] = guf;
 | 
	
		
			
				|  |  |        return guf
 | 
	
	
		
			
				|  | @@ -147,12 +170,13 @@
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    this.removeFile = function(category, i) {
 | 
	
		
			
				|  |  | +    this.removeFile = function(tname, category, i) {
 | 
	
		
			
				|  |  |        if (category in this.files) {
 | 
	
		
			
				|  |  |          if (i in this.files[category]) {
 | 
	
		
			
				|  |  |            delete this.files[category][i];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | +      this.setTarget(tname);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 
 | 
	
	
		
			
				|  | @@ -234,7 +258,14 @@
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      this.getFileButton = function(tname, category, i) {
 | 
	
		
			
				|  |  |        var button_name = tname + '--' + category + '-upload-' + i;
 | 
	
		
			
				|  |  | -      var element = '<input id="' + button_name + '" class="tripal-chunked-file-upload" type="file">';
 | 
	
		
			
				|  |  | +      // If the button is already in the DOM then we want to preserve the
 | 
	
		
			
				|  |  | +      // 'ready' attribute. If the button already has an onChange event then
 | 
	
		
			
				|  |  | +      // it is ready.
 | 
	
		
			
				|  |  | +      var ready = $('#' + button_name).attr('ready');
 | 
	
		
			
				|  |  | +      if (!ready) {
 | 
	
		
			
				|  |  | +        ready = 'false';
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      var element = '<input id="' + button_name + '" class="tripal-chunked-file-upload" type="file" ready="' + ready + '">';
 | 
	
		
			
				|  |  |        
 | 
	
		
			
				|  |  |        return {
 | 
	
		
			
				|  |  |          'name' : button_name,
 | 
	
	
		
			
				|  | @@ -432,21 +463,52 @@
 | 
	
		
			
				|  |  |       * @param $category
 | 
	
		
			
				|  |  |       *   The name of the category to which the file belongs.
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    this.setTarget = function(file_id, tname, category) {
 | 
	
		
			
				|  |  | -      var files  = this.getCategoryFiles(category);
 | 
	
		
			
				|  |  | +    this.setTarget = function(tname) {
 | 
	
		
			
				|  |  | +      var categories = this.tables[tname]['category'];
 | 
	
		
			
				|  |  | +      var num_categories = categories.length;
 | 
	
		
			
				|  |  |        var cardinality = this.tables[tname]['cardinality'];
 | 
	
		
			
				|  |  |        var target_id = this.tables[tname]['target_id'];
 | 
	
		
			
				|  |  | -      var num_files = this.getNumFiles(category);
 | 
	
		
			
				|  |  | -         
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  |        if (target_id) {
 | 
	
		
			
				|  |  | -        // Always set the first file_id.
 | 
	
		
			
				|  |  | -        var fids = files[0].file_id;
 | 
	
		
			
				|  |  | -        // Iterate through any other files and add them with a '|' delemiter.
 | 
	
		
			
				|  |  | -        var i;
 | 
	
		
			
				|  |  | -        for (i = 1; i < num_files; i++) {
 | 
	
		
			
				|  |  | -          fids = fids + "|" + files[i].file_id;
 | 
	
		
			
				|  |  | -        } 
 | 
	
		
			
				|  |  | -        $('#' + target_id).val(fids);
 | 
	
		
			
				|  |  | +        var fids = '';
 | 
	
		
			
				|  |  | +        var c;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // Iterate through the file categories.
 | 
	
		
			
				|  |  | +        for (c = 0; c < num_categories; c++) {
 | 
	
		
			
				|  |  | +          var files  = this.getCategoryFiles(categories[c]);
 | 
	
		
			
				|  |  | +          var num_files = this.getNumFiles(categories[c]);
 | 
	
		
			
				|  |  | +          var i;
 | 
	
		
			
				|  |  | +          
 | 
	
		
			
				|  |  | +          // Deal with one category.
 | 
	
		
			
				|  |  | +          if (num_categories == 1) {
 | 
	
		
			
				|  |  | +            if (num_files > 0) {
 | 
	
		
			
				|  |  | +              // Always set the first file_id.
 | 
	
		
			
				|  |  | +              fids = files[0].file_id;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          // Deal with multiple categories.
 | 
	
		
			
				|  |  | +          else {
 | 
	
		
			
				|  |  | +            // When we have more than one category then we need to 
 | 
	
		
			
				|  |  | +            // separate the categories with a comma. So, this must happen
 | 
	
		
			
				|  |  | +            // after every category except the first.
 | 
	
		
			
				|  |  | +            if (c == 0) {
 | 
	
		
			
				|  |  | +              if (num_files > 0) {
 | 
	
		
			
				|  |  | +                fids = fids + files[0].file_id;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            else {
 | 
	
		
			
				|  |  | +              fids = fids + ',';
 | 
	
		
			
				|  |  | +              if (num_files > 0) {
 | 
	
		
			
				|  |  | +                fids = fids + files[0].file_id;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          // Iterate through any other files and add them with a '|' delemiter.
 | 
	
		
			
				|  |  | +          for (i = 1; i < num_files; i++) {
 | 
	
		
			
				|  |  | +            fids = fids + "|" + files[i].file_id;
 | 
	
		
			
				|  |  | +          } 
 | 
	
		
			
				|  |  | +          $('#' + target_id).val(fids);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -454,74 +516,74 @@
 | 
	
		
			
				|  |  |       * A table for paired data (e.g. RNA-seq).
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      this.updatePairedTable = function(tname, categories) {
 | 
	
		
			
				|  |  | -        var i = 0;
 | 
	
		
			
				|  |  | -        var table_id = this.tables[tname]['table_id'];
 | 
	
		
			
				|  |  | -        var cardinality = this.tables[tname]['cardinality'];
 | 
	
		
			
				|  |  | +      var i = 0;
 | 
	
		
			
				|  |  | +      var table_id = this.tables[tname]['table_id'];
 | 
	
		
			
				|  |  | +      var cardinality = this.tables[tname]['cardinality'];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        var category1 = categories[0];
 | 
	
		
			
				|  |  | -        var category2 = categories[1];
 | 
	
		
			
				|  |  | +      var category1 = categories[0];
 | 
	
		
			
				|  |  | +      var category2 = categories[1];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        var paired_content = '';   
 | 
	
		
			
				|  |  | -        var category1_files = this.getCategoryFiles(category1);
 | 
	
		
			
				|  |  | -        var category2_files = this.getCategoryFiles(category2);    
 | 
	
		
			
				|  |  | -        var max_paired1 = this.getMaxIndex(category1);
 | 
	
		
			
				|  |  | -        var max_paired2 = this.getMaxIndex(category2);
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | -        var button1 = null;
 | 
	
		
			
				|  |  | -        var button2 = null;
 | 
	
		
			
				|  |  | +      var paired_content = '';   
 | 
	
		
			
				|  |  | +      var category1_files = this.getCategoryFiles(category1);
 | 
	
		
			
				|  |  | +      var category2_files = this.getCategoryFiles(category2);    
 | 
	
		
			
				|  |  | +      var max_paired1 = this.getMaxIndex(category1);
 | 
	
		
			
				|  |  | +      var max_paired2 = this.getMaxIndex(category2);
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      var button1 = null;
 | 
	
		
			
				|  |  | +      var button2 = null;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // Bulid the rows for the paired sample files table.
 | 
	
		
			
				|  |  | -        var has_file = false;
 | 
	
		
			
				|  |  | -        for (i = 0; i <= Math.max(max_paired1, max_paired2); i++) {
 | 
	
		
			
				|  |  | -          button1 = this.getFileButton(tname, category1, i);
 | 
	
		
			
				|  |  | -          button2 = this.getFileButton(tname, category2, i);
 | 
	
		
			
				|  |  | +      // Build the rows for the paired sample files table.
 | 
	
		
			
				|  |  | +      var has_file = false;
 | 
	
		
			
				|  |  | +      for (i = 0; i <= Math.max(max_paired1, max_paired2); i++) {
 | 
	
		
			
				|  |  | +        button1 = this.getFileButton(tname, category1, i);
 | 
	
		
			
				|  |  | +        button2 = this.getFileButton(tname, category2, i);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          var trclass = 'odd';
 | 
	
		
			
				|  |  | -          if (i % 2 == 0) {
 | 
	
		
			
				|  |  | -            trclass = 'even';
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          paired_content +=  '<tr class="' + trclass + '">';
 | 
	
		
			
				|  |  | -          if (i in category1_files) {
 | 
	
		
			
				|  |  | -            paired_content += '<td>' + category1_files[i].getFileName() + '</td>';
 | 
	
		
			
				|  |  | -            paired_content += '<td>' + category1_files[i].getFileSize(true)  + '</td>';
 | 
	
		
			
				|  |  | -            paired_content += '<td>' + category1_files[i].getProgressBar() + '</td>';
 | 
	
		
			
				|  |  | -            paired_content += '<td>' + category1_files[i].getLinks() + '</td>';
 | 
	
		
			
				|  |  | -            has_file = true;
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          else {
 | 
	
		
			
				|  |  | -            paired_content += '<td colspan="4">' + button1['element'] + '</td>';
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          if (i in category2_files) {
 | 
	
		
			
				|  |  | -            paired_content += '<td>' + category2_files[i].getFileName() + '</td>';
 | 
	
		
			
				|  |  | -            paired_content += '<td>' + category2_files[i].getFileSize(true) + '</td>';
 | 
	
		
			
				|  |  | -            paired_content += '<td>' + category2_files[i].getProgressBar() + '</td>';
 | 
	
		
			
				|  |  | -            paired_content += '<td nowrap>' + category2_files[i].getLinks() + '</td>';
 | 
	
		
			
				|  |  | -            has_file = true;
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          else {
 | 
	
		
			
				|  |  | -            paired_content += '<td colspan="4">' + button2['element'] + '</td>';
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          paired_content +=  '</tr>';
 | 
	
		
			
				|  |  | +        var trclass = 'odd';
 | 
	
		
			
				|  |  | +        if (i % 2 == 0) {
 | 
	
		
			
				|  |  | +          trclass = 'even';
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // Create a new empty row of buttons if we have files.
 | 
	
		
			
				|  |  | -        if (has_file) {
 | 
	
		
			
				|  |  | -          // Only add a new row if we haven't reached our cardinality limit.
 | 
	
		
			
				|  |  | -          if (!cardinality || cardinality == 0 || cardinality < max_index) {
 | 
	
		
			
				|  |  | -            button1 = this.getFileButton(tname, category1, i);
 | 
	
		
			
				|  |  | -            button2 = this.getFileButton(tname, category2, i);
 | 
	
		
			
				|  |  | -            paired_content += '<tr class="odd"><td colspan="4">' + button1['element'] + 
 | 
	
		
			
				|  |  | -              '</td><td colspan="4">' + button2['element'] + '</td></tr>'
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | +        paired_content +=  '<tr class="' + trclass + '">';
 | 
	
		
			
				|  |  | +        if (i in category1_files) {
 | 
	
		
			
				|  |  | +          paired_content += '<td>' + category1_files[i].getFileName() + '</td>';
 | 
	
		
			
				|  |  | +          paired_content += '<td>' + category1_files[i].getFileSize(true)  + '</td>';
 | 
	
		
			
				|  |  | +          paired_content += '<td>' + category1_files[i].getProgressBar() + '</td>';
 | 
	
		
			
				|  |  | +          paired_content += '<td>' + category1_files[i].getLinks() + '</td>';
 | 
	
		
			
				|  |  | +          has_file = true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $(table_id + ' > tbody').html(paired_content);
 | 
	
		
			
				|  |  | -        if (button1) {
 | 
	
		
			
				|  |  | -          this.enableFileButton(button1['name']);
 | 
	
		
			
				|  |  | +        else {
 | 
	
		
			
				|  |  | +          paired_content += '<td colspan="4">' + button1['element'] + '</td>';
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (button2) {
 | 
	
		
			
				|  |  | -          this.enableFileButton(button2['name']);
 | 
	
		
			
				|  |  | +        if (i in category2_files) {
 | 
	
		
			
				|  |  | +          paired_content += '<td>' + category2_files[i].getFileName() + '</td>';
 | 
	
		
			
				|  |  | +          paired_content += '<td>' + category2_files[i].getFileSize(true) + '</td>';
 | 
	
		
			
				|  |  | +          paired_content += '<td>' + category2_files[i].getProgressBar() + '</td>';
 | 
	
		
			
				|  |  | +          paired_content += '<td nowrap>' + category2_files[i].getLinks() + '</td>';
 | 
	
		
			
				|  |  | +          has_file = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else {
 | 
	
		
			
				|  |  | +          paired_content += '<td colspan="4">' + button2['element'] + '</td>';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        paired_content +=  '</tr>';
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Create a new empty row of buttons if we have files.
 | 
	
		
			
				|  |  | +      if (has_file) {
 | 
	
		
			
				|  |  | +        // Only add a new row if we haven't reached our cardinality limit.
 | 
	
		
			
				|  |  | +        if (!cardinality || cardinality == 0 || cardinality < max_paired1) {
 | 
	
		
			
				|  |  | +          button1 = this.getFileButton(tname, category1, i);
 | 
	
		
			
				|  |  | +          button2 = this.getFileButton(tname, category2, i);
 | 
	
		
			
				|  |  | +          paired_content += '<tr class="odd"><td colspan="4">' + button1['element'] + 
 | 
	
		
			
				|  |  | +            '</td><td colspan="4">' + button2['element'] + '</td></tr>'
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      $(table_id + ' > tbody').html(paired_content);
 | 
	
		
			
				|  |  | +      if (button1) {
 | 
	
		
			
				|  |  | +        this.enableFileButton(button1['name']);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (button2) {
 | 
	
		
			
				|  |  | +        this.enableFileButton(button2['name']);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -530,51 +592,56 @@
 | 
	
		
			
				|  |  |       * The button is added by the updateUploadTable
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      this.enableFileButton = function(button_name) {
 | 
	
		
			
				|  |  | -        // When the button provided by the TripalUploader class is clicked
 | 
	
		
			
				|  |  | -        // then we need to add the files to the object.  We must have this
 | 
	
		
			
				|  |  | -        // function so that we can set the proper URL
 | 
	
		
			
				|  |  | -        var self = this;
 | 
	
		
			
				|  |  | +     
 | 
	
		
			
				|  |  | +      // If the button already exists then it's already setup so just
 | 
	
		
			
				|  |  | +      // return.
 | 
	
		
			
				|  |  | +      if($('#' + button_name).attr('ready') == 'true') {
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        var func_name = ($.isFunction($.fn.live)) ? 'live' : 'on';
 | 
	
		
			
				|  |  | -        $('#' + button_name)[func_name]('change', function(e) {
 | 
	
		
			
				|  |  | -          var id = this.id;
 | 
	
		
			
				|  |  | -          
 | 
	
		
			
				|  |  | -          // Get the HTML5 list of files to upload.
 | 
	
		
			
				|  |  | -          var hfiles = e.target.files;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          // Let the TripalUploader object parse the button ID to give us
 | 
	
		
			
				|  |  | -          // the proper category name and index.
 | 
	
		
			
				|  |  | -          var button = self.parseButtonID(id);
 | 
	
		
			
				|  |  | -          var tname = button['tname'];
 | 
	
		
			
				|  |  | -          var category = button['category'];
 | 
	
		
			
				|  |  | -          var index = button['index'];
 | 
	
		
			
				|  |  | +      // When the button provided by the TripalUploader class is clicked
 | 
	
		
			
				|  |  | +      // then we need to add the files to the object.  We must have this
 | 
	
		
			
				|  |  | +      // function so that we can set the proper URL
 | 
	
		
			
				|  |  | +      var self = this;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          // Add the file(s) to the uploader object.
 | 
	
		
			
				|  |  | -          for (var i = 0; i < hfiles.length; i++) {
 | 
	
		
			
				|  |  | -            var f = hfiles[i];
 | 
	
		
			
				|  |  | -//            if (!f.name.match('^.*\.fastq$')){
 | 
	
		
			
				|  |  | -//               alert('Only FastQ files are allowed.');
 | 
	
		
			
				|  |  | -//               continue;
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -            var options = {
 | 
	
		
			
				|  |  | -              // Files are managed by tables.
 | 
	
		
			
				|  |  | -              'tname' : tname,
 | 
	
		
			
				|  |  | -              // Files can be categorized to seprate them from other files.
 | 
	
		
			
				|  |  | -              'category': category,
 | 
	
		
			
				|  |  | -              // The index is the numeric index of the file. Files are ordered
 | 
	
		
			
				|  |  | -              // by their index. The file with an index of 0 is always ordered first.
 | 
	
		
			
				|  |  | -              'i': index,
 | 
	
		
			
				|  |  | -              // The URL at the remote server where the file will uploaded. 
 | 
	
		
			
				|  |  | -              'url' : baseurl + '/tripal/upload/' + category,
 | 
	
		
			
				|  |  | +      var func_name = ($.isFunction($.fn.live)) ? 'live' : 'on';
 | 
	
		
			
				|  |  | +      $('#' + button_name)[func_name]('change', function(e) {
 | 
	
		
			
				|  |  | +        var id = this.id;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // Get the HTML5 list of files to upload.
 | 
	
		
			
				|  |  | +        var hfiles = e.target.files;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // Let the TripalUploader object parse the button ID to give us
 | 
	
		
			
				|  |  | +        // the proper category name and index.
 | 
	
		
			
				|  |  | +        var button = self.parseButtonID(id);
 | 
	
		
			
				|  |  | +        var tname = button['tname'];
 | 
	
		
			
				|  |  | +        var category = button['category'];
 | 
	
		
			
				|  |  | +        var index = button['index'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // Add the file(s) to the uploader object.
 | 
	
		
			
				|  |  | +        for (var i = 0; i < hfiles.length; i++) {
 | 
	
		
			
				|  |  | +          var f = hfiles[i];
 | 
	
		
			
				|  |  | +          var options = {
 | 
	
		
			
				|  |  | +            // Files are managed by tables.
 | 
	
		
			
				|  |  | +            'tname' : tname,
 | 
	
		
			
				|  |  | +            // Files can be categorized to seprate them from other files.
 | 
	
		
			
				|  |  | +            'category': category,
 | 
	
		
			
				|  |  | +            // The index is the numeric index of the file. Files are ordered
 | 
	
		
			
				|  |  | +            // by their index. The file with an index of 0 is always ordered first.
 | 
	
		
			
				|  |  | +            'i': index,
 | 
	
		
			
				|  |  | +            // The URL at the remote server where the file will uploaded. 
 | 
	
		
			
				|  |  | +            'url' : baseurl + '/tripal/upload/' + category,
 | 
	
		
			
				|  |  |              };
 | 
	
		
			
				|  |  |              self.addFile(f, options);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  |              // We need to update the upload table and the progress. The
 | 
	
		
			
				|  |  | -            // information for which table to update is in the self.tables
 | 
	
		
			
				|  |  | -            // array.
 | 
	
		
			
				|  |  | -            self.updateTable(category);
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        });
 | 
	
		
			
				|  |  | +          // information for which table to update is in the self.tables
 | 
	
		
			
				|  |  | +          // array.
 | 
	
		
			
				|  |  | +          self.updateTable(category);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      $('#' + button_name).attr('ready', 'true');
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    };
 | 
	
		
			
				|  |  |  
 |