dygraphs
Version:
dygraphs is a fast, flexible open source JavaScript charting library.
110 lines (103 loc) • 13.5 kB
JavaScript
// Copyright (c) 2013 Google, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
/* loader wrapper to allow browser use and ES6 imports */
(function _extras_unzoom_wrapper() {
'use strict';
var Dygraph;
if (window.Dygraph) {
Dygraph = window.Dygraph;
} else if (typeof module !== 'undefined') {
Dygraph = require('../dygraph');
if (typeof Dygraph.NAME === 'undefined' && typeof Dygraph["default"] !== 'undefined') Dygraph = Dygraph["default"];
}
/* end of loader wrapper header */
/**
* @fileoverview Plug-in for providing unzoom-on-hover.
*
* @author konigsberg@google.com (Robert Konigsberg)
*/
Dygraph.Plugins.Unzoom = function _extras_unzoom_closure() {
"use strict";
/**
* Create a new instance.
*
* @constructor
*/
var unzoom = function unzoom() {
this.button_ = null;
// True when the mouse is over the canvas. Must be tracked
// because the unzoom button state can change even when the
// mouse-over state hasn't.
this.over_ = false;
};
unzoom.prototype.toString = function toString() {
return 'Unzoom Plugin';
};
unzoom.prototype.activate = function activate(g) {
return {
willDrawChart: this.willDrawChart
};
};
unzoom.prototype.willDrawChart = function willDrawChart(e) {
var g = e.dygraph;
if (this.button_ !== null) {
// short-circuit: show the button only when we're moused over, and zoomed in.
var showButton = g.isZoomed() && this.over_;
this.show(showButton);
return;
}
this.button_ = document.createElement('button');
this.button_.innerHTML = 'Reset Zoom';
this.button_.style.display = 'none';
this.button_.style.position = 'absolute';
var area = g.plotter_.area;
this.button_.style.top = area.y + 4 + 'px';
this.button_.style.left = area.x + 4 + 'px';
this.button_.style.zIndex = 11;
var parent = g.graphDiv;
parent.insertBefore(this.button_, parent.firstChild);
var self = this;
this.button_.onclick = function onclick() {
g.resetZoom();
};
g.addAndTrackEvent(parent, 'mouseover', function mouseover() {
if (g.isZoomed()) {
self.show(true);
}
self.over_ = true;
});
g.addAndTrackEvent(parent, 'mouseout', function mouseout() {
self.show(false);
self.over_ = false;
});
};
unzoom.prototype.show = function show(enabled) {
this.button_.style.display = enabled ? '' : 'none';
};
unzoom.prototype.destroy = function destroy() {
this.button_.parentElement.removeChild(this.button_);
};
return unzoom;
}();
/* loader wrapper */
Dygraph._require.add('dygraphs/src/extras/unzoom.js', /* exports */{});
})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXh0cmFzX3Vuem9vbV93cmFwcGVyIiwiRHlncmFwaCIsIndpbmRvdyIsIm1vZHVsZSIsInJlcXVpcmUiLCJOQU1FIiwiUGx1Z2lucyIsIlVuem9vbSIsIl9leHRyYXNfdW56b29tX2Nsb3N1cmUiLCJ1bnpvb20iLCJidXR0b25fIiwib3Zlcl8iLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImFjdGl2YXRlIiwiZyIsIndpbGxEcmF3Q2hhcnQiLCJlIiwiZHlncmFwaCIsInNob3dCdXR0b24iLCJpc1pvb21lZCIsInNob3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJzdHlsZSIsImRpc3BsYXkiLCJwb3NpdGlvbiIsImFyZWEiLCJwbG90dGVyXyIsInRvcCIsInkiLCJsZWZ0IiwieCIsInpJbmRleCIsInBhcmVudCIsImdyYXBoRGl2IiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsInNlbGYiLCJvbmNsaWNrIiwicmVzZXRab29tIiwiYWRkQW5kVHJhY2tFdmVudCIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiZW5hYmxlZCIsImRlc3Ryb3kiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJfcmVxdWlyZSIsImFkZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRyYXMvdW56b29tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxMyBHb29nbGUsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vKiBsb2FkZXIgd3JhcHBlciB0byBhbGxvdyBicm93c2VyIHVzZSBhbmQgRVM2IGltcG9ydHMgKi9cbihmdW5jdGlvbiBfZXh0cmFzX3Vuem9vbV93cmFwcGVyKCkge1xuJ3VzZSBzdHJpY3QnO1xudmFyIER5Z3JhcGg7XG5pZiAod2luZG93LkR5Z3JhcGgpIHtcbiAgRHlncmFwaCA9IHdpbmRvdy5EeWdyYXBoO1xufSBlbHNlIGlmICh0eXBlb2YobW9kdWxlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgRHlncmFwaCA9IHJlcXVpcmUoJy4uL2R5Z3JhcGgnKTtcbiAgaWYgKHR5cGVvZihEeWdyYXBoLk5BTUUpID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoRHlncmFwaC5kZWZhdWx0KSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgRHlncmFwaCA9IER5Z3JhcGguZGVmYXVsdDtcbn1cbi8qIGVuZCBvZiBsb2FkZXIgd3JhcHBlciBoZWFkZXIgKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFBsdWctaW4gZm9yIHByb3ZpZGluZyB1bnpvb20tb24taG92ZXIuXG4gKlxuICogQGF1dGhvciBrb25pZ3NiZXJnQGdvb2dsZS5jb20gKFJvYmVydCBLb25pZ3NiZXJnKVxuICovXG5EeWdyYXBoLlBsdWdpbnMuVW56b29tID0gKGZ1bmN0aW9uIF9leHRyYXNfdW56b29tX2Nsb3N1cmUoKSB7XG5cbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICB2YXIgdW56b29tID0gZnVuY3Rpb24gdW56b29tKCkge1xuICAgIHRoaXMuYnV0dG9uXyA9IG51bGw7XG5cbiAgICAvLyBUcnVlIHdoZW4gdGhlIG1vdXNlIGlzIG92ZXIgdGhlIGNhbnZhcy4gTXVzdCBiZSB0cmFja2VkXG4gICAgLy8gYmVjYXVzZSB0aGUgdW56b29tIGJ1dHRvbiBzdGF0ZSBjYW4gY2hhbmdlIGV2ZW4gd2hlbiB0aGVcbiAgICAvLyBtb3VzZS1vdmVyIHN0YXRlIGhhc24ndC5cbiAgICB0aGlzLm92ZXJfID0gZmFsc2U7XG4gIH07XG5cbiAgdW56b29tLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnVW56b29tIFBsdWdpbic7XG4gIH07XG5cbiAgdW56b29tLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIGFjdGl2YXRlKGcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lsbERyYXdDaGFydDogdGhpcy53aWxsRHJhd0NoYXJ0XG4gICAgfTtcbiAgfTtcblxuICB1bnpvb20ucHJvdG90eXBlLndpbGxEcmF3Q2hhcnQgPSBmdW5jdGlvbiB3aWxsRHJhd0NoYXJ0KGUpIHtcbiAgICB2YXIgZyA9IGUuZHlncmFwaDtcblxuICAgIGlmICh0aGlzLmJ1dHRvbl8gIT09IG51bGwpIHtcbiAgICAgIC8vIHNob3J0LWNpcmN1aXQ6IHNob3cgdGhlIGJ1dHRvbiBvbmx5IHdoZW4gd2UncmUgbW91c2VkIG92ZXIsIGFuZCB6b29tZWQgaW4uXG4gICAgICB2YXIgc2hvd0J1dHRvbiA9IGcuaXNab29tZWQoKSAmJiB0aGlzLm92ZXJfO1xuICAgICAgdGhpcy5zaG93KHNob3dCdXR0b24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnV0dG9uXyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIHRoaXMuYnV0dG9uXy5pbm5lckhUTUwgPSAnUmVzZXQgWm9vbSc7XG4gICAgdGhpcy5idXR0b25fLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5idXR0b25fLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICB2YXIgYXJlYSA9IGcucGxvdHRlcl8uYXJlYTtcbiAgICB0aGlzLmJ1dHRvbl8uc3R5bGUudG9wID0gKGFyZWEueSArIDQpICsgJ3B4JztcbiAgICB0aGlzLmJ1dHRvbl8uc3R5bGUubGVmdCA9IChhcmVhLnggKyA0KSArICdweCc7XG4gICAgdGhpcy5idXR0b25fLnN0eWxlLnpJbmRleCA9IDExO1xuICAgIHZhciBwYXJlbnQgPSBnLmdyYXBoRGl2O1xuICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGhpcy5idXR0b25fLCBwYXJlbnQuZmlyc3RDaGlsZCk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5idXR0b25fLm9uY2xpY2sgPSBmdW5jdGlvbiBvbmNsaWNrKCkge1xuICAgICAgZy5yZXNldFpvb20oKTtcbiAgICB9O1xuXG4gICAgZy5hZGRBbmRUcmFja0V2ZW50KHBhcmVudCwgJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIG1vdXNlb3ZlcigpIHtcbiAgICAgIGlmIChnLmlzWm9vbWVkKCkpIHtcbiAgICAgICAgc2VsZi5zaG93KHRydWUpO1xuICAgICAgfVxuICAgICAgc2VsZi5vdmVyXyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBnLmFkZEFuZFRyYWNrRXZlbnQocGFyZW50LCAnbW91c2VvdXQnLCBmdW5jdGlvbiBtb3VzZW91dCgpIHtcbiAgICAgIHNlbGYuc2hvdyhmYWxzZSk7XG4gICAgICBzZWxmLm92ZXJfID0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgdW56b29tLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gc2hvdyhlbmFibGVkKSB7XG4gICAgdGhpcy5idXR0b25fLnN0eWxlLmRpc3BsYXkgPSBlbmFibGVkID8gJycgOiAnbm9uZSc7XG4gIH07XG5cbiAgdW56b29tLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmJ1dHRvbl8ucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmJ1dHRvbl8pO1xuICB9O1xuXG4gIHJldHVybiB1bnpvb207XG5cbn0pKCk7XG5cbi8qIGxvYWRlciB3cmFwcGVyICovXG5EeWdyYXBoLl9yZXF1aXJlLmFkZCgnZHlncmFwaHMvc3JjL2V4dHJhcy91bnpvb20uanMnLCAvKiBleHBvcnRzICovIHt9KTtcbn0pKCk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtB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
;