forked from toolness/mix-master-dialog
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathskeleton.js
72 lines (61 loc) · 2.01 KB
/
skeleton.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
(function (jQuery) {
var $ = jQuery;
function makeProtovisDOMfromDOM(dom, name) {
var pvNode = new pv.Dom.Node();
pvNode.nodeName = name;
var childNode;
dom = $(dom).get(0);
pvNode.realDOMNode = dom;
for (var i = 0; i < dom.childNodes.length; i++) {
var node = dom.childNodes[i];
switch (node.nodeType) {
case node.ELEMENT_NODE:
var name = node.nodeName.toLowerCase();
childNode = makeProtovisDOMfromDOM($(node), name);
childNode.realDOMNode = node;
pvNode.appendChild(childNode);
break;
}
}
return pvNode;
}
jQuery.Skeleton = function Skeleton(targetDiv, domToBeDiagrammed, highlighter) {
var self = this;
var protovisDom = makeProtovisDOMfromDOM(domToBeDiagrammed, 'div');
var vis = new pv.Panel()
.width(targetDiv.width())
.height(targetDiv.width())
.canvas(targetDiv.get(0));
var spacing = 16;
var tree = vis.add(pv.Layout.Indent)
.nodes(protovisDom.nodes())
.depth(spacing * 2)
.breadth(spacing * 2);
tree.link.add(pv.Line);
var node = tree.node.add(pv.Panel)
.top(function (n) { return n.y - spacing; })
.height(spacing * 2)
.right(spacing)
.strokeStyle(null);
node.anchor("left").add(pv.Dot)
.strokeStyle(function(d) {
return $.colorForTag(d.nodeName);
})
.fillStyle(function(d) {
return $.makeRGBA($.colorForTag(d.nodeName), 0.5);
})
.event("mouseover", highlighter.over)
.event("mouseout", highlighter.out)
// Click handler is for touch-based devices.
.event("click", highlighter.over)
.size(200)
.anchor("right").add(pv.Label)
.font("9pt Monaco, monospace")
.text(function(d) { return d.nodeName; });
vis.render();
self.destroy = function() {
// TODO: Do we need to do anything with Protovis here?
targetDiv.empty();
};
}
})(jQuery);