+ var graph = document.getElementById("graph");
+ var g = new Dygraph(graph, data, {plugins: [plugin]});
+
+ assert.equal(1, draw);
+});
+
+it('testPassingInstance', function() {
+ // You can also pass an instance of a plugin instead of a Plugin class.
+ var draw = 0;
+ var p = {
+ activate: function(g) {
+ return {
+ willDrawChart: this.willDrawChart
+ }
+ },
+ willDrawChart: function(g) {
+ draw++;
+ }
+ };
+
+ var graph = document.getElementById("graph");
+ var g = new Dygraph(graph, data, {plugins: [p]});
+
+ assert.equal(1, draw);
+});
+
+it('testPreventDefault', function() {
+ var data1 = "X,Y\n" +
+ "20,-1\n" +
+ "21,0\n" +
+ "22,1\n" +
+ "23,0\n";
+
+ var events = [];
+
+ var p = {
+ pointClickPreventDefault: false,
+ clickPreventDefault: false,
+ activate: function(g) {
+ return {
+ pointClick: this.pointClick,
+ click: this.click
+ }
+ },
+ pointClick: function(e) {
+ events.push(['plugin.pointClick', e.point.xval, e.point.yval]);
+ if (this.pointClickPreventDefault) {
+ e.preventDefault();
+ }
+ },
+ click: function(e) {
+ events.push(['plugin.click', e.xval]);
+ if (this.clickPreventDefault) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ var graph = document.getElementById("graph");
+ var g = new Dygraph(graph, data1, {
+ plugins: [p],
+ clickCallback: function(e, x) {
+ events.push(['clickCallback', x]);
+ },
+ pointClickCallback: function(e, pt) {
+ events.push(['pointClickCallback', pt.xval, pt.yval]);
+ }
+ });
+
+ // Click the point at x=20
+ function clickOnPoint() {
+ var x = 58, y = 275;
+ DygraphOps.dispatchMouseDown_Point(g, x, y);
+ DygraphOps.dispatchMouseMove_Point(g, x, y);
+ DygraphOps.dispatchMouseUp_Point(g, x, y);
+ }
+
+ p.pointClickPreventDefault = false;
+ p.clickPreventDefault = false;
+ clickOnPoint();
+ assert.deepEqual([
+ ['plugin.pointClick', 20, -1],
+ ['pointClickCallback', 20, -1],
+ ['plugin.click', 20],
+ ['clickCallback', 20]
+ ], events);
+
+ events = [];
+ p.pointClickPreventDefault = true;
+ p.clickPreventDefault = false;
+ clickOnPoint();
+ assert.deepEqual([
+ ['plugin.pointClick', 20, -1]
+ ], events);
+
+ events = [];
+ p.pointClickPreventDefault = false;
+ p.clickPreventDefault = true;
+ clickOnPoint();
+ assert.deepEqual([
+ ['plugin.pointClick', 20, -1],
+ ['pointClickCallback', 20, -1],
+ ['plugin.click', 20]
+ ], events);
+});
+
+it('testEventSequence', function() {
+ var events = [];
+
+ var eventLogger = function(name) {
+ return function(e) {
+ events.push(name);
+ };
+ };
+
+ var p = {
+ activate: function(g) {
+ return {
+ clearChart: eventLogger('clearChart'),
+ predraw: eventLogger('predraw'),
+ willDrawChart: eventLogger('willDrawChart'),
+ didDrawChart: eventLogger('didDrawChart'),
+ dataWillUpdate: eventLogger('dataWillUpdate'),
+ dataDidUpdate: eventLogger('dataDidUpdate')
+ }
+ }
+ };