UNPKG

dygraphs

Version:

dygraphs is a fast, flexible open source JavaScript charting library.

128 lines (121 loc) 16 kB
"use strict"; /** * @license * Copyright 2011 Dan Vanderkam (danvdk@gmail.com) * MIT-licenced: https://opensource.org/license/MIT */ /** * @fileoverview * Including this file will add several additional shapes to Dygraph.Circles * which can be passed to drawPointCallback. * See tests/custom-circles.html for usage. */ /* loader wrapper to allow browser use and ES6 imports */ (function _extras_shapes_closure() { '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 */ /** * @param {!CanvasRenderingContext2D} ctx the canvas context * @param {number} sides the number of sides in the shape. * @param {number} radius the radius of the image. * @param {number} cx center x coordate * @param {number} cy center y coordinate * @param {number=} rotationRadians the shift of the initial angle, in radians. * @param {number=} delta the angle shift for each line. If missing, creates a * regular polygon. */ var regularShape = function regularShape(ctx, sides, radius, cx, cy, rotationRadians, delta) { rotationRadians = rotationRadians || 0; delta = delta || Math.PI * 2 / sides; ctx.beginPath(); var initialAngle = rotationRadians; var angle = initialAngle; var computeCoordinates = function computeCoordinates() { var x = cx + Math.sin(angle) * radius; var y = cy + -Math.cos(angle) * radius; return [x, y]; }; var initialCoordinates = computeCoordinates(); var x = initialCoordinates[0]; var y = initialCoordinates[1]; ctx.moveTo(x, y); for (var idx = 0; idx < sides; idx++) { angle = idx == sides - 1 ? initialAngle : angle + delta; var coords = computeCoordinates(); ctx.lineTo(coords[0], coords[1]); } ctx.fill(); ctx.stroke(); }; /** * TODO(danvk): be more specific on the return type. * @param {number} sides * @param {number=} rotationRadians * @param {number=} delta * @return {Function} * @private */ var shapeFunction = function shapeFunction(sides, rotationRadians, delta) { return function shapedFunction(g, name, ctx, cx, cy, color, radius) { ctx.strokeStyle = color; ctx.fillStyle = "white"; regularShape(ctx, sides, radius, cx, cy, rotationRadians, delta); }; }; var customCircles = { TRIANGLE: shapeFunction(3), SQUARE: shapeFunction(4, Math.PI / 4), DIAMOND: shapeFunction(4), PENTAGON: shapeFunction(5), HEXAGON: shapeFunction(6), CIRCLE: function CIRCLE(g, name, ctx, cx, cy, color, radius) { ctx.beginPath(); ctx.strokeStyle = color; ctx.fillStyle = "white"; ctx.arc(cx, cy, radius, 0, 2 * Math.PI, false); ctx.fill(); ctx.stroke(); }, STAR: shapeFunction(5, 0, 4 * Math.PI / 5), PLUS: function PLUS(g, name, ctx, cx, cy, color, radius) { ctx.strokeStyle = color; ctx.beginPath(); ctx.moveTo(cx + radius, cy); ctx.lineTo(cx - radius, cy); ctx.closePath(); ctx.stroke(); ctx.beginPath(); ctx.moveTo(cx, cy + radius); ctx.lineTo(cx, cy - radius); ctx.closePath(); ctx.stroke(); }, EX: function EX(g, name, ctx, cx, cy, color, radius) { ctx.strokeStyle = color; ctx.beginPath(); ctx.moveTo(cx + radius, cy + radius); ctx.lineTo(cx - radius, cy - radius); ctx.closePath(); ctx.stroke(); ctx.beginPath(); ctx.moveTo(cx + radius, cy - radius); ctx.lineTo(cx - radius, cy + radius); ctx.closePath(); ctx.stroke(); } }; for (var k in customCircles) { if (!customCircles.hasOwnProperty(k)) continue; Dygraph.Circles[k] = customCircles[k]; } /* closure and loader wrapper */ Dygraph._require.add('dygraphs/src/extras/shapes.js', /* exports */{}); })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXh0cmFzX3NoYXBlc19jbG9zdXJlIiwiRHlncmFwaCIsIndpbmRvdyIsIm1vZHVsZSIsInJlcXVpcmUiLCJOQU1FIiwicmVndWxhclNoYXBlIiwiY3R4Iiwic2lkZXMiLCJyYWRpdXMiLCJjeCIsImN5Iiwicm90YXRpb25SYWRpYW5zIiwiZGVsdGEiLCJNYXRoIiwiUEkiLCJiZWdpblBhdGgiLCJpbml0aWFsQW5nbGUiLCJhbmdsZSIsImNvbXB1dGVDb29yZGluYXRlcyIsIngiLCJzaW4iLCJ5IiwiY29zIiwiaW5pdGlhbENvb3JkaW5hdGVzIiwibW92ZVRvIiwiaWR4IiwiY29vcmRzIiwibGluZVRvIiwiZmlsbCIsInN0cm9rZSIsInNoYXBlRnVuY3Rpb24iLCJzaGFwZWRGdW5jdGlvbiIsImciLCJuYW1lIiwiY29sb3IiLCJzdHJva2VTdHlsZSIsImZpbGxTdHlsZSIsImN1c3RvbUNpcmNsZXMiLCJUUklBTkdMRSIsIlNRVUFSRSIsIkRJQU1PTkQiLCJQRU5UQUdPTiIsIkhFWEFHT04iLCJDSVJDTEUiLCJhcmMiLCJTVEFSIiwiUExVUyIsImNsb3NlUGF0aCIsIkVYIiwiayIsImhhc093blByb3BlcnR5IiwiQ2lyY2xlcyIsIl9yZXF1aXJlIiwiYWRkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4dHJhcy9zaGFwZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTEgRGFuIFZhbmRlcmthbSAoZGFudmRrQGdtYWlsLmNvbSlcbiAqIE1JVC1saWNlbmNlZDogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlL01JVFxuICovXG5cbi8qKlxuICogQGZpbGVvdmVydmlld1xuICogSW5jbHVkaW5nIHRoaXMgZmlsZSB3aWxsIGFkZCBzZXZlcmFsIGFkZGl0aW9uYWwgc2hhcGVzIHRvIER5Z3JhcGguQ2lyY2xlc1xuICogd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBkcmF3UG9pbnRDYWxsYmFjay5cbiAqIFNlZSB0ZXN0cy9jdXN0b20tY2lyY2xlcy5odG1sIGZvciB1c2FnZS5cbiAqL1xuXG4vKiBsb2FkZXIgd3JhcHBlciB0byBhbGxvdyBicm93c2VyIHVzZSBhbmQgRVM2IGltcG9ydHMgKi9cbihmdW5jdGlvbiBfZXh0cmFzX3NoYXBlc19jbG9zdXJlKCkge1xuJ3VzZSBzdHJpY3QnO1xudmFyIER5Z3JhcGg7XG5pZiAod2luZG93LkR5Z3JhcGgpIHtcbiAgRHlncmFwaCA9IHdpbmRvdy5EeWdyYXBoO1xufSBlbHNlIGlmICh0eXBlb2YobW9kdWxlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgRHlncmFwaCA9IHJlcXVpcmUoJy4uL2R5Z3JhcGgnKTtcbiAgaWYgKHR5cGVvZihEeWdyYXBoLk5BTUUpID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoRHlncmFwaC5kZWZhdWx0KSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgRHlncmFwaCA9IER5Z3JhcGguZGVmYXVsdDtcbn1cbi8qIGVuZCBvZiBsb2FkZXIgd3JhcHBlciBoZWFkZXIgKi9cblxuLyoqXG4gKiBAcGFyYW0geyFDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCB0aGUgY2FudmFzIGNvbnRleHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaWRlcyB0aGUgbnVtYmVyIG9mIHNpZGVzIGluIHRoZSBzaGFwZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgdGhlIHJhZGl1cyBvZiB0aGUgaW1hZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gY3ggY2VudGVyIHggY29vcmRhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjeSBjZW50ZXIgeSBjb29yZGluYXRlXG4gKiBAcGFyYW0ge251bWJlcj19IHJvdGF0aW9uUmFkaWFucyB0aGUgc2hpZnQgb2YgdGhlIGluaXRpYWwgYW5nbGUsIGluIHJhZGlhbnMuXG4gKiBAcGFyYW0ge251bWJlcj19IGRlbHRhIHRoZSBhbmdsZSBzaGlmdCBmb3IgZWFjaCBsaW5lLiBJZiBtaXNzaW5nLCBjcmVhdGVzIGFcbiAqICAgICByZWd1bGFyIHBvbHlnb24uXG4gKi9cbnZhciByZWd1bGFyU2hhcGUgPSBmdW5jdGlvbiByZWd1bGFyU2hhcGUoXG4gICAgY3R4LCBzaWRlcywgcmFkaXVzLCBjeCwgY3ksIHJvdGF0aW9uUmFkaWFucywgZGVsdGEpIHtcbiAgcm90YXRpb25SYWRpYW5zID0gcm90YXRpb25SYWRpYW5zIHx8IDA7XG4gIGRlbHRhID0gZGVsdGEgfHwgTWF0aC5QSSAqIDIgLyBzaWRlcztcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIHZhciBpbml0aWFsQW5nbGUgPSByb3RhdGlvblJhZGlhbnM7XG4gIHZhciBhbmdsZSA9IGluaXRpYWxBbmdsZTtcblxuICB2YXIgY29tcHV0ZUNvb3JkaW5hdGVzID0gZnVuY3Rpb24gY29tcHV0ZUNvb3JkaW5hdGVzKCkge1xuICAgIHZhciB4ID0gY3ggKyAoTWF0aC5zaW4oYW5nbGUpICogcmFkaXVzKTtcbiAgICB2YXIgeSA9IGN5ICsgKC1NYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMpO1xuICAgIHJldHVybiBbeCwgeV07XG4gIH07XG5cbiAgdmFyIGluaXRpYWxDb29yZGluYXRlcyA9IGNvbXB1dGVDb29yZGluYXRlcygpO1xuICB2YXIgeCA9IGluaXRpYWxDb29yZGluYXRlc1swXTtcbiAgdmFyIHkgPSBpbml0aWFsQ29vcmRpbmF0ZXNbMV07XG4gIGN0eC5tb3ZlVG8oeCwgeSk7XG5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgc2lkZXM7IGlkeCsrKSB7XG4gICAgYW5nbGUgPSAoaWR4ID09IHNpZGVzIC0gMSkgPyBpbml0aWFsQW5nbGUgOiAoYW5nbGUgKyBkZWx0YSk7XG4gICAgdmFyIGNvb3JkcyA9IGNvbXB1dGVDb29yZGluYXRlcygpO1xuICAgIGN0eC5saW5lVG8oY29vcmRzWzBdLCBjb29yZHNbMV0pO1xuICB9XG4gIGN0eC5maWxsKCk7XG4gIGN0eC5zdHJva2UoKTtcbn07XG5cbi8qKlxuICogVE9ETyhkYW52ayk6IGJlIG1vcmUgc3BlY2lmaWMgb24gdGhlIHJldHVybiB0eXBlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNpZGVzXG4gKiBAcGFyYW0ge251bWJlcj19IHJvdGF0aW9uUmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXI9fSBkZWx0YVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgc2hhcGVGdW5jdGlvbiA9IGZ1bmN0aW9uIHNoYXBlRnVuY3Rpb24oc2lkZXMsIHJvdGF0aW9uUmFkaWFucywgZGVsdGEpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNoYXBlZEZ1bmN0aW9uKGcsIG5hbWUsIGN0eCwgY3gsIGN5LCBjb2xvciwgcmFkaXVzKSB7XG4gICAgY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwid2hpdGVcIjtcbiAgICByZWd1bGFyU2hhcGUoY3R4LCBzaWRlcywgcmFkaXVzLCBjeCwgY3ksIHJvdGF0aW9uUmFkaWFucywgZGVsdGEpO1xuICB9O1xufTtcblxudmFyIGN1c3RvbUNpcmNsZXMgPSB7XG4gIFRSSUFOR0xFIDogc2hhcGVGdW5jdGlvbigzKSxcbiAgU1FVQVJFIDogc2hhcGVGdW5jdGlvbig0LCBNYXRoLlBJIC8gNCksXG4gIERJQU1PTkQgOiBzaGFwZUZ1bmN0aW9uKDQpLFxuICBQRU5UQUdPTiA6IHNoYXBlRnVuY3Rpb24oNSksXG4gIEhFWEFHT04gOiBzaGFwZUZ1bmN0aW9uKDYpLFxuICBDSVJDTEUgOiBmdW5jdGlvbiBDSVJDTEUoZywgbmFtZSwgY3R4LCBjeCwgY3ksIGNvbG9yLCByYWRpdXMpIHtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwid2hpdGVcIjtcbiAgICBjdHguYXJjKGN4LCBjeSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xuICAgIGN0eC5maWxsKCk7XG4gICAgY3R4LnN0cm9rZSgpO1xuICB9LFxuICBTVEFSIDogc2hhcGVGdW5jdGlvbig1LCAwLCA0ICogTWF0aC5QSSAvIDUpLFxuICBQTFVTIDogZnVuY3Rpb24gUExVUyhnLCBuYW1lLCBjdHgsIGN4LCBjeSwgY29sb3IsIHJhZGl1cykge1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8oY3ggKyByYWRpdXMsIGN5KTtcbiAgICBjdHgubGluZVRvKGN4IC0gcmFkaXVzLCBjeSk7XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGN4LCBjeSArIHJhZGl1cyk7XG4gICAgY3R4LmxpbmVUbyhjeCwgY3kgLSByYWRpdXMpO1xuICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICBjdHguc3Ryb2tlKCk7XG4gIH0sXG4gIEVYIDogZnVuY3Rpb24gRVgoZywgbmFtZSwgY3R4LCBjeCwgY3ksIGNvbG9yLCByYWRpdXMpIHtcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGN4ICsgcmFkaXVzLCBjeSArIHJhZGl1cyk7XG4gICAgY3R4LmxpbmVUbyhjeCAtIHJhZGl1cywgY3kgLSByYWRpdXMpO1xuICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhjeCArIHJhZGl1cywgY3kgLSByYWRpdXMpO1xuICAgIGN0eC5saW5lVG8oY3ggLSByYWRpdXMsIGN5ICsgcmFkaXVzKTtcbiAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgY3R4LnN0cm9rZSgpO1xuICB9XG59O1xuXG5mb3IgKHZhciBrIGluIGN1c3RvbUNpcmNsZXMpIHtcbiAgaWYgKCFjdXN0b21DaXJjbGVzLmhhc093blByb3BlcnR5KGspKSBjb250aW51ZTtcbiAgRHlncmFwaC5DaXJjbGVzW2tdID0gY3VzdG9tQ2lyY2xlc1trXTtcbn1cblxuLyogY2xvc3VyZSBhbmQgbG9hZGVyIHdyYXBwZXIgKi9cbkR5Z3JhcGguX3JlcXVpcmUuYWRkKCdkeWdyYXBocy9zcmMvZXh0cmFzL3NoYXBlcy5qcycsIC8qIGV4cG9ydHMgKi8ge30pO1xufSkoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsU0FBU0Esc0JBQXNCQSxDQUFBLEVBQUc7RUFDbkMsWUFBWTs7RUFDWixJQUFJQyxPQUFPO0VBQ1gsSUFBSUMsTUFBTSxDQUFDRCxPQUFPLEVBQUU7SUFDbEJBLE9BQU8sR0FBR0MsTUFBTSxDQUFDRCxPQUFPO0VBQzFCLENBQUMsTUFBTSxJQUFJLE9BQU9FLE1BQU8sS0FBSyxXQUFXLEVBQUU7SUFDekNGLE9BQU8sR0FBR0csT0FBTyxDQUFDLFlBQVksQ0FBQztJQUMvQixJQUFJLE9BQU9ILE9BQU8sQ0FBQ0ksSUFBSyxLQUFLLFdBQVcsSUFBSSxPQUFPSixPQUFPLFdBQVMsS0FBSyxXQUFXLEVBQ2pGQSxPQUFPLEdBQUdBLE9BQU8sV0FBUTtFQUM3QjtFQUNBOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsSUFBSUssWUFBWSxHQUFHLFNBQVNBLFlBQVlBLENBQ3BDQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsZUFBZSxFQUFFQyxLQUFLLEVBQUU7SUFDdERELGVBQWUsR0FBR0EsZUFBZSxJQUFJLENBQUM7SUFDdENDLEtBQUssR0FBR0EsS0FBSyxJQUFJQyxJQUFJLENBQUNDLEVBQUUsR0FBRyxDQUFDLEdBQUdQLEtBQUs7SUFFcENELEdBQUcsQ0FBQ1MsU0FBUyxDQUFDLENBQUM7SUFDZixJQUFJQyxZQUFZLEdBQUdMLGVBQWU7SUFDbEMsSUFBSU0sS0FBSyxHQUFHRCxZQUFZ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