diff --git a/.gitignore b/.gitignore index 55bee001..4737c5bf 100644 --- a/.gitignore +++ b/.gitignore @@ -3,11 +3,9 @@ *.iml node_modules .project -.settings/.jsdtscope -.settings/org.eclipse.wst.jsdt.ui.superType.container -.settings/org.eclipse.wst.jsdt.ui.superType.name +.settings npm-debug.log -examples/graph/24_hierarchical_layout_userdefined2.html # vim temporary files .*.sw[op] +test diff --git a/HISTORY.md b/HISTORY.md index 261e6646..7a6cb8d2 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -23,11 +23,13 @@ http://visjs.org - Fixed static smooth edges not fully working from every angle. - Fixed updating bounding box of nodes without drawing. - Fixed #1036, bug in lockedRedraw. Thanks @vges! +- Added getDataset to all manipulation functions. Thanks @ericvandever! ### Graph2d - Made graph2d more robust against string values in the y position. - Fixed bug where 0 axis was always in the automatically fitted range. +- Added drawPoints.onRender. Thanks @mschallar! ## 2015-06-16, version 4.3.0 diff --git a/dist/vis.js b/dist/vis.js index 10c8164f..8e61a6fc 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 4.3.1-SNAPSHOT - * @date 2015-06-29 + * @date 2015-06-30 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -84,60 +84,60 @@ return /******/ (function(modules) { // webpackBootstrap // utils 'use strict'; - exports.util = __webpack_require__(9); - exports.DOMutil = __webpack_require__(14); + exports.util = __webpack_require__(7); + exports.DOMutil = __webpack_require__(13); // data - exports.DataSet = __webpack_require__(15); - exports.DataView = __webpack_require__(17); - exports.Queue = __webpack_require__(16); + exports.DataSet = __webpack_require__(14); + exports.DataView = __webpack_require__(16); + exports.Queue = __webpack_require__(15); // Graph3d - exports.Graph3d = __webpack_require__(18); + exports.Graph3d = __webpack_require__(17); exports.graph3d = { - Camera: __webpack_require__(22), - Filter: __webpack_require__(23), - Point2d: __webpack_require__(19), - Point3d: __webpack_require__(21), - Slider: __webpack_require__(24), - StepNumber: __webpack_require__(25) + Camera: __webpack_require__(21), + Filter: __webpack_require__(22), + Point2d: __webpack_require__(18), + Point3d: __webpack_require__(20), + Slider: __webpack_require__(23), + StepNumber: __webpack_require__(24) }; // Timeline - exports.Timeline = __webpack_require__(26); - exports.Graph2d = __webpack_require__(50); + exports.Timeline = __webpack_require__(25); + exports.Graph2d = __webpack_require__(49); exports.timeline = { - DateUtil: __webpack_require__(32), - DataStep: __webpack_require__(53), - Range: __webpack_require__(30), - stack: __webpack_require__(36), - TimeStep: __webpack_require__(38), + DateUtil: __webpack_require__(31), + DataStep: __webpack_require__(52), + Range: __webpack_require__(29), + stack: __webpack_require__(35), + TimeStep: __webpack_require__(37), components: { items: { - Item: __webpack_require__(4), - BackgroundItem: __webpack_require__(41), - BoxItem: __webpack_require__(40), - PointItem: __webpack_require__(2), - RangeItem: __webpack_require__(37) + Item: __webpack_require__(2), + BackgroundItem: __webpack_require__(40), + BoxItem: __webpack_require__(39), + PointItem: __webpack_require__(1), + RangeItem: __webpack_require__(36) }, - Component: __webpack_require__(28), - CurrentTime: __webpack_require__(27), - CustomTime: __webpack_require__(45), - DataAxis: __webpack_require__(52), - GraphGroup: __webpack_require__(54), - Group: __webpack_require__(35), - BackgroundGroup: __webpack_require__(39), - ItemSet: __webpack_require__(34), - Legend: __webpack_require__(58), - LineGraph: __webpack_require__(51), - TimeAxis: __webpack_require__(42) + Component: __webpack_require__(27), + CurrentTime: __webpack_require__(26), + CustomTime: __webpack_require__(44), + DataAxis: __webpack_require__(51), + GraphGroup: __webpack_require__(53), + Group: __webpack_require__(34), + BackgroundGroup: __webpack_require__(38), + ItemSet: __webpack_require__(33), + Legend: __webpack_require__(57), + LineGraph: __webpack_require__(50), + TimeAxis: __webpack_require__(41) } }; // Network - exports.Network = __webpack_require__(60); + exports.Network = __webpack_require__(59); exports.network = { Images: __webpack_require__(112), dotparser: __webpack_require__(110), @@ -157,31 +157,18 @@ return /******/ (function(modules) { // webpackBootstrap }; // bundled external libraries - exports.moment = __webpack_require__(10); - exports.hammer = __webpack_require__(5); // TODO: deprecate exports.hammer some day - exports.Hammer = __webpack_require__(5); - exports.keycharm = __webpack_require__(44); + exports.moment = __webpack_require__(8); + exports.hammer = __webpack_require__(3); // TODO: deprecate exports.hammer some day + exports.Hammer = __webpack_require__(3); + exports.keycharm = __webpack_require__(43); /***/ }, /* 1 */ -/***/ function(module, exports, __webpack_require__) { - - function webpackContext(req) { - throw new Error("Cannot find module '" + req + "'."); - } - webpackContext.keys = function() { return []; }; - webpackContext.resolve = webpackContext; - module.exports = webpackContext; - webpackContext.id = 1; - - -/***/ }, -/* 2 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Item = __webpack_require__(4); + var Item = __webpack_require__(2); /** * @constructor PointItem @@ -381,418 +368,13 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = PointItem; /***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var util = __webpack_require__(9); - - var View = (function () { - function View(body, canvas) { - var _this = this; - - _classCallCheck(this, View); - - this.body = body; - this.canvas = canvas; - - this.animationSpeed = 1 / this.renderRefreshRate; - this.animationEasingFunction = "easeInOutQuint"; - this.easingTime = 0; - this.sourceScale = 0; - this.targetScale = 0; - this.sourceTranslation = 0; - this.targetTranslation = 0; - this.lockedOnNodeId = undefined; - this.lockedOnNodeOffset = undefined; - this.touchTime = 0; - - this.viewFunction = undefined; - - this.body.emitter.on("fit", this.fit.bind(this)); - this.body.emitter.on("animationFinished", function () { - _this.body.emitter.emit("_stopRendering"); - }); - this.body.emitter.on("unlockNode", this.releaseNode.bind(this)); - } - - _createClass(View, [{ - key: "setOptions", - value: function setOptions() { - var options = arguments[0] === undefined ? {} : arguments[0]; - - this.options = options; - } - }, { - key: "_getRange", - - /** - * Find the center position of the network - * @private - */ - value: function _getRange() { - var specificNodes = arguments[0] === undefined ? [] : arguments[0]; - - var minY = 1000000000, - maxY = -1000000000, - minX = 1000000000, - maxX = -1000000000, - node; - if (specificNodes.length > 0) { - for (var i = 0; i < specificNodes.length; i++) { - node = this.body.nodes[specificNodes[i]]; - if (minX > node.shape.boundingBox.left) { - minX = node.shape.boundingBox.left; - } - if (maxX < node.shape.boundingBox.right) { - maxX = node.shape.boundingBox.right; - } - if (minY > node.shape.boundingBox.top) { - minY = node.shape.boundingBox.top; - } // top is negative, bottom is positive - if (maxY < node.shape.boundingBox.bottom) { - maxY = node.shape.boundingBox.bottom; - } // top is negative, bottom is positive - } - } else { - for (var nodeId in this.body.nodes) { - - if (this.body.nodes.hasOwnProperty(nodeId)) { - node = this.body.nodes[nodeId]; - if (minX > node.shape.boundingBox.left) { - minX = node.shape.boundingBox.left; - } - if (maxX < node.shape.boundingBox.right) { - maxX = node.shape.boundingBox.right; - } - if (minY > node.shape.boundingBox.top) { - minY = node.shape.boundingBox.top; - } // top is negative, bottom is positive - if (maxY < node.shape.boundingBox.bottom) { - maxY = node.shape.boundingBox.bottom; - } // top is negative, bottom is positive - } - } - } - - if (minX === 1000000000 && maxX === -1000000000 && minY === 1000000000 && maxY === -1000000000) { - minY = 0, maxY = 0, minX = 0, maxX = 0; - } - return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }; - } - }, { - key: "_findCenter", - - /** - * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; - * @returns {{x: number, y: number}} - * @private - */ - value: function _findCenter(range) { - return { x: 0.5 * (range.maxX + range.minX), - y: 0.5 * (range.maxY + range.minY) }; - } - }, { - key: "fit", - - /** - * This function zooms out to fit all data on screen based on amount of nodes - * @param {Object} Options - * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; - */ - value: function fit() { - var options = arguments[0] === undefined ? { nodes: [] } : arguments[0]; - var initialZoom = arguments[1] === undefined ? false : arguments[1]; - - var range; - var zoomLevel; - - if (initialZoom === true) { - // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation. - var positionDefined = 0; - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - var node = this.body.nodes[nodeId]; - if (node.predefinedPosition === true) { - positionDefined += 1; - } - } - } - if (positionDefined > 0.5 * this.body.nodeIndices.length) { - this.fit(options, false); - return; - } - - range = this._getRange(options.nodes); - - var numberOfNodes = this.body.nodeIndices.length; - zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - - // correct for larger canvasses. - var factor = Math.min(this.canvas.frame.canvas.clientWidth / 600, this.canvas.frame.canvas.clientHeight / 600); - zoomLevel *= factor; - } else { - this.body.emitter.emit("_resizeNodes"); - range = this._getRange(options.nodes); - - var xDistance = Math.abs(range.maxX - range.minX) * 1.1; - var yDistance = Math.abs(range.maxY - range.minY) * 1.1; - - var xZoomLevel = this.canvas.frame.canvas.clientWidth / xDistance; - var yZoomLevel = this.canvas.frame.canvas.clientHeight / yDistance; - - zoomLevel = xZoomLevel <= yZoomLevel ? xZoomLevel : yZoomLevel; - } - - if (zoomLevel > 1) { - zoomLevel = 1; - } else if (zoomLevel === 0) { - zoomLevel = 1; - } - - var center = this._findCenter(range); - var animationOptions = { position: center, scale: zoomLevel, animation: options.animation }; - this.moveTo(animationOptions); - } - }, { - key: "focus", - - // animation - - /** - * Center a node in view. - * - * @param {Number} nodeId - * @param {Number} [options] - */ - value: function focus(nodeId) { - var options = arguments[1] === undefined ? {} : arguments[1]; - - if (this.body.nodes[nodeId] !== undefined) { - var nodePosition = { x: this.body.nodes[nodeId].x, y: this.body.nodes[nodeId].y }; - options.position = nodePosition; - options.lockedOnNode = nodeId; - - this.moveTo(options); - } else { - console.log("Node: " + nodeId + " cannot be found."); - } - } - }, { - key: "moveTo", - - /** - * - * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels - * | options.scale = Number // scale to move to - * | options.position = {x:Number, y:Number} // position to move to - * | options.animation = {duration:Number, easingFunction:String} || Boolean // position to move to - */ - value: function moveTo(options) { - if (options === undefined) { - options = {}; - return; - } - if (options.offset === undefined) { - options.offset = { x: 0, y: 0 }; - } - if (options.offset.x === undefined) { - options.offset.x = 0; - } - if (options.offset.y === undefined) { - options.offset.y = 0; - } - if (options.scale === undefined) { - options.scale = this.body.view.scale; - } - if (options.position === undefined) { - options.position = this.getViewPosition(); - } - if (options.animation === undefined) { - options.animation = { duration: 0 }; - } - if (options.animation === false) { - options.animation = { duration: 0 }; - } - if (options.animation === true) { - options.animation = {}; - } - if (options.animation.duration === undefined) { - options.animation.duration = 1000; - } // default duration - if (options.animation.easingFunction === undefined) { - options.animation.easingFunction = "easeInOutQuad"; - } // default easing function - - this.animateView(options); - } - }, { - key: "animateView", - - /** - * - * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels - * | options.time = Number // animation time in milliseconds - * | options.scale = Number // scale to animate to - * | options.position = {x:Number, y:Number} // position to animate to - * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad, - * // easeInCubic, easeOutCubic, easeInOutCubic, - * // easeInQuart, easeOutQuart, easeInOutQuart, - * // easeInQuint, easeOutQuint, easeInOutQuint - */ - value: function animateView(options) { - if (options === undefined) { - return; - } - this.animationEasingFunction = options.animation.easingFunction; - // release if something focussed on the node - this.releaseNode(); - if (options.locked === true) { - this.lockedOnNodeId = options.lockedOnNode; - this.lockedOnNodeOffset = options.offset; - } - - // forcefully complete the old animation if it was still running - if (this.easingTime != 0) { - this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation. - } - - this.sourceScale = this.body.view.scale; - this.sourceTranslation = this.body.view.translation; - this.targetScale = options.scale; - - // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw - // but at least then we'll have the target transition - this.body.view.scale = this.targetScale; - var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); - - var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node - x: viewCenter.x - options.position.x, - y: viewCenter.y - options.position.y - }; - this.targetTranslation = { - x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x, - y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y - }; - - // if the time is set to 0, don't do an animation - if (options.animation.duration === 0) { - if (this.lockedOnNodeId != undefined) { - this.viewFunction = this._lockedRedraw.bind(this); - this.body.emitter.on("initRedraw", this.viewFunction); - } else { - this.body.view.scale = this.targetScale; - this.body.view.translation = this.targetTranslation; - this.body.emitter.emit("_requestRedraw"); - } - } else { - this.animationSpeed = 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's - this.animationEasingFunction = options.animation.easingFunction; - - this.viewFunction = this._transitionRedraw.bind(this); - this.body.emitter.on("initRedraw", this.viewFunction); - this.body.emitter.emit("_startRendering"); - } - } - }, { - key: "_lockedRedraw", - - /** - * used to animate smoothly by hijacking the redraw function. - * @private - */ - value: function _lockedRedraw() { - var nodePosition = { x: this.body.nodes[this.lockedOnNodeId].x, y: this.body.nodes[this.lockedOnNodeId].y }; - var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight }); - var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node - x: viewCenter.x - nodePosition.x, - y: viewCenter.y - nodePosition.y - }; - var sourceTranslation = this.body.view.translation; - var targetTranslation = { - x: sourceTranslation.x + distanceFromCenter.x * this.body.view.scale + this.lockedOnNodeOffset.x, - y: sourceTranslation.y + distanceFromCenter.y * this.body.view.scale + this.lockedOnNodeOffset.y - }; - - this.body.view.translation = targetTranslation; - } - }, { - key: "releaseNode", - value: function releaseNode() { - if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) { - this.body.emitter.off("initRedraw", this.viewFunction); - this.lockedOnNodeId = undefined; - this.lockedOnNodeOffset = undefined; - } - } - }, { - key: "_transitionRedraw", - - /** - * - * @param easingTime - * @private - */ - value: function _transitionRedraw() { - var finished = arguments[0] === undefined ? false : arguments[0]; - - this.easingTime += this.animationSpeed; - this.easingTime = finished === true ? 1 : this.easingTime; - - var progress = util.easingFunctions[this.animationEasingFunction](this.easingTime); - - this.body.view.scale = this.sourceScale + (this.targetScale - this.sourceScale) * progress; - this.body.view.translation = { - x: this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress, - y: this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress - }; - - // cleanup - if (this.easingTime >= 1) { - this.body.emitter.off("initRedraw", this.viewFunction); - this.easingTime = 0; - if (this.lockedOnNodeId != undefined) { - this.viewFunction = this._lockedRedraw.bind(this); - this.body.emitter.on("initRedraw", this.viewFunction); - } - this.body.emitter.emit("animationFinished"); - } - } - }, { - key: "getScale", - value: function getScale() { - return this.body.view.scale; - } - }, { - key: "getViewPosition", - value: function getViewPosition() { - return this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); - } - }]); - - return View; - })(); - - exports["default"] = View; - module.exports = exports["default"]; - -/***/ }, -/* 4 */ +/* 2 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(5); - var util = __webpack_require__(9); + var Hammer = __webpack_require__(3); + var util = __webpack_require__(7); /** * @constructor Item @@ -1087,7 +669,7 @@ return /******/ (function(modules) { // webpackBootstrap // should be implemented by the item /***/ }, -/* 5 */ +/* 3 */ /***/ function(module, exports, __webpack_require__) { // Only load hammer.js when in a browser environment @@ -1095,8 +677,8 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; if (typeof window !== 'undefined') { - var propagating = __webpack_require__(6); - var Hammer = window['Hammer'] || __webpack_require__(7); + var propagating = __webpack_require__(4); + var Hammer = window['Hammer'] || __webpack_require__(5); module.exports = propagating(Hammer, { preventDefault: 'mouse' }); @@ -1107,7 +689,7 @@ return /******/ (function(modules) { // webpackBootstrap } /***/ }, -/* 6 */ +/* 4 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict'; @@ -1328,7 +910,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 7 */ +/* 5 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.4 - 2014-09-28 @@ -3784,7 +3366,7 @@ return /******/ (function(modules) { // webpackBootstrap prefixed: prefixed }); - if ("function" == TYPE_FUNCTION && __webpack_require__(8)) { + if ("function" == TYPE_FUNCTION && __webpack_require__(6)) { !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { return Hammer; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); @@ -3798,7 +3380,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 8 */ +/* 6 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__; @@ -3806,7 +3388,7 @@ return /******/ (function(modules) { // webpackBootstrap /* WEBPACK VAR INJECTION */}.call(exports, {})) /***/ }, -/* 9 */ +/* 7 */ /***/ function(module, exports, __webpack_require__) { // utility functions @@ -3816,8 +3398,8 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var moment = __webpack_require__(10); - var uuid = __webpack_require__(13); + var moment = __webpack_require__(8); + var uuid = __webpack_require__(12); /** * Test whether given object is a number @@ -5152,17 +4734,17 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 10 */ +/* 8 */ /***/ function(module, exports, __webpack_require__) { // first check if moment.js is already loaded in the browser window, if so, // use this instance. Else, load via commonjs. 'use strict'; - module.exports = typeof window !== 'undefined' && window['moment'] || __webpack_require__(11); + module.exports = typeof window !== 'undefined' && window['moment'] || __webpack_require__(9); /***/ }, -/* 11 */ +/* 9 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {//! moment.js @@ -8276,10 +7858,10 @@ return /******/ (function(modules) { // webpackBootstrap return _moment; })); - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(12)(module))) + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10)(module))) /***/ }, -/* 12 */ +/* 10 */ /***/ function(module, exports, __webpack_require__) { module.exports = function(module) { @@ -8295,7 +7877,20 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 13 */ +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + function webpackContext(req) { + throw new Error("Cannot find module '" + req + "'."); + } + webpackContext.keys = function() { return []; }; + webpackContext.resolve = webpackContext; + module.exports = webpackContext; + webpackContext.id = 11; + + +/***/ }, +/* 12 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {'use strict'; @@ -8511,7 +8106,7 @@ return /******/ (function(modules) { // webpackBootstrap /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }, -/* 14 */ +/* 13 */ /***/ function(module, exports, __webpack_require__) { // DOM utility methods @@ -8631,37 +8226,37 @@ return /******/ (function(modules) { // webpackBootstrap }; /** - * draw a point object. this is a seperate function because it can also be called by the legend. + * Draw a point object. This is a separate function because it can also be called by the legend. * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions * as well. * * @param x * @param y - * @param group + * @param groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' } * @param JSONcontainer * @param svgContainer * @param labelObj * @returns {*} */ - exports.drawPoint = function (x, y, group, JSONcontainer, svgContainer, labelObj) { + exports.drawPoint = function (x, y, groupTemplate, JSONcontainer, svgContainer, labelObj) { var point; - if (group.options.drawPoints.style == 'circle') { + if (groupTemplate.style == 'circle') { point = exports.getSVGElement('circle', JSONcontainer, svgContainer); point.setAttributeNS(null, 'cx', x); point.setAttributeNS(null, 'cy', y); - point.setAttributeNS(null, 'r', 0.5 * group.options.drawPoints.size); + point.setAttributeNS(null, 'r', 0.5 * groupTemplate.size); } else { point = exports.getSVGElement('rect', JSONcontainer, svgContainer); - point.setAttributeNS(null, 'x', x - 0.5 * group.options.drawPoints.size); - point.setAttributeNS(null, 'y', y - 0.5 * group.options.drawPoints.size); - point.setAttributeNS(null, 'width', group.options.drawPoints.size); - point.setAttributeNS(null, 'height', group.options.drawPoints.size); + point.setAttributeNS(null, 'x', x - 0.5 * groupTemplate.size); + point.setAttributeNS(null, 'y', y - 0.5 * groupTemplate.size); + point.setAttributeNS(null, 'width', groupTemplate.size); + point.setAttributeNS(null, 'height', groupTemplate.size); } - if (group.options.drawPoints.styles !== undefined) { - point.setAttributeNS(null, 'style', group.group.options.drawPoints.styles); + if (groupTemplate.style !== undefined) { + point.setAttributeNS(null, 'style', groupTemplate.style); } - point.setAttributeNS(null, 'class', group.className + ' vis-point'); + point.setAttributeNS(null, 'class', groupTemplate.className + ' vis-point'); //handle label if (labelObj) { @@ -8713,13 +8308,13 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 15 */ +/* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var Queue = __webpack_require__(16); + var util = __webpack_require__(7); + var Queue = __webpack_require__(15); /** * DataSet @@ -9608,7 +9203,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = DataSet; /***/ }, -/* 16 */ +/* 15 */ /***/ function(module, exports, __webpack_require__) { /** @@ -9813,13 +9408,13 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Queue; /***/ }, -/* 17 */ +/* 16 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var DataSet = __webpack_require__(15); + var util = __webpack_require__(7); + var DataSet = __webpack_require__(14); /** * DataView @@ -10161,21 +9756,21 @@ return /******/ (function(modules) { // webpackBootstrap // nothing interesting for me :-( /***/ }, -/* 18 */ +/* 17 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Emitter = __webpack_require__(20); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); - var util = __webpack_require__(9); - var Point3d = __webpack_require__(21); - var Point2d = __webpack_require__(19); - var Camera = __webpack_require__(22); - var Filter = __webpack_require__(23); - var Slider = __webpack_require__(24); - var StepNumber = __webpack_require__(25); + var Emitter = __webpack_require__(19); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); + var util = __webpack_require__(7); + var Point3d = __webpack_require__(20); + var Point2d = __webpack_require__(18); + var Camera = __webpack_require__(21); + var Filter = __webpack_require__(22); + var Slider = __webpack_require__(23); + var StepNumber = __webpack_require__(24); /** * @constructor Graph3d @@ -12409,7 +12004,7 @@ return /******/ (function(modules) { // webpackBootstrap // use use defaults /***/ }, -/* 19 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { /** @@ -12427,7 +12022,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Point2d; /***/ }, -/* 20 */ +/* 19 */ /***/ function(module, exports, __webpack_require__) { @@ -12597,7 +12192,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 21 */ +/* 20 */ /***/ function(module, exports, __webpack_require__) { /** @@ -12680,12 +12275,12 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Point3d; /***/ }, -/* 22 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Point3d = __webpack_require__(21); + var Point3d = __webpack_require__(20); /** * @class Camera @@ -12821,12 +12416,12 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Camera; /***/ }, -/* 23 */ +/* 22 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var DataView = __webpack_require__(17); + var DataView = __webpack_require__(16); /** * @class Filter @@ -13032,12 +12627,12 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Filter; /***/ }, -/* 24 */ +/* 23 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); + var util = __webpack_require__(7); /** * @constructor Slider @@ -13380,7 +12975,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Slider; /***/ }, -/* 25 */ +/* 24 */ /***/ function(module, exports, __webpack_require__) { /** @@ -13524,28 +13119,28 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = StepNumber; /***/ }, -/* 26 */ +/* 25 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Emitter = __webpack_require__(20); - var Hammer = __webpack_require__(5); - var util = __webpack_require__(9); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); - var Range = __webpack_require__(30); - var Core = __webpack_require__(33); - var TimeAxis = __webpack_require__(42); - var CurrentTime = __webpack_require__(27); - var CustomTime = __webpack_require__(45); - var ItemSet = __webpack_require__(34); - - var Configurator = __webpack_require__(46); - var Validator = __webpack_require__(48)['default']; - var printStyle = __webpack_require__(48).printStyle; - var allOptions = __webpack_require__(49).allOptions; - var configureOptions = __webpack_require__(49).configureOptions; + var Emitter = __webpack_require__(19); + var Hammer = __webpack_require__(3); + var util = __webpack_require__(7); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); + var Range = __webpack_require__(29); + var Core = __webpack_require__(32); + var TimeAxis = __webpack_require__(41); + var CurrentTime = __webpack_require__(26); + var CustomTime = __webpack_require__(44); + var ItemSet = __webpack_require__(33); + + var Configurator = __webpack_require__(45); + var Validator = __webpack_require__(47)['default']; + var printStyle = __webpack_require__(47).printStyle; + var allOptions = __webpack_require__(48).allOptions; + var configureOptions = __webpack_require__(48).configureOptions; /** * Create a timeline visualization @@ -14054,15 +13649,15 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Timeline; /***/ }, -/* 27 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var Component = __webpack_require__(28); - var moment = __webpack_require__(10); - var locales = __webpack_require__(29); + var util = __webpack_require__(7); + var Component = __webpack_require__(27); + var moment = __webpack_require__(8); + var locales = __webpack_require__(28); /** * A current time bar @@ -14230,7 +13825,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = CurrentTime; /***/ }, -/* 28 */ +/* 27 */ /***/ function(module, exports, __webpack_require__) { /** @@ -14290,7 +13885,7 @@ return /******/ (function(modules) { // webpackBootstrap // should be implemented by the component /***/ }, -/* 29 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { // English @@ -14312,16 +13907,16 @@ return /******/ (function(modules) { // webpackBootstrap exports['nl_BE'] = exports['nl']; /***/ }, -/* 30 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var hammerUtil = __webpack_require__(31); - var moment = __webpack_require__(10); - var Component = __webpack_require__(28); - var DateUtil = __webpack_require__(32); + var util = __webpack_require__(7); + var hammerUtil = __webpack_require__(30); + var moment = __webpack_require__(8); + var Component = __webpack_require__(27); + var DateUtil = __webpack_require__(31); /** * @constructor Range @@ -14988,12 +14583,12 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Range; /***/ }, -/* 31 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(5); + var Hammer = __webpack_require__(3); /** * Register a touch event, taking place before a gesture @@ -15060,12 +14655,12 @@ return /******/ (function(modules) { // webpackBootstrap exports.offRelease = exports.offTouch; /***/ }, -/* 32 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; - var moment = __webpack_require__(10); + var moment = __webpack_require__(8); /** * used in Core to convert the options into a volatile variable @@ -15520,23 +15115,23 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 33 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Emitter = __webpack_require__(20); - var Hammer = __webpack_require__(5); - var hammerUtil = __webpack_require__(31); - var util = __webpack_require__(9); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); - var Range = __webpack_require__(30); - var ItemSet = __webpack_require__(34); - var TimeAxis = __webpack_require__(42); - var Activator = __webpack_require__(43); - var DateUtil = __webpack_require__(32); - var CustomTime = __webpack_require__(45); + var Emitter = __webpack_require__(19); + var Hammer = __webpack_require__(3); + var hammerUtil = __webpack_require__(30); + var util = __webpack_require__(7); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); + var Range = __webpack_require__(29); + var ItemSet = __webpack_require__(33); + var TimeAxis = __webpack_require__(41); + var Activator = __webpack_require__(42); + var DateUtil = __webpack_require__(31); + var CustomTime = __webpack_require__(44); /** * Create a timeline visualization @@ -15775,6 +15370,13 @@ return /******/ (function(modules) { // webpackBootstrap } } + // if the graph2d's drawPoints is a function delegate the callback to the onRender property + if (typeof options.drawPoints == 'function') { + options.drawPoints = { + onRender: options.drawPoints + }; + } + if ('hiddenDates' in this.options) { DateUtil.convertHiddenOptions(this.body, this.options.hiddenDates); } @@ -16488,23 +16090,23 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Core; /***/ }, -/* 34 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(5); - var util = __webpack_require__(9); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); - var TimeStep = __webpack_require__(38); - var Component = __webpack_require__(28); - var Group = __webpack_require__(35); - var BackgroundGroup = __webpack_require__(39); - var BoxItem = __webpack_require__(40); - var PointItem = __webpack_require__(2); - var RangeItem = __webpack_require__(37); - var BackgroundItem = __webpack_require__(41); + var Hammer = __webpack_require__(3); + var util = __webpack_require__(7); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); + var TimeStep = __webpack_require__(37); + var Component = __webpack_require__(27); + var Group = __webpack_require__(34); + var BackgroundGroup = __webpack_require__(38); + var BoxItem = __webpack_require__(39); + var PointItem = __webpack_require__(1); + var RangeItem = __webpack_require__(36); + var BackgroundItem = __webpack_require__(40); var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items var BACKGROUND = '__background__'; // reserved group id for background items without group @@ -18114,14 +17716,14 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = ItemSet; /***/ }, -/* 35 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var stack = __webpack_require__(36); - var RangeItem = __webpack_require__(37); + var util = __webpack_require__(7); + var stack = __webpack_require__(35); + var RangeItem = __webpack_require__(36); /** * @constructor Group @@ -18700,7 +18302,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Group; /***/ }, -/* 36 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { // Utility functions for ordering and stacking of items @@ -18824,13 +18426,13 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 37 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(5); - var Item = __webpack_require__(4); + var Hammer = __webpack_require__(3); + var Item = __webpack_require__(2); /** * @constructor RangeItem @@ -19120,14 +18722,14 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = RangeItem; /***/ }, -/* 38 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var moment = __webpack_require__(10); - var DateUtil = __webpack_require__(32); - var util = __webpack_require__(9); + var moment = __webpack_require__(8); + var DateUtil = __webpack_require__(31); + var util = __webpack_require__(7); /** * @constructor TimeStep @@ -19810,13 +19412,13 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = TimeStep; /***/ }, -/* 39 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var Group = __webpack_require__(35); + var util = __webpack_require__(7); + var Group = __webpack_require__(34); /** * @constructor BackgroundGroup @@ -19874,13 +19476,13 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = BackgroundGroup; /***/ }, -/* 40 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Item = __webpack_require__(4); - var util = __webpack_require__(9); + var Item = __webpack_require__(2); + var util = __webpack_require__(7); /** * @constructor BoxItem @@ -20114,15 +19716,15 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = BoxItem; /***/ }, -/* 41 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(5); - var Item = __webpack_require__(4); - var BackgroundGroup = __webpack_require__(39); - var RangeItem = __webpack_require__(37); + var Hammer = __webpack_require__(3); + var Item = __webpack_require__(2); + var BackgroundGroup = __webpack_require__(38); + var RangeItem = __webpack_require__(36); /** * @constructor BackgroundItem @@ -20335,16 +19937,16 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = BackgroundItem; /***/ }, -/* 42 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var Component = __webpack_require__(28); - var TimeStep = __webpack_require__(38); - var DateUtil = __webpack_require__(32); - var moment = __webpack_require__(10); + var util = __webpack_require__(7); + var Component = __webpack_require__(27); + var TimeStep = __webpack_require__(37); + var DateUtil = __webpack_require__(31); + var moment = __webpack_require__(8); /** * A horizontal time axis @@ -20774,15 +20376,15 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = TimeAxis; /***/ }, -/* 43 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var keycharm = __webpack_require__(44); - var Emitter = __webpack_require__(20); - var Hammer = __webpack_require__(5); - var util = __webpack_require__(9); + var keycharm = __webpack_require__(43); + var Emitter = __webpack_require__(19); + var Hammer = __webpack_require__(3); + var util = __webpack_require__(7); /** * Turn an element into an clickToUse element. @@ -20933,7 +20535,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Activator; /***/ }, -/* 44 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict"; @@ -21132,16 +20734,16 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 45 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(5); - var util = __webpack_require__(9); - var Component = __webpack_require__(28); - var moment = __webpack_require__(10); - var locales = __webpack_require__(29); + var Hammer = __webpack_require__(3); + var util = __webpack_require__(7); + var Component = __webpack_require__(27); + var moment = __webpack_require__(8); + var locales = __webpack_require__(28); /** * A custom time bar @@ -21371,7 +20973,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = CustomTime; /***/ }, -/* 46 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -21386,11 +20988,11 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var _ColorPicker = __webpack_require__(47); + var _ColorPicker = __webpack_require__(46); var _ColorPicker2 = _interopRequireDefault(_ColorPicker); - var util = __webpack_require__(9); + var util = __webpack_require__(7); /** * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options. @@ -22054,7 +21656,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 47 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -22067,9 +21669,9 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var Hammer = __webpack_require__(5); - var hammerUtil = __webpack_require__(31); - var util = __webpack_require__(9); + var Hammer = __webpack_require__(3); + var hammerUtil = __webpack_require__(30); + var util = __webpack_require__(7); var ColorPicker = (function () { function ColorPicker() { @@ -22638,7 +22240,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 48 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -22651,7 +22253,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(9); + var util = __webpack_require__(7); var errorFound = false; var allOptions = undefined; @@ -22954,7 +22556,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.printStyle = printStyle; /***/ }, -/* 49 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { /** @@ -23168,28 +22770,28 @@ return /******/ (function(modules) { // webpackBootstrap exports.configureOptions = configureOptions; /***/ }, -/* 50 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Emitter = __webpack_require__(20); - var Hammer = __webpack_require__(5); - var util = __webpack_require__(9); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); - var Range = __webpack_require__(30); - var Core = __webpack_require__(33); - var TimeAxis = __webpack_require__(42); - var CurrentTime = __webpack_require__(27); - var CustomTime = __webpack_require__(45); - var LineGraph = __webpack_require__(51); - - var Configurator = __webpack_require__(46); - var Validator = __webpack_require__(48)['default']; - var printStyle = __webpack_require__(48).printStyle; - var allOptions = __webpack_require__(59).allOptions; - var configureOptions = __webpack_require__(59).configureOptions; + var Emitter = __webpack_require__(19); + var Hammer = __webpack_require__(3); + var util = __webpack_require__(7); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); + var Range = __webpack_require__(29); + var Core = __webpack_require__(32); + var TimeAxis = __webpack_require__(41); + var CurrentTime = __webpack_require__(26); + var CustomTime = __webpack_require__(44); + var LineGraph = __webpack_require__(50); + + var Configurator = __webpack_require__(45); + var Validator = __webpack_require__(47)['default']; + var printStyle = __webpack_require__(47).printStyle; + var allOptions = __webpack_require__(58).allOptions; + var configureOptions = __webpack_require__(58).configureOptions; /** * Create a timeline visualization @@ -23504,21 +23106,21 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Graph2d; /***/ }, -/* 51 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var DOMutil = __webpack_require__(14); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); - var Component = __webpack_require__(28); - var DataAxis = __webpack_require__(52); - var GraphGroup = __webpack_require__(54); - var Legend = __webpack_require__(58); - var BarFunctions = __webpack_require__(57); - var LineFunctions = __webpack_require__(55); + var util = __webpack_require__(7); + var DOMutil = __webpack_require__(13); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); + var Component = __webpack_require__(27); + var DataAxis = __webpack_require__(51); + var GraphGroup = __webpack_require__(53); + var Legend = __webpack_require__(57); + var BarFunctions = __webpack_require__(56); + var LineFunctions = __webpack_require__(54); var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items @@ -24480,15 +24082,15 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = LineGraph; /***/ }, -/* 52 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var DOMutil = __webpack_require__(14); - var Component = __webpack_require__(28); - var DataStep = __webpack_require__(53); + var util = __webpack_require__(7); + var DOMutil = __webpack_require__(13); + var Component = __webpack_require__(27); + var DataStep = __webpack_require__(52); /** * A horizontal time axis @@ -25084,7 +24686,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = DataAxis; /***/ }, -/* 53 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { /** @@ -25311,16 +24913,16 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = DataStep; /***/ }, -/* 54 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var DOMutil = __webpack_require__(14); - var Line = __webpack_require__(55); - var Bar = __webpack_require__(57); - var Points = __webpack_require__(56); + var util = __webpack_require__(7); + var DOMutil = __webpack_require__(13); + var Line = __webpack_require__(54); + var Bar = __webpack_require__(56); + var Points = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"./graph2d_types/points\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); /** * /** @@ -25385,6 +24987,13 @@ return /******/ (function(modules) { // webpackBootstrap var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart']; util.selectiveDeepExtend(fields, this.options, options); + // if the group's drawPoints is a function delegate the callback to the onRender property + if (typeof options.drawPoints == 'function') { + options.drawPoints = { + onRender: options.drawPoints + }; + } + util.mergeOptions(this.options, options, 'interpolation'); util.mergeOptions(this.options, options, 'drawPoints'); util.mergeOptions(this.options, options, 'shaded'); @@ -25467,7 +25076,12 @@ return /******/ (function(modules) { // webpackBootstrap } if (this.options.drawPoints.enabled == true) { - DOMutil.drawPoint(x + 0.5 * iconWidth, y, this, JSONcontainer, SVGcontainer); + var groupTemplate = { + style: this.options.drawPoints.style, + size: this.options.drawPoints.size, + className: this.className + }; + DOMutil.drawPoint(x + 0.5 * iconWidth, y, groupTemplate, JSONcontainer, SVGcontainer); } } else { var barWidth = Math.round(0.3 * iconWidth); @@ -25509,13 +25123,13 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = GraphGroup; /***/ }, -/* 55 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var DOMutil = __webpack_require__(14); - var Points = __webpack_require__(56); + var DOMutil = __webpack_require__(13); + var Points = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"./points\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); function Line(groupId, options) { this.groupId = groupId; @@ -25804,60 +25418,14 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Line; /***/ }, +/* 55 */, /* 56 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var DOMutil = __webpack_require__(14); - - function Points(groupId, options) { - this.groupId = groupId; - this.options = options; - } - - Points.prototype.getYRange = function (groupData) { - var yMin = groupData[0].y; - var yMax = groupData[0].y; - for (var j = 0; j < groupData.length; j++) { - yMin = yMin > groupData[j].y ? groupData[j].y : yMin; - yMax = yMax < groupData[j].y ? groupData[j].y : yMax; - } - return { min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation }; - }; - - Points.prototype.draw = function (dataset, group, framework, offset) { - Points.draw(dataset, group, framework, offset); - }; - - /** - * draw the data points - * - * @param {Array} dataset - * @param {Object} JSONcontainer - * @param {Object} svg | SVG DOM element - * @param {GraphGroup} group - * @param {Number} [offset] - */ - Points.draw = function (dataset, group, framework, offset) { - if (offset === undefined) { - offset = 0; - } - for (var i = 0; i < dataset.length; i++) { - DOMutil.drawPoint(dataset[i].x + offset, dataset[i].y, group, framework.svgElements, framework.svg, dataset[i].label); - } - }; - - module.exports = Points; - -/***/ }, -/* 57 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var DOMutil = __webpack_require__(14); - var Points = __webpack_require__(56); + var DOMutil = __webpack_require__(13); + var Points = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"./points\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); function Bargraph(groupId, options) { this.groupId = groupId; @@ -26099,14 +25667,14 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Bargraph; /***/ }, -/* 58 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(9); - var DOMutil = __webpack_require__(14); - var Component = __webpack_require__(28); + var util = __webpack_require__(7); + var DOMutil = __webpack_require__(13); + var Component = __webpack_require__(27); /** * Legend for Graph2d @@ -26313,7 +25881,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Legend; /***/ }, -/* 59 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { /** @@ -26373,9 +25941,10 @@ return /******/ (function(modules) { // webpackBootstrap }, drawPoints: { enabled: { boolean: boolean }, + onRender: { 'function': 'function' }, size: { number: number }, style: { string: ['square', 'circle'] }, // square, circle - __type__: { object: object, boolean: boolean } + __type__: { object: object, boolean: boolean, 'function': 'function' } }, dataAxis: { showMinorLabels: { boolean: boolean }, @@ -26581,7 +26150,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.configureOptions = configureOptions; /***/ }, -/* 60 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { // Load custom shapes into CanvasRenderingContext2D @@ -26589,35 +26158,35 @@ return /******/ (function(modules) { // webpackBootstrap function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _modulesGroups = __webpack_require__(61); + var _modulesGroups = __webpack_require__(60); var _modulesGroups2 = _interopRequireDefault(_modulesGroups); - var _modulesNodesHandler = __webpack_require__(62); + var _modulesNodesHandler = __webpack_require__(61); var _modulesNodesHandler2 = _interopRequireDefault(_modulesNodesHandler); - var _modulesEdgesHandler = __webpack_require__(82); + var _modulesEdgesHandler = __webpack_require__(81); var _modulesEdgesHandler2 = _interopRequireDefault(_modulesEdgesHandler); - var _modulesPhysicsEngine = __webpack_require__(89); + var _modulesPhysicsEngine = __webpack_require__(88); var _modulesPhysicsEngine2 = _interopRequireDefault(_modulesPhysicsEngine); - var _modulesClustering = __webpack_require__(98); + var _modulesClustering = __webpack_require__(97); var _modulesClustering2 = _interopRequireDefault(_modulesClustering); - var _modulesCanvasRenderer = __webpack_require__(100); + var _modulesCanvasRenderer = __webpack_require__(99); var _modulesCanvasRenderer2 = _interopRequireDefault(_modulesCanvasRenderer); - var _modulesCanvas = __webpack_require__(101); + var _modulesCanvas = __webpack_require__(100); var _modulesCanvas2 = _interopRequireDefault(_modulesCanvas); - var _modulesView = __webpack_require__(3); + var _modulesView = __webpack_require__(101); var _modulesView2 = _interopRequireDefault(_modulesView); @@ -26637,11 +26206,11 @@ return /******/ (function(modules) { // webpackBootstrap var _modulesManipulationSystem2 = _interopRequireDefault(_modulesManipulationSystem); - var _sharedConfigurator = __webpack_require__(46); + var _sharedConfigurator = __webpack_require__(45); var _sharedConfigurator2 = _interopRequireDefault(_sharedConfigurator); - var _sharedValidator = __webpack_require__(48); + var _sharedValidator = __webpack_require__(47); var _sharedValidator2 = _interopRequireDefault(_sharedValidator); @@ -26649,15 +26218,15 @@ return /******/ (function(modules) { // webpackBootstrap __webpack_require__(109); - var Emitter = __webpack_require__(20); - var Hammer = __webpack_require__(5); - var util = __webpack_require__(9); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); + var Emitter = __webpack_require__(19); + var Hammer = __webpack_require__(3); + var util = __webpack_require__(7); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); var dotparser = __webpack_require__(110); var gephiParser = __webpack_require__(111); var Images = __webpack_require__(112); - var Activator = __webpack_require__(43); + var Activator = __webpack_require__(42); var locales = __webpack_require__(113); /** @@ -27191,7 +26760,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Network; /***/ }, -/* 61 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -27204,7 +26773,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var util = __webpack_require__(9); + var util = __webpack_require__(7); /** * @class Groups @@ -27333,7 +26902,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 62 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -27348,17 +26917,17 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var _componentsNode = __webpack_require__(63); + var _componentsNode = __webpack_require__(62); var _componentsNode2 = _interopRequireDefault(_componentsNode); - var _componentsSharedLabel = __webpack_require__(64); + var _componentsSharedLabel = __webpack_require__(63); var _componentsSharedLabel2 = _interopRequireDefault(_componentsSharedLabel); - var util = __webpack_require__(9); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); + var util = __webpack_require__(7); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); var NodesHandler = (function () { function NodesHandler(body, images, groups, layoutEngine) { @@ -27811,7 +27380,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 63 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -27826,71 +27395,71 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var _sharedLabel = __webpack_require__(64); + var _sharedLabel = __webpack_require__(63); var _sharedLabel2 = _interopRequireDefault(_sharedLabel); - var _nodesShapesBox = __webpack_require__(65); + var _nodesShapesBox = __webpack_require__(64); var _nodesShapesBox2 = _interopRequireDefault(_nodesShapesBox); - var _nodesShapesCircle = __webpack_require__(67); + var _nodesShapesCircle = __webpack_require__(66); var _nodesShapesCircle2 = _interopRequireDefault(_nodesShapesCircle); - var _nodesShapesCircularImage = __webpack_require__(69); + var _nodesShapesCircularImage = __webpack_require__(68); var _nodesShapesCircularImage2 = _interopRequireDefault(_nodesShapesCircularImage); - var _nodesShapesDatabase = __webpack_require__(70); + var _nodesShapesDatabase = __webpack_require__(69); var _nodesShapesDatabase2 = _interopRequireDefault(_nodesShapesDatabase); - var _nodesShapesDiamond = __webpack_require__(71); + var _nodesShapesDiamond = __webpack_require__(70); var _nodesShapesDiamond2 = _interopRequireDefault(_nodesShapesDiamond); - var _nodesShapesDot = __webpack_require__(73); + var _nodesShapesDot = __webpack_require__(72); var _nodesShapesDot2 = _interopRequireDefault(_nodesShapesDot); - var _nodesShapesEllipse = __webpack_require__(74); + var _nodesShapesEllipse = __webpack_require__(73); var _nodesShapesEllipse2 = _interopRequireDefault(_nodesShapesEllipse); - var _nodesShapesIcon = __webpack_require__(75); + var _nodesShapesIcon = __webpack_require__(74); var _nodesShapesIcon2 = _interopRequireDefault(_nodesShapesIcon); - var _nodesShapesImage = __webpack_require__(76); + var _nodesShapesImage = __webpack_require__(75); var _nodesShapesImage2 = _interopRequireDefault(_nodesShapesImage); - var _nodesShapesSquare = __webpack_require__(77); + var _nodesShapesSquare = __webpack_require__(76); var _nodesShapesSquare2 = _interopRequireDefault(_nodesShapesSquare); - var _nodesShapesStar = __webpack_require__(78); + var _nodesShapesStar = __webpack_require__(77); var _nodesShapesStar2 = _interopRequireDefault(_nodesShapesStar); - var _nodesShapesText = __webpack_require__(79); + var _nodesShapesText = __webpack_require__(78); var _nodesShapesText2 = _interopRequireDefault(_nodesShapesText); - var _nodesShapesTriangle = __webpack_require__(80); + var _nodesShapesTriangle = __webpack_require__(79); var _nodesShapesTriangle2 = _interopRequireDefault(_nodesShapesTriangle); - var _nodesShapesTriangleDown = __webpack_require__(81); + var _nodesShapesTriangleDown = __webpack_require__(80); var _nodesShapesTriangleDown2 = _interopRequireDefault(_nodesShapesTriangleDown); - var _sharedValidator = __webpack_require__(48); + var _sharedValidator = __webpack_require__(47); var _sharedValidator2 = _interopRequireDefault(_sharedValidator); - var util = __webpack_require__(9); + var util = __webpack_require__(7); /** * @class Node @@ -28331,7 +27900,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 64 */ +/* 63 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -28346,7 +27915,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(9); + var util = __webpack_require__(7); var Label = (function () { function Label(body, options) { @@ -28647,7 +28216,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 65 */ +/* 64 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -28666,7 +28235,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilNodeBase = __webpack_require__(66); + var _utilNodeBase = __webpack_require__(65); var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); @@ -28752,7 +28321,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 66 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -28820,7 +28389,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 67 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -28839,7 +28408,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilCircleImageBase = __webpack_require__(68); + var _utilCircleImageBase = __webpack_require__(67); var _utilCircleImageBase2 = _interopRequireDefault(_utilCircleImageBase); @@ -28910,7 +28479,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 68 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -28929,7 +28498,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilNodeBase = __webpack_require__(66); + var _utilNodeBase = __webpack_require__(65); var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); @@ -29059,7 +28628,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 69 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29078,7 +28647,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilCircleImageBase = __webpack_require__(68); + var _utilCircleImageBase = __webpack_require__(67); var _utilCircleImageBase2 = _interopRequireDefault(_utilCircleImageBase); @@ -29164,7 +28733,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 70 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29183,7 +28752,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilNodeBase = __webpack_require__(66); + var _utilNodeBase = __webpack_require__(65); var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); @@ -29271,7 +28840,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 71 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29290,7 +28859,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilShapeBase = __webpack_require__(72); + var _utilShapeBase = __webpack_require__(71); var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); @@ -29327,7 +28896,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 72 */ +/* 71 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29346,7 +28915,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilNodeBase = __webpack_require__(66); + var _utilNodeBase = __webpack_require__(65); var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); @@ -29426,7 +28995,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 73 */ +/* 72 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29445,7 +29014,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilShapeBase = __webpack_require__(72); + var _utilShapeBase = __webpack_require__(71); var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); @@ -29482,7 +29051,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 74 */ +/* 73 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29501,7 +29070,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilNodeBase = __webpack_require__(66); + var _utilNodeBase = __webpack_require__(65); var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); @@ -29591,7 +29160,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 75 */ +/* 74 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29610,7 +29179,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilNodeBase = __webpack_require__(66); + var _utilNodeBase = __webpack_require__(65); var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); @@ -29707,7 +29276,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 76 */ +/* 75 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29726,7 +29295,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilCircleImageBase = __webpack_require__(68); + var _utilCircleImageBase = __webpack_require__(67); var _utilCircleImageBase2 = _interopRequireDefault(_utilCircleImageBase); @@ -29795,7 +29364,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 77 */ +/* 76 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29814,7 +29383,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilShapeBase = __webpack_require__(72); + var _utilShapeBase = __webpack_require__(71); var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); @@ -29852,7 +29421,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 78 */ +/* 77 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29871,7 +29440,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilShapeBase = __webpack_require__(72); + var _utilShapeBase = __webpack_require__(71); var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); @@ -29908,7 +29477,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 79 */ +/* 78 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -29927,7 +29496,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilNodeBase = __webpack_require__(66); + var _utilNodeBase = __webpack_require__(65); var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); @@ -29995,7 +29564,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 80 */ +/* 79 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -30014,7 +29583,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilShapeBase = __webpack_require__(72); + var _utilShapeBase = __webpack_require__(71); var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); @@ -30051,7 +29620,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 81 */ +/* 80 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -30070,7 +29639,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilShapeBase = __webpack_require__(72); + var _utilShapeBase = __webpack_require__(71); var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); @@ -30107,7 +29676,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 82 */ +/* 81 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -30122,17 +29691,17 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var _componentsEdge = __webpack_require__(83); + var _componentsEdge = __webpack_require__(82); var _componentsEdge2 = _interopRequireDefault(_componentsEdge); - var _componentsSharedLabel = __webpack_require__(64); + var _componentsSharedLabel = __webpack_require__(63); var _componentsSharedLabel2 = _interopRequireDefault(_componentsSharedLabel); - var util = __webpack_require__(9); - var DataSet = __webpack_require__(15); - var DataView = __webpack_require__(17); + var util = __webpack_require__(7); + var DataSet = __webpack_require__(14); + var DataView = __webpack_require__(16); var EdgesHandler = (function () { function EdgesHandler(body, images, groups) { @@ -30542,7 +30111,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 83 */ +/* 82 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -30557,23 +30126,23 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var _sharedLabel = __webpack_require__(64); + var _sharedLabel = __webpack_require__(63); var _sharedLabel2 = _interopRequireDefault(_sharedLabel); - var _edgesBezierEdgeDynamic = __webpack_require__(84); + var _edgesBezierEdgeDynamic = __webpack_require__(83); var _edgesBezierEdgeDynamic2 = _interopRequireDefault(_edgesBezierEdgeDynamic); - var _edgesBezierEdgeStatic = __webpack_require__(87); + var _edgesBezierEdgeStatic = __webpack_require__(86); var _edgesBezierEdgeStatic2 = _interopRequireDefault(_edgesBezierEdgeStatic); - var _edgesStraightEdge = __webpack_require__(88); + var _edgesStraightEdge = __webpack_require__(87); var _edgesStraightEdge2 = _interopRequireDefault(_edgesStraightEdge); - var util = __webpack_require__(9); + var util = __webpack_require__(7); /** * @class Edge @@ -31106,7 +30675,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 84 */ +/* 83 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -31125,7 +30694,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilBezierEdgeBase = __webpack_require__(85); + var _utilBezierEdgeBase = __webpack_require__(84); var _utilBezierEdgeBase2 = _interopRequireDefault(_utilBezierEdgeBase); @@ -31271,7 +30840,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 85 */ +/* 84 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -31290,7 +30859,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _EdgeBase2 = __webpack_require__(86); + var _EdgeBase2 = __webpack_require__(85); var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); @@ -31418,7 +30987,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 86 */ +/* 85 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -31433,7 +31002,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(9); + var util = __webpack_require__(7); var EdgeBase = (function () { function EdgeBase(options, body, labelModule) { @@ -32015,7 +31584,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 87 */ +/* 86 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -32034,7 +31603,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilBezierEdgeBase = __webpack_require__(85); + var _utilBezierEdgeBase = __webpack_require__(84); var _utilBezierEdgeBase2 = _interopRequireDefault(_utilBezierEdgeBase); @@ -32274,7 +31843,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 88 */ +/* 87 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -32293,7 +31862,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilEdgeBase = __webpack_require__(86); + var _utilEdgeBase = __webpack_require__(85); var _utilEdgeBase2 = _interopRequireDefault(_utilEdgeBase); @@ -32379,7 +31948,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 89 */ +/* 88 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -32394,39 +31963,39 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var _componentsPhysicsBarnesHutSolver = __webpack_require__(90); + var _componentsPhysicsBarnesHutSolver = __webpack_require__(89); var _componentsPhysicsBarnesHutSolver2 = _interopRequireDefault(_componentsPhysicsBarnesHutSolver); - var _componentsPhysicsRepulsionSolver = __webpack_require__(91); + var _componentsPhysicsRepulsionSolver = __webpack_require__(90); var _componentsPhysicsRepulsionSolver2 = _interopRequireDefault(_componentsPhysicsRepulsionSolver); - var _componentsPhysicsHierarchicalRepulsionSolver = __webpack_require__(92); + var _componentsPhysicsHierarchicalRepulsionSolver = __webpack_require__(91); var _componentsPhysicsHierarchicalRepulsionSolver2 = _interopRequireDefault(_componentsPhysicsHierarchicalRepulsionSolver); - var _componentsPhysicsSpringSolver = __webpack_require__(93); + var _componentsPhysicsSpringSolver = __webpack_require__(92); var _componentsPhysicsSpringSolver2 = _interopRequireDefault(_componentsPhysicsSpringSolver); - var _componentsPhysicsHierarchicalSpringSolver = __webpack_require__(94); + var _componentsPhysicsHierarchicalSpringSolver = __webpack_require__(93); var _componentsPhysicsHierarchicalSpringSolver2 = _interopRequireDefault(_componentsPhysicsHierarchicalSpringSolver); - var _componentsPhysicsCentralGravitySolver = __webpack_require__(95); + var _componentsPhysicsCentralGravitySolver = __webpack_require__(94); var _componentsPhysicsCentralGravitySolver2 = _interopRequireDefault(_componentsPhysicsCentralGravitySolver); - var _componentsPhysicsFA2BasedRepulsionSolver = __webpack_require__(96); + var _componentsPhysicsFA2BasedRepulsionSolver = __webpack_require__(95); var _componentsPhysicsFA2BasedRepulsionSolver2 = _interopRequireDefault(_componentsPhysicsFA2BasedRepulsionSolver); - var _componentsPhysicsFA2BasedCentralGravitySolver = __webpack_require__(97); + var _componentsPhysicsFA2BasedCentralGravitySolver = __webpack_require__(96); var _componentsPhysicsFA2BasedCentralGravitySolver2 = _interopRequireDefault(_componentsPhysicsFA2BasedCentralGravitySolver); - var util = __webpack_require__(9); + var util = __webpack_require__(7); var PhysicsEngine = (function () { function PhysicsEngine(body) { @@ -33019,7 +32588,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 90 */ +/* 89 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -33518,7 +33087,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 91 */ +/* 90 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -33613,7 +33182,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 92 */ +/* 91 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -33704,7 +33273,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 93 */ +/* 92 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -33814,7 +33383,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 94 */ +/* 93 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -33943,7 +33512,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 95 */ +/* 94 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -34012,7 +33581,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 96 */ +/* 95 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -34031,7 +33600,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _BarnesHutSolver2 = __webpack_require__(90); + var _BarnesHutSolver2 = __webpack_require__(89); var _BarnesHutSolver3 = _interopRequireDefault(_BarnesHutSolver2); @@ -34086,7 +33655,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 97 */ +/* 96 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -34105,7 +33674,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _CentralGravitySolver2 = __webpack_require__(95); + var _CentralGravitySolver2 = __webpack_require__(94); var _CentralGravitySolver3 = _interopRequireDefault(_CentralGravitySolver2); @@ -34142,7 +33711,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 98 */ +/* 97 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -34157,11 +33726,11 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var _componentsNodesCluster = __webpack_require__(99); + var _componentsNodesCluster = __webpack_require__(98); var _componentsNodesCluster2 = _interopRequireDefault(_componentsNodesCluster); - var util = __webpack_require__(9); + var util = __webpack_require__(7); var ClusterEngine = (function () { function ClusterEngine(body) { @@ -34897,7 +34466,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 99 */ +/* 98 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -34914,7 +34483,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _Node2 = __webpack_require__(63); + var _Node2 = __webpack_require__(62); var _Node3 = _interopRequireDefault(_Node2); @@ -34942,7 +34511,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 100 */ +/* 99 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -34959,7 +34528,7 @@ return /******/ (function(modules) { // webpackBootstrap window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; } - var util = __webpack_require__(9); + var util = __webpack_require__(7); var CanvasRenderer = (function () { function CanvasRenderer(body, canvas) { @@ -35330,7 +34899,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 101 */ +/* 100 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -35343,10 +34912,10 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var Hammer = __webpack_require__(5); - var hammerUtil = __webpack_require__(31); + var Hammer = __webpack_require__(3); + var hammerUtil = __webpack_require__(30); - var util = __webpack_require__(9); + var util = __webpack_require__(7); /** * Create the main frame for the Network. @@ -35707,6 +35276,411 @@ return /******/ (function(modules) { // webpackBootstrap exports['default'] = Canvas; module.exports = exports['default']; +/***/ }, +/* 101 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + var util = __webpack_require__(7); + + var View = (function () { + function View(body, canvas) { + var _this = this; + + _classCallCheck(this, View); + + this.body = body; + this.canvas = canvas; + + this.animationSpeed = 1 / this.renderRefreshRate; + this.animationEasingFunction = "easeInOutQuint"; + this.easingTime = 0; + this.sourceScale = 0; + this.targetScale = 0; + this.sourceTranslation = 0; + this.targetTranslation = 0; + this.lockedOnNodeId = undefined; + this.lockedOnNodeOffset = undefined; + this.touchTime = 0; + + this.viewFunction = undefined; + + this.body.emitter.on("fit", this.fit.bind(this)); + this.body.emitter.on("animationFinished", function () { + _this.body.emitter.emit("_stopRendering"); + }); + this.body.emitter.on("unlockNode", this.releaseNode.bind(this)); + } + + _createClass(View, [{ + key: "setOptions", + value: function setOptions() { + var options = arguments[0] === undefined ? {} : arguments[0]; + + this.options = options; + } + }, { + key: "_getRange", + + /** + * Find the center position of the network + * @private + */ + value: function _getRange() { + var specificNodes = arguments[0] === undefined ? [] : arguments[0]; + + var minY = 1000000000, + maxY = -1000000000, + minX = 1000000000, + maxX = -1000000000, + node; + if (specificNodes.length > 0) { + for (var i = 0; i < specificNodes.length; i++) { + node = this.body.nodes[specificNodes[i]]; + if (minX > node.shape.boundingBox.left) { + minX = node.shape.boundingBox.left; + } + if (maxX < node.shape.boundingBox.right) { + maxX = node.shape.boundingBox.right; + } + if (minY > node.shape.boundingBox.top) { + minY = node.shape.boundingBox.top; + } // top is negative, bottom is positive + if (maxY < node.shape.boundingBox.bottom) { + maxY = node.shape.boundingBox.bottom; + } // top is negative, bottom is positive + } + } else { + for (var nodeId in this.body.nodes) { + + if (this.body.nodes.hasOwnProperty(nodeId)) { + node = this.body.nodes[nodeId]; + if (minX > node.shape.boundingBox.left) { + minX = node.shape.boundingBox.left; + } + if (maxX < node.shape.boundingBox.right) { + maxX = node.shape.boundingBox.right; + } + if (minY > node.shape.boundingBox.top) { + minY = node.shape.boundingBox.top; + } // top is negative, bottom is positive + if (maxY < node.shape.boundingBox.bottom) { + maxY = node.shape.boundingBox.bottom; + } // top is negative, bottom is positive + } + } + } + + if (minX === 1000000000 && maxX === -1000000000 && minY === 1000000000 && maxY === -1000000000) { + minY = 0, maxY = 0, minX = 0, maxX = 0; + } + return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }; + } + }, { + key: "_findCenter", + + /** + * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; + * @returns {{x: number, y: number}} + * @private + */ + value: function _findCenter(range) { + return { x: 0.5 * (range.maxX + range.minX), + y: 0.5 * (range.maxY + range.minY) }; + } + }, { + key: "fit", + + /** + * This function zooms out to fit all data on screen based on amount of nodes + * @param {Object} Options + * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; + */ + value: function fit() { + var options = arguments[0] === undefined ? { nodes: [] } : arguments[0]; + var initialZoom = arguments[1] === undefined ? false : arguments[1]; + + var range; + var zoomLevel; + + if (initialZoom === true) { + // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation. + var positionDefined = 0; + for (var nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(nodeId)) { + var node = this.body.nodes[nodeId]; + if (node.predefinedPosition === true) { + positionDefined += 1; + } + } + } + if (positionDefined > 0.5 * this.body.nodeIndices.length) { + this.fit(options, false); + return; + } + + range = this._getRange(options.nodes); + + var numberOfNodes = this.body.nodeIndices.length; + zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + + // correct for larger canvasses. + var factor = Math.min(this.canvas.frame.canvas.clientWidth / 600, this.canvas.frame.canvas.clientHeight / 600); + zoomLevel *= factor; + } else { + this.body.emitter.emit("_resizeNodes"); + range = this._getRange(options.nodes); + + var xDistance = Math.abs(range.maxX - range.minX) * 1.1; + var yDistance = Math.abs(range.maxY - range.minY) * 1.1; + + var xZoomLevel = this.canvas.frame.canvas.clientWidth / xDistance; + var yZoomLevel = this.canvas.frame.canvas.clientHeight / yDistance; + + zoomLevel = xZoomLevel <= yZoomLevel ? xZoomLevel : yZoomLevel; + } + + if (zoomLevel > 1) { + zoomLevel = 1; + } else if (zoomLevel === 0) { + zoomLevel = 1; + } + + var center = this._findCenter(range); + var animationOptions = { position: center, scale: zoomLevel, animation: options.animation }; + this.moveTo(animationOptions); + } + }, { + key: "focus", + + // animation + + /** + * Center a node in view. + * + * @param {Number} nodeId + * @param {Number} [options] + */ + value: function focus(nodeId) { + var options = arguments[1] === undefined ? {} : arguments[1]; + + if (this.body.nodes[nodeId] !== undefined) { + var nodePosition = { x: this.body.nodes[nodeId].x, y: this.body.nodes[nodeId].y }; + options.position = nodePosition; + options.lockedOnNode = nodeId; + + this.moveTo(options); + } else { + console.log("Node: " + nodeId + " cannot be found."); + } + } + }, { + key: "moveTo", + + /** + * + * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels + * | options.scale = Number // scale to move to + * | options.position = {x:Number, y:Number} // position to move to + * | options.animation = {duration:Number, easingFunction:String} || Boolean // position to move to + */ + value: function moveTo(options) { + if (options === undefined) { + options = {}; + return; + } + if (options.offset === undefined) { + options.offset = { x: 0, y: 0 }; + } + if (options.offset.x === undefined) { + options.offset.x = 0; + } + if (options.offset.y === undefined) { + options.offset.y = 0; + } + if (options.scale === undefined) { + options.scale = this.body.view.scale; + } + if (options.position === undefined) { + options.position = this.getViewPosition(); + } + if (options.animation === undefined) { + options.animation = { duration: 0 }; + } + if (options.animation === false) { + options.animation = { duration: 0 }; + } + if (options.animation === true) { + options.animation = {}; + } + if (options.animation.duration === undefined) { + options.animation.duration = 1000; + } // default duration + if (options.animation.easingFunction === undefined) { + options.animation.easingFunction = "easeInOutQuad"; + } // default easing function + + this.animateView(options); + } + }, { + key: "animateView", + + /** + * + * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels + * | options.time = Number // animation time in milliseconds + * | options.scale = Number // scale to animate to + * | options.position = {x:Number, y:Number} // position to animate to + * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad, + * // easeInCubic, easeOutCubic, easeInOutCubic, + * // easeInQuart, easeOutQuart, easeInOutQuart, + * // easeInQuint, easeOutQuint, easeInOutQuint + */ + value: function animateView(options) { + if (options === undefined) { + return; + } + this.animationEasingFunction = options.animation.easingFunction; + // release if something focussed on the node + this.releaseNode(); + if (options.locked === true) { + this.lockedOnNodeId = options.lockedOnNode; + this.lockedOnNodeOffset = options.offset; + } + + // forcefully complete the old animation if it was still running + if (this.easingTime != 0) { + this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation. + } + + this.sourceScale = this.body.view.scale; + this.sourceTranslation = this.body.view.translation; + this.targetScale = options.scale; + + // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw + // but at least then we'll have the target transition + this.body.view.scale = this.targetScale; + var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); + + var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node + x: viewCenter.x - options.position.x, + y: viewCenter.y - options.position.y + }; + this.targetTranslation = { + x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x, + y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y + }; + + // if the time is set to 0, don't do an animation + if (options.animation.duration === 0) { + if (this.lockedOnNodeId != undefined) { + this.viewFunction = this._lockedRedraw.bind(this); + this.body.emitter.on("initRedraw", this.viewFunction); + } else { + this.body.view.scale = this.targetScale; + this.body.view.translation = this.targetTranslation; + this.body.emitter.emit("_requestRedraw"); + } + } else { + this.animationSpeed = 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's + this.animationEasingFunction = options.animation.easingFunction; + + this.viewFunction = this._transitionRedraw.bind(this); + this.body.emitter.on("initRedraw", this.viewFunction); + this.body.emitter.emit("_startRendering"); + } + } + }, { + key: "_lockedRedraw", + + /** + * used to animate smoothly by hijacking the redraw function. + * @private + */ + value: function _lockedRedraw() { + var nodePosition = { x: this.body.nodes[this.lockedOnNodeId].x, y: this.body.nodes[this.lockedOnNodeId].y }; + var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight }); + var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node + x: viewCenter.x - nodePosition.x, + y: viewCenter.y - nodePosition.y + }; + var sourceTranslation = this.body.view.translation; + var targetTranslation = { + x: sourceTranslation.x + distanceFromCenter.x * this.body.view.scale + this.lockedOnNodeOffset.x, + y: sourceTranslation.y + distanceFromCenter.y * this.body.view.scale + this.lockedOnNodeOffset.y + }; + + this.body.view.translation = targetTranslation; + } + }, { + key: "releaseNode", + value: function releaseNode() { + if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) { + this.body.emitter.off("initRedraw", this.viewFunction); + this.lockedOnNodeId = undefined; + this.lockedOnNodeOffset = undefined; + } + } + }, { + key: "_transitionRedraw", + + /** + * + * @param easingTime + * @private + */ + value: function _transitionRedraw() { + var finished = arguments[0] === undefined ? false : arguments[0]; + + this.easingTime += this.animationSpeed; + this.easingTime = finished === true ? 1 : this.easingTime; + + var progress = util.easingFunctions[this.animationEasingFunction](this.easingTime); + + this.body.view.scale = this.sourceScale + (this.targetScale - this.sourceScale) * progress; + this.body.view.translation = { + x: this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress, + y: this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress + }; + + // cleanup + if (this.easingTime >= 1) { + this.body.emitter.off("initRedraw", this.viewFunction); + this.easingTime = 0; + if (this.lockedOnNodeId != undefined) { + this.viewFunction = this._lockedRedraw.bind(this); + this.body.emitter.on("initRedraw", this.viewFunction); + } + this.body.emitter.emit("animationFinished"); + } + } + }, { + key: "getScale", + value: function getScale() { + return this.body.view.scale; + } + }, { + key: "getViewPosition", + value: function getViewPosition() { + return this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); + } + }]); + + return View; + })(); + + exports["default"] = View; + module.exports = exports["default"]; + /***/ }, /* 102 */ /***/ function(module, exports, __webpack_require__) { @@ -35731,7 +35705,7 @@ return /******/ (function(modules) { // webpackBootstrap var _componentsPopup2 = _interopRequireDefault(_componentsPopup); - var util = __webpack_require__(9); + var util = __webpack_require__(7); var InteractionHandler = (function () { function InteractionHandler(body, canvas, selectionHandler) { @@ -36485,10 +36459,10 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(9); - var Hammer = __webpack_require__(5); - var hammerUtil = __webpack_require__(31); - var keycharm = __webpack_require__(44); + var util = __webpack_require__(7); + var Hammer = __webpack_require__(3); + var hammerUtil = __webpack_require__(30); + var keycharm = __webpack_require__(43); var NavigationHandler = (function () { function NavigationHandler(body, canvas) { @@ -36930,9 +36904,9 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var Node = __webpack_require__(63); - var Edge = __webpack_require__(83); - var util = __webpack_require__(9); + var Node = __webpack_require__(62); + var Edge = __webpack_require__(82); + var util = __webpack_require__(7); var SelectionHandler = (function () { function SelectionHandler(body, canvas) { @@ -37661,7 +37635,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(9); + var util = __webpack_require__(7); var LayoutEngine = (function () { function LayoutEngine(body) { @@ -38169,9 +38143,9 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(9); - var Hammer = __webpack_require__(5); - var hammerUtil = __webpack_require__(31); + var util = __webpack_require__(7); + var Hammer = __webpack_require__(3); + var hammerUtil = __webpack_require__(30); /** * clears the toolbar div element of children @@ -39313,7 +39287,7 @@ return /******/ (function(modules) { // webpackBootstrap this.options.addEdge(defaultData, function (finalizedData) { if (finalizedData !== null && finalizedData !== undefined && _this6.inMode === 'addEdge') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback - _this6.body.data.edges.add(finalizedData); + _this6.body.data.edges.getDataSet().add(finalizedData); _this6.selectionHandler.unselectAll(); _this6.showManipulatorToolbar(); } @@ -39322,7 +39296,7 @@ return /******/ (function(modules) { // webpackBootstrap throw new Error('The function for connect does not support two arguments (data,callback)'); } } else { - this.body.data.edges.add(defaultData); + this.body.data.edges.getDataSet().add(defaultData); this.selectionHandler.unselectAll(); this.showManipulatorToolbar(); } @@ -39347,7 +39321,7 @@ return /******/ (function(modules) { // webpackBootstrap _this7.body.edges[defaultData.id].updateEdgeType(); _this7.body.emitter.emit('_redraw'); } else { - _this7.body.data.edges.update(finalizedData); + _this7.body.data.edges.getDataSet().update(finalizedData); _this7.selectionHandler.unselectAll(); _this7.showManipulatorToolbar(); } @@ -39356,7 +39330,7 @@ return /******/ (function(modules) { // webpackBootstrap throw new Error('The function for edit does not support two arguments (data, callback)'); } } else { - this.body.data.edges.update(defaultData); + this.body.data.edges.getDataSet().update(defaultData); this.selectionHandler.unselectAll(); this.showManipulatorToolbar(); } diff --git a/test/graph2dTest.html b/test/graph2dTest.html index 4bc5b040..23983af8 100644 --- a/test/graph2dTest.html +++ b/test/graph2dTest.html @@ -10,11 +10,12 @@ body, html { font-family: sans-serif; } + - - + + @@ -25,6 +26,7 @@
+
\ No newline at end of file diff --git a/test/graph2dTestData.js b/test/graph2dTestData.js deleted file mode 100644 index e5604438..00000000 --- a/test/graph2dTestData.js +++ /dev/null @@ -1,62 +0,0 @@ -var data = [{"date":1434089922,"human date":"Fri Jun 12 08:18:42 2015","sensor_name":"location_trace","value":{"accuracy":9.8651085,"event":"depart","latitude":-6.88719262,"longitude":107.60112529,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434091791,"human date":"Fri Jun 12 08:49:51 2015","sensor_name":"location_trace","value":{"accuracy":43.81825409,"event":"arrive","id":"1","label":null,"latitude":-6.8872664,"longitude":107.60107174,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434108848,"human date":"Fri Jun 12 13:34:08 2015","sensor_name":"location_trace","value":{"accuracy":8.55207001,"event":"depart","latitude":-6.88727046,"longitude":107.60103358,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434109598,"human date":"Fri Jun 12 13:46:38 2015","sensor_name":"location_trace","value":{"accuracy":49.46214044,"event":"arrive","id":"2","label":null,"latitude":-6.88057248,"longitude":107.61796548,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434111432,"human date":"Fri Jun 12 14:17:12 2015","sensor_name":"location_trace","value":{"accuracy":48.40714981,"event":"depart","latitude":-6.88062124,"longitude":107.61783507,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434111766,"human date":"Fri Jun 12 14:22:46 2015","sensor_name":"location_trace","value":{"accuracy":16.34922773,"event":"arrive","id":"3","label":null,"latitude":-6.87758127,"longitude":107.61716543,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434113152,"human date":"Fri Jun 12 14:45:52 2015","sensor_name":"location_trace","value":{"accuracy":20.92144383,"event":"depart","latitude":-6.87759104,"longitude":107.6171668,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434113562,"human date":"Fri Jun 12 14:52:42 2015","sensor_name":"location_trace","value":{"accuracy":44.55707187,"event":"arrive","id":"2","label":null,"latitude":-6.88051516,"longitude":107.61791165,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434114689,"human date":"Fri Jun 12 15:11:29 2015","sensor_name":"location_trace","value":{"accuracy":59.36579371,"event":"depart","latitude":-6.88059773,"longitude":107.61779569,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434114702,"human date":"Fri Jun 12 15:11:42 2015","sensor_name":"location_trace","value":{"accuracy":90.4257235,"event":"arrive","id":"4","label":null,"latitude":-6.88108843,"longitude":107.61609844,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434115228,"human date":"Fri Jun 12 15:20:28 2015","sensor_name":"location_trace","value":{"accuracy":51.27672614,"event":"depart","latitude":-6.88080118,"longitude":107.61616144,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434115556,"human date":"Fri Jun 12 15:25:56 2015","sensor_name":"location_trace","value":{"accuracy":19.81304222,"event":"arrive","id":"5","label":null,"latitude":-6.88014939,"longitude":107.61266789,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434178314,"human date":"Sat Jun 13 08:51:54 2015","sensor_name":"location_trace","value":{"accuracy":7.23722729,"event":"depart","latitude":-6.88014818,"longitude":107.61267432,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434179256,"human date":"Sat Jun 13 09:07:36 2015","sensor_name":"location_trace","value":{"accuracy":17.38816116,"event":"arrive","id":"6","label":null,"latitude":-6.88241801,"longitude":107.61539814,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434181976,"human date":"Sat Jun 13 09:52:56 2015","sensor_name":"location_trace","value":{"accuracy":14.05118087,"event":"depart","latitude":-6.8824038,"longitude":107.61541507,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434183444,"human date":"Sat Jun 13 10:17:24 2015","sensor_name":"location_trace","value":{"accuracy":49.75070572,"event":"arrive","id":"7","label":null,"latitude":-6.89371451,"longitude":107.61154891,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434184755,"human date":"Sat Jun 13 10:39:15 2015","sensor_name":"location_trace","value":{"accuracy":55.66443874,"event":"depart","latitude":-6.89366818,"longitude":107.6115371,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434185083,"human date":"Sat Jun 13 10:44:43 2015","sensor_name":"location_trace","value":{"accuracy":49.72710721,"event":"arrive","id":"8","label":null,"latitude":-6.89054567,"longitude":107.61124693,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434199431,"human date":"Sat Jun 13 14:43:51 2015","sensor_name":"location_trace","value":{"accuracy":33.69752192,"event":"depart","latitude":-6.89062121,"longitude":107.61125685,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434200593,"human date":"Sat Jun 13 15:03:13 2015","sensor_name":"location_trace","value":{"accuracy":14.23071391,"event":"arrive","id":"9","label":null,"latitude":-6.88131227,"longitude":107.5989531,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434207742,"human date":"Sat Jun 13 17:02:22 2015","sensor_name":"location_trace","value":{"accuracy":23.31002638,"event":"depart","latitude":-6.88128907,"longitude":107.59893803,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434208493,"human date":"Sat Jun 13 17:14:53 2015","sensor_name":"location_trace","value":{"accuracy":77.20428606,"event":"arrive","id":"2","label":null,"latitude":-6.88060048,"longitude":107.61763722,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434208802,"human date":"Sat Jun 13 17:20:02 2015","sensor_name":"location_trace","value":{"accuracy":77.20428606,"event":"depart","latitude":-6.88060048,"longitude":107.61763722,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434209136,"human date":"Sat Jun 13 17:25:36 2015","sensor_name":"location_trace","value":{"accuracy":33.31796294,"event":"arrive","id":"5","label":null,"latitude":-6.88015553,"longitude":107.61265498,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434251757,"human date":"Sun Jun 14 05:15:57 2015","sensor_name":"location_trace","value":{"accuracy":10.41278242,"event":"depart","latitude":-6.88009926,"longitude":107.61263606,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434253352,"human date":"Sun Jun 14 05:42:32 2015","sensor_name":"location_trace","value":{"accuracy":28.48064965,"event":"arrive","id":"10","label":null,"latitude":-6.90170313,"longitude":107.61214595,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434253835,"human date":"Sun Jun 14 05:50:35 2015","sensor_name":"location_trace","value":{"accuracy":42.08014781,"event":"depart","latitude":-6.90171101,"longitude":107.61207844,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434254203,"human date":"Sun Jun 14 05:56:43 2015","sensor_name":"location_trace","value":{"accuracy":80.35412083999999,"event":"arrive","id":"11","label":null,"latitude":-6.8921046,"longitude":107.61095909,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434254666,"human date":"Sun Jun 14 06:04:26 2015","sensor_name":"location_trace","value":{"accuracy":92.1266253,"event":"depart","latitude":-6.8917989,"longitude":107.61094079,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434254673,"human date":"Sun Jun 14 06:04:33 2015","sensor_name":"location_trace","value":{"accuracy":77.07350688,"event":"arrive","id":"8","label":null,"latitude":-6.89035161,"longitude":107.61141994,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434258359,"human date":"Sun Jun 14 07:05:59 2015","sensor_name":"location_trace","value":{"accuracy":44.14984278,"event":"depart","latitude":-6.89048937,"longitude":107.61136302,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434301532,"human date":"Sun Jun 14 19:05:32 2015","sensor_name":"location_trace","value":{"accuracy":8.76517804,"event":"arrive","id":"5","label":null,"latitude":-6.88011422,"longitude":107.61264872,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434309577,"human date":"Sun Jun 14 21:19:37 2015","sensor_name":"location_trace","value":{"accuracy":5.86775248,"event":"depart","latitude":-6.88011528,"longitude":107.61264926,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434335139,"human date":"Mon Jun 15 04:25:39 2015","sensor_name":"location_trace","value":{"accuracy":61.32370768,"event":"arrive","id":"2","label":null,"latitude":-6.88066177,"longitude":107.61811035,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434336013,"human date":"Mon Jun 15 04:40:13 2015","sensor_name":"location_trace","value":{"accuracy":41.79724314,"event":"depart","latitude":-6.88062104,"longitude":107.61809159,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434342433,"human date":"Mon Jun 15 06:27:13 2015","sensor_name":"location_trace","value":{"accuracy":48.73126571,"event":"arrive","id":"1","label":null,"latitude":-6.88725263,"longitude":107.60103205,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434368340,"human date":"Mon Jun 15 13:39:00 2015","sensor_name":"location_trace","value":{"accuracy":21.61201699,"event":"depart","latitude":-6.8872998,"longitude":107.60105245,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434369101,"human date":"Mon Jun 15 13:51:41 2015","sensor_name":"location_trace","value":{"accuracy":72.08036199,"event":"arrive","id":"10","label":null,"latitude":-6.90144182,"longitude":107.61194031,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434376124,"human date":"Mon Jun 15 15:48:44 2015","sensor_name":"location_trace","value":{"accuracy":52.99032469,"event":"depart","latitude":-6.9015362,"longitude":107.61199601,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434377390,"human date":"Mon Jun 15 16:09:50 2015","sensor_name":"location_trace","value":{"accuracy":47.03616961,"event":"arrive","id":"2","label":null,"latitude":-6.88054536,"longitude":107.61796241,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434377771,"human date":"Mon Jun 15 16:16:11 2015","sensor_name":"location_trace","value":{"accuracy":47.03616961,"event":"depart","latitude":-6.88054536,"longitude":107.61796241,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434378417,"human date":"Mon Jun 15 16:26:57 2015","sensor_name":"location_trace","value":{"accuracy":40.51562354,"event":"arrive","id":"5","label":null,"latitude":-6.8801409,"longitude":107.61269824,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434417371,"human date":"Tue Jun 16 03:16:11 2015","sensor_name":"location_trace","value":{"accuracy":14.27015187,"event":"depart","latitude":-6.88014601,"longitude":107.61265679,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434417701,"human date":"Tue Jun 16 03:21:41 2015","sensor_name":"location_trace","value":{"accuracy":30.48131182,"event":"arrive","id":"2","label":null,"latitude":-6.88058681,"longitude":107.61796969,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434418426,"human date":"Tue Jun 16 03:33:46 2015","sensor_name":"location_trace","value":{"accuracy":32.14151466,"event":"depart","latitude":-6.8806009,"longitude":107.61794498,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434419710,"human date":"Tue Jun 16 03:55:10 2015","sensor_name":"location_trace","value":{"accuracy":38.48393903,"event":"arrive","id":"1","label":null,"latitude":-6.88728876,"longitude":107.60105091,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434460889,"human date":"Tue Jun 16 15:21:29 2015","sensor_name":"location_trace","value":{"accuracy":12.59621188,"event":"depart","latitude":-6.88727441,"longitude":107.60104867,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434461551,"human date":"Tue Jun 16 15:32:31 2015","sensor_name":"location_trace","value":{"accuracy":19.31764351,"event":"arrive","id":"12","label":null,"latitude":-6.87633382,"longitude":107.61808237,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434465985,"human date":"Tue Jun 16 16:46:25 2015","sensor_name":"location_trace","value":{"accuracy":19.11954236,"event":"depart","latitude":-6.87630865,"longitude":107.61808388,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434466313,"human date":"Tue Jun 16 16:51:53 2015","sensor_name":"location_trace","value":{"accuracy":41.74256237,"event":"arrive","id":"2","label":null,"latitude":-6.88040489,"longitude":107.61805006,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434470287,"human date":"Tue Jun 16 17:58:07 2015","sensor_name":"location_trace","value":{"accuracy":17.17529627,"event":"depart","latitude":-6.88040091,"longitude":107.61802065,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434470692,"human date":"Tue Jun 16 18:04:52 2015","sensor_name":"location_trace","value":{"accuracy":25.62768635,"event":"arrive","id":"5","label":null,"latitude":-6.88014872,"longitude":107.612666,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434503862,"human date":"Wed Jun 17 03:17:42 2015","sensor_name":"location_trace","value":{"accuracy":16.97034556,"event":"depart","latitude":-6.88014743,"longitude":107.612663,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434504223,"human date":"Wed Jun 17 03:23:43 2015","sensor_name":"location_trace","value":{"accuracy":39.91119162,"event":"arrive","id":"2","label":null,"latitude":-6.88036261,"longitude":107.61798252,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434504635,"human date":"Wed Jun 17 03:30:35 2015","sensor_name":"location_trace","value":{"accuracy":44.98165311,"event":"depart","latitude":-6.88036768,"longitude":107.61796149,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434506331,"human date":"Wed Jun 17 03:58:51 2015","sensor_name":"location_trace","value":{"accuracy":107.826819,"event":"arrive","id":"13","label":null,"latitude":-6.88960661,"longitude":107.66640101,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434507298,"human date":"Wed Jun 17 04:14:58 2015","sensor_name":"location_trace","value":{"accuracy":73.6596208,"event":"depart","latitude":-6.88948967,"longitude":107.6667333,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434508937,"human date":"Wed Jun 17 04:42:17 2015","sensor_name":"location_trace","value":{"accuracy":30.22118878,"event":"arrive","id":"1","label":null,"latitude":-6.88730063,"longitude":107.60103527,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434555454,"human date":"Wed Jun 17 17:37:34 2015","sensor_name":"location_trace","value":{"accuracy":18.15708917,"event":"depart","latitude":-6.88728161,"longitude":107.60105134,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434557415,"human date":"Wed Jun 17 18:10:15 2015","sensor_name":"location_trace","value":{"accuracy":65.51653597000001,"event":"arrive","id":"5","label":null,"latitude":-6.88014859,"longitude":107.6126779,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434588524,"human date":"Thu Jun 18 02:48:44 2015","sensor_name":"location_trace","value":{"accuracy":15.86531182,"event":"depart","latitude":-6.88015002,"longitude":107.6126594,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}, -{"date":1434589637,"human date":"Thu Jun 18 03:07:17 2015","sensor_name":"location_trace","value":{"accuracy":96.19415222000001,"event":"arrive","id":"1","label":null,"latitude":-6.88733572,"longitude":107.60105139,"metadata":{"core version":"v1.8.0-coaching_v3.4.2","module version":"1.3"}}}] \ No newline at end of file diff --git a/test/graph2dTestData2.js b/test/graph2dTestData2.js deleted file mode 100644 index 970a1616..00000000 --- a/test/graph2dTestData2.js +++ /dev/null @@ -1,31 +0,0 @@ -var timeTraveledData = [{"date":1434091791,"human date":"Fri Jun 12 08:49:51 2015","sensor_name":"time_traveled","value":1869}, -{"date":1434109598,"human date":"Fri Jun 12 13:46:38 2015","sensor_name":"time_traveled","value":2619}, -{"date":1434111766,"human date":"Fri Jun 12 14:22:46 2015","sensor_name":"time_traveled","value":2953}, -{"date":1434113562,"human date":"Fri Jun 12 14:52:42 2015","sensor_name":"time_traveled","value":3363}, -{"date":1434114702,"human date":"Fri Jun 12 15:11:42 2015","sensor_name":"time_traveled","value":3376}, -{"date":1434115556,"human date":"Fri Jun 12 15:25:56 2015","sensor_name":"time_traveled","value":3704}, -{"date":1434179256,"human date":"Sat Jun 13 09:07:36 2015","sensor_name":"time_traveled","value":4646}, -{"date":1434183444,"human date":"Sat Jun 13 10:17:24 2015","sensor_name":"time_traveled","value":6114}, -{"date":1434185083,"human date":"Sat Jun 13 10:44:43 2015","sensor_name":"time_traveled","value":6442}, -{"date":1434200593,"human date":"Sat Jun 13 15:03:13 2015","sensor_name":"time_traveled","value":7604}, -{"date":1434208493,"human date":"Sat Jun 13 17:14:53 2015","sensor_name":"time_traveled","value":8355}, -{"date":1434209136,"human date":"Sat Jun 13 17:25:36 2015","sensor_name":"time_traveled","value":8689}, -{"date":1434253352,"human date":"Sun Jun 14 05:42:32 2015","sensor_name":"time_traveled","value":10284}, -{"date":1434254203,"human date":"Sun Jun 14 05:56:43 2015","sensor_name":"time_traveled","value":10652}, -{"date":1434254673,"human date":"Sun Jun 14 06:04:33 2015","sensor_name":"time_traveled","value":10659}, -{"date":1434301532,"human date":"Sun Jun 14 19:05:32 2015","sensor_name":"time_traveled","value":53832}, -{"date":1434335139,"human date":"Mon Jun 15 04:25:39 2015","sensor_name":"time_traveled","value":79394}, -{"date":1434342433,"human date":"Mon Jun 15 06:27:13 2015","sensor_name":"time_traveled","value":85814}, -{"date":1434369101,"human date":"Mon Jun 15 13:51:41 2015","sensor_name":"time_traveled","value":86575}, -{"date":1434377390,"human date":"Mon Jun 15 16:09:50 2015","sensor_name":"time_traveled","value":87841}, -{"date":1434378417,"human date":"Mon Jun 15 16:26:57 2015","sensor_name":"time_traveled","value":88487}, -{"date":1434417701,"human date":"Tue Jun 16 03:21:41 2015","sensor_name":"time_traveled","value":88817}, -{"date":1434419710,"human date":"Tue Jun 16 03:55:10 2015","sensor_name":"time_traveled","value":90101}, -{"date":1434461551,"human date":"Tue Jun 16 15:32:31 2015","sensor_name":"time_traveled","value":90763}, -{"date":1434466313,"human date":"Tue Jun 16 16:51:53 2015","sensor_name":"time_traveled","value":91091}, -{"date":1434470692,"human date":"Tue Jun 16 18:04:52 2015","sensor_name":"time_traveled","value":91496}, -{"date":1434504223,"human date":"Wed Jun 17 03:23:43 2015","sensor_name":"time_traveled","value":91857}, -{"date":1434506331,"human date":"Wed Jun 17 03:58:51 2015","sensor_name":"time_traveled","value":93553}, -{"date":1434508937,"human date":"Wed Jun 17 04:42:17 2015","sensor_name":"time_traveled","value":95192}, -{"date":1434557415,"human date":"Wed Jun 17 18:10:15 2015","sensor_name":"time_traveled","value":97153}, -{"date":1434589637,"human date":"Thu Jun 18 03:07:17 2015","sensor_name":"time_traveled","value":98266}] diff --git a/test/networkTest.html b/test/networkTest.html index e09f89f1..0290de35 100644 --- a/test/networkTest.html +++ b/test/networkTest.html @@ -1,88 +1,89 @@ - + - Network | Basic usage - + + JS Bin - - - - - - -

- Create a simple network with some nodes and edges. -

- -
- - - + } + + + + + + +
- + \ No newline at end of file