d3-v4-contextmenu
context menu with d3.js v4.
Demo
http://plnkr.co/edit/i84SdzHnhKwHgZB21lpe?p=info
Install
npm i d3v4-contextmenu
Useage
<script type="text/javascript" src="https://d3js.org/d3.v4.min.js"></script>
<script type="text/javascript" src="./dist/d3-v4-contextmenu.js"></script>
<script type="text/javascript">
var items = [
{
label: function (d) {
return d;
},
items: [
{
label: "red",
onClick: function () {
this.style.fill = "#ff0000";
}
},
{
label: "blue",
action: function () {
this.style.fill = "#0000ff";
}
},
{
label: "index",
action: function (d, i) {
alert(i + 1);
}
}
]
},
{
label: "background",
items: [
{
label: "red",
onClick: function () {
svg.node().style.background = "#ff0000";
}
},
{
label: "blue",
action: function () {
svg.node().style.background = "#0000ff";
}
},
{
label: "pink",
action: function() {
alert('pink is clicked!');
},
items: function() {
return [
{
label: "deep pink",
action: function () {
svg.node().style.background = "#ff1493";
}
},
{
label() {
return "shocking pink";
},
action() {
svg.node().style.background = "#fc0fc0";
}
}
];
}
}
]
}
];
svg = d3.select('#main')
.append('svg')
.attr('width', '100%')
.attr('height', '100%');
svg.selectAll('circles')
.data(['circle1', 'circle2', 'circle3', 'circle4'])
.enter()
.append('circle')
.attr('r', 20)
.attr('fill', '#ff6040')
.attr('cx', function(d, i) {
return (i + 1) * 100;
})
.attr('cy', function() {
return 100;
})
.on('contextmenu', d3.contextmenu(items));
svg.selectAll('rect')
.data(['rect1', 'rect2', 'rect3', 'rect4'])
.enter()
.append('rect')
.attr('x', function(d, i) {
return (i + 1) * 100 - 20;
})
.attr('y', function() {
return 200;
})
.attr('width', 40)
.attr('height', 40)
.attr('fill', '#8bff5b')
.on('contextmenu', d3.contextmenu(items));
</script>
or
import {contextmenu} from "d3v4-contextmenu";
rect.on('contextmenu', contextmenu(items));