UNPKG

@future-grid/fgp-graph

Version:

fgp-graph is a chart lib based on Dygraphs

133 lines (105 loc) 13.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var utils = /*#__PURE__*/ function () { function utils() { _classCallCheck(this, utils); } _createClass(utils, null, [{ key: "getContextPixelRatio", value: function getContextPixelRatio(context) { try { var devicePixelRatio = window.devicePixelRatio; var backingStoreRatio = context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; if (devicePixelRatio !== undefined) { return devicePixelRatio / backingStoreRatio; } else { // At least devicePixelRatio must be defined for this ratio to make sense. // We default backingStoreRatio to 1: this does not exist on some browsers // (i.e. desktop Chrome). return 1; } } catch (e) { return 1; } } }]); return utils; }(); exports["default"] = utils; _defineProperty(utils, "getContext", function (canvas) { return canvas.getContext("2d"); }); _defineProperty(utils, "createCanvas", function () { return document.createElement('canvas'); }); _defineProperty(utils, "findPos", function (obj) { var p = obj.getBoundingClientRect(), w = window, d = document.documentElement; return { x: p.left + (w.pageXOffset || d.scrollLeft), y: p.top + (w.pageYOffset || d.scrollTop) }; }); _defineProperty(utils, "cancelEvent", function (e) { e = e ? e : window.event; if (e.stopPropagation) { e.stopPropagation(); } if (e.preventDefault) { e.preventDefault(); } e.cancelBubble = true; e.cancel = true; e.returnValue = false; return false; }); _defineProperty(utils, "addEvent", function (element, type, fn) { element.addEventListener(type, fn, false); }); _defineProperty(utils, "removeEvent", function (elem, type, fn) { elem.removeEventListener(type, fn, false); }); _defineProperty(utils, "pageX", function (e) { return !e.pageX || e.pageX < 0 ? 0 : e.pageX; }); _defineProperty(utils, "pageY", function (e) { return !e.pageY || e.pageY < 0 ? 0 : e.pageX; }); _defineProperty(utils, "dragGetX", function (e, context) { return utils.pageX(e) - context.px; }); _defineProperty(utils, "dragGetY", function (e, context) { return utils.pageY(e) - context.px; }); _defineProperty(utils, "log10", function (x) { return Math.log(x); }); _defineProperty(utils, "LOG_SCALE", 10); _defineProperty(utils, "LN_TEN", Math.log(utils.LOG_SCALE)); _defineProperty(utils, "findBestCollection", function (collection, dateWindow) { // find if there is someone locked. var chosenCollection = collection.find(function (value, index, obj) { return !!value.locked; }); if (chosenCollection) { return chosenCollection; } else { chosenCollection = collection.find(function (value, index, obj) { if (value.threshold) { return dateWindow[1] - (dateWindow[0] - value.interval) <= value.threshold.max; } }); return chosenCollection; } }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRyYXMvdXRpbHMudHMiXSwibmFtZXMiOlsidXRpbHMiLCJjb250ZXh0IiwiZGV2aWNlUGl4ZWxSYXRpbyIsIndpbmRvdyIsImJhY2tpbmdTdG9yZVJhdGlvIiwid2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsIm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCJtc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCJvQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsImJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCJ1bmRlZmluZWQiLCJlIiwiY2FudmFzIiwiZ2V0Q29udGV4dCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm9iaiIsInAiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3IiwiZCIsImRvY3VtZW50RWxlbWVudCIsIngiLCJsZWZ0IiwicGFnZVhPZmZzZXQiLCJzY3JvbGxMZWZ0IiwieSIsInRvcCIsInBhZ2VZT2Zmc2V0Iiwic2Nyb2xsVG9wIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImNhbmNlbEJ1YmJsZSIsImNhbmNlbCIsInJldHVyblZhbHVlIiwiZWxlbWVudCIsInR5cGUiLCJmbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlbGVtIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInBhZ2VYIiwicGFnZVkiLCJweCIsIk1hdGgiLCJsb2ciLCJMT0dfU0NBTEUiLCJjb2xsZWN0aW9uIiwiZGF0ZVdpbmRvdyIsImNob3NlbkNvbGxlY3Rpb24iLCJmaW5kIiwidmFsdWUiLCJpbmRleCIsImxvY2tlZCIsInRocmVzaG9sZCIsImludGVydmFsIiwibWF4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7SUFFcUJBLEs7Ozs7Ozs7Ozt5Q0FxQldDLE8sRUFBc0I7QUFDOUMsVUFBSTtBQUNBLFlBQUlDLGdCQUFnQixHQUFHQyxNQUFNLENBQUNELGdCQUE5QjtBQUNBLFlBQUlFLGlCQUFpQixH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LENBQWdCRSxHQUE5RTtBQUNIO0FBQ0osS0FKa0IsQ0FBbkI7QUFLQSxXQUFPUCxnQkFBUDtBQUNIO0FBRUosQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7R3JhcGhDb2xsZWN0aW9ufSBmcm9tIFwiLi4vbWV0YWRhdGEvY29uZmlndXJhdGlvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgdXRpbHMge1xuXG4gICAgc3RhdGljIGdldENvbnRleHQgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICB9O1xuXG4gICAgc3RhdGljIGNyZWF0ZUNhbnZhcyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIH07XG5cbiAgICBzdGF0aWMgZmluZFBvcyA9IChvYmo6IEhUTUxFbGVtZW50KTogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9ID0+IHtcbiAgICAgICAgY29uc3QgcCA9IG9iai5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgIHcgPSB3aW5kb3csXG4gICAgICAgICAgICBkID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBwLmxlZnQgKyAody5wYWdlWE9mZnNldCB8fCBkLnNjcm9sbExlZnQpLFxuICAgICAgICAgICAgeTogcC50b3AgKyAody5wYWdlWU9mZnNldCB8fCBkLnNjcm9sbFRvcClcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgc3RhdGljIGdldENvbnRleHRQaXhlbFJhdGlvKGNvbnRleHQ6IGFueSk6IG51bWJlciB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgZGV2aWNlUGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICAgICAgbGV0IGJhY2tpbmdTdG9yZVJhdGlvID0gY29udGV4dC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAgICAgY29udGV4dC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAgICAgY29udGV4dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgICAgICBjb250ZXh0Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAgICAgY29udGV4dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IDE7XG4gICAgICAgICAgICBpZiAoZGV2aWNlUGl4ZWxSYXRpbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZVBpeGVsUmF0aW8gLyBiYWNraW5nU3RvcmVSYXRpbztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQXQgbGVhc3QgZGV2aWNlUGl4ZWxSYXRpbyBtdXN0IGJlIGRlZmluZWQgZm9yIHRoaXMgcmF0aW8gdG8gbWFrZSBzZW5zZS5cbiAgICAgICAgICAgICAgICAvLyBXZSBkZWZhdWx0IGJhY2tpbmdTdG9yZVJhdGlvIHRvIDE6IHRoaXMgZG9lcyBub3QgZXhpc3Qgb24gc29tZSBicm93c2Vyc1xuICAgICAgICAgICAgICAgIC8vIChpLmUuIGRlc2t0b3AgQ2hyb21lKS5cbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgc3RhdGljIGNhbmNlbEV2ZW50ID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBlID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgZS5jYW5jZWwgPSB0cnVlO1xuICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgc3RhdGljIGFkZEV2ZW50ID0gKGVsZW1lbnQ6IERvY3VtZW50LCB0eXBlOiBhbnksIGZuOiBhbnkpID0+IHtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBmYWxzZSk7XG4gICAgfTtcblxuICAgIHN0YXRpYyByZW1vdmVFdmVudCA9IChlbGVtOiBEb2N1bWVudCwgdHlwZTogYW55LCBmbjogYW55KSA9PiB7XG4gICAgICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgZmFsc2UpO1xuICAgIH07XG5cbiAgICBzdGF0aWMgcGFnZVggPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gKCFlLnBhZ2VYIHx8IGUucGFnZVggPCAwKSA/IDAgOiBlLnBhZ2VYO1xuICAgIH07XG5cbiAgICBzdGF0aWMgcGFnZVkgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gKCFlLnBhZ2VZIHx8IGUucGFnZVkgPCAwKSA/IDAgOiBlLnBhZ2VYO1xuICAgIH07XG5cbiAgICBzdGF0aWMgZHJhZ0dldFggPSAoZTogTW91c2VFdmVudCwgY29udGV4dDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB1dGlscy5wYWdlWChlKSAtIGNvbnRleHQucHg7XG4gICAgfTtcblxuICAgIHN0YXRpYyBkcmFnR2V0WSA9IChlOiBNb3VzZUV2ZW50LCBjb250ZXh0OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLnBhZ2VZKGUpIC0gY29udGV4dC5weDtcbiAgICB9O1xuXG4gICAgc3RhdGljIGxvZzEwID0gKHg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gTWF0aC5sb2coeCk7XG4gICAgfTtcblxuICAgIHN0YXRpYyBMT0dfU0NBTEUgPSAxMDtcblxuICAgIHN0YXRpYyBMTl9URU4gPSBNYXRoLmxvZyh1dGlscy5MT0dfU0NBTEUpO1xuXG4gICAgc3RhdGljIGZpbmRCZXN0Q29sbGVjdGlvbiA9IChjb2xsZWN0aW9uOiBHcmFwaENvbGxlY3Rpb25bXSwgZGF0ZVdpbmRvdzogW251bWJlciwgbnVtYmVyXSk6IEdyYXBoQ29sbGVjdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG5cbiAgICAgICAgLy8gZmluZCBpZiB0aGVyZSBpcyBzb21lb25lIGxvY2tlZC5cbiAgICAgICAgbGV0IGNob3NlbkNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uLmZpbmQoKHZhbHVlOiBHcmFwaENvbGxlY3Rpb24sIGluZGV4OiBudW1iZXIsIG9iajogR3JhcGhDb2xsZWN0aW9uW10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhIXZhbHVlLmxvY2tlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGNob3NlbkNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjaG9zZW5Db2xsZWN0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hvc2VuQ29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZmluZCgodmFsdWU6IEdyYXBoQ29sbGVjdGlvbiwgaW5kZXg6IG51bWJlciwgb2JqOiBHcmFwaENvbGxlY3Rpb25bXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkYXRlV2luZG93WzFdIC0gKGRhdGVXaW5kb3dbMF0gLSB2YWx1ZS5pbnRlcnZhbCkpIDw9ICh2YWx1ZS50aHJlc2hvbGQubWF4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjaG9zZW5Db2xsZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG59Il19