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);
|