basic leaves pass-thru
[p5sagit/Devel-Size.git] / static / public / tm.js
CommitLineData
b2fc39a5 1var labelType, useGradients, nativeTextSupport, animate;
2
3(function() {
4 var ua = navigator.userAgent,
5 iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i),
6 typeOfCanvas = typeof HTMLCanvasElement,
7 nativeCanvasSupport = (typeOfCanvas == 'object' || typeOfCanvas == 'function'),
8 textSupport = nativeCanvasSupport
9 && (typeof document.createElement('canvas').getContext('2d').fillText == 'function');
10 //I'm setting this based on the fact that ExCanvas provides text support for IE
11 //and that as of today iPhone/iPad current text support is lame
12 labelType = (!nativeCanvasSupport || (textSupport && !iStuff))? 'Native' : 'HTML';
13 nativeTextSupport = labelType == 'Native';
14 useGradients = nativeCanvasSupport;
15 animate = !(iStuff || !nativeCanvasSupport);
16})();
17
18var Log = {
19 elem: false,
20 write: function(text){
21 if (!this.elem)
22 this.elem = document.getElementById('log');
23 this.elem.innerHTML = text;
24 this.elem.style.left = (500 - this.elem.offsetWidth / 2) + 'px';
25 }
26};
27
28
29function init(){
30 //init data
31 //end
32 //init TreeMap
33 var tm = new $jit.TM.Squarified({
34 //where to inject the visualization
35 injectInto: 'infovis',
36 //show only one tree level
5a78486c 37 levelsToShow: 1,
b2fc39a5 38 //parent box title heights
5a78486c 39 titleHeight: 11,
b2fc39a5 40 //enable animations
41 animate: animate,
42 //box offsets
43 offset: 1,
44 //use canvas text
45 Label: {
46 type: labelType,
47 size: 9,
48 family: 'Tahoma, Verdana, Arial'
49 },
50 //enable specific canvas styles
51 //when rendering nodes
52 Node: {
53 CanvasStyles: {
54 shadowBlur: 0,
55 shadowColor: '#000'
56 }
57 },
58 //Attach left and right click events
59 Events: {
60 enable: true,
61 onClick: function(node) {
62 if(node) tm.enter(node);
63 },
64 onRightClick: function() {
65 tm.out();
66 },
67 //change node styles and canvas styles
68 //when hovering a node
69 onMouseEnter: function(node, eventInfo) {
70 if(node) {
71 //add node selected styles and replot node
72 node.setCanvasStyle('shadowBlur', 7);
73 node.setData('color', '#888');
74 tm.fx.plotNode(node, tm.canvas);
75 tm.labels.plotLabel(tm.canvas, node);
76 }
77 },
78 onMouseLeave: function(node) {
79 if(node) {
80 node.removeData('color');
81 node.removeCanvasStyle('shadowBlur');
82 tm.plot();
83 }
84 }
85 },
86 //duration of the animations
5a78486c 87 duration: 500,
b2fc39a5 88 //Enable tips
89 Tips: {
90 enable: true,
91 type: 'Native',
92 //add positioning offsets
93 offsetX: 20,
94 offsetY: 20,
95 //implement the onShow method to
96 //add content to the tooltip when a node
97 //is hovered
98 onShow: function(tip, node, isLeaf, domElement) {
99 var html = "<div class=\"tip-title\">" + node.name
100 + "</div><div class=\"tip-text\">";
101 var data = node.data;
bb66f8a1 102
bb66f8a1 103 html += sprintf("Size: %d (%d + %d)<br />", data.self_size+data.kids_size, data.self_size, data.kids_size);
104 if (data.child_count) {
105 html += sprintf("Children: %d of %d<br />", data.child_count, data.kids_node_count);
b2fc39a5 106 }
5a78486c 107 html += sprintf("Depth: %d<br />", data.depth);
108 html += sprintf("Parent: %d<br />", data.parent_id);
109 html += sprintf("Id: %s%s<br />", node.id, data._ids_merged ? data._ids_merged : "");
e78b28ca 110 html += JSON.stringify(data.attr, undefined, 4) + "<br />";
111 html += JSON.stringify(data.leaves, undefined, 4) + "<br />";
bb66f8a1 112
b2fc39a5 113 tip.innerHTML = html;
114 }
115 },
116 //Implement this method for retrieving a requested
117 //subtree that has as root a node with id = nodeId,
118 //and level as depth. This method could also make a server-side
119 //call for the requested subtree. When completed, the onComplete
120 //callback method should be called.
121 request: function(nodeId, level, onComplete){
122 if (true) {
875c1073 123 jQuery.getJSON('jit_tree/'+nodeId+'/1', function(data) {
f9d8678b 124 console.log("Node "+nodeId);
125 console.log(data);
b2fc39a5 126 onComplete.onComplete(nodeId, data);
127 });
128 }
129 else {
130 var tree = memnodes[0];
131 var subtree = $jit.json.getSubtree(tree, nodeId);
132 $jit.json.prune(subtree, 2);
133 onComplete.onComplete(nodeId, subtree);
134 }
135 },
136 //Add the name of the node in the corresponding label
137 //This method is called once, on label creation and only for DOM labels.
138 onCreateLabel: function(domElement, node){
139 domElement.innerHTML = node.name;
140 }
141 });
142
143if(true) {
875c1073 144 jQuery.getJSON('jit_tree/1/1', function(data) {
f9d8678b 145 console.log(data);
b2fc39a5 146 tm.loadJSON(data);
147 tm.refresh();
148 });
149}
150else {
151 //var pjson = eval('(' + json + ')');
152 var pjson = memnodes[0];
153 $jit.json.prune(pjson, 2);
154 console.log(pjson);
155 tm.loadJSON(pjson);
156 tm.refresh();
157}
158
b2fc39a5 159 //add event to the back button
160 var back = $jit.id('back');
161 $jit.util.addEvent(back, 'click', function() {
162 tm.out();
163 });
164}