diff --git a/html/force.js b/html/force.js
index 5381d35..5cde628 100644
--- a/html/force.js
+++ b/html/force.js
@@ -182,10 +182,12 @@ force.on("tick", function() {
for (i = 0; i < n; i++) {
var o = nodes[i]
if (!o.fixed) {
- if (o.x < 10) o.x = 10
- if (o.x > size[0] - 10) o.x = size[0] - 10
- if (o.y < 10) o.y = 10
- if (o.y > size[1] - 10) o.y = size[1] - 10
+ node = d3.select(document.getElementById(o.id))[0][0]
+ box = bounding_box(node)
+ if (o.x < box.rx) o.x = box.rx
+ if (o.x > size[0] - box.rx) o.x = size[0] - box.rx
+ if (o.y < box.ry) o.y = box.ry
+ if (o.y > size[1] - box.ry) o.y = size[1] - box.ry
}
}
@@ -357,6 +359,9 @@ function update() {
)
var nodeEnter = node.enter().append("g")
+ .attr("id", function (d) {
+ return d.id
+ })
.attr("class", "node")
.on("mouseover", fade(.2))
.on("mouseout", fade(1))
@@ -441,6 +446,24 @@ function update() {
show_node(hashstr)
}
+function bounding_box(d) {
+ var c = d.firstChild
+ var r = {}
+ switch(c.nodeName) {
+ case "ellipse":
+ r.rx = c.rx.animVal.value
+ r.ry = c.ry.animVal.value
+ break;
+ case "circle":
+ r.rx = r.rz = c.r.animVal.value
+ break;
+ default:
+ r.rx = r.ry = 10
+ }
+
+ return r
+}
+
reload()
var timer = window.setInterval(reload, 30000)