diff options
| author | Alon Levy <alon@pobox.com> | 2015-04-15 22:03:54 +0200 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2015-04-15 22:03:54 +0200 |
| commit | 03ceaee7b2b5ef8da1335d6cd51828d19e0ea325 (patch) | |
| tree | 697537e53c53f3817a33ef233471ef863568b3dc /src/client/view | |
| parent | ea6e01ead9464b60492ef376702ee0ccd3a830dc (diff) | |
client: add images using existing circles
Diffstat (limited to 'src/client/view')
| -rw-r--r-- | src/client/view/graph_view.js | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/src/client/view/graph_view.js b/src/client/view/graph_view.js index 83426b50..c28c2dd4 100644 --- a/src/client/view/graph_view.js +++ b/src/client/view/graph_view.js @@ -640,7 +640,9 @@ function GraphView(spec) { var nodeEnter = node.enter() .append("g") - .attr('id', function(d){ return d.id; }) // append node id to enable data->visual mapping + .attr('id', function(d) { + return d.id; + }) // append node id to enable data->visual mapping .call(drag); node.attr('class', function(d) { @@ -741,13 +743,65 @@ function GraphView(spec) { } } + var node_circle_radius = 10; + function filter_id(id) { + return id + '__node_filter'; + } + function feimage_id(id) { + return id + '__node_filter_feimage'; + } + function clip_path_id(id) { + return id + '__node_clip_path'; + } + function svg_url(id) { + return 'url(#' + id + ')'; + } + var filter_group = d3.select('.nodefilter-group').selectAll(".nodefilter") + .data(visible_nodes, function (d) { return d.id; }); + var filter = filter_group.enter() + .insert('filter') + .attr('class', 'nodefilter') + .attr('id', function(d) { + return filter_id(d.id); + }) + .attr('x', '0%') + .attr('y', '0%') + .attr('width', '100%') + .attr('height', '100%') + .insert('feImage') + .attr('class', 'nodefilter_feimage') + .attr('id', function (d) { return feimage_id(d.id); }); + + d3.selectAll('.nodefilter_feimage') + .data(visible_nodes, function (d) { return d.id; }) + .attr('xlink:href', function (d) { + return d['image-url']; + }); + if (!temporary) { + // FIXME: defs per graph + filter_group.exit().remove(); + } + + var clip_path = nodeEnter + .append('clipPath') + .attr('id', function (d) { return clip_path_id(d.id); }) + .append('circle') + .attr('r', node_circle_radius) + .attr('cx', 0) + .attr('cy', 0); circle = nodeEnter.insert("circle"); node.select('g.node > circle') .attr("class", function(d) { return d.type + " " + d.state + " circle graph"; }) .attr("r", function(d) { - return 10; + return node_circle_radius; + }) + .attr("filter", function (d) { + return urlImage(d['image-url']) ? svg_url(filter_id(d.id)) : ''; + }) + .attr("clip-path", function (d) { + return urlImage(d['image-url']) ? svg_url(clip_path_id(d.id)) : ''; }) .on("click", node__click_handler); circle.append("svg:image") |
