|  | @@ -3,62 +3,131 @@
 | 
											
												
													
														|  |    // Store our function as a property of Drupal.behaviors.
 |  |    // Store our function as a property of Drupal.behaviors.
 | 
											
												
													
														|  |    Drupal.behaviors.tripal = {
 |  |    Drupal.behaviors.tripal = {
 | 
											
												
													
														|  |      attach: function (context, settings) {
 |  |      attach: function (context, settings) {
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |        $('.tripal-entity-unattached .field-items').replaceWith('<div class="field-items">Loading... <img src="' + tripal_path + '/theme/images/ajax-loader.gif"></div>');
 |  |        $('.tripal-entity-unattached .field-items').replaceWith('<div class="field-items">Loading... <img src="' + tripal_path + '/theme/images/ajax-loader.gif"></div>');
 | 
											
												
													
														|  |        $('.tripal-entity-unattached').each(function () {
 |  |        $('.tripal-entity-unattached').each(function () {
 | 
											
												
													
														|  |          var id = $(this).attr('id');
 |  |          var id = $(this).attr('id');
 | 
											
												
													
														|  |          if (id) {
 |  |          if (id) {
 | 
											
												
													
														|  | -          $.ajax({
 |  | 
 | 
											
												
													
														|  | -            url     : baseurl + '/bio_data/ajax/field_attach/' + id,
 |  | 
 | 
											
												
													
														|  | -            dataType: 'json',
 |  | 
 | 
											
												
													
														|  | -            type    : 'GET',
 |  | 
 | 
											
												
													
														|  | -            success : function (data) {
 |  | 
 | 
											
												
													
														|  | -              var content = data['content'];
 |  | 
 | 
											
												
													
														|  | -              var id      = data['id'];
 |  | 
 | 
											
												
													
														|  | -              $('#' + id + ' .field-items').replaceWith(content);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -              // If the field has no content, check to verify the pane is empty
 |  | 
 | 
											
												
													
														|  | -              // then remove it.
 |  | 
 | 
											
												
													
														|  | -              if (content.trim().length === 0) {
 |  | 
 | 
											
												
													
														|  | -                var field   = $('#' + id);
 |  | 
 | 
											
												
													
														|  | -                var classes = field.parents('.tripal_pane').first().attr('class').split(' ');
 |  | 
 | 
											
												
													
														|  | -                var pane_id = null;
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -                // Remove the field since it's empty
 |  | 
 | 
											
												
													
														|  | -                field.remove();
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -                // Get the tripal pane id to remove the pane if it is empty
 |  | 
 | 
											
												
													
														|  | -                var sub_length = 'tripal_pane-fieldset-'.length;
 |  | 
 | 
											
												
													
														|  | -                classes.map(function (cls) {
 |  | 
 | 
											
												
													
														|  | -                  if (cls.indexOf('tripal_pane-fieldset-') > -1) {
 |  | 
 | 
											
												
													
														|  | -                    pane_id = cls.substring(sub_length, cls.length);
 |  | 
 | 
											
												
													
														|  | -                  }
 |  | 
 | 
											
												
													
														|  | -                });
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -                if (pane_id) {
 |  | 
 | 
											
												
													
														|  | -                  var pane = $('#' + pane_id);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -                  // If the pane has only the title and close button, we can
 |  | 
 | 
											
												
													
														|  | -                  // remove it
 |  | 
 | 
											
												
													
														|  | -                  var has_children = $('.tripal_pane-fieldset-' + pane_id)
 |  | 
 | 
											
												
													
														|  | -                    .first()
 |  | 
 | 
											
												
													
														|  | -                    .children()
 |  | 
 | 
											
												
													
														|  | -                    .not('.tripal_pane-fieldset-buttons')
 |  | 
 | 
											
												
													
														|  | -                    .not('.field-group-format-title')
 |  | 
 | 
											
												
													
														|  | -                    .not('#' + id).length > 0;
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -                  if (!has_children) {
 |  | 
 | 
											
												
													
														|  | -                    pane.remove();
 |  | 
 | 
											
												
													
														|  | -                  }
 |  | 
 | 
											
												
													
														|  | -                }
 |  | 
 | 
											
												
													
														|  | -              }
 |  | 
 | 
											
												
													
														|  | -            }
 |  | 
 | 
											
												
													
														|  | -          });
 |  | 
 | 
											
												
													
														|  | 
 |  | +          var field = new AjaxField(id);
 | 
											
												
													
														|  | 
 |  | +          field.load();
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |        });
 |  |        });
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |    };
 |  |    };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * AjaxField Constructor.
 | 
											
												
													
														|  | 
 |  | +   *
 | 
											
												
													
														|  | 
 |  | +   * @param id
 | 
											
												
													
														|  | 
 |  | +   * @constructor
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  function AjaxField(id) {
 | 
											
												
													
														|  | 
 |  | +    this.id = id;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    this.hidePaneTitle();
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * Hide pane title if the content of the pane has only ajax fields.
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  AjaxField.prototype.hidePaneTitle = function () {
 | 
											
												
													
														|  | 
 |  | +    var id      = this.id;
 | 
											
												
													
														|  | 
 |  | +    var field   = $('#' + id);
 | 
											
												
													
														|  | 
 |  | +    var classes = field.parents('.tripal_pane').first().attr('class').split(' ');
 | 
											
												
													
														|  | 
 |  | +    var pane_id = this.extractPaneID(classes);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    if (pane_id) {
 | 
											
												
													
														|  | 
 |  | +      // Check if the fieldset has children that are not AJAX fields
 | 
											
												
													
														|  | 
 |  | +      var has_children = $('.tripal_pane-fieldset-' + pane_id)
 | 
											
												
													
														|  | 
 |  | +        .first()
 | 
											
												
													
														|  | 
 |  | +        .children()
 | 
											
												
													
														|  | 
 |  | +        .not('.tripal_pane-fieldset-buttons')
 | 
											
												
													
														|  | 
 |  | +        .not('.field-group-format-title')
 | 
											
												
													
														|  | 
 |  | +        .not('.tripal-entity-unattached')
 | 
											
												
													
														|  | 
 |  | +        .not('#' + id).length > 0;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +      // If there are no children, hide the pane title
 | 
											
												
													
														|  | 
 |  | +      if (!has_children) {
 | 
											
												
													
														|  | 
 |  | +        $('#' + pane_id).hide(0);
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +  };
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * Load the fields content from the server.
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  AjaxField.prototype.load = function () {
 | 
											
												
													
														|  | 
 |  | +    $.ajax({
 | 
											
												
													
														|  | 
 |  | +      url     : baseurl + '/bio_data/ajax/field_attach/' + this.id,
 | 
											
												
													
														|  | 
 |  | +      dataType: 'json',
 | 
											
												
													
														|  | 
 |  | +      type    : 'GET',
 | 
											
												
													
														|  | 
 |  | +      success : this.handleSuccess.bind(this)
 | 
											
												
													
														|  | 
 |  | +    });
 | 
											
												
													
														|  | 
 |  | +  };
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * Add the content of the field to its pane.
 | 
											
												
													
														|  | 
 |  | +   *
 | 
											
												
													
														|  | 
 |  | +   * @param data
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  AjaxField.prototype.handleSuccess = function (data) {
 | 
											
												
													
														|  | 
 |  | +    var content = data['content'];
 | 
											
												
													
														|  | 
 |  | +    var id      = data['id'];
 | 
											
												
													
														|  | 
 |  | +    var field   = $('#' + id);
 | 
											
												
													
														|  | 
 |  | +    var classes = field.parents('.tripal_pane').first().attr('class').split(' ');
 | 
											
												
													
														|  | 
 |  | +    var pane_id = this.extractPaneID(classes);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    $('#' + id + ' .field-items').replaceWith(content);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // If the field has no content, check to verify the pane is empty
 | 
											
												
													
														|  | 
 |  | +    // then remove it.
 | 
											
												
													
														|  | 
 |  | +    if (content.trim().length === 0) {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +      // Remove the field since it's empty
 | 
											
												
													
														|  | 
 |  | +      field.remove();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +      if (pane_id) {
 | 
											
												
													
														|  | 
 |  | +        var pane = $('#' + pane_id);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        // If the pane has only the title and close button, we can
 | 
											
												
													
														|  | 
 |  | +        // remove it
 | 
											
												
													
														|  | 
 |  | +        var has_children = $('.tripal_pane-fieldset-' + pane_id)
 | 
											
												
													
														|  | 
 |  | +          .first()
 | 
											
												
													
														|  | 
 |  | +          .children()
 | 
											
												
													
														|  | 
 |  | +          .not('.tripal_pane-fieldset-buttons')
 | 
											
												
													
														|  | 
 |  | +          .not('.field-group-format-title')
 | 
											
												
													
														|  | 
 |  | +          .not('#' + id).length > 0;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        if (!has_children) {
 | 
											
												
													
														|  | 
 |  | +          pane.remove();
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +    else {
 | 
											
												
													
														|  | 
 |  | +      if (pane_id) {
 | 
											
												
													
														|  | 
 |  | +        $('#' + pane_id).show(0);
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +  };
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * Extract the pane id from parent classes.
 | 
											
												
													
														|  | 
 |  | +   *
 | 
											
												
													
														|  | 
 |  | +   * @param classes
 | 
											
												
													
														|  | 
 |  | +   * @return {String|null}
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  AjaxField.prototype.extractPaneID = function (classes) {
 | 
											
												
													
														|  | 
 |  | +    var sub_length = 'tripal_pane-fieldset-'.length;
 | 
											
												
													
														|  | 
 |  | +    var pane_id    = null;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    classes.map(function (cls) {
 | 
											
												
													
														|  | 
 |  | +      if (cls.indexOf('tripal_pane-fieldset-') > -1) {
 | 
											
												
													
														|  | 
 |  | +        pane_id = cls.substring(sub_length, cls.length);
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +    });
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    return pane_id;
 | 
											
												
													
														|  | 
 |  | +  };
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  })(jQuery);
 |  |  })(jQuery);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  // Used for ajax update of fields by links in a pager.
 |  |  // Used for ajax update of fields by links in a pager.
 |