From d9fbba56368920b2d2ae5c04291d684263b2f2b0 Mon Sep 17 00:00:00 2001 From: Robert Konigsberg Date: Thu, 3 Jan 2013 21:48:06 -0500 Subject: [PATCH] Add plugins option to Dygraphs. Add demo-test. Add test. --- auto_tests/tests/plugins.js | 46 ++++++++++++++++++++++++++++++++ dygraph-options-reference.js | 7 +++++ dygraph.js | 7 +++-- tests/plugins.html | 62 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 auto_tests/tests/plugins.js create mode 100644 tests/plugins.html diff --git a/auto_tests/tests/plugins.js b/auto_tests/tests/plugins.js new file mode 100644 index 0000000..8dde4d8 --- /dev/null +++ b/auto_tests/tests/plugins.js @@ -0,0 +1,46 @@ +/** + * @fileoverview Tests for the plugins option. + * + * @author konigsberg@google.com (Robert Konigsberg) + */ +var pluginsTestCase = TestCase("plugins"); + +pluginsTestCase.prototype.setUp = function() { + document.body.innerHTML = "
"; +}; + +pluginsTestCase.prototype.tearDown = function() { +}; + +pluginsTestCase.prototype.testWillDrawChart = function() { + var draw = 0; + + var plugin = (function() { + var p = function() { + }; + + p.prototype.activate = function(g) { + return { + willDrawChart: this.willDrawChart + }; + }; + + p.prototype.willDrawChart = function(e) { + draw++; + }; + + return p; + })(); + + var data = "X,Y1,Y2\n" + + "0,1,1\n" + + "1,1,1\n" + + "2,1,1\n" + + "3,1,1\n" + ; + + var graph = document.getElementById("graph"); + var g = new Dygraph(graph, data, { plugins : [ plugin ] }); + + assertEquals(1, draw); +}; diff --git a/dygraph-options-reference.js b/dygraph-options-reference.js index 9110879..423c9bc 100644 --- a/dygraph-options-reference.js +++ b/dygraph-options-reference.js @@ -765,6 +765,12 @@ Dygraph.OPTIONS_REFERENCE = // "labels": ["Series"], "type": "Object", "description": "Defines per-series options. Its keys match the y-axis label names, and the values are dictionaries themselves that contain options specific to that series. When this option is missing, it falls back on the old-style of per-series options comingled with global options." + }, + "plugins": { + "default": "[]", + "labels": ["Configuration"], + "type": "array", + "description": "Defines per-graph plug-ins. Useful for per-graph customization" } } ; // @@ -797,6 +803,7 @@ Dygraph.OPTIONS_REFERENCE = // 'Value display/formatting', 'Zooming', 'Debugging', + 'Configuration', 'Deprecated' ]; var i; diff --git a/dygraph.js b/dygraph.js index 1ac7d43..29c343b 100644 --- a/dygraph.js +++ b/dygraph.js @@ -282,6 +282,8 @@ Dygraph.DEFAULT_ATTRS = { Dygraph.Plotters.linePlotter ], + plugins : [ ], + // per-axis options axes: { x: { @@ -452,8 +454,9 @@ Dygraph.prototype.__init__ = function(div, file, attrs) { // Activate plugins. this.plugins_ = []; - for (var i = 0; i < Dygraph.PLUGINS.length; i++) { - var Plugin = Dygraph.PLUGINS[i]; + var plugins = Dygraph.PLUGINS.concat(this.getOption('plugins')); + for (var i = 0; i < plugins.length; i++) { + var Plugin = plugins[i]; var pluginInstance = new Plugin(); var pluginDict = { plugin: pluginInstance, diff --git a/tests/plugins.html b/tests/plugins.html new file mode 100644 index 0000000..2d084d0 --- /dev/null +++ b/tests/plugins.html @@ -0,0 +1,62 @@ + + + + + plugins demo + + + + + + + +

Plugins Demo

+ +
+
+
+
+
+ + + -- 2.7.4