| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | /* phylotree d3js graphs */(function ($) {      "use strict";  // Will be dynamically sized.  var height = 0;   // Store our function as a property of Drupal.behaviors.  Drupal.behaviors.TripalPhylotree = {    attach: function (context, settings) {            // Retrieve the data for this tree.      var data_url = Drupal.settings.tripal_chado.phylotree_url;      $.getJSON(data_url, function(treeData) {        phylogeny_display_data(treeData);        $('.phylogram-ajax-loader').hide();      });    }  }  // Callback function to determine node size.  var phylogeny_node_size = function(d) {    var size;    var tree_options = Drupal.settings.tripal_chado.tree_options;    if (d.cvterm_name == "phylo_root") {      size = tree_options['root_node_size'];     }    if (d.cvterm_name == "phylo_interior") {      size = tree_options['interior_node_size'];     }    if (d.cvterm_name == "phylo_leaf") {      size = tree_options['leaf_node_size'];     }    return size;  }  // Callback function to determine the node color.  var phylogeny_organism_color = function(d) {    var organism_color = Drupal.settings.tripal_chado.org_colors;    var color = null;    if (d.genus) {      color = organism_color[d.organism_id];    }    if (color) {       return color;     }    else {       return 'grey';     }  };  // Callback for mouseover event on graph node d.  var phylogeny_node_mouse_over = function(d) {    var el = $(this);    el.attr('cursor', 'pointer');    var circle = el.find('circle');    // highlight in yellow no matter if leaf or interior node    circle.attr('fill', 'yellow');    if(!d.children) {      // only leaf nodes have descriptive text      var txt = el.find('text');      txt.attr('font-weight', 'bold');    }  };    // Callback for mouseout event on graph node d.  var phylogeny_node_mouse_out = function(d) {    var el = $(this);    el.attr('cursor', 'default');    var circle = el.find('circle');    if(!d.children) {      // restore the color based on organism id for leaf nodes      circle.attr('fill', phylogeny_organism_color(d));      var txt = el.find('text');      txt.attr('font-weight', 'normal');    }    else {      // restore interior nodes to white      circle.attr('fill', 'white');    }  };    // Callback for mousedown/click event on graph node d.  var phylogeny_node_mouse_down = function(d) {    var el = $(this);    var title = (! d.children ) ? d.name : 'interior node ' + d.phylonode_id;    if(d.children) {      // interior node      if(d.phylonode_id) {      }      else {        // this shouldn't happen but ok      }    }    else {      // If this node is not associated with a feature but it has an       // organism node then this is a taxonomic node and we want to      // link it to the organism page.      if (!d.feature_id && d.organism_nid) {        window.location.replace(baseurl + '/node/' + d.organism_nid);      }      if (!d.feature_id && d.organism_eid) {        window.location.replace(baseurl + '/bio_data/' + d.organism_eid);      }      // leaf node    }  };  // Creates the tree using the d3.phylogram.js library.  function phylogeny_display_data(treeData) {    var height = phylogeny_graph_height(treeData);    var tree_options = Drupal.settings.tripal_chado.tree_options;    d3.phylogram.build('#phylogram', treeData, {      'width' : tree_options['phylogram_width'],      'height' : height,      'fill' : phylogeny_organism_color,      'size' : phylogeny_node_size,      'nodeMouseOver' : phylogeny_node_mouse_over,      'nodeMouseOut' : phylogeny_node_mouse_out,      'nodeMouseDown' : phylogeny_node_mouse_down,      'skipTicks' : tree_options['skipTicks']    });  }  /* graphHeight() generate graph height based on leaf nodes */  function phylogeny_graph_height(data) {    function count_leaf_nodes(node) {      if(! node.children) {        return 1;      }      var ct = 0;      node.children.forEach( function(child) {        ct+= count_leaf_nodes(child);      });      return ct;    }    var leafNodeCt = count_leaf_nodes(data);    return 22 * leafNodeCt;  }})(jQuery);
 |