javascriptgraphinfovisthejit

Javascript infovis toolkit (JIT) adding edge event listener in HyperTree


I'm struggling with adding an edge event listener to the HyperTree object edge in Javascript Infovis toolkit library. I am aware of the fact, that everything revolves around "contains" method, which is not implemented for default edge type, which is "hyperline".

What I did: I've added code

Edge: {
           overridable: true,
           type: 'line',
           lineWidth: 4,
           color: '#bbb'
      }

to the HyperTree constructor. I've aldo added something like

Events: {
            enable: true,
            enableForEdges: true,
            type: 'Native',
            onClick: function (node, eventInfo, e) 
                if (!node) return;
                alert(node);
                if (node.nodeFrom) {
                   alert("target is a node");
                } else {
                   alert("target is an edge");
                }
            }
         }

following this question. I did check in Google Chrome debugger, that contains method is triggered on line edgeHelper objects in jit source library. And when I click on some edge, all contains invokations return true only for one edge, while returning false for the rest of the objects.

Commenting out lines enableForEdges and type: 'Native' prevents aby triggers on jit edgeHelper line contains methods.

but if I put a breakpoint on added onClick listener, I get node == false whenever I click outside the node (regardless) whether I click on edge or on empty space.

So the question in general: how do I correctly add event listener to edge in HyperTree?

And more narrow question: how can I be sure, that when contains for some line return true, it actually triggers a onClick listener, while passing an edge there, rather than a false.


Solution

  • There is a bug in jit.js. I've submitted a pull-request.