// Generated by CoffeeScript 1.10.0 (function() { var arc, color, color_opacity, get_color, height, lod, radius, set_size, svg, width, zoom, zoomable_layer; width = 960; height = 500; radius = Math.min(width, height) / 2.2; color_opacity = 0.7; svg = d3.select('svg').attr({ width: width, height: height, viewBox: (-width / 10) + " " + (-height / 5) + " " + width + " " + height }); zoomable_layer = svg.append('g'); zoom = d3.behavior.zoom().scaleExtent([1, 10]).on('zoom', function() { zoomable_layer.attr({ transform: "translate(" + (zoom.translate()) + ")scale(" + (zoom.scale()) + ")" }); zoomable_layer.selectAll('.semantic_zoom').attr({ transform: "scale(" + (1 / zoom.scale()) + ")" }); return lod(zoom.scale()); }); svg.call(zoom); lod = function(z) { return zoomable_layer.selectAll('.semantic_zoom').attr({ display: function(d) { if (40 / z < d.dx * Math.pow(d.dy, 0.30)) { return 'inline'; } else { return 'none'; } } }); }; arc = d3.svg.arc().startAngle(function(d) { return d.x; }).endAngle(function(d) { return d.x + d.dx; }).innerRadius(function(d) { return Math.pow(d.y, 0.4); }).outerRadius(function(d) { return Math.pow(d.y + d.dy, 0.4); }); color = d3.scale.category20(); get_color = function(node) { if (node['tree_root'] != null) { return color(node.name); } else { return get_color(node.parent); } }; set_size = function(d) { var sum; if (d.children == null) { d.size = 1; return 1; } else { sum = 1; d.children.forEach(function(c) { return sum += set_size(c); }); d.size = sum; return sum; } return d; }; d3.json('tree.json', function(error, forest) { var draw_tree, max_size; tree_utils.canonical_sort(forest); max_size = d3.max(forest.children, function(tree) { set_size(tree); return tree.size; }); draw_tree = function(i, root) { var enter_labels, labels, nodes, partition, sectors, tree; set_size(root); partition = d3.layout.partition().size([2 * Math.PI, radius * radius * (root.size / max_size)]).sort(null).value(function(d) { return d.size; }); nodes = partition.nodes(root); tree = zoomable_layer.append('g').attr({ transform: "translate(" + ((i % 4) * 250) + "," + (Math.floor(i / 4) * 160) + ")" }); sectors = tree.selectAll(".sector").data(nodes); sectors.enter().append('path').attr({ "class": "sector", d: arc, fill: function(d) { if (d['tree_root'] != null) { return '#f2f2f2'; } else { return get_color(d); } } }).append('title').text(function(d) { return d.name; }); sectors.exit().remove(); labels = tree.selectAll('.label').data(nodes); enter_labels = labels.enter().append('g').attr({ "class": 'label', transform: function(d) { if (d['tree_root'] != null) { return "translate(0,0)"; } else { return "translate(" + ((Math.pow(d.y + d.dy / 2, 0.4)) * Math.cos(d.x + d.dx / 2 - Math.PI / 2)) + ", " + ((Math.pow(d.y + d.dy / 2, 0.4)) * Math.sin(d.x + d.dx / 2 - Math.PI / 2)) + ")"; } } }); enter_labels.append('text').attr({ "class": 'halo semantic_zoom', dy: '0.35em' }).text(function(d) { return d.name.replace('http://ontologies.semanticarts.com/', ''); }); return enter_labels.append('text').attr({ "class": 'semantic_zoom', dy: '0.35em' }).text(function(d) { return d.name.replace('http://ontologies.semanticarts.com/', ''); }); }; forest.children.forEach(function(tree_root, i) { return draw_tree(i, tree_root); }); return lod(1); }); }).call(this);