pluginOptions: {}
};
- var registerer = (function(pluginDict) {
- return {
- addEventListener: function(eventName, callback) {
- // TODO(danvk): validate eventName.
- pluginDict.events[eventName] = callback;
- }
- };
- })(pluginDict);
- pluginInstance.activate(this, registerer);
- // TODO(danvk): prevent activate() from holding a reference to registerer.
+ var handlers = pluginInstance.activate(this);
+ for (var eventName in handlers) {
+ pluginDict.events[eventName] = handlers[eventName];
+ }
this.plugins_.push(pluginDict);
}
2. dygraph.plotter_.area
- Registers for a "predraw" event, which should be renamed.
- I call calculateEmWidthInDiv more often than needed.
-- Why can't I call "this.deselect(e)" instead of "legend.deselect.call(this, e)"?
*/
* - Reading your own options
* - DOM manipulation
* - Registering event listeners
+ *
+ * @param {Dygraph} g Graph instance.
+ * @return {object.<string, function(ev)>} Mapping of event names to callbacks.
*/
-legend.prototype.activate = function(g, r) {
+legend.prototype.activate = function(g) {
var div;
var divWidth = g.getOption('labelsDivWidth');
this.legend_div_ = div;
- r.addEventListener('select', legend.select);
- r.addEventListener('deselect', legend.deselect);
-
- // TODO(danvk): rethink the name "predraw" before we commit to it in any API.
- r.addEventListener('predraw', legend.predraw);
- r.addEventListener('drawChart', legend.drawChart);
+ return {
+ select: this.select,
+ deselect: this.deselect,
+ // TODO(danvk): rethink the name "predraw" before we commit to it in any API.
+ predraw: this.predraw,
+ drawChart: this.drawChart
+ };
};
// Needed for dashed lines.
return oneEmWidth;
};
-legend.select = function(e) {
+legend.prototype.select = function(e) {
var xValue = e.selectedX;
var points = e.selectedPoints;
this.legend_div_.innerHTML = html;
};
-legend.deselect = function(e) {
+legend.prototype.deselect = function(e) {
var oneEmWidth = calculateEmWidthInDiv(this.legend_div_);
var html = generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth);
this.legend_div_.innerHTML = html;
};
-legend.drawChart = function(e) {
- // TODO(danvk): why doesn't this.deselect(e) work here?
- legend.deselect.call(this, e);
+legend.prototype.drawChart = function(e) {
+ this.deselect(e);
}
// Right edge should be flush with the right edge of the charting area (which
* - its top edge is flush with the top edge of the charting area
* @private
*/
-legend.predraw = function(e) {
+legend.prototype.predraw = function(e) {
// Don't touch a user-specified labelsDiv.
if (!this.is_generated_div_) return;