| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | /* phylotree d3js graphs */(function ($) {  var height = 0; // will be dynamically sized  $(document).ready( function () {    // Callback function to determine node size.    var nodeSize = function(d) {      var size;      if (d.cvterm_name == "phylo_root") {        size = treeOptions['root_node_size'];       }      if (d.cvterm_name == "phylo_interior") {        size = treeOptions['interior_node_size'];       }      if (d.cvterm_name == "phylo_leaf") {        size = treeOptions['leaf_node_size'];       }      return size;    }    // Callback function to determine the node color.    var organismColor = function(d) {      var color = null;      if (d.genus) {        color = organismColors[d.genus + ' ' + d.species];      }      if (color) {         return color;       }      else {         return 'grey';       }    };    // Callback for mouseover event on graph node d.    var nodeMouseOver = 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 nodeMouseOut = 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', organismColor(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 nodeMouseDown = 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_node_id) {          window.location.replace(baseurl + '/node/' + d.organism_node_id);        }        // leaf node      }    };    // AJAX function for retrieving the tree data.    $.getJSON(phylotreeDataURL, function(treeData) {      displayData(treeData);      $('.phylogram-ajax-loader').hide();    });    // Creates the tree using the d3.phylogram.js library.    function displayData(treeData) {      height = graphHeight(treeData);      d3.phylogram.build('#phylogram', treeData, {        'width' : treeOptions['phylogram_width'],        'height' : height,        'fill' : organismColor,        'size' : nodeSize,        'nodeMouseOver' : nodeMouseOver,        'nodeMouseOut' : nodeMouseOut,        'nodeMouseDown' : nodeMouseDown,        'skipTicks' : treeOptions['skipTicks']      });    }    /* graphHeight() generate graph height based on leaf nodes */    function graphHeight(data) {      function countLeafNodes(node) {        if(! node.children) {          return 1;        }        var ct = 0;        node.children.forEach( function(child) {          ct+= countLeafNodes(child);        });        return ct;      }      var leafNodeCt = countLeafNodes(data);      return 22 * leafNodeCt;    }  });})(jQuery);
 |