// lib_mouse.js var setup_mouse = function(plot_info) { var g = plot_info.global; // Initialize the info display. var default_precis, formatNumber = d3.format(',d'), indent = '  '; var notes = d3.select(g.selector + ' .notes') var precis = d3.select(g.selector + ' .precis') .text(default_precis = 'Showing ' + formatNumber(g.links.length) + ' dependencies among ' + formatNumber(g.nodes.length) + ' classes.'); on_mouseout = function() { // // Clear any highlighted nodes or links. g.svg.selectAll('.active_ib').classed('active_ib', false); g.svg.selectAll('.active_im').classed('active_im', false); g.svg.selectAll('.active_mo').classed('active_mo', false); notes.html(''); precis.text(default_precis); } on_mouseover_h = function(css_class, html_inp) { // // Helper for on_mouseover_{link,node}. if (!html_inp) return ''; if (css_class == 'ib') hdr = '

Imported by:

'; else hdr = '

Imports:

'; return '' + hdr + html_inp + ''; }; on_mouseover_link = function(orig_link) { // // Highlight the link and connected nodes on mouseover. // // Mousing over a link should cause: // // the link to turn red // the nodes that it imports to turn green // the nodes that import it to turn blue // the sidebar to show consistent colors and text var trace = false; var link_mo = function(curr_link) { var result = curr_link === orig_link; // if (result) console.log('link_mo', curr_link, orig_link); //T return result; }; var node_ib = function(curr_node) { var curr_name = curr_node.node.name; var orig_name = orig_link.source.node.name; var result = curr_name === orig_name; if (trace && result) console.log('node_ib', curr_name, curr_node, orig_name, orig_link); //T return result; }; var node_im = function(curr_node) { var curr_name = curr_node.node.name; var orig_name = orig_link.target.node.name; var result = curr_name === orig_name; if (trace && result) console.log('node_im', curr_name, curr_node, orig_name, orig_link); //T return result; }; g.svg.selectAll('.link' ).classed('active_mo', link_mo); g.svg.selectAll('.node ellipse').classed('active_ib', node_ib); g.svg.selectAll('.node ellipse').classed('active_im', node_im); var src_name = orig_link.source.node.name; var tgt_name = orig_link.target.node.name; var html_ib = on_mouseover_h('ib', src_name); var html_im = on_mouseover_h('im', tgt_name); var html = '

Link

' + html_ib + html_im; notes.html(html); precis.text(src_name + ' -> ' + tgt_name); } on_mouseover_node = function(orig_node) { // // Highlight the node and connected links on mouseover. // // Mousing over a node should cause: // // the node (and its clone, if any) to turn red // the links and nodes that it imports to turn green // the links and nodes that import it to turn blue // the sidebar to show consistent colors and text var trace = false; var link_ib = function(curr_link) { var curr_name = curr_link.target.node.name; var orig_name = orig_node.node.name; var result = curr_name === orig_name; if (trace && result) console.log('link_ib', curr_name, curr_link, orig_name, orig_node); //T return result; }; var link_im = function(curr_link) { var curr_name = curr_link.source.node.name; var orig_name = orig_node.node.name; var result = curr_name === orig_name; if (trace && result) console.log('link_im', curr_link, orig_node); //T return result; }; var node_ib = function(curr_node) { var curr_name = curr_node.node.name; var orig_name = orig_node.node.name; var curr_tgts = g.targets[curr_name]; var result = false; if (curr_tgts) { for (curr_tgt in curr_tgts) if (curr_tgt === orig_name) result = 'target'; } if (trace && result) console.log('node_ib', curr_name, curr_node, orig_name, orig_node, curr_tgts, result); //T return result; }; var node_im = function(curr_node) { var curr_name = curr_node.node.name; var orig_name = orig_node.node.name; var curr_srcs = g.sources[curr_name]; var result = false; if (curr_srcs) { for (curr_src in curr_srcs) if (curr_src === orig_name) result = 'source'; } if (trace && result) console.log('node_im', curr_name, curr_node, orig_name, orig_node, curr_srcs, result); //T return result; }; var node_mo = function(curr_node) { var curr_name = curr_node.node.name; var orig_name = orig_node.node.name; var result = false; if (curr_name === orig_name) result = 'same or clone'; if (trace && result) console.log('node_mo', curr_name, curr_node, orig_name, orig_node, result); //T return result; }; g.svg.selectAll('.link' ).classed('active_ib', link_ib); g.svg.selectAll('.link' ).classed('active_im', link_im); g.svg.selectAll('.node ellipse' ).classed('active_ib', node_ib); g.svg.selectAll('.node ellipse' ).classed('active_im', node_im); g.svg.selectAll('.node ellipse' ).classed('active_mo', node_mo); var src_tmp = g.sources[orig_node.node.name]; var sources = src_tmp ? Object.keys(src_tmp).sort().join('
') : ''; var targets = orig_node.node.imports.sort().join('
'); var html_ib = on_mouseover_h('ib', sources); var html_im = on_mouseover_h('im', targets); var html = '

Node

' + '' + orig_node.node.name + '' + html_ib + html_im; notes.html(html); precis.text(orig_node.node.name); } };