From 44aabd985aac48af3dfdb5ee8335583d1d9b9006 Mon Sep 17 00:00:00 2001 From: jos Date: Thu, 14 Aug 2014 17:15:17 +0200 Subject: [PATCH] Released version 3.2.0 --- dist/vis.css | 4 - dist/vis.js | 19706 ++++++++-------- dist/vis.map | 2 +- dist/vis.min.css | 2 +- dist/vis.min.js | 28 +- docs/graph2d.html | 38 +- docs/network.html | 8 +- download/vis.zip | Bin 1901898 -> 1907380 bytes examples/graph2d/09_external_legend.html | 367 + examples/graph2d/index.html | 1 + examples/network/02_random_nodes.html | 3 +- examples/network/06_groups.html | 13 +- examples/network/10_multiline_text.html | 2 +- examples/network/11_custom_style.html | 2 +- examples/network/13_dashed_lines.html | 4 +- examples/network/17_network_info.html | 10 +- .../18_fully_random_nodes_clustering.html | 6 +- .../19_scale_free_graph_clustering.html | 13 +- examples/network/20_navigation.html | 16 +- examples/network/21_data_manipulation.html | 5 +- examples/network/23_hierarchical_layout.html | 4 +- .../24_hierarchical_layout_userdefined.html | 2 +- .../network/25_physics_configuration.html | 8 +- examples/network/26_staticSmoothCurves.html | 2 +- examples/network/30_importing_from_gephi.html | 2 +- index.html | 8 +- 26 files changed, 10051 insertions(+), 10205 deletions(-) create mode 100644 examples/graph2d/09_external_legend.html diff --git a/dist/vis.css b/dist/vis.css index 260d73e2..f0591604 100755 --- a/dist/vis.css +++ b/dist/vis.css @@ -665,10 +665,6 @@ div.network-navigation:active { box-shadow: 0px 0px 1px 3px rgba(56, 207, 21, 0.95); } -div.network-navigation.active { - box-shadow: 0px 0px 1px 3px rgba(56, 207, 21, 0.95); -} - div.network-navigation.up { background-image: url("img/network/upArrow.png"); bottom:50px; diff --git a/dist/vis.js b/dist/vis.js index 8938f2de..66643401 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -4,8 +4,8 @@ * * A dynamic, browser-based visualization library. * - * @version 3.1.0 - * @date 2014-07-22 + * @version 3.2.0 + * @date 2014-08-14 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -109,8 +109,8 @@ return /******/ (function(modules) { // webpackBootstrap components: { items: { - Item: __webpack_require__(28), - ItemBox: __webpack_require__(29), + Item: __webpack_require__(29), + ItemBox: __webpack_require__(28), ItemPoint: __webpack_require__(30), ItemRange: __webpack_require__(31) }, @@ -320,6 +320,43 @@ return /******/ (function(modules) { // webpackBootstrap return a; }; + /** + * Extend object a with selected properties of object b or a series of objects + * Only properties with defined values are copied + * @param {Array.} props + * @param {Object} a + * @param {... Object} b + * @return {Object} a + */ + exports.selectiveNotDeepExtend = function (props, a, b) { + // TODO: add support for Arrays to deepExtend + if (Array.isArray(b)) { + throw new TypeError('Arrays are not supported by deepExtend'); + } + for (var prop in b) { + if (b.hasOwnProperty(prop)) { + if (props.indexOf(prop) == -1) { + if (b[prop] && b[prop].constructor === Object) { + if (a[prop] === undefined) { + a[prop] = {}; + } + if (a[prop].constructor === Object) { + exports.deepExtend(a[prop], b[prop]); + } + else { + a[prop] = b[prop]; + } + } else if (Array.isArray(b[prop])) { + throw new TypeError('Arrays are not supported by deepExtend'); + } else { + a[prop] = b[prop]; + } + } + } + } + return a; + }; + /** * Deep extend an object a with the properties of object b * @param {Object} a @@ -1454,7 +1491,7 @@ return /******/ (function(modules) { // webpackBootstrap */ exports.getDOMElement = function (elementType, JSONcontainer, DOMContainer) { var element; - // allocate SVG element, if it doesnt yet exist, create one. + // allocate DOM element, if it doesnt yet exist, create one. if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before // check if there is an redundant element if (JSONcontainer[elementType].redundant.length > 0) { @@ -1520,12 +1557,14 @@ return /******/ (function(modules) { // webpackBootstrap * @param className */ exports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer) { - var rect = exports.getSVGElement('rect',JSONcontainer, svgContainer); - rect.setAttributeNS(null, "x", x - 0.5 * width); - rect.setAttributeNS(null, "y", y); - rect.setAttributeNS(null, "width", width); - rect.setAttributeNS(null, "height", height); - rect.setAttributeNS(null, "class", className); + // if (height != 0) { + var rect = exports.getSVGElement('rect',JSONcontainer, svgContainer); + rect.setAttributeNS(null, "x", x - 0.5 * width); + rect.setAttributeNS(null, "y", y); + rect.setAttributeNS(null, "width", width); + rect.setAttributeNS(null, "height", height); + rect.setAttributeNS(null, "class", className); + // } }; /***/ }, @@ -2790,7 +2829,7 @@ return /******/ (function(modules) { // webpackBootstrap /* 5 */ /***/ function(module, exports, __webpack_require__) { - var Emitter = __webpack_require__(45); + var Emitter = __webpack_require__(46); var DataSet = __webpack_require__(3); var DataView = __webpack_require__(4); var util = __webpack_require__(1); @@ -6034,12 +6073,13 @@ return /******/ (function(modules) { // webpackBootstrap /* 12 */ /***/ function(module, exports, __webpack_require__) { - var Emitter = __webpack_require__(45); + var Emitter = __webpack_require__(46); var Hammer = __webpack_require__(41); var util = __webpack_require__(1); var DataSet = __webpack_require__(3); var DataView = __webpack_require__(4); var Range = __webpack_require__(15); + var Core = __webpack_require__(42); var TimeAxis = __webpack_require__(27); var CurrentTime = __webpack_require__(19); var CustomTime = __webpack_require__(20); @@ -6053,6 +6093,13 @@ return /******/ (function(modules) { // webpackBootstrap * @constructor */ function Timeline (container, items, options) { + // mix the core properties in here + for (var coreProp in Core.prototype) { + if (Core.prototype.hasOwnProperty(coreProp) && !Timeline.prototype.hasOwnProperty(coreProp)) { + Timeline.prototype[coreProp] = Core.prototype[coreProp]; + } + } + if (!(this instanceof Timeline)) { throw new SyntaxError('Constructor must be called with the new operator'); } @@ -6135,165 +6182,6 @@ return /******/ (function(modules) { // webpackBootstrap } } - // turn Timeline into an event emitter - Emitter(Timeline.prototype); - - /** - * Create the main DOM for the Timeline: a root panel containing left, right, - * top, bottom, content, and background panel. - * @param {Element} container The container element where the Timeline will - * be attached. - * @private - */ - Timeline.prototype._create = function (container) { - this.dom = {}; - - this.dom.root = document.createElement('div'); - this.dom.background = document.createElement('div'); - this.dom.backgroundVertical = document.createElement('div'); - this.dom.backgroundHorizontal = document.createElement('div'); - this.dom.centerContainer = document.createElement('div'); - this.dom.leftContainer = document.createElement('div'); - this.dom.rightContainer = document.createElement('div'); - this.dom.center = document.createElement('div'); - this.dom.left = document.createElement('div'); - this.dom.right = document.createElement('div'); - this.dom.top = document.createElement('div'); - this.dom.bottom = document.createElement('div'); - this.dom.shadowTop = document.createElement('div'); - this.dom.shadowBottom = document.createElement('div'); - this.dom.shadowTopLeft = document.createElement('div'); - this.dom.shadowBottomLeft = document.createElement('div'); - this.dom.shadowTopRight = document.createElement('div'); - this.dom.shadowBottomRight = document.createElement('div'); - - this.dom.background.className = 'vispanel background'; - this.dom.backgroundVertical.className = 'vispanel background vertical'; - this.dom.backgroundHorizontal.className = 'vispanel background horizontal'; - this.dom.centerContainer.className = 'vispanel center'; - this.dom.leftContainer.className = 'vispanel left'; - this.dom.rightContainer.className = 'vispanel right'; - this.dom.top.className = 'vispanel top'; - this.dom.bottom.className = 'vispanel bottom'; - this.dom.left.className = 'content'; - this.dom.center.className = 'content'; - this.dom.right.className = 'content'; - this.dom.shadowTop.className = 'shadow top'; - this.dom.shadowBottom.className = 'shadow bottom'; - this.dom.shadowTopLeft.className = 'shadow top'; - this.dom.shadowBottomLeft.className = 'shadow bottom'; - this.dom.shadowTopRight.className = 'shadow top'; - this.dom.shadowBottomRight.className = 'shadow bottom'; - - this.dom.root.appendChild(this.dom.background); - this.dom.root.appendChild(this.dom.backgroundVertical); - this.dom.root.appendChild(this.dom.backgroundHorizontal); - this.dom.root.appendChild(this.dom.centerContainer); - this.dom.root.appendChild(this.dom.leftContainer); - this.dom.root.appendChild(this.dom.rightContainer); - this.dom.root.appendChild(this.dom.top); - this.dom.root.appendChild(this.dom.bottom); - - this.dom.centerContainer.appendChild(this.dom.center); - this.dom.leftContainer.appendChild(this.dom.left); - this.dom.rightContainer.appendChild(this.dom.right); - - this.dom.centerContainer.appendChild(this.dom.shadowTop); - this.dom.centerContainer.appendChild(this.dom.shadowBottom); - this.dom.leftContainer.appendChild(this.dom.shadowTopLeft); - this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft); - this.dom.rightContainer.appendChild(this.dom.shadowTopRight); - this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); - - this.on('rangechange', this.redraw.bind(this)); - this.on('change', this.redraw.bind(this)); - this.on('touch', this._onTouch.bind(this)); - this.on('pinch', this._onPinch.bind(this)); - this.on('dragstart', this._onDragStart.bind(this)); - this.on('drag', this._onDrag.bind(this)); - - // create event listeners for all interesting events, these events will be - // emitted via emitter - this.hammer = Hammer(this.dom.root, { - prevent_default: true - }); - this.listeners = {}; - - var me = this; - var events = [ - 'touch', 'pinch', - 'tap', 'doubletap', 'hold', - 'dragstart', 'drag', 'dragend', - 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox - ]; - events.forEach(function (event) { - var listener = function () { - var args = [event].concat(Array.prototype.slice.call(arguments, 0)); - me.emit.apply(me, args); - }; - me.hammer.on(event, listener); - me.listeners[event] = listener; - }); - - // size properties of each of the panels - this.props = { - root: {}, - background: {}, - centerContainer: {}, - leftContainer: {}, - rightContainer: {}, - center: {}, - left: {}, - right: {}, - top: {}, - bottom: {}, - border: {}, - scrollTop: 0, - scrollTopMin: 0 - }; - this.touch = {}; // store state information needed for touch events - - // attach the root panel to the provided container - if (!container) throw new Error('No container provided'); - container.appendChild(this.dom.root); - }; - - /** - * Destroy the Timeline, clean up all DOM elements and event listeners. - */ - Timeline.prototype.destroy = function () { - // unbind datasets - this.clear(); - - // remove all event listeners - this.off(); - - // stop checking for changed size - this._stopAutoResize(); - - // remove from DOM - if (this.dom.root.parentNode) { - this.dom.root.parentNode.removeChild(this.dom.root); - } - this.dom = null; - - // cleanup hammer touch events - for (var event in this.listeners) { - if (this.listeners.hasOwnProperty(event)) { - delete this.listeners[event]; - } - } - this.listeners = null; - this.hammer = null; - - // give all components the opportunity to cleanup - this.components.forEach(function (component) { - component.destroy(); - }); - - this.body = null; - }; - /** * Set options. Options will be passed to all components loaded in the Timeline. * @param {Object} [options] @@ -6343,30 +6231,6 @@ return /******/ (function(modules) { // webpackBootstrap this.redraw(); }; - /** - * Set a custom time bar - * @param {Date} time - */ - Timeline.prototype.setCustomTime = function (time) { - if (!this.customTime) { - throw new Error('Cannot get custom time: Custom time bar is not enabled'); - } - - this.customTime.setCustomTime(time); - }; - - /** - * Retrieve the current custom time. - * @return {Date} customTime - */ - Timeline.prototype.getCustomTime = function() { - if (!this.customTime) { - throw new Error('Cannot get custom time: Custom time bar is not enabled'); - } - - return this.customTime.getCustomTime(); - }; - /** * Set items * @param {vis.DataSet | Array | google.visualization.DataTable | null} items @@ -6406,15 +6270,6 @@ return /******/ (function(modules) { // webpackBootstrap } }; - /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items - */ - Timeline.prototype.getVisibleItems = function() { - return this.itemSet && this.itemSet.getVisibleItems() || []; - }; - - /** * Set groups * @param {vis.DataSet | Array | google.visualization.DataTable} groups @@ -6438,64 +6293,25 @@ return /******/ (function(modules) { // webpackBootstrap }; /** - * Clear the Timeline. By Default, items, groups and options are cleared. - * Example usage: - * - * timeline.clear(); // clear items, groups, and options - * timeline.clear({options: true}); // clear options only - * - * @param {Object} [what] Optionally specify what to clear. By default: - * {items: true, groups: true, options: true} + * Set selected items by their id. Replaces the current selection + * Unknown id's are silently ignored. + * @param {Array} [ids] An array with zero or more id's of the items to be + * selected. If ids is an empty array, all items will be + * unselected. */ - Timeline.prototype.clear = function(what) { - // clear items - if (!what || what.items) { - this.setItems(null); - } - - // clear groups - if (!what || what.groups) { - this.setGroups(null); - } - - // clear options of timeline and of each of the components - if (!what || what.options) { - this.components.forEach(function (component) { - component.setOptions(component.defaultOptions); - }); - - this.setOptions(this.defaultOptions); // this will also do a redraw - } + Timeline.prototype.setSelection = function(ids) { + this.itemSet && this.itemSet.setSelection(ids); }; /** - * Set Timeline window such that it fits all items + * Get the selected items by their id + * @return {Array} ids The ids of the selected items */ - Timeline.prototype.fit = function() { - // apply the data range as range - var dataRange = this.getItemRange(); - - // add 5% space on both sides - var start = dataRange.min; - var end = dataRange.max; - if (start != null && end != null) { - var interval = (end.valueOf() - start.valueOf()); - if (interval <= 0) { - // prevent an empty interval - interval = 24 * 60 * 60 * 1000; // 1 day - } - start = new Date(start.valueOf() - interval * 0.05); - end = new Date(end.valueOf() + interval * 0.05); - } - - // skip range set if there is no start and end date - if (start === null && end === null) { - return; - } - - this.range.setRange(start, end); + Timeline.prototype.getSelection = function() { + return this.itemSet && this.itemSet.getSelection() || []; }; + /** * Get the data range of the item set. * @returns {{min: Date, max: Date}} range A range with a start and end Date. @@ -6505,8 +6321,8 @@ return /******/ (function(modules) { // webpackBootstrap Timeline.prototype.getItemRange = function() { // calculate min from start filed var dataset = this.itemsData.getDataSet(), - min = null, - max = null; + min = null, + max = null; if (dataset) { // calculate the minimum value of the field 'start' @@ -6537,7045 +6353,6077 @@ return /******/ (function(modules) { // webpackBootstrap }; }; - /** - * Set selected items by their id. Replaces the current selection - * Unknown id's are silently ignored. - * @param {Array} [ids] An array with zero or more id's of the items to be - * selected. If ids is an empty array, all items will be - * unselected. - */ - Timeline.prototype.setSelection = function(ids) { - this.itemSet && this.itemSet.setSelection(ids); - }; - /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items - */ - Timeline.prototype.getSelection = function() { - return this.itemSet && this.itemSet.getSelection() || []; - }; + module.exports = Timeline; - /** - * Set the visible window. Both parameters are optional, you can change only - * start or only end. Syntax: - * - * TimeLine.setWindow(start, end) - * TimeLine.setWindow(range) - * - * Where start and end can be a Date, number, or string, and range is an - * object with properties start and end. - * - * @param {Date | Number | String | Object} [start] Start date of visible window - * @param {Date | Number | String} [end] End date of visible window - */ - Timeline.prototype.setWindow = function(start, end) { - if (arguments.length == 1) { - var range = arguments[0]; - this.range.setRange(range.start, range.end); - } - else { - this.range.setRange(start, end); - } - }; - /** - * Get the visible window - * @return {{start: Date, end: Date}} Visible range - */ - Timeline.prototype.getWindow = function() { - var range = this.range.getRange(); - return { - start: new Date(range.start), - end: new Date(range.end) - }; - }; +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + var Emitter = __webpack_require__(46); + var Hammer = __webpack_require__(41); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(3); + var DataView = __webpack_require__(4); + var Range = __webpack_require__(15); + var Core = __webpack_require__(42); + var TimeAxis = __webpack_require__(27); + var CurrentTime = __webpack_require__(19); + var CustomTime = __webpack_require__(20); + var LineGraph = __webpack_require__(26); /** - * Force a redraw of the Timeline. Can be useful to manually redraw when - * option autoResize=false + * Create a timeline visualization + * @param {HTMLElement} container + * @param {vis.DataSet | Array | google.visualization.DataTable} [items] + * @param {Object} [options] See Graph2d.setOptions for the available options. + * @constructor */ - Timeline.prototype.redraw = function() { - var resized = false, - options = this.options, - props = this.props, - dom = this.dom; + function Graph2d (container, items, options, groups) { + for (var coreProp in Core.prototype) { + if (Core.prototype.hasOwnProperty(coreProp) && !Graph2d.prototype.hasOwnProperty(coreProp)) { + Graph2d.prototype[coreProp] = Core.prototype[coreProp]; + } + } - if (!dom) return; // when destroyed + var me = this; + this.defaultOptions = { + start: null, + end: null, - // update class names - dom.root.className = 'vis timeline root ' + options.orientation; + autoResize: true, - // update root width and height options - dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); - dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); - dom.root.style.width = util.option.asSize(options.width, ''); + orientation: 'bottom', + width: null, + height: null, + maxHeight: null, + minHeight: null + }; + this.options = util.deepExtend({}, this.defaultOptions); - // calculate border widths - props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; - props.border.right = props.border.left; - props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; - props.border.bottom = props.border.top; - var borderRootHeight= dom.root.offsetHeight - dom.root.clientHeight; - var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; + // Create the DOM, props, and emitter + this._create(container); - // calculate the heights. If any of the side panels is empty, we set the height to - // minus the border width, such that the border will be invisible - props.center.height = dom.center.offsetHeight; - props.left.height = dom.left.offsetHeight; - props.right.height = dom.right.offsetHeight; - props.top.height = dom.top.clientHeight || -props.border.top; - props.bottom.height = dom.bottom.clientHeight || -props.border.bottom; + // all components listed here will be repainted automatically + this.components = []; - // TODO: compensate borders when any of the panels is empty. + this.body = { + dom: this.dom, + domProps: this.props, + emitter: { + on: this.on.bind(this), + off: this.off.bind(this), + emit: this.emit.bind(this) + }, + util: { + snap: null, // will be specified after TimeAxis is created + toScreen: me._toScreen.bind(me), + toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width + toTime: me._toTime.bind(me), + toGlobalTime : me._toGlobalTime.bind(me) + } + }; - // apply auto height - // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM) - var contentHeight = Math.max(props.left.height, props.center.height, props.right.height); - var autoHeight = props.top.height + contentHeight + props.bottom.height + - borderRootHeight + props.border.top + props.border.bottom; - dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); + // range + this.range = new Range(this.body); + this.components.push(this.range); + this.body.range = this.range; - // calculate heights of the content panels - props.root.height = dom.root.offsetHeight; - props.background.height = props.root.height - borderRootHeight; - var containerHeight = props.root.height - props.top.height - props.bottom.height - - borderRootHeight; - props.centerContainer.height = containerHeight; - props.leftContainer.height = containerHeight; - props.rightContainer.height = props.leftContainer.height; + // time axis + this.timeAxis = new TimeAxis(this.body); + this.components.push(this.timeAxis); + this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); - // calculate the widths of the panels - props.root.width = dom.root.offsetWidth; - props.background.width = props.root.width - borderRootWidth; - props.left.width = dom.leftContainer.clientWidth || -props.border.left; - props.leftContainer.width = props.left.width; - props.right.width = dom.rightContainer.clientWidth || -props.border.right; - props.rightContainer.width = props.right.width; - var centerWidth = props.root.width - props.left.width - props.right.width - borderRootWidth; - props.center.width = centerWidth; - props.centerContainer.width = centerWidth; - props.top.width = centerWidth; - props.bottom.width = centerWidth; + // current time bar + this.currentTime = new CurrentTime(this.body); + this.components.push(this.currentTime); - // resize the panels - dom.background.style.height = props.background.height + 'px'; - dom.backgroundVertical.style.height = props.background.height + 'px'; - dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px'; - dom.centerContainer.style.height = props.centerContainer.height + 'px'; - dom.leftContainer.style.height = props.leftContainer.height + 'px'; - dom.rightContainer.style.height = props.rightContainer.height + 'px'; + // custom time bar + // Note: time bar will be attached in this.setOptions when selected + this.customTime = new CustomTime(this.body); + this.components.push(this.customTime); - dom.background.style.width = props.background.width + 'px'; - dom.backgroundVertical.style.width = props.centerContainer.width + 'px'; - dom.backgroundHorizontal.style.width = props.background.width + 'px'; - dom.centerContainer.style.width = props.center.width + 'px'; - dom.top.style.width = props.top.width + 'px'; - dom.bottom.style.width = props.bottom.width + 'px'; + // item set + this.linegraph = new LineGraph(this.body); + this.components.push(this.linegraph); - // reposition the panels - dom.background.style.left = '0'; - dom.background.style.top = '0'; - dom.backgroundVertical.style.left = props.left.width + 'px'; - dom.backgroundVertical.style.top = '0'; - dom.backgroundHorizontal.style.left = '0'; - dom.backgroundHorizontal.style.top = props.top.height + 'px'; - dom.centerContainer.style.left = props.left.width + 'px'; - dom.centerContainer.style.top = props.top.height + 'px'; - dom.leftContainer.style.left = '0'; - dom.leftContainer.style.top = props.top.height + 'px'; - dom.rightContainer.style.left = (props.left.width + props.center.width) + 'px'; - dom.rightContainer.style.top = props.top.height + 'px'; - dom.top.style.left = props.left.width + 'px'; - dom.top.style.top = '0'; - dom.bottom.style.left = props.left.width + 'px'; - dom.bottom.style.top = (props.top.height + props.centerContainer.height) + 'px'; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet - // update the scrollTop, feasible range for the offset can be changed - // when the height of the Timeline or of the contents of the center changed - this._updateScrollTop(); + // apply options + if (options) { + this.setOptions(options); + } - // reposition the scrollable contents - var offset = this.props.scrollTop; - if (options.orientation == 'bottom') { - offset += Math.max(this.props.centerContainer.height - this.props.center.height - - this.props.border.top - this.props.border.bottom, 0); + // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! + if (groups) { + this.setGroups(groups); } - dom.center.style.left = '0'; - dom.center.style.top = offset + 'px'; - dom.left.style.left = '0'; - dom.left.style.top = offset + 'px'; - dom.right.style.left = '0'; - dom.right.style.top = offset + 'px'; - // show shadows when vertical scrolling is available - var visibilityTop = this.props.scrollTop == 0 ? 'hidden' : ''; - var visibilityBottom = this.props.scrollTop == this.props.scrollTopMin ? 'hidden' : ''; - dom.shadowTop.style.visibility = visibilityTop; - dom.shadowBottom.style.visibility = visibilityBottom; - dom.shadowTopLeft.style.visibility = visibilityTop; - dom.shadowBottomLeft.style.visibility = visibilityBottom; - dom.shadowTopRight.style.visibility = visibilityTop; - dom.shadowBottomRight.style.visibility = visibilityBottom; - - // redraw all components - this.components.forEach(function (component) { - resized = component.redraw() || resized; - }); - if (resized) { - // keep repainting until all sizes are settled + // create itemset + if (items) { + this.setItems(items); + } + else { this.redraw(); } - }; - - // TODO: deprecated since version 1.1.0, remove some day - Timeline.prototype.repaint = function () { - throw new Error('Function repaint is deprecated. Use redraw instead.'); - }; + } /** - * Convert a position on screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @private + * Set options. Options will be passed to all components loaded in the Graph2d. + * @param {Object} [options] + * {String} orientation + * Vertical orientation for the Graph2d, + * can be 'bottom' (default) or 'top'. + * {String | Number} width + * Width for the timeline, a number in pixels or + * a css string like '1000px' or '75%'. '100%' by default. + * {String | Number} height + * Fixed height for the Graph2d, a number in pixels or + * a css string like '400px' or '75%'. If undefined, + * The Graph2d will automatically size such that + * its contents fit. + * {String | Number} minHeight + * Minimum height for the Graph2d, a number in pixels or + * a css string like '400px' or '75%'. + * {String | Number} maxHeight + * Maximum height for the Graph2d, a number in pixels or + * a css string like '400px' or '75%'. + * {Number | Date | String} start + * Start date for the visible window + * {Number | Date | String} end + * End date for the visible window */ - // TODO: move this function to Range - Timeline.prototype._toTime = function(x) { - var conversion = this.range.conversion(this.props.center.width); - return new Date(x / conversion.scale + conversion.offset); - }; - + Graph2d.prototype.setOptions = function (options) { + if (options) { + // copy the known options + var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'orientation']; + util.selectiveExtend(fields, this.options, options); - /** - * Convert a position on the global screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @private - */ - // TODO: move this function to Range - Timeline.prototype._toGlobalTime = function(x) { - var conversion = this.range.conversion(this.props.root.width); - return new Date(x / conversion.scale + conversion.offset); - }; + // enable/disable autoResize + this._initAutoResize(); + } - /** - * Convert a datetime (Date object) into a position on the screen - * @param {Date} time A date - * @return {int} x The position on the screen in pixels which corresponds - * with the given date. - * @private - */ - // TODO: move this function to Range - Timeline.prototype._toScreen = function(time) { - var conversion = this.range.conversion(this.props.center.width); - return (time.valueOf() - conversion.offset) * conversion.scale; - }; + // propagate options to all components + this.components.forEach(function (component) { + component.setOptions(options); + }); + // TODO: remove deprecation error one day (deprecated since version 0.8.0) + if (options && options.order) { + throw new Error('Option order is deprecated. There is no replacement for this feature.'); + } - /** - * Convert a datetime (Date object) into a position on the root - * This is used to get the pixel density estimate for the screen, not the center panel - * @param {Date} time A date - * @return {int} x The position on root in pixels which corresponds - * with the given date. - * @private - */ - // TODO: move this function to Range - Timeline.prototype._toGlobalScreen = function(time) { - var conversion = this.range.conversion(this.props.root.width); - return (time.valueOf() - conversion.offset) * conversion.scale; + // redraw everything + this.redraw(); }; /** - * Initialize watching when option autoResize is true - * @private + * Set items + * @param {vis.DataSet | Array | google.visualization.DataTable | null} items */ - Timeline.prototype._initAutoResize = function () { - if (this.options.autoResize == true) { - this._startAutoResize(); + Graph2d.prototype.setItems = function(items) { + var initialLoad = (this.itemsData == null); + + // convert to type DataSet when needed + var newDataSet; + if (!items) { + newDataSet = null; + } + else if (items instanceof DataSet || items instanceof DataView) { + newDataSet = items; } else { - this._stopAutoResize(); + // turn an array into a dataset + newDataSet = new DataSet(items, { + type: { + start: 'Date', + end: 'Date' + } + }); } - }; - - /** - * Watch for changes in the size of the container. On resize, the Panel will - * automatically redraw itself. - * @private - */ - Timeline.prototype._startAutoResize = function () { - var me = this; - - this._stopAutoResize(); - - this._onResize = function() { - if (me.options.autoResize != true) { - // stop watching when the option autoResize is changed to false - me._stopAutoResize(); - return; - } - if (me.dom.root) { - // check whether the frame is resized - if ((me.dom.root.clientWidth != me.props.lastWidth) || - (me.dom.root.clientHeight != me.props.lastHeight)) { - me.props.lastWidth = me.dom.root.clientWidth; - me.props.lastHeight = me.dom.root.clientHeight; + // set items + this.itemsData = newDataSet; + this.linegraph && this.linegraph.setItems(newDataSet); - me.emit('change'); - } - } - }; + if (initialLoad && ('start' in this.options || 'end' in this.options)) { + this.fit(); - // add event listener to window resize - util.addEventListener(window, 'resize', this._onResize); + var start = ('start' in this.options) ? util.convert(this.options.start, 'Date') : null; + var end = ('end' in this.options) ? util.convert(this.options.end, 'Date') : null; - this.watchTimer = setInterval(this._onResize, 1000); + this.setWindow(start, end); + } }; /** - * Stop watching for a resize of the frame. - * @private + * Set groups + * @param {vis.DataSet | Array | google.visualization.DataTable} groups */ - Timeline.prototype._stopAutoResize = function () { - if (this.watchTimer) { - clearInterval(this.watchTimer); - this.watchTimer = undefined; + Graph2d.prototype.setGroups = function(groups) { + // convert to type DataSet when needed + var newDataSet; + if (!groups) { + newDataSet = null; + } + else if (groups instanceof DataSet || groups instanceof DataView) { + newDataSet = groups; + } + else { + // turn an array into a dataset + newDataSet = new DataSet(groups); } - // remove event listener on window.resize - util.removeEventListener(window, 'resize', this._onResize); - this._onResize = null; + this.groupsData = newDataSet; + this.linegraph.setGroups(newDataSet); }; /** - * Start moving the timeline vertically - * @param {Event} event - * @private + * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right). + * @param groupId + * @param width + * @param height */ - Timeline.prototype._onTouch = function (event) { - this.touch.allowDragging = true; - }; + Graph2d.prototype.getLegend = function(groupId, width, height) { + if (width === undefined) {width = 15;} + if (height === undefined) {height = 15;} + if (this.linegraph.groups[groupId] !== undefined) { + return this.linegraph.groups[groupId].getLegend(width,height); + } + else { + return "cannot find group:" + groupId; + } + } /** - * Start moving the timeline vertically - * @param {Event} event - * @private + * This checks if the visible option of the supplied group (by ID) is true or false. + * @param groupId + * @returns {*} */ - Timeline.prototype._onPinch = function (event) { - this.touch.allowDragging = false; - }; + Graph2d.prototype.isGroupVisible = function(groupId) { + if (this.linegraph.groups[groupId] !== undefined) { + return this.linegraph.groups[groupId].visible; + } + else { + return false; + } + } + /** - * Start moving the timeline vertically - * @param {Event} event - * @private + * Get the data range of the item set. + * @returns {{min: Date, max: Date}} range A range with a start and end Date. + * When no minimum is found, min==null + * When no maximum is found, max==null */ - Timeline.prototype._onDragStart = function (event) { - this.touch.initialScrollTop = this.props.scrollTop; + Graph2d.prototype.getItemRange = function() { + var min = null; + var max = null; + + // calculate min from start filed + for (var groupId in this.linegraph.groups) { + if (this.linegraph.groups.hasOwnProperty(groupId)) { + if (this.linegraph.groups[groupId].visible == true) { + for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) { + var item = this.linegraph.groups[groupId].itemsData[i]; + var value = util.convert(item.x, 'Date').valueOf(); + min = min == null ? value : min > value ? value : min; + max = max == null ? value : max < value ? value : max; + } + } + } + } + + return { + min: (min != null) ? new Date(min) : null, + max: (max != null) ? new Date(max) : null + }; }; - /** - * Move the timeline vertically - * @param {Event} event - * @private - */ - Timeline.prototype._onDrag = function (event) { - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.touch.allowDragging) return; - var delta = event.gesture.deltaY; - var oldScrollTop = this._getScrollTop(); - var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); + module.exports = Graph2d; - if (newScrollTop != oldScrollTop) { - this.redraw(); // TODO: this causes two redraws when dragging, the other is triggered by rangechange already - } - }; + +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { /** - * Apply a scrollTop - * @param {Number} scrollTop - * @returns {Number} scrollTop Returns the applied scrollTop - * @private - */ - Timeline.prototype._setScrollTop = function (scrollTop) { - this.props.scrollTop = scrollTop; - this._updateScrollTop(); - return this.props.scrollTop; - }; - - /** - * Update the current scrollTop when the height of the containers has been changed - * @returns {Number} scrollTop Returns the applied scrollTop - * @private + * @constructor DataStep + * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an + * end data point. The class itself determines the best scale (step size) based on the + * provided start Date, end Date, and minimumStep. + * + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * + * Alternatively, you can set a scale by hand. + * After creation, you can initialize the class by executing first(). Then you + * can iterate from the start date to the end date via next(). You can check if + * the end date is reached with the function hasNext(). After each step, you can + * retrieve the current date via getCurrent(). + * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, + * days, to years. + * + * Version: 1.2 + * + * @param {Date} [start] The start date, for example new Date(2010, 9, 21) + * or new Date(2010, 9, 21, 23, 45, 00) + * @param {Date} [end] The end date + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds */ - Timeline.prototype._updateScrollTop = function () { - // recalculate the scrollTopMin - var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero - if (scrollTopMin != this.props.scrollTopMin) { - // in case of bottom orientation, change the scrollTop such that the contents - // do not move relative to the time axis at the bottom - if (this.options.orientation == 'bottom') { - this.props.scrollTop += (scrollTopMin - this.props.scrollTopMin); - } - this.props.scrollTopMin = scrollTopMin; - } - - // limit the scrollTop to the feasible scroll range - if (this.props.scrollTop > 0) this.props.scrollTop = 0; - if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; + function DataStep(start, end, minimumStep, containerHeight, forcedStepSize) { + // variables + this.current = 0; - return this.props.scrollTop; - }; + this.autoScale = true; + this.stepIndex = 0; + this.step = 1; + this.scale = 1; - /** - * Get the current scrollTop - * @returns {number} scrollTop - * @private - */ - Timeline.prototype._getScrollTop = function () { - return this.props.scrollTop; - }; + this.marginStart; + this.marginEnd; - module.exports = Timeline; + this.majorSteps = [1, 2, 5, 10]; + this.minorSteps = [0.25, 0.5, 1, 2]; + this.setRange(start, end, minimumStep, containerHeight, forcedStepSize); + } -/***/ }, -/* 13 */ -/***/ function(module, exports, __webpack_require__) { - var Emitter = __webpack_require__(45); - var Hammer = __webpack_require__(41); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Range = __webpack_require__(15); - var TimeAxis = __webpack_require__(27); - var CurrentTime = __webpack_require__(19); - var CustomTime = __webpack_require__(20); - var LineGraph = __webpack_require__(26); /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | Array | google.visualization.DataTable} [items] - * @param {Object} [options] See Graph2d.setOptions for the available options. - * @constructor + * Set a new range + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * @param {Number} [start] The start date and time. + * @param {Number} [end] The end date and time. + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds */ - function Graph2d (container, items, options, groups) { - var me = this; - this.defaultOptions = { - start: null, - end: null, - - autoResize: true, + DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, forcedStepSize) { + this._start = start; + this._end = end; - orientation: 'bottom', - width: null, - height: null, - maxHeight: null, - minHeight: null - }; - this.options = util.deepExtend({}, this.defaultOptions); + if (start == end) { + this._start = start - 0.75; + this._end = end + 1; + } - // Create the DOM, props, and emitter - this._create(container); + if (this.autoScale) { + this.setMinimumStep(minimumStep, containerHeight, forcedStepSize); + } + this.setFirst(); + }; - // all components listed here will be repainted automatically - this.components = []; + /** + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds + */ + DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { + // round to floor + var size = this._end - this._start; + var safeSize = size * 1.1; + var minimumStepValue = minimumStep * (safeSize / containerHeight); + var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); - this.body = { - dom: this.dom, - domProps: this.props, - emitter: { - on: this.on.bind(this), - off: this.off.bind(this), - emit: this.emit.bind(this) - }, - util: { - snap: null, // will be specified after TimeAxis is created - toScreen: me._toScreen.bind(me), - toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width - toTime: me._toTime.bind(me), - toGlobalTime : me._toGlobalTime.bind(me) - } - }; + var minorStepIdx = -1; + var magnitudefactor = Math.pow(10,orderOfMagnitude); - // range - this.range = new Range(this.body); - this.components.push(this.range); - this.body.range = this.range; + var start = 0; + if (orderOfMagnitude < 0) { + start = orderOfMagnitude; + } - // time axis - this.timeAxis = new TimeAxis(this.body); - this.components.push(this.timeAxis); - this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); + var solutionFound = false; + for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { + magnitudefactor = Math.pow(10,i); + for (var j = 0; j < this.minorSteps.length; j++) { + var stepSize = magnitudefactor * this.minorSteps[j]; + if (stepSize >= minimumStepValue) { + solutionFound = true; + minorStepIdx = j; + break; + } + } + if (solutionFound == true) { + break; + } + } + this.stepIndex = minorStepIdx; + this.scale = magnitudefactor; + this.step = magnitudefactor * this.minorSteps[minorStepIdx]; + }; - // current time bar - this.currentTime = new CurrentTime(this.body); - this.components.push(this.currentTime); - // custom time bar - // Note: time bar will be attached in this.setOptions when selected - this.customTime = new CustomTime(this.body); - this.components.push(this.customTime); + /** + * Set the range iterator to the start date. + */ + DataStep.prototype.first = function() { + this.setFirst(); + }; - // item set - this.linegraph = new LineGraph(this.body); - this.components.push(this.linegraph); + /** + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date + */ + DataStep.prototype.setFirst = function() { + var niceStart = this._start - (this.scale * this.minorSteps[this.stepIndex]); + var niceEnd = this._end + (this.scale * this.minorSteps[this.stepIndex]); - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + this.marginEnd = this.roundToMinor(niceEnd); + this.marginStart = this.roundToMinor(niceStart); + this.marginRange = this.marginEnd - this.marginStart; - // apply options - if (options) { - this.setOptions(options); - } + this.current = this.marginEnd; - // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! - if (groups) { - this.setGroups(groups); - } + }; - // create itemset - if (items) { - this.setItems(items); + DataStep.prototype.roundToMinor = function(value) { + var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); + if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { + return rounded + (this.scale * this.minorSteps[this.stepIndex]); } else { - this.redraw(); + return rounded; } } - // turn Graph2d into an event emitter - Emitter(Graph2d.prototype); /** - * Create the main DOM for the Graph2d: a root panel containing left, right, - * top, bottom, content, and background panel. - * @param {Element} container The container element where the Graph2d will - * be attached. - * @private + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date */ - Graph2d.prototype._create = function (container) { - this.dom = {}; - - this.dom.root = document.createElement('div'); - this.dom.background = document.createElement('div'); - this.dom.backgroundVertical = document.createElement('div'); - this.dom.backgroundHorizontalContainer = document.createElement('div'); - this.dom.centerContainer = document.createElement('div'); - this.dom.leftContainer = document.createElement('div'); - this.dom.rightContainer = document.createElement('div'); - this.dom.backgroundHorizontal = document.createElement('div'); - this.dom.center = document.createElement('div'); - this.dom.left = document.createElement('div'); - this.dom.right = document.createElement('div'); - this.dom.top = document.createElement('div'); - this.dom.bottom = document.createElement('div'); - this.dom.shadowTop = document.createElement('div'); - this.dom.shadowBottom = document.createElement('div'); - this.dom.shadowTopLeft = document.createElement('div'); - this.dom.shadowBottomLeft = document.createElement('div'); - this.dom.shadowTopRight = document.createElement('div'); - this.dom.shadowBottomRight = document.createElement('div'); - - this.dom.background.className = 'vispanel background'; - this.dom.backgroundVertical.className = 'vispanel background vertical'; - this.dom.backgroundHorizontalContainer.className = 'vispanel background horizontal'; - this.dom.backgroundHorizontal.className = 'vispanel background horizontal'; - this.dom.centerContainer.className = 'vispanel center'; - this.dom.leftContainer.className = 'vispanel left'; - this.dom.rightContainer.className = 'vispanel right'; - this.dom.top.className = 'vispanel top'; - this.dom.bottom.className = 'vispanel bottom'; - this.dom.left.className = 'content'; - this.dom.center.className = 'content'; - this.dom.right.className = 'content'; - this.dom.shadowTop.className = 'shadow top'; - this.dom.shadowBottom.className = 'shadow bottom'; - this.dom.shadowTopLeft.className = 'shadow top'; - this.dom.shadowBottomLeft.className = 'shadow bottom'; - this.dom.shadowTopRight.className = 'shadow top'; - this.dom.shadowBottomRight.className = 'shadow bottom'; - - this.dom.root.appendChild(this.dom.background); - this.dom.root.appendChild(this.dom.backgroundVertical); - this.dom.root.appendChild(this.dom.backgroundHorizontalContainer); - this.dom.root.appendChild(this.dom.centerContainer); - this.dom.root.appendChild(this.dom.leftContainer); - this.dom.root.appendChild(this.dom.rightContainer); - this.dom.root.appendChild(this.dom.top); - this.dom.root.appendChild(this.dom.bottom); - - this.dom.backgroundHorizontalContainer.appendChild(this.dom.backgroundHorizontal); - this.dom.centerContainer.appendChild(this.dom.center); - this.dom.leftContainer.appendChild(this.dom.left); - this.dom.rightContainer.appendChild(this.dom.right); - - this.dom.centerContainer.appendChild(this.dom.shadowTop); - this.dom.centerContainer.appendChild(this.dom.shadowBottom); - this.dom.leftContainer.appendChild(this.dom.shadowTopLeft); - this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft); - this.dom.rightContainer.appendChild(this.dom.shadowTopRight); - this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); - - this.on('rangechange', this.redraw.bind(this)); - this.on('change', this.redraw.bind(this)); - this.on('touch', this._onTouch.bind(this)); - this.on('pinch', this._onPinch.bind(this)); - this.on('dragstart', this._onDragStart.bind(this)); - this.on('drag', this._onDrag.bind(this)); - - // create event listeners for all interesting events, these events will be - // emitted via emitter - this.hammer = Hammer(this.dom.root, { - prevent_default: true - }); - this.listeners = {}; - - var me = this; - var events = [ - 'touch', 'pinch', - 'tap', 'doubletap', 'hold', - 'dragstart', 'drag', 'dragend', - 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox - ]; - events.forEach(function (event) { - var listener = function () { - var args = [event].concat(Array.prototype.slice.call(arguments, 0)); - me.emit.apply(me, args); - }; - me.hammer.on(event, listener); - me.listeners[event] = listener; - }); - - // size properties of each of the panels - this.props = { - root: {}, - background: {}, - centerContainer: {}, - leftContainer: {}, - rightContainer: {}, - center: {}, - left: {}, - right: {}, - top: {}, - bottom: {}, - border: {}, - scrollTop: 0, - scrollTopMin: 0 - }; - this.touch = {}; // store state information needed for touch events - - // attach the root panel to the provided container - if (!container) throw new Error('No container provided'); - container.appendChild(this.dom.root); - }; + DataStep.prototype.hasNext = function () { + return (this.current >= this.marginStart); + }; /** - * Destroy the Graph2d, clean up all DOM elements and event listeners. + * Do the next step */ - Graph2d.prototype.destroy = function () { - // unbind datasets - this.clear(); - - // remove all event listeners - this.off(); - - // stop checking for changed size - this._stopAutoResize(); - - // remove from DOM - if (this.dom.root.parentNode) { - this.dom.root.parentNode.removeChild(this.dom.root); - } - this.dom = null; + DataStep.prototype.next = function() { + var prev = this.current; + this.current -= this.step; - // cleanup hammer touch events - for (var event in this.listeners) { - if (this.listeners.hasOwnProperty(event)) { - delete this.listeners[event]; - } + // safety mechanism: if current time is still unchanged, move to the end + if (this.current == prev) { + this.current = this._end; } - this.listeners = null; - this.hammer = null; - - // give all components the opportunity to cleanup - this.components.forEach(function (component) { - component.destroy(); - }); - - this.body = null; }; /** - * Set options. Options will be passed to all components loaded in the Graph2d. - * @param {Object} [options] - * {String} orientation - * Vertical orientation for the Graph2d, - * can be 'bottom' (default) or 'top'. - * {String | Number} width - * Width for the timeline, a number in pixels or - * a css string like '1000px' or '75%'. '100%' by default. - * {String | Number} height - * Fixed height for the Graph2d, a number in pixels or - * a css string like '400px' or '75%'. If undefined, - * The Graph2d will automatically size such that - * its contents fit. - * {String | Number} minHeight - * Minimum height for the Graph2d, a number in pixels or - * a css string like '400px' or '75%'. - * {String | Number} maxHeight - * Maximum height for the Graph2d, a number in pixels or - * a css string like '400px' or '75%'. - * {Number | Date | String} start - * Start date for the visible window - * {Number | Date | String} end - * End date for the visible window + * Do the next step */ - Graph2d.prototype.setOptions = function (options) { - if (options) { - // copy the known options - var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'orientation']; - util.selectiveExtend(fields, this.options, options); - - // enable/disable autoResize - this._initAutoResize(); - } - - // propagate options to all components - this.components.forEach(function (component) { - component.setOptions(options); - }); + DataStep.prototype.previous = function() { + this.current += this.step; + this.marginEnd += this.step; + this.marginRange = this.marginEnd - this.marginStart; + }; - // TODO: remove deprecation error one day (deprecated since version 0.8.0) - if (options && options.order) { - throw new Error('Option order is deprecated. There is no replacement for this feature.'); - } - // redraw everything - this.redraw(); - }; /** - * Set a custom time bar - * @param {Date} time + * Get the current datetime + * @return {String} current The current date */ - Graph2d.prototype.setCustomTime = function (time) { - if (!this.customTime) { - throw new Error('Cannot get custom time: Custom time bar is not enabled'); + DataStep.prototype.getCurrent = function() { + var toPrecision = '' + Number(this.current).toPrecision(5); + for (var i = toPrecision.length-1; i > 0; i--) { + if (toPrecision[i] == "0") { + toPrecision = toPrecision.slice(0,i); + } + else if (toPrecision[i] == "." || toPrecision[i] == ",") { + toPrecision = toPrecision.slice(0,i); + break; + } + else{ + break; + } } - this.customTime.setCustomTime(time); + return toPrecision; }; + + /** - * Retrieve the current custom time. - * @return {Date} customTime + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate */ - Graph2d.prototype.getCustomTime = function() { - if (!this.customTime) { - throw new Error('Cannot get custom time: Custom time bar is not enabled'); - } + DataStep.prototype.snap = function(date) { - return this.customTime.getCustomTime(); }; /** - * Set items - * @param {vis.DataSet | Array | google.visualization.DataTable | null} items + * Check if the current value is a major value (for example when the step + * is DAY, a major value is each first day of the MONTH) + * @return {boolean} true if current date is major, else false. */ - Graph2d.prototype.setItems = function(items) { - var initialLoad = (this.itemsData == null); - - // convert to type DataSet when needed - var newDataSet; - if (!items) { - newDataSet = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - newDataSet = items; - } - else { - // turn an array into a dataset - newDataSet = new DataSet(items, { - type: { - start: 'Date', - end: 'Date' - } - }); - } + DataStep.prototype.isMajor = function() { + return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); + }; - // set items - this.itemsData = newDataSet; - this.linegraph && this.linegraph.setItems(newDataSet); + module.exports = DataStep; - if (initialLoad && ('start' in this.options || 'end' in this.options)) { - this.fit(); - var start = ('start' in this.options) ? util.convert(this.options.start, 'Date') : null; - var end = ('end' in this.options) ? util.convert(this.options.end, 'Date') : null; +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { - this.setWindow(start, end); - } - }; + var util = __webpack_require__(1); + var hammerUtil = __webpack_require__(43); + var moment = __webpack_require__(40); + var Component = __webpack_require__(18); /** - * Set groups - * @param {vis.DataSet | Array | google.visualization.DataTable} groups + * @constructor Range + * A Range controls a numeric range with a start and end value. + * The Range adjusts the range based on mouse events or programmatic changes, + * and triggers events when the range is changing or has been changed. + * @param {{dom: Object, domProps: Object, emitter: Emitter}} body + * @param {Object} [options] See description at Range.setOptions */ - Graph2d.prototype.setGroups = function(groups) { - // convert to type DataSet when needed - var newDataSet; - if (!groups) { - newDataSet = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - newDataSet = groups; - } - else { - // turn an array into a dataset - newDataSet = new DataSet(groups); - } + function Range(body, options) { + var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); + this.start = now.clone().add('days', -3).valueOf(); // Number + this.end = now.clone().add('days', 4).valueOf(); // Number - this.groupsData = newDataSet; - this.linegraph.setGroups(newDataSet); - }; + this.body = body; - /** - * Clear the Graph2d. By Default, items, groups and options are cleared. - * Example usage: - * - * timeline.clear(); // clear items, groups, and options - * timeline.clear({options: true}); // clear options only - * - * @param {Object} [what] Optionally specify what to clear. By default: - * {items: true, groups: true, options: true} - */ - Graph2d.prototype.clear = function(what) { - // clear items - if (!what || what.items) { - this.setItems(null); - } + // default options + this.defaultOptions = { + start: null, + end: null, + direction: 'horizontal', // 'horizontal' or 'vertical' + moveable: true, + zoomable: true, + min: null, + max: null, + zoomMin: 10, // milliseconds + zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000 // milliseconds + }; + this.options = util.extend({}, this.defaultOptions); - // clear groups - if (!what || what.groups) { - this.setGroups(null); - } + this.props = { + touch: {} + }; - // clear options of timeline and of each of the components - if (!what || what.options) { - this.components.forEach(function (component) { - component.setOptions(component.defaultOptions); - }); + // drag listeners for dragging + this.body.emitter.on('dragstart', this._onDragStart.bind(this)); + this.body.emitter.on('drag', this._onDrag.bind(this)); + this.body.emitter.on('dragend', this._onDragEnd.bind(this)); - this.setOptions(this.defaultOptions); // this will also do a redraw - } - }; + // ignore dragging when holding + this.body.emitter.on('hold', this._onHold.bind(this)); - /** - * Set Graph2d window such that it fits all items - */ - Graph2d.prototype.fit = function() { - // apply the data range as range - var dataRange = this.getItemRange(); + // mouse wheel for zooming + this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); + this.body.emitter.on('DOMMouseScroll', this._onMouseWheel.bind(this)); // For FF - // add 5% space on both sides - var start = dataRange.min; - var end = dataRange.max; - if (start != null && end != null) { - var interval = (end.valueOf() - start.valueOf()); - if (interval <= 0) { - // prevent an empty interval - interval = 24 * 60 * 60 * 1000; // 1 day - } - start = new Date(start.valueOf() - interval * 0.05); - end = new Date(end.valueOf() + interval * 0.05); - } + // pinch to zoom + this.body.emitter.on('touch', this._onTouch.bind(this)); + this.body.emitter.on('pinch', this._onPinch.bind(this)); - // skip range set if there is no start and end date - if (start === null && end === null) { - return; - } + this.setOptions(options); + } - this.range.setRange(start, end); - }; + Range.prototype = new Component(); /** - * Get the data range of the item set. - * @returns {{min: Date, max: Date}} range A range with a start and end Date. - * When no minimum is found, min==null - * When no maximum is found, max==null + * Set options for the range controller + * @param {Object} options Available options: + * {Number | Date | String} start Start date for the range + * {Number | Date | String} end End date for the range + * {Number} min Minimum value for start + * {Number} max Maximum value for end + * {Number} zoomMin Set a minimum value for + * (end - start). + * {Number} zoomMax Set a maximum value for + * (end - start). + * {Boolean} moveable Enable moving of the range + * by dragging. True by default + * {Boolean} zoomable Enable zooming of the range + * by pinching/scrolling. True by default */ - Graph2d.prototype.getItemRange = function() { - // calculate min from start filed - var itemsData = this.itemsData, - min = null, - max = null; - - if (itemsData) { - // calculate the minimum value of the field 'start' - var minItem = itemsData.min('start'); - min = minItem ? util.convert(minItem.start, 'Date').valueOf() : null; - // Note: we convert first to Date and then to number because else - // a conversion from ISODate to Number will fail + Range.prototype.setOptions = function (options) { + if (options) { + // copy the options that we know + var fields = ['direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable']; + util.selectiveExtend(fields, this.options, options); - // calculate maximum value of fields 'start' and 'end' - var maxStartItem = itemsData.max('start'); - if (maxStartItem) { - max = util.convert(maxStartItem.start, 'Date').valueOf(); - } - var maxEndItem = itemsData.max('end'); - if (maxEndItem) { - if (max == null) { - max = util.convert(maxEndItem.end, 'Date').valueOf(); - } - else { - max = Math.max(max, util.convert(maxEndItem.end, 'Date').valueOf()); - } + if ('start' in options || 'end' in options) { + // apply a new range. both start and end are optional + this.setRange(options.start, options.end); } } - - return { - min: (min != null) ? new Date(min) : null, - max: (max != null) ? new Date(max) : null - }; }; /** - * Set the visible window. Both parameters are optional, you can change only - * start or only end. Syntax: - * - * TimeLine.setWindow(start, end) - * TimeLine.setWindow(range) - * - * Where start and end can be a Date, number, or string, and range is an - * object with properties start and end. - * - * @param {Date | Number | String | Object} [start] Start date of visible window - * @param {Date | Number | String} [end] End date of visible window + * Test whether direction has a valid value + * @param {String} direction 'horizontal' or 'vertical' */ - Graph2d.prototype.setWindow = function(start, end) { - if (arguments.length == 1) { - var range = arguments[0]; - this.range.setRange(range.start, range.end); - } - else { - this.range.setRange(start, end); + function validateDirection (direction) { + if (direction != 'horizontal' && direction != 'vertical') { + throw new TypeError('Unknown direction "' + direction + '". ' + + 'Choose "horizontal" or "vertical".'); } - }; + } /** - * Get the visible window - * @return {{start: Date, end: Date}} Visible range + * Set a new start and end range + * @param {Number} [start] + * @param {Number} [end] */ - Graph2d.prototype.getWindow = function() { - var range = this.range.getRange(); - return { - start: new Date(range.start), - end: new Date(range.end) - }; + Range.prototype.setRange = function(start, end) { + var changed = this._applyRange(start, end); + if (changed) { + var params = { + start: new Date(this.start), + end: new Date(this.end) + }; + this.body.emitter.emit('rangechange', params); + this.body.emitter.emit('rangechanged', params); + } }; /** - * Force a redraw of the Graph2d. Can be useful to manually redraw when - * option autoResize=false + * Set a new start and end range. This method is the same as setRange, but + * does not trigger a range change and range changed event, and it returns + * true when the range is changed + * @param {Number} [start] + * @param {Number} [end] + * @return {Boolean} changed + * @private */ - Graph2d.prototype.redraw = function() { - var resized = false, - options = this.options, - props = this.props, - dom = this.dom; - - if (!dom) return; // when destroyed + Range.prototype._applyRange = function(start, end) { + var newStart = (start != null) ? util.convert(start, 'Date').valueOf() : this.start, + newEnd = (end != null) ? util.convert(end, 'Date').valueOf() : this.end, + max = (this.options.max != null) ? util.convert(this.options.max, 'Date').valueOf() : null, + min = (this.options.min != null) ? util.convert(this.options.min, 'Date').valueOf() : null, + diff; - // update class names - dom.root.className = 'vis timeline root ' + options.orientation; + // check for valid number + if (isNaN(newStart) || newStart === null) { + throw new Error('Invalid start "' + start + '"'); + } + if (isNaN(newEnd) || newEnd === null) { + throw new Error('Invalid end "' + end + '"'); + } - // update root width and height options - dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); - dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); - dom.root.style.width = util.option.asSize(options.width, ''); + // prevent start < end + if (newEnd < newStart) { + newEnd = newStart; + } - // calculate border widths - props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; - props.border.right = props.border.left; - props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; - props.border.bottom = props.border.top; - var borderRootHeight= dom.root.offsetHeight - dom.root.clientHeight; - var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; + // prevent start < min + if (min !== null) { + if (newStart < min) { + diff = (min - newStart); + newStart += diff; + newEnd += diff; - // calculate the heights. If any of the side panels is empty, we set the height to - // minus the border width, such that the border will be invisible - props.center.height = dom.center.offsetHeight; - props.left.height = dom.left.offsetHeight; - props.right.height = dom.right.offsetHeight; - props.top.height = dom.top.clientHeight || -props.border.top; - props.bottom.height = dom.bottom.clientHeight || -props.border.bottom; - - // TODO: compensate borders when any of the panels is empty. - - // apply auto height - // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM) - var contentHeight = Math.max(props.left.height, props.center.height, props.right.height); - var autoHeight = props.top.height + contentHeight + props.bottom.height + - borderRootHeight + props.border.top + props.border.bottom; - dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); - - // calculate heights of the content panels - props.root.height = dom.root.offsetHeight; - props.background.height = props.root.height - borderRootHeight; - var containerHeight = props.root.height - props.top.height - props.bottom.height - - borderRootHeight; - props.centerContainer.height = containerHeight; - props.leftContainer.height = containerHeight; - props.rightContainer.height = props.leftContainer.height; - - // calculate the widths of the panels - props.root.width = dom.root.offsetWidth; - props.background.width = props.root.width - borderRootWidth; - props.left.width = dom.leftContainer.clientWidth || -props.border.left; - props.leftContainer.width = props.left.width; - props.right.width = dom.rightContainer.clientWidth || -props.border.right; - props.rightContainer.width = props.right.width; - var centerWidth = props.root.width - props.left.width - props.right.width - borderRootWidth; - props.center.width = centerWidth; - props.centerContainer.width = centerWidth; - props.top.width = centerWidth; - props.bottom.width = centerWidth; - - // resize the panels - dom.background.style.height = props.background.height + 'px'; - dom.backgroundVertical.style.height = props.background.height + 'px'; - dom.backgroundHorizontalContainer.style.height = props.centerContainer.height + 'px'; - dom.centerContainer.style.height = props.centerContainer.height + 'px'; - dom.leftContainer.style.height = props.leftContainer.height + 'px'; - dom.rightContainer.style.height = props.rightContainer.height + 'px'; - - dom.background.style.width = props.background.width + 'px'; - dom.backgroundVertical.style.width = props.centerContainer.width + 'px'; - dom.backgroundHorizontalContainer.style.width = props.background.width + 'px'; - dom.backgroundHorizontal.style.width = props.background.width + 'px'; - dom.centerContainer.style.width = props.center.width + 'px'; - dom.top.style.width = props.top.width + 'px'; - dom.bottom.style.width = props.bottom.width + 'px'; - - // reposition the panels - dom.background.style.left = '0'; - dom.background.style.top = '0'; - dom.backgroundVertical.style.left = props.left.width + 'px'; - dom.backgroundVertical.style.top = '0'; - dom.backgroundHorizontalContainer.style.left = '0'; - dom.backgroundHorizontalContainer.style.top = props.top.height + 'px'; - dom.centerContainer.style.left = props.left.width + 'px'; - dom.centerContainer.style.top = props.top.height + 'px'; - dom.leftContainer.style.left = '0'; - dom.leftContainer.style.top = props.top.height + 'px'; - dom.rightContainer.style.left = (props.left.width + props.center.width) + 'px'; - dom.rightContainer.style.top = props.top.height + 'px'; - dom.top.style.left = props.left.width + 'px'; - dom.top.style.top = '0'; - dom.bottom.style.left = props.left.width + 'px'; - dom.bottom.style.top = (props.top.height + props.centerContainer.height) + 'px'; + // prevent end > max + if (max != null) { + if (newEnd > max) { + newEnd = max; + } + } + } + } - // update the scrollTop, feasible range for the offset can be changed - // when the height of the Graph2d or of the contents of the center changed - this._updateScrollTop(); + // prevent end > max + if (max !== null) { + if (newEnd > max) { + diff = (newEnd - max); + newStart -= diff; + newEnd -= diff; - // reposition the scrollable contents - var offset = this.props.scrollTop; - if (options.orientation == 'bottom') { - offset += Math.max(this.props.centerContainer.height - this.props.center.height - - this.props.border.top - this.props.border.bottom, 0); + // prevent start < min + if (min != null) { + if (newStart < min) { + newStart = min; + } + } + } } - dom.center.style.left = '0'; - dom.center.style.top = offset + 'px'; - dom.backgroundHorizontal.style.left = '0'; - dom.backgroundHorizontal.style.top = offset + 'px'; - dom.left.style.left = '0'; - dom.left.style.top = offset + 'px'; - dom.right.style.left = '0'; - dom.right.style.top = offset + 'px'; - // show shadows when vertical scrolling is available - var visibilityTop = this.props.scrollTop == 0 ? 'hidden' : ''; - var visibilityBottom = this.props.scrollTop == this.props.scrollTopMin ? 'hidden' : ''; - dom.shadowTop.style.visibility = visibilityTop; - dom.shadowBottom.style.visibility = visibilityBottom; - dom.shadowTopLeft.style.visibility = visibilityTop; - dom.shadowBottomLeft.style.visibility = visibilityBottom; - dom.shadowTopRight.style.visibility = visibilityTop; - dom.shadowBottomRight.style.visibility = visibilityBottom; + // prevent (end-start) < zoomMin + if (this.options.zoomMin !== null) { + var zoomMin = parseFloat(this.options.zoomMin); + if (zoomMin < 0) { + zoomMin = 0; + } + if ((newEnd - newStart) < zoomMin) { + if ((this.end - this.start) === zoomMin) { + // ignore this action, we are already zoomed to the minimum + newStart = this.start; + newEnd = this.end; + } + else { + // zoom to the minimum + diff = (zoomMin - (newEnd - newStart)); + newStart -= diff / 2; + newEnd += diff / 2; + } + } + } - // redraw all components - this.components.forEach(function (component) { - resized = component.redraw() || resized; - }); - if (resized) { - // keep redrawing until all sizes are settled - this.redraw(); + // prevent (end-start) > zoomMax + if (this.options.zoomMax !== null) { + var zoomMax = parseFloat(this.options.zoomMax); + if (zoomMax < 0) { + zoomMax = 0; + } + if ((newEnd - newStart) > zoomMax) { + if ((this.end - this.start) === zoomMax) { + // ignore this action, we are already zoomed to the maximum + newStart = this.start; + newEnd = this.end; + } + else { + // zoom to the maximum + diff = ((newEnd - newStart) - zoomMax); + newStart += diff / 2; + newEnd -= diff / 2; + } + } } - }; - /** - * Convert a position on screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @private - */ - // TODO: move this function to Range - Graph2d.prototype._toTime = function(x) { - var conversion = this.range.conversion(this.props.center.width); - return new Date(x / conversion.scale + conversion.offset); - }; + var changed = (this.start != newStart || this.end != newEnd); - /** - * Convert a datetime (Date object) into a position on the root - * This is used to get the pixel density estimate for the screen, not the center panel - * @param {Date} time A date - * @return {int} x The position on root in pixels which corresponds - * with the given date. - * @private - */ - // TODO: move this function to Range - Graph2d.prototype._toGlobalTime = function(x) { - var conversion = this.range.conversion(this.props.root.width); - return new Date(x / conversion.scale + conversion.offset); + this.start = newStart; + this.end = newEnd; + + return changed; }; /** - * Convert a datetime (Date object) into a position on the screen - * @param {Date} time A date - * @return {int} x The position on the screen in pixels which corresponds - * with the given date. - * @private + * Retrieve the current range. + * @return {Object} An object with start and end properties */ - // TODO: move this function to Range - Graph2d.prototype._toScreen = function(time) { - var conversion = this.range.conversion(this.props.center.width); - return (time.valueOf() - conversion.offset) * conversion.scale; + Range.prototype.getRange = function() { + return { + start: this.start, + end: this.end + }; }; - /** - * Convert a datetime (Date object) into a position on the root - * This is used to get the pixel density estimate for the screen, not the center panel - * @param {Date} time A date - * @return {int} x The position on root in pixels which corresponds - * with the given date. - * @private + * Calculate the conversion offset and scale for current range, based on + * the provided width + * @param {Number} width + * @returns {{offset: number, scale: number}} conversion */ - // TODO: move this function to Range - Graph2d.prototype._toGlobalScreen = function(time) { - var conversion = this.range.conversion(this.props.root.width); - return (time.valueOf() - conversion.offset) * conversion.scale; + Range.prototype.conversion = function (width) { + return Range.conversion(this.start, this.end, width); }; /** - * Initialize watching when option autoResize is true - * @private + * Static method to calculate the conversion offset and scale for a range, + * based on the provided start, end, and width + * @param {Number} start + * @param {Number} end + * @param {Number} width + * @returns {{offset: number, scale: number}} conversion */ - Graph2d.prototype._initAutoResize = function () { - if (this.options.autoResize == true) { - this._startAutoResize(); + Range.conversion = function (start, end, width) { + if (width != 0 && (end - start != 0)) { + return { + offset: start, + scale: width / (end - start) + } } else { - this._stopAutoResize(); + return { + offset: 0, + scale: 1 + }; } }; /** - * Watch for changes in the size of the container. On resize, the Panel will - * automatically redraw itself. + * Start dragging horizontally or vertically + * @param {Event} event * @private */ - Graph2d.prototype._startAutoResize = function () { - var me = this; + Range.prototype._onDragStart = function(event) { + // only allow dragging when configured as movable + if (!this.options.moveable) return; - this._stopAutoResize(); + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; - this._onResize = function() { - if (me.options.autoResize != true) { - // stop watching when the option autoResize is changed to false - me._stopAutoResize(); - return; - } + this.props.touch.start = this.start; + this.props.touch.end = this.end; - if (me.dom.root) { - // check whether the frame is resized - if ((me.dom.root.clientWidth != me.props.lastWidth) || - (me.dom.root.clientHeight != me.props.lastHeight)) { - me.props.lastWidth = me.dom.root.clientWidth; - me.props.lastHeight = me.dom.root.clientHeight; - - me.emit('change'); - } - } - }; - - // add event listener to window resize - util.addEventListener(window, 'resize', this._onResize); + if (this.body.dom.root) { + this.body.dom.root.style.cursor = 'move'; + } + }; - this.watchTimer = setInterval(this._onResize, 1000); + /** + * Perform dragging operation + * @param {Event} event + * @private + */ + Range.prototype._onDrag = function (event) { + // only allow dragging when configured as movable + if (!this.options.moveable) return; + var direction = this.options.direction; + validateDirection(direction); + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; + var delta = (direction == 'horizontal') ? event.gesture.deltaX : event.gesture.deltaY, + interval = (this.props.touch.end - this.props.touch.start), + width = (direction == 'horizontal') ? this.body.domProps.center.width : this.body.domProps.center.height, + diffRange = -delta / width * interval; + this._applyRange(this.props.touch.start + diffRange, this.props.touch.end + diffRange); + this.body.emitter.emit('rangechange', { + start: new Date(this.start), + end: new Date(this.end) + }); }; /** - * Stop watching for a resize of the frame. + * Stop dragging operation + * @param {event} event * @private */ - Graph2d.prototype._stopAutoResize = function () { - if (this.watchTimer) { - clearInterval(this.watchTimer); - this.watchTimer = undefined; + Range.prototype._onDragEnd = function (event) { + // only allow dragging when configured as movable + if (!this.options.moveable) return; + + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; + + if (this.body.dom.root) { + this.body.dom.root.style.cursor = 'auto'; } - // remove event listener on window.resize - util.removeEventListener(window, 'resize', this._onResize); - this._onResize = null; + // fire a rangechanged event + this.body.emitter.emit('rangechanged', { + start: new Date(this.start), + end: new Date(this.end) + }); }; /** - * Start moving the timeline vertically + * Event handler for mouse wheel event, used to zoom + * Code from http://adomas.org/javascript-mouse-wheel/ * @param {Event} event * @private */ - Graph2d.prototype._onTouch = function (event) { - this.touch.allowDragging = true; + Range.prototype._onMouseWheel = function(event) { + // only allow zooming when configured as zoomable and moveable + if (!(this.options.zoomable && this.options.moveable)) return; + + // retrieve delta + var delta = 0; + if (event.wheelDelta) { /* IE/Opera. */ + delta = event.wheelDelta / 120; + } else if (event.detail) { /* Mozilla case. */ + // In Mozilla, sign of delta is different than in IE. + // Also, delta is multiple of 3. + delta = -event.detail / 3; + } + + // If delta is nonzero, handle it. + // Basically, delta is now positive if wheel was scrolled up, + // and negative, if wheel was scrolled down. + if (delta) { + // perform the zoom action. Delta is normally 1 or -1 + + // adjust a negative delta such that zooming in with delta 0.1 + // equals zooming out with a delta -0.1 + var scale; + if (delta < 0) { + scale = 1 - (delta / 5); + } + else { + scale = 1 / (1 + (delta / 5)) ; + } + + // calculate center, the date to zoom around + var gesture = hammerUtil.fakeGesture(this, event), + pointer = getPointer(gesture.center, this.body.dom.center), + pointerDate = this._pointerToDate(pointer); + + this.zoom(scale, pointerDate); + } + + // Prevent default actions caused by mouse wheel + // (else the page and timeline both zoom and scroll) + event.preventDefault(); }; /** - * Start moving the timeline vertically - * @param {Event} event + * Start of a touch gesture * @private */ - Graph2d.prototype._onPinch = function (event) { - this.touch.allowDragging = false; + Range.prototype._onTouch = function (event) { + this.props.touch.start = this.start; + this.props.touch.end = this.end; + this.props.touch.allowDragging = true; + this.props.touch.center = null; }; /** - * Start moving the timeline vertically - * @param {Event} event + * On start of a hold gesture * @private */ - Graph2d.prototype._onDragStart = function (event) { - this.touch.initialScrollTop = this.props.scrollTop; + Range.prototype._onHold = function () { + this.props.touch.allowDragging = false; }; /** - * Move the timeline vertically + * Handle pinch event * @param {Event} event * @private */ - Graph2d.prototype._onDrag = function (event) { - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.touch.allowDragging) return; + Range.prototype._onPinch = function (event) { + // only allow zooming when configured as zoomable and moveable + if (!(this.options.zoomable && this.options.moveable)) return; - var delta = event.gesture.deltaY; + this.props.touch.allowDragging = false; - var oldScrollTop = this._getScrollTop(); - var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); + if (event.gesture.touches.length > 1) { + if (!this.props.touch.center) { + this.props.touch.center = getPointer(event.gesture.center, this.body.dom.center); + } - if (newScrollTop != oldScrollTop) { - this.redraw(); // TODO: this causes two redraws when dragging, the other is triggered by rangechange already + var scale = 1 / event.gesture.scale, + initDate = this._pointerToDate(this.props.touch.center); + + // calculate new start and end + var newStart = parseInt(initDate + (this.props.touch.start - initDate) * scale); + var newEnd = parseInt(initDate + (this.props.touch.end - initDate) * scale); + + // apply new range + this.setRange(newStart, newEnd); } }; /** - * Apply a scrollTop - * @param {Number} scrollTop - * @returns {Number} scrollTop Returns the applied scrollTop + * Helper function to calculate the center date for zooming + * @param {{x: Number, y: Number}} pointer + * @return {number} date * @private */ - Graph2d.prototype._setScrollTop = function (scrollTop) { - this.props.scrollTop = scrollTop; - this._updateScrollTop(); - return this.props.scrollTop; + Range.prototype._pointerToDate = function (pointer) { + var conversion; + var direction = this.options.direction; + + validateDirection(direction); + + if (direction == 'horizontal') { + var width = this.body.domProps.center.width; + conversion = this.conversion(width); + return pointer.x / conversion.scale + conversion.offset; + } + else { + var height = this.body.domProps.center.height; + conversion = this.conversion(height); + return pointer.y / conversion.scale + conversion.offset; + } }; /** - * Update the current scrollTop when the height of the containers has been changed - * @returns {Number} scrollTop Returns the applied scrollTop + * Get the pointer location relative to the location of the dom element + * @param {{pageX: Number, pageY: Number}} touch + * @param {Element} element HTML DOM element + * @return {{x: Number, y: Number}} pointer * @private */ - Graph2d.prototype._updateScrollTop = function () { - // recalculate the scrollTopMin - var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero - if (scrollTopMin != this.props.scrollTopMin) { - // in case of bottom orientation, change the scrollTop such that the contents - // do not move relative to the time axis at the bottom - if (this.options.orientation == 'bottom') { - this.props.scrollTop += (scrollTopMin - this.props.scrollTopMin); - } - this.props.scrollTopMin = scrollTopMin; + function getPointer (touch, element) { + return { + x: touch.pageX - util.getAbsoluteLeft(element), + y: touch.pageY - util.getAbsoluteTop(element) + }; + } + + /** + * Zoom the range the given scale in or out. Start and end date will + * be adjusted, and the timeline will be redrawn. You can optionally give a + * date around which to zoom. + * For example, try scale = 0.9 or 1.1 + * @param {Number} scale Scaling factor. Values above 1 will zoom out, + * values below 1 will zoom in. + * @param {Number} [center] Value representing a date around which will + * be zoomed. + */ + Range.prototype.zoom = function(scale, center) { + // if centerDate is not provided, take it half between start Date and end Date + if (center == null) { + center = (this.start + this.end) / 2; } - // limit the scrollTop to the feasible scroll range - if (this.props.scrollTop > 0) this.props.scrollTop = 0; - if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; + // calculate new start and end + var newStart = center + (this.start - center) * scale; + var newEnd = center + (this.end - center) * scale; - return this.props.scrollTop; + this.setRange(newStart, newEnd); }; /** - * Get the current scrollTop - * @returns {number} scrollTop - * @private + * Move the range with a given delta to the left or right. Start and end + * value will be adjusted. For example, try delta = 0.1 or -0.1 + * @param {Number} delta Moving amount. Positive value will move right, + * negative value will move left */ - Graph2d.prototype._getScrollTop = function () { - return this.props.scrollTop; - }; + Range.prototype.move = function(delta) { + // zoom start Date and end Date relative to the centerDate + var diff = (this.end - this.start); - module.exports = Graph2d; + // apply new values + var newStart = this.start + diff * delta; + var newEnd = this.end + diff * delta; + // TODO: reckon with min and max range -/***/ }, -/* 14 */ -/***/ function(module, exports, __webpack_require__) { + this.start = newStart; + this.end = newEnd; + }; /** - * @constructor DataStep - * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an - * end data point. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. - * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. - * - * Version: 1.2 - * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + * Move the range to a new center point + * @param {Number} moveTo New center point of the range */ - function DataStep(start, end, minimumStep, containerHeight, forcedStepSize) { - // variables - this.current = 0; - - this.autoScale = true; - this.stepIndex = 0; - this.step = 1; - this.scale = 1; - - this.marginStart; - this.marginEnd; + Range.prototype.moveTo = function(moveTo) { + var center = (this.start + this.end) / 2; - this.majorSteps = [1, 2, 5, 10]; - this.minorSteps = [0.25, 0.5, 1, 2]; + var diff = center - moveTo; - this.setRange(start, end, minimumStep, containerHeight, forcedStepSize); - } + // calculate new start and end + var newStart = this.start - diff; + var newEnd = this.end - diff; + this.setRange(newStart, newEnd); + }; + module.exports = Range; - /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Number} [start] The start date and time. - * @param {Number} [end] The end date and time. - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds - */ - DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, forcedStepSize) { - this._start = start; - this._end = end; - if (start == end) { - this._start = start - 0.75; - this._end = end + 1; - } +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { - if (this.autoScale) { - this.setMinimumStep(minimumStep, containerHeight, forcedStepSize); - } - this.setFirst(); - }; + // Utility functions for ordering and stacking of items + var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds + * Order items by their start data + * @param {Item[]} items */ - DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { - // round to floor - var size = this._end - this._start; - var safeSize = size * 1.1; - var minimumStepValue = minimumStep * (safeSize / containerHeight); - var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); - - var minorStepIdx = -1; - var magnitudefactor = Math.pow(10,orderOfMagnitude); - - var start = 0; - if (orderOfMagnitude < 0) { - start = orderOfMagnitude; - } - - var solutionFound = false; - for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { - magnitudefactor = Math.pow(10,i); - for (var j = 0; j < this.minorSteps.length; j++) { - var stepSize = magnitudefactor * this.minorSteps[j]; - if (stepSize >= minimumStepValue) { - solutionFound = true; - minorStepIdx = j; - break; - } - } - if (solutionFound == true) { - break; - } - } - this.stepIndex = minorStepIdx; - this.scale = magnitudefactor; - this.step = magnitudefactor * this.minorSteps[minorStepIdx]; + exports.orderByStart = function(items) { + items.sort(function (a, b) { + return a.data.start - b.data.start; + }); }; - /** - * Set the range iterator to the start date. + * Order items by their end date. If they have no end date, their start date + * is used. + * @param {Item[]} items */ - DataStep.prototype.first = function() { - this.setFirst(); + exports.orderByEnd = function(items) { + items.sort(function (a, b) { + var aTime = ('end' in a.data) ? a.data.end : a.data.start, + bTime = ('end' in b.data) ? b.data.end : b.data.start; + + return aTime - bTime; + }); }; /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date + * Adjust vertical positions of the items such that they don't overlap each + * other. + * @param {Item[]} items + * All visible items + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. + * @param {boolean} [force=false] + * If true, all items will be repositioned. If false (default), only + * items having a top===null will be re-stacked */ - DataStep.prototype.setFirst = function() { - var niceStart = this._start - (this.scale * this.minorSteps[this.stepIndex]); - var niceEnd = this._end + (this.scale * this.minorSteps[this.stepIndex]); + exports.stack = function(items, margin, force) { + var i, iMax; - this.marginEnd = this.roundToMinor(niceEnd); - this.marginStart = this.roundToMinor(niceStart); - this.marginRange = this.marginEnd - this.marginStart; + if (force) { + // reset top position of all items + for (i = 0, iMax = items.length; i < iMax; i++) { + items[i].top = null; + } + } - this.current = this.marginEnd; + // calculate new, non-overlapping positions + for (i = 0, iMax = items.length; i < iMax; i++) { + var item = items[i]; + if (item.top === null) { + // initialize top position + item.top = margin.axis; - }; + do { + // TODO: optimize checking for overlap. when there is a gap without items, + // you only need to check for items from the next item on, not from zero + var collidingItem = null; + for (var j = 0, jj = items.length; j < jj; j++) { + var other = items[j]; + if (other.top !== null && other !== item && exports.collision(item, other, margin.item)) { + collidingItem = other; + break; + } + } - DataStep.prototype.roundToMinor = function(value) { - var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); - if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { - return rounded + (this.scale * this.minorSteps[this.stepIndex]); - } - else { - return rounded; + if (collidingItem != null) { + // There is a collision. Reposition the items above the colliding element + item.top = collidingItem.top + collidingItem.height + margin.item.vertical; + } + } while (collidingItem); + } } - } - - - /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date - */ - DataStep.prototype.hasNext = function () { - return (this.current >= this.marginStart); }; /** - * Do the next step + * Adjust vertical positions of the items without stacking them + * @param {Item[]} items + * All visible items + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. */ - DataStep.prototype.next = function() { - var prev = this.current; - this.current -= this.step; + exports.nostack = function(items, margin) { + var i, iMax; - // safety mechanism: if current time is still unchanged, move to the end - if (this.current == prev) { - this.current = this._end; + // reset top position of all items + for (i = 0, iMax = items.length; i < iMax; i++) { + items[i].top = margin.axis; } }; /** - * Do the next step - */ - DataStep.prototype.previous = function() { - this.current += this.step; - this.marginEnd += this.step; - this.marginRange = this.marginEnd - this.marginStart; - }; - - - - /** - * Get the current datetime - * @return {String} current The current date + * Test if the two provided items collide + * The items must have parameters left, width, top, and height. + * @param {Item} a The first item + * @param {Item} b The second item + * @param {{horizontal: number, vertical: number}} margin + * An object containing a horizontal and vertical + * minimum required margin. + * @return {boolean} true if a and b collide, else false */ - DataStep.prototype.getCurrent = function() { - var toPrecision = '' + Number(this.current).toPrecision(5); - for (var i = toPrecision.length-1; i > 0; i--) { - if (toPrecision[i] == "0") { - toPrecision = toPrecision.slice(0,i); - } - else if (toPrecision[i] == "." || toPrecision[i] == ",") { - toPrecision = toPrecision.slice(0,i); - break; - } - else{ - break; - } - } - - return toPrecision; + exports.collision = function(a, b, margin) { + return ((a.left - margin.horizontal + EPSILON) < (b.left + b.width) && + (a.left + a.width + margin.horizontal - EPSILON) > b.left && + (a.top - margin.vertical + EPSILON) < (b.top + b.height) && + (a.top + a.height + margin.vertical - EPSILON) > b.top); }; +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate - */ - DataStep.prototype.snap = function(date) { - - }; + var moment = __webpack_require__(40); /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. + * @constructor TimeStep + * The class TimeStep is an iterator for dates. You provide a start date and an + * end date. The class itself determines the best scale (step size) based on the + * provided start Date, end Date, and minimumStep. + * + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * + * Alternatively, you can set a scale by hand. + * After creation, you can initialize the class by executing first(). Then you + * can iterate from the start date to the end date via next(). You can check if + * the end date is reached with the function hasNext(). After each step, you can + * retrieve the current date via getCurrent(). + * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours, + * days, to years. + * + * Version: 1.2 + * + * @param {Date} [start] The start date, for example new Date(2010, 9, 21) + * or new Date(2010, 9, 21, 23, 45, 00) + * @param {Date} [end] The end date + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds */ - DataStep.prototype.isMajor = function() { - return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); - }; + function TimeStep(start, end, minimumStep) { + // variables + this.current = new Date(); + this._start = new Date(); + this._end = new Date(); - module.exports = DataStep; + this.autoScale = true; + this.scale = TimeStep.SCALE.DAY; + this.step = 1; + // initialize the range + this.setRange(start, end, minimumStep); + } -/***/ }, -/* 15 */ -/***/ function(module, exports, __webpack_require__) { + /// enum scale + TimeStep.SCALE = { + MILLISECOND: 1, + SECOND: 2, + MINUTE: 3, + HOUR: 4, + DAY: 5, + WEEKDAY: 6, + MONTH: 7, + YEAR: 8 + }; - var util = __webpack_require__(1); - var hammerUtil = __webpack_require__(42); - var moment = __webpack_require__(40); - var Component = __webpack_require__(18); /** - * @constructor Range - * A Range controls a numeric range with a start and end value. - * The Range adjusts the range based on mouse events or programmatic changes, - * and triggers events when the range is changing or has been changed. - * @param {{dom: Object, domProps: Object, emitter: Emitter}} body - * @param {Object} [options] See description at Range.setOptions + * Set a new range + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * @param {Date} [start] The start date and time. + * @param {Date} [end] The end date and time. + * @param {int} [minimumStep] Optional. Minimum step size in milliseconds */ - function Range(body, options) { - var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); - this.start = now.clone().add('days', -3).valueOf(); // Number - this.end = now.clone().add('days', 4).valueOf(); // Number - - this.body = body; - - // default options - this.defaultOptions = { - start: null, - end: null, - direction: 'horizontal', // 'horizontal' or 'vertical' - moveable: true, - zoomable: true, - min: null, - max: null, - zoomMin: 10, // milliseconds - zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000 // milliseconds - }; - this.options = util.extend({}, this.defaultOptions); - - this.props = { - touch: {} - }; - - // drag listeners for dragging - this.body.emitter.on('dragstart', this._onDragStart.bind(this)); - this.body.emitter.on('drag', this._onDrag.bind(this)); - this.body.emitter.on('dragend', this._onDragEnd.bind(this)); - - // ignore dragging when holding - this.body.emitter.on('hold', this._onHold.bind(this)); - - // mouse wheel for zooming - this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); - this.body.emitter.on('DOMMouseScroll', this._onMouseWheel.bind(this)); // For FF - - // pinch to zoom - this.body.emitter.on('touch', this._onTouch.bind(this)); - this.body.emitter.on('pinch', this._onPinch.bind(this)); + TimeStep.prototype.setRange = function(start, end, minimumStep) { + if (!(start instanceof Date) || !(end instanceof Date)) { + throw "No legal start or end date in method setRange"; + } - this.setOptions(options); - } + this._start = (start != undefined) ? new Date(start.valueOf()) : new Date(); + this._end = (end != undefined) ? new Date(end.valueOf()) : new Date(); - Range.prototype = new Component(); + if (this.autoScale) { + this.setMinimumStep(minimumStep); + } + }; /** - * Set options for the range controller - * @param {Object} options Available options: - * {Number | Date | String} start Start date for the range - * {Number | Date | String} end End date for the range - * {Number} min Minimum value for start - * {Number} max Maximum value for end - * {Number} zoomMin Set a minimum value for - * (end - start). - * {Number} zoomMax Set a maximum value for - * (end - start). - * {Boolean} moveable Enable moving of the range - * by dragging. True by default - * {Boolean} zoomable Enable zooming of the range - * by pinching/scrolling. True by default + * Set the range iterator to the start date. */ - Range.prototype.setOptions = function (options) { - if (options) { - // copy the options that we know - var fields = ['direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable']; - util.selectiveExtend(fields, this.options, options); - - if ('start' in options || 'end' in options) { - // apply a new range. both start and end are optional - this.setRange(options.start, options.end); - } - } + TimeStep.prototype.first = function() { + this.current = new Date(this._start.valueOf()); + this.roundToMinor(); }; /** - * Test whether direction has a valid value - * @param {String} direction 'horizontal' or 'vertical' + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date */ - function validateDirection (direction) { - if (direction != 'horizontal' && direction != 'vertical') { - throw new TypeError('Unknown direction "' + direction + '". ' + - 'Choose "horizontal" or "vertical".'); + TimeStep.prototype.roundToMinor = function() { + // round to floor + // IMPORTANT: we have no breaks in this switch! (this is no bug) + //noinspection FallthroughInSwitchStatementJS + switch (this.scale) { + case TimeStep.SCALE.YEAR: + this.current.setFullYear(this.step * Math.floor(this.current.getFullYear() / this.step)); + this.current.setMonth(0); + case TimeStep.SCALE.MONTH: this.current.setDate(1); + case TimeStep.SCALE.DAY: // intentional fall through + case TimeStep.SCALE.WEEKDAY: this.current.setHours(0); + case TimeStep.SCALE.HOUR: this.current.setMinutes(0); + case TimeStep.SCALE.MINUTE: this.current.setSeconds(0); + case TimeStep.SCALE.SECOND: this.current.setMilliseconds(0); + //case TimeStep.SCALE.MILLISECOND: // nothing to do for milliseconds } - } + + if (this.step != 1) { + // round down to the first minor value that is a multiple of the current step size + switch (this.scale) { + case TimeStep.SCALE.MILLISECOND: this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; + case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; + case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; + case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; + case TimeStep.SCALE.WEEKDAY: // intentional fall through + case TimeStep.SCALE.DAY: this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; + case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; + case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; + default: break; + } + } + }; /** - * Set a new start and end range - * @param {Number} [start] - * @param {Number} [end] + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date */ - Range.prototype.setRange = function(start, end) { - var changed = this._applyRange(start, end); - if (changed) { - var params = { - start: new Date(this.start), - end: new Date(this.end) - }; - this.body.emitter.emit('rangechange', params); - this.body.emitter.emit('rangechanged', params); - } + TimeStep.prototype.hasNext = function () { + return (this.current.valueOf() <= this._end.valueOf()); }; /** - * Set a new start and end range. This method is the same as setRange, but - * does not trigger a range change and range changed event, and it returns - * true when the range is changed - * @param {Number} [start] - * @param {Number} [end] - * @return {Boolean} changed - * @private + * Do the next step */ - Range.prototype._applyRange = function(start, end) { - var newStart = (start != null) ? util.convert(start, 'Date').valueOf() : this.start, - newEnd = (end != null) ? util.convert(end, 'Date').valueOf() : this.end, - max = (this.options.max != null) ? util.convert(this.options.max, 'Date').valueOf() : null, - min = (this.options.min != null) ? util.convert(this.options.min, 'Date').valueOf() : null, - diff; + TimeStep.prototype.next = function() { + var prev = this.current.valueOf(); - // check for valid number - if (isNaN(newStart) || newStart === null) { - throw new Error('Invalid start "' + start + '"'); - } - if (isNaN(newEnd) || newEnd === null) { - throw new Error('Invalid end "' + end + '"'); - } + // Two cases, needed to prevent issues with switching daylight savings + // (end of March and end of October) + if (this.current.getMonth() < 6) { + switch (this.scale) { + case TimeStep.SCALE.MILLISECOND: - // prevent start < end - if (newEnd < newStart) { - newEnd = newStart; + this.current = new Date(this.current.valueOf() + this.step); break; + case TimeStep.SCALE.SECOND: this.current = new Date(this.current.valueOf() + this.step * 1000); break; + case TimeStep.SCALE.MINUTE: this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; + case TimeStep.SCALE.HOUR: + this.current = new Date(this.current.valueOf() + this.step * 1000 * 60 * 60); + // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) + var h = this.current.getHours(); + this.current.setHours(h - (h % this.step)); + break; + case TimeStep.SCALE.WEEKDAY: // intentional fall through + case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; + case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; + case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; + default: break; + } } - - // prevent start < min - if (min !== null) { - if (newStart < min) { - diff = (min - newStart); - newStart += diff; - newEnd += diff; - - // prevent end > max - if (max != null) { - if (newEnd > max) { - newEnd = max; - } - } - } - } - - // prevent end > max - if (max !== null) { - if (newEnd > max) { - diff = (newEnd - max); - newStart -= diff; - newEnd -= diff; - - // prevent start < min - if (min != null) { - if (newStart < min) { - newStart = min; - } - } + else { + switch (this.scale) { + case TimeStep.SCALE.MILLISECOND: this.current = new Date(this.current.valueOf() + this.step); break; + case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() + this.step); break; + case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() + this.step); break; + case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() + this.step); break; + case TimeStep.SCALE.WEEKDAY: // intentional fall through + case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; + case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; + case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; + default: break; } } - // prevent (end-start) < zoomMin - if (this.options.zoomMin !== null) { - var zoomMin = parseFloat(this.options.zoomMin); - if (zoomMin < 0) { - zoomMin = 0; - } - if ((newEnd - newStart) < zoomMin) { - if ((this.end - this.start) === zoomMin) { - // ignore this action, we are already zoomed to the minimum - newStart = this.start; - newEnd = this.end; - } - else { - // zoom to the minimum - diff = (zoomMin - (newEnd - newStart)); - newStart -= diff / 2; - newEnd += diff / 2; - } + if (this.step != 1) { + // round down to the correct major value + switch (this.scale) { + case TimeStep.SCALE.MILLISECOND: if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; + case TimeStep.SCALE.SECOND: if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; + case TimeStep.SCALE.MINUTE: if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; + case TimeStep.SCALE.HOUR: if(this.current.getHours() < this.step) this.current.setHours(0); break; + case TimeStep.SCALE.WEEKDAY: // intentional fall through + case TimeStep.SCALE.DAY: if(this.current.getDate() < this.step+1) this.current.setDate(1); break; + case TimeStep.SCALE.MONTH: if(this.current.getMonth() < this.step) this.current.setMonth(0); break; + case TimeStep.SCALE.YEAR: break; // nothing to do for year + default: break; } } - // prevent (end-start) > zoomMax - if (this.options.zoomMax !== null) { - var zoomMax = parseFloat(this.options.zoomMax); - if (zoomMax < 0) { - zoomMax = 0; - } - if ((newEnd - newStart) > zoomMax) { - if ((this.end - this.start) === zoomMax) { - // ignore this action, we are already zoomed to the maximum - newStart = this.start; - newEnd = this.end; - } - else { - // zoom to the maximum - diff = ((newEnd - newStart) - zoomMax); - newStart += diff / 2; - newEnd -= diff / 2; - } - } + // safety mechanism: if current time is still unchanged, move to the end + if (this.current.valueOf() == prev) { + this.current = new Date(this._end.valueOf()); } - - var changed = (this.start != newStart || this.end != newEnd); - - this.start = newStart; - this.end = newEnd; - - return changed; - }; - - /** - * Retrieve the current range. - * @return {Object} An object with start and end properties - */ - Range.prototype.getRange = function() { - return { - start: this.start, - end: this.end - }; }; - /** - * Calculate the conversion offset and scale for current range, based on - * the provided width - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion - */ - Range.prototype.conversion = function (width) { - return Range.conversion(this.start, this.end, width); - }; /** - * Static method to calculate the conversion offset and scale for a range, - * based on the provided start, end, and width - * @param {Number} start - * @param {Number} end - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion + * Get the current datetime + * @return {Date} current The current date */ - Range.conversion = function (start, end, width) { - if (width != 0 && (end - start != 0)) { - return { - offset: start, - scale: width / (end - start) - } - } - else { - return { - offset: 0, - scale: 1 - }; - } + TimeStep.prototype.getCurrent = function() { + return this.current; }; /** - * Start dragging horizontally or vertically - * @param {Event} event - * @private + * Set a custom scale. Autoscaling will be disabled. + * For example setScale(SCALE.MINUTES, 5) will result + * in minor steps of 5 minutes, and major steps of an hour. + * + * @param {TimeStep.SCALE} newScale + * A scale. Choose from SCALE.MILLISECOND, + * SCALE.SECOND, SCALE.MINUTE, SCALE.HOUR, + * SCALE.WEEKDAY, SCALE.DAY, SCALE.MONTH, + * SCALE.YEAR. + * @param {Number} newStep A step size, by default 1. Choose for + * example 1, 2, 5, or 10. */ - Range.prototype._onDragStart = function(event) { - // only allow dragging when configured as movable - if (!this.options.moveable) return; - - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; - - this.props.touch.start = this.start; - this.props.touch.end = this.end; + TimeStep.prototype.setScale = function(newScale, newStep) { + this.scale = newScale; - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'move'; + if (newStep > 0) { + this.step = newStep; } - }; - /** - * Perform dragging operation - * @param {Event} event - * @private - */ - Range.prototype._onDrag = function (event) { - // only allow dragging when configured as movable - if (!this.options.moveable) return; - var direction = this.options.direction; - validateDirection(direction); - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; - var delta = (direction == 'horizontal') ? event.gesture.deltaX : event.gesture.deltaY, - interval = (this.props.touch.end - this.props.touch.start), - width = (direction == 'horizontal') ? this.body.domProps.center.width : this.body.domProps.center.height, - diffRange = -delta / width * interval; - this._applyRange(this.props.touch.start + diffRange, this.props.touch.end + diffRange); - this.body.emitter.emit('rangechange', { - start: new Date(this.start), - end: new Date(this.end) - }); + this.autoScale = false; }; /** - * Stop dragging operation - * @param {event} event - * @private + * Enable or disable autoscaling + * @param {boolean} enable If true, autoascaling is set true */ - Range.prototype._onDragEnd = function (event) { - // only allow dragging when configured as movable - if (!this.options.moveable) return; - - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; - - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'auto'; - } - - // fire a rangechanged event - this.body.emitter.emit('rangechanged', { - start: new Date(this.start), - end: new Date(this.end) - }); + TimeStep.prototype.setAutoScale = function (enable) { + this.autoScale = enable; }; + /** - * Event handler for mouse wheel event, used to zoom - * Code from http://adomas.org/javascript-mouse-wheel/ - * @param {Event} event - * @private + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds */ - Range.prototype._onMouseWheel = function(event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; - - // retrieve delta - var delta = 0; - if (event.wheelDelta) { /* IE/Opera. */ - delta = event.wheelDelta / 120; - } else if (event.detail) { /* Mozilla case. */ - // In Mozilla, sign of delta is different than in IE. - // Also, delta is multiple of 3. - delta = -event.detail / 3; + TimeStep.prototype.setMinimumStep = function(minimumStep) { + if (minimumStep == undefined) { + return; } - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { - // perform the zoom action. Delta is normally 1 or -1 + var stepYear = (1000 * 60 * 60 * 24 * 30 * 12); + var stepMonth = (1000 * 60 * 60 * 24 * 30); + var stepDay = (1000 * 60 * 60 * 24); + var stepHour = (1000 * 60 * 60); + var stepMinute = (1000 * 60); + var stepSecond = (1000); + var stepMillisecond= (1); - // adjust a negative delta such that zooming in with delta 0.1 - // equals zooming out with a delta -0.1 - var scale; - if (delta < 0) { - scale = 1 - (delta / 5); + // find the smallest step that is larger than the provided minimumStep + if (stepYear*1000 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1000;} + if (stepYear*500 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 500;} + if (stepYear*100 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 100;} + if (stepYear*50 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 50;} + if (stepYear*10 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 10;} + if (stepYear*5 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 5;} + if (stepYear > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1;} + if (stepMonth*3 > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 3;} + if (stepMonth > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 1;} + if (stepDay*5 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 5;} + if (stepDay*2 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 2;} + if (stepDay > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 1;} + if (stepDay/2 > minimumStep) {this.scale = TimeStep.SCALE.WEEKDAY; this.step = 1;} + if (stepHour*4 > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 4;} + if (stepHour > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 1;} + if (stepMinute*15 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 15;} + if (stepMinute*10 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 10;} + if (stepMinute*5 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 5;} + if (stepMinute > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 1;} + if (stepSecond*15 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 15;} + if (stepSecond*10 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 10;} + if (stepSecond*5 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 5;} + if (stepSecond > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 1;} + if (stepMillisecond*200 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 200;} + if (stepMillisecond*100 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 100;} + if (stepMillisecond*50 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 50;} + if (stepMillisecond*10 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 10;} + if (stepMillisecond*5 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 5;} + if (stepMillisecond > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 1;} + }; + + /** + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate + */ + TimeStep.prototype.snap = function(date) { + var clone = new Date(date.valueOf()); + + if (this.scale == TimeStep.SCALE.YEAR) { + var year = clone.getFullYear() + Math.round(clone.getMonth() / 12); + clone.setFullYear(Math.round(year / this.step) * this.step); + clone.setMonth(0); + clone.setDate(0); + clone.setHours(0); + clone.setMinutes(0); + clone.setSeconds(0); + clone.setMilliseconds(0); + } + else if (this.scale == TimeStep.SCALE.MONTH) { + if (clone.getDate() > 15) { + clone.setDate(1); + clone.setMonth(clone.getMonth() + 1); + // important: first set Date to 1, after that change the month. } else { - scale = 1 / (1 + (delta / 5)) ; + clone.setDate(1); } - // calculate center, the date to zoom around - var gesture = hammerUtil.fakeGesture(this, event), - pointer = getPointer(gesture.center, this.body.dom.center), - pointerDate = this._pointerToDate(pointer); - - this.zoom(scale, pointerDate); + clone.setHours(0); + clone.setMinutes(0); + clone.setSeconds(0); + clone.setMilliseconds(0); } - - // Prevent default actions caused by mouse wheel - // (else the page and timeline both zoom and scroll) - event.preventDefault(); + else if (this.scale == TimeStep.SCALE.DAY) { + //noinspection FallthroughInSwitchStatementJS + switch (this.step) { + case 5: + case 2: + clone.setHours(Math.round(clone.getHours() / 24) * 24); break; + default: + clone.setHours(Math.round(clone.getHours() / 12) * 12); break; + } + clone.setMinutes(0); + clone.setSeconds(0); + clone.setMilliseconds(0); + } + else if (this.scale == TimeStep.SCALE.WEEKDAY) { + //noinspection FallthroughInSwitchStatementJS + switch (this.step) { + case 5: + case 2: + clone.setHours(Math.round(clone.getHours() / 12) * 12); break; + default: + clone.setHours(Math.round(clone.getHours() / 6) * 6); break; + } + clone.setMinutes(0); + clone.setSeconds(0); + clone.setMilliseconds(0); + } + else if (this.scale == TimeStep.SCALE.HOUR) { + switch (this.step) { + case 4: + clone.setMinutes(Math.round(clone.getMinutes() / 60) * 60); break; + default: + clone.setMinutes(Math.round(clone.getMinutes() / 30) * 30); break; + } + clone.setSeconds(0); + clone.setMilliseconds(0); + } else if (this.scale == TimeStep.SCALE.MINUTE) { + //noinspection FallthroughInSwitchStatementJS + switch (this.step) { + case 15: + case 10: + clone.setMinutes(Math.round(clone.getMinutes() / 5) * 5); + clone.setSeconds(0); + break; + case 5: + clone.setSeconds(Math.round(clone.getSeconds() / 60) * 60); break; + default: + clone.setSeconds(Math.round(clone.getSeconds() / 30) * 30); break; + } + clone.setMilliseconds(0); + } + else if (this.scale == TimeStep.SCALE.SECOND) { + //noinspection FallthroughInSwitchStatementJS + switch (this.step) { + case 15: + case 10: + clone.setSeconds(Math.round(clone.getSeconds() / 5) * 5); + clone.setMilliseconds(0); + break; + case 5: + clone.setMilliseconds(Math.round(clone.getMilliseconds() / 1000) * 1000); break; + default: + clone.setMilliseconds(Math.round(clone.getMilliseconds() / 500) * 500); break; + } + } + else if (this.scale == TimeStep.SCALE.MILLISECOND) { + var step = this.step > 5 ? this.step / 2 : 1; + clone.setMilliseconds(Math.round(clone.getMilliseconds() / step) * step); + } + + return clone; }; /** - * Start of a touch gesture - * @private + * Check if the current value is a major value (for example when the step + * is DAY, a major value is each first day of the MONTH) + * @return {boolean} true if current date is major, else false. */ - Range.prototype._onTouch = function (event) { - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.allowDragging = true; - this.props.touch.center = null; + TimeStep.prototype.isMajor = function() { + switch (this.scale) { + case TimeStep.SCALE.MILLISECOND: + return (this.current.getMilliseconds() == 0); + case TimeStep.SCALE.SECOND: + return (this.current.getSeconds() == 0); + case TimeStep.SCALE.MINUTE: + return (this.current.getHours() == 0) && (this.current.getMinutes() == 0); + // Note: this is no bug. Major label is equal for both minute and hour scale + case TimeStep.SCALE.HOUR: + return (this.current.getHours() == 0); + case TimeStep.SCALE.WEEKDAY: // intentional fall through + case TimeStep.SCALE.DAY: + return (this.current.getDate() == 1); + case TimeStep.SCALE.MONTH: + return (this.current.getMonth() == 0); + case TimeStep.SCALE.YEAR: + return false; + default: + return false; + } }; + /** - * On start of a hold gesture - * @private + * Returns formatted text for the minor axislabel, depending on the current + * date and the scale. For example when scale is MINUTE, the current time is + * formatted as "hh:mm". + * @param {Date} [date] custom date. if not provided, current date is taken */ - Range.prototype._onHold = function () { - this.props.touch.allowDragging = false; + TimeStep.prototype.getLabelMinor = function(date) { + if (date == undefined) { + date = this.current; + } + + switch (this.scale) { + case TimeStep.SCALE.MILLISECOND: return moment(date).format('SSS'); + case TimeStep.SCALE.SECOND: return moment(date).format('s'); + case TimeStep.SCALE.MINUTE: return moment(date).format('HH:mm'); + case TimeStep.SCALE.HOUR: return moment(date).format('HH:mm'); + case TimeStep.SCALE.WEEKDAY: return moment(date).format('ddd D'); + case TimeStep.SCALE.DAY: return moment(date).format('D'); + case TimeStep.SCALE.MONTH: return moment(date).format('MMM'); + case TimeStep.SCALE.YEAR: return moment(date).format('YYYY'); + default: return ''; + } }; + /** - * Handle pinch event - * @param {Event} event - * @private + * Returns formatted text for the major axis label, depending on the current + * date and the scale. For example when scale is MINUTE, the major scale is + * hours, and the hour will be formatted as "hh". + * @param {Date} [date] custom date. if not provided, current date is taken */ - Range.prototype._onPinch = function (event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; - - this.props.touch.allowDragging = false; + TimeStep.prototype.getLabelMajor = function(date) { + if (date == undefined) { + date = this.current; + } - if (event.gesture.touches.length > 1) { - if (!this.props.touch.center) { - this.props.touch.center = getPointer(event.gesture.center, this.body.dom.center); - } + //noinspection FallthroughInSwitchStatementJS + switch (this.scale) { + case TimeStep.SCALE.MILLISECOND:return moment(date).format('HH:mm:ss'); + case TimeStep.SCALE.SECOND: return moment(date).format('D MMMM HH:mm'); + case TimeStep.SCALE.MINUTE: + case TimeStep.SCALE.HOUR: return moment(date).format('ddd D MMMM'); + case TimeStep.SCALE.WEEKDAY: + case TimeStep.SCALE.DAY: return moment(date).format('MMMM YYYY'); + case TimeStep.SCALE.MONTH: return moment(date).format('YYYY'); + case TimeStep.SCALE.YEAR: return ''; + default: return ''; + } + }; - var scale = 1 / event.gesture.scale, - initDate = this._pointerToDate(this.props.touch.center); + module.exports = TimeStep; - // calculate new start and end - var newStart = parseInt(initDate + (this.props.touch.start - initDate) * scale); - var newEnd = parseInt(initDate + (this.props.touch.end - initDate) * scale); - // apply new range - this.setRange(newStart, newEnd); - } - }; +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { /** - * Helper function to calculate the center date for zooming - * @param {{x: Number, y: Number}} pointer - * @return {number} date - * @private + * Prototype for visual components + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] + * @param {Object} [options] */ - Range.prototype._pointerToDate = function (pointer) { - var conversion; - var direction = this.options.direction; - - validateDirection(direction); + function Component (body, options) { + this.options = null; + this.props = null; + } - if (direction == 'horizontal') { - var width = this.body.domProps.center.width; - conversion = this.conversion(width); - return pointer.x / conversion.scale + conversion.offset; - } - else { - var height = this.body.domProps.center.height; - conversion = this.conversion(height); - return pointer.y / conversion.scale + conversion.offset; + /** + * Set options for the component. The new options will be merged into the + * current options. + * @param {Object} options + */ + Component.prototype.setOptions = function(options) { + if (options) { + util.extend(this.options, options); } }; /** - * Get the pointer location relative to the location of the dom element - * @param {{pageX: Number, pageY: Number}} touch - * @param {Element} element HTML DOM element - * @return {{x: Number, y: Number}} pointer - * @private + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - function getPointer (touch, element) { - return { - x: touch.pageX - util.getAbsoluteLeft(element), - y: touch.pageY - util.getAbsoluteTop(element) - }; - } + Component.prototype.redraw = function() { + // should be implemented by the component + return false; + }; /** - * Zoom the range the given scale in or out. Start and end date will - * be adjusted, and the timeline will be redrawn. You can optionally give a - * date around which to zoom. - * For example, try scale = 0.9 or 1.1 - * @param {Number} scale Scaling factor. Values above 1 will zoom out, - * values below 1 will zoom in. - * @param {Number} [center] Value representing a date around which will - * be zoomed. + * Destroy the component. Cleanup DOM and event listeners */ - Range.prototype.zoom = function(scale, center) { - // if centerDate is not provided, take it half between start Date and end Date - if (center == null) { - center = (this.start + this.end) / 2; - } - - // calculate new start and end - var newStart = center + (this.start - center) * scale; - var newEnd = center + (this.end - center) * scale; - - this.setRange(newStart, newEnd); + Component.prototype.destroy = function() { + // should be implemented by the component }; /** - * Move the range with a given delta to the left or right. Start and end - * value will be adjusted. For example, try delta = 0.1 or -0.1 - * @param {Number} delta Moving amount. Positive value will move right, - * negative value will move left + * Test whether the component is resized since the last time _isResized() was + * called. + * @return {Boolean} Returns true if the component is resized + * @protected */ - Range.prototype.move = function(delta) { - // zoom start Date and end Date relative to the centerDate - var diff = (this.end - this.start); - - // apply new values - var newStart = this.start + diff * delta; - var newEnd = this.end + diff * delta; + Component.prototype._isResized = function() { + var resized = (this.props._previousWidth !== this.props.width || + this.props._previousHeight !== this.props.height); - // TODO: reckon with min and max range + this.props._previousWidth = this.props.width; + this.props._previousHeight = this.props.height; - this.start = newStart; - this.end = newEnd; + return resized; }; - /** - * Move the range to a new center point - * @param {Number} moveTo New center point of the range - */ - Range.prototype.moveTo = function(moveTo) { - var center = (this.start + this.end) / 2; + module.exports = Component; - var diff = center - moveTo; - // calculate new start and end - var newStart = this.start - diff; - var newEnd = this.end - diff; +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { - this.setRange(newStart, newEnd); - }; + var util = __webpack_require__(1); + var Component = __webpack_require__(18); - module.exports = Range; + /** + * A current time bar + * @param {{range: Range, dom: Object, domProps: Object}} body + * @param {Object} [options] Available parameters: + * {Boolean} [showCurrentTime] + * @constructor CurrentTime + * @extends Component + */ + function CurrentTime (body, options) { + this.body = body; + // default options + this.defaultOptions = { + showCurrentTime: true + }; + this.options = util.extend({}, this.defaultOptions); -/***/ }, -/* 16 */ -/***/ function(module, exports, __webpack_require__) { + this._create(); - // Utility functions for ordering and stacking of items - var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors + this.setOptions(options); + } + + CurrentTime.prototype = new Component(); /** - * Order items by their start data - * @param {Item[]} items + * Create the HTML DOM for the current time bar + * @private */ - exports.orderByStart = function(items) { - items.sort(function (a, b) { - return a.data.start - b.data.start; - }); + CurrentTime.prototype._create = function() { + var bar = document.createElement('div'); + bar.className = 'currenttime'; + bar.style.position = 'absolute'; + bar.style.top = '0px'; + bar.style.height = '100%'; + + this.bar = bar; }; /** - * Order items by their end date. If they have no end date, their start date - * is used. - * @param {Item[]} items + * Destroy the CurrentTime bar */ - exports.orderByEnd = function(items) { - items.sort(function (a, b) { - var aTime = ('end' in a.data) ? a.data.end : a.data.start, - bTime = ('end' in b.data) ? b.data.end : b.data.start; + CurrentTime.prototype.destroy = function () { + this.options.showCurrentTime = false; + this.redraw(); // will remove the bar from the DOM and stop refreshing - return aTime - bTime; - }); + this.body = null; }; /** - * Adjust vertical positions of the items such that they don't overlap each - * other. - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - * @param {boolean} [force=false] - * If true, all items will be repositioned. If false (default), only - * items having a top===null will be re-stacked + * Set options for the component. Options will be merged in current options. + * @param {Object} options Available parameters: + * {boolean} [showCurrentTime] */ - exports.stack = function(items, margin, force) { - var i, iMax; - - if (force) { - // reset top position of all items - for (i = 0, iMax = items.length; i < iMax; i++) { - items[i].top = null; - } + CurrentTime.prototype.setOptions = function(options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['showCurrentTime'], this.options, options); } + }; - // calculate new, non-overlapping positions - for (i = 0, iMax = items.length; i < iMax; i++) { - var item = items[i]; - if (item.top === null) { - // initialize top position - item.top = margin.axis; + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + CurrentTime.prototype.redraw = function() { + if (this.options.showCurrentTime) { + var parent = this.body.dom.backgroundVertical; + if (this.bar.parentNode != parent) { + // attach to the dom + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); + } + parent.appendChild(this.bar); - do { - // TODO: optimize checking for overlap. when there is a gap without items, - // you only need to check for items from the next item on, not from zero - var collidingItem = null; - for (var j = 0, jj = items.length; j < jj; j++) { - var other = items[j]; - if (other.top !== null && other !== item && exports.collision(item, other, margin.item)) { - collidingItem = other; - break; - } - } + this.start(); + } - if (collidingItem != null) { - // There is a collision. Reposition the items above the colliding element - item.top = collidingItem.top + collidingItem.height + margin.item.vertical; - } - } while (collidingItem); + var now = new Date(); + var x = this.body.util.toScreen(now); + + this.bar.style.left = x + 'px'; + this.bar.title = 'Current time: ' + now; + } + else { + // remove the line from the DOM + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); } + this.stop(); } + + return false; }; /** - * Adjust vertical positions of the items without stacking them - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. + * Start auto refreshing the current time bar */ - exports.nostack = function(items, margin) { - var i, iMax; + CurrentTime.prototype.start = function() { + var me = this; - // reset top position of all items - for (i = 0, iMax = items.length; i < iMax; i++) { - items[i].top = margin.axis; - } - }; + function update () { + me.stop(); - /** - * Test if the two provided items collide - * The items must have parameters left, width, top, and height. - * @param {Item} a The first item - * @param {Item} b The second item - * @param {{horizontal: number, vertical: number}} margin - * An object containing a horizontal and vertical - * minimum required margin. - * @return {boolean} true if a and b collide, else false + // determine interval to refresh + var scale = me.body.range.conversion(me.body.domProps.center.width).scale; + var interval = 1 / scale / 10; + if (interval < 30) interval = 30; + if (interval > 1000) interval = 1000; + + me.redraw(); + + // start a timer to adjust for the new time + me.currentTimeTimer = setTimeout(update, interval); + } + + update(); + }; + + /** + * Stop auto refreshing the current time bar */ - exports.collision = function(a, b, margin) { - return ((a.left - margin.horizontal + EPSILON) < (b.left + b.width) && - (a.left + a.width + margin.horizontal - EPSILON) > b.left && - (a.top - margin.vertical + EPSILON) < (b.top + b.height) && - (a.top + a.height + margin.vertical - EPSILON) > b.top); + CurrentTime.prototype.stop = function() { + if (this.currentTimeTimer !== undefined) { + clearTimeout(this.currentTimeTimer); + delete this.currentTimeTimer; + } }; + module.exports = CurrentTime; + /***/ }, -/* 17 */ +/* 20 */ /***/ function(module, exports, __webpack_require__) { - var moment = __webpack_require__(40); + var Hammer = __webpack_require__(41); + var util = __webpack_require__(1); + var Component = __webpack_require__(18); /** - * @constructor TimeStep - * The class TimeStep is an iterator for dates. You provide a start date and an - * end date. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. - * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. - * - * Version: 1.2 - * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + * A custom time bar + * @param {{range: Range, dom: Object}} body + * @param {Object} [options] Available parameters: + * {Boolean} [showCustomTime] + * @constructor CustomTime + * @extends Component */ - function TimeStep(start, end, minimumStep) { - // variables - this.current = new Date(); - this._start = new Date(); - this._end = new Date(); - this.autoScale = true; - this.scale = TimeStep.SCALE.DAY; - this.step = 1; + function CustomTime (body, options) { + this.body = body; - // initialize the range - this.setRange(start, end, minimumStep); - } + // default options + this.defaultOptions = { + showCustomTime: false + }; + this.options = util.extend({}, this.defaultOptions); - /// enum scale - TimeStep.SCALE = { - MILLISECOND: 1, - SECOND: 2, - MINUTE: 3, - HOUR: 4, - DAY: 5, - WEEKDAY: 6, - MONTH: 7, - YEAR: 8 - }; + this.customTime = new Date(); + this.eventParams = {}; // stores state parameters while dragging the bar + // create the DOM + this._create(); + + this.setOptions(options); + } + + CustomTime.prototype = new Component(); /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Date} [start] The start date and time. - * @param {Date} [end] The end date and time. - * @param {int} [minimumStep] Optional. Minimum step size in milliseconds + * Set options for the component. Options will be merged in current options. + * @param {Object} options Available parameters: + * {boolean} [showCustomTime] */ - TimeStep.prototype.setRange = function(start, end, minimumStep) { - if (!(start instanceof Date) || !(end instanceof Date)) { - throw "No legal start or end date in method setRange"; + CustomTime.prototype.setOptions = function(options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['showCustomTime'], this.options, options); } + }; - this._start = (start != undefined) ? new Date(start.valueOf()) : new Date(); - this._end = (end != undefined) ? new Date(end.valueOf()) : new Date(); + /** + * Create the DOM for the custom time + * @private + */ + CustomTime.prototype._create = function() { + var bar = document.createElement('div'); + bar.className = 'customtime'; + bar.style.position = 'absolute'; + bar.style.top = '0px'; + bar.style.height = '100%'; + this.bar = bar; - if (this.autoScale) { - this.setMinimumStep(minimumStep); - } + var drag = document.createElement('div'); + drag.style.position = 'relative'; + drag.style.top = '0px'; + drag.style.left = '-10px'; + drag.style.height = '100%'; + drag.style.width = '20px'; + bar.appendChild(drag); + + // attach event listeners + this.hammer = Hammer(bar, { + prevent_default: true + }); + this.hammer.on('dragstart', this._onDragStart.bind(this)); + this.hammer.on('drag', this._onDrag.bind(this)); + this.hammer.on('dragend', this._onDragEnd.bind(this)); }; /** - * Set the range iterator to the start date. + * Destroy the CustomTime bar */ - TimeStep.prototype.first = function() { - this.current = new Date(this._start.valueOf()); - this.roundToMinor(); + CustomTime.prototype.destroy = function () { + this.options.showCustomTime = false; + this.redraw(); // will remove the bar from the DOM + + this.hammer.enable(false); + this.hammer = null; + + this.body = null; }; /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - TimeStep.prototype.roundToMinor = function() { - // round to floor - // IMPORTANT: we have no breaks in this switch! (this is no bug) - //noinspection FallthroughInSwitchStatementJS - switch (this.scale) { - case TimeStep.SCALE.YEAR: - this.current.setFullYear(this.step * Math.floor(this.current.getFullYear() / this.step)); - this.current.setMonth(0); - case TimeStep.SCALE.MONTH: this.current.setDate(1); - case TimeStep.SCALE.DAY: // intentional fall through - case TimeStep.SCALE.WEEKDAY: this.current.setHours(0); - case TimeStep.SCALE.HOUR: this.current.setMinutes(0); - case TimeStep.SCALE.MINUTE: this.current.setSeconds(0); - case TimeStep.SCALE.SECOND: this.current.setMilliseconds(0); - //case TimeStep.SCALE.MILLISECOND: // nothing to do for milliseconds - } + CustomTime.prototype.redraw = function () { + if (this.options.showCustomTime) { + var parent = this.body.dom.backgroundVertical; + if (this.bar.parentNode != parent) { + // attach to the dom + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); + } + parent.appendChild(this.bar); + } - if (this.step != 1) { - // round down to the first minor value that is a multiple of the current step size - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; - case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; - case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; - case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; - default: break; + var x = this.body.util.toScreen(this.customTime); + + this.bar.style.left = x + 'px'; + this.bar.title = 'Time: ' + this.customTime; + } + else { + // remove the line from the DOM + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); } } + + return false; }; /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date + * Set custom time. + * @param {Date} time */ - TimeStep.prototype.hasNext = function () { - return (this.current.valueOf() <= this._end.valueOf()); + CustomTime.prototype.setCustomTime = function(time) { + this.customTime = new Date(time.valueOf()); + this.redraw(); }; /** - * Do the next step + * Retrieve the current custom time. + * @return {Date} customTime */ - TimeStep.prototype.next = function() { - var prev = this.current.valueOf(); - - // Two cases, needed to prevent issues with switching daylight savings - // (end of March and end of October) - if (this.current.getMonth() < 6) { - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: - - this.current = new Date(this.current.valueOf() + this.step); break; - case TimeStep.SCALE.SECOND: this.current = new Date(this.current.valueOf() + this.step * 1000); break; - case TimeStep.SCALE.MINUTE: this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; - case TimeStep.SCALE.HOUR: - this.current = new Date(this.current.valueOf() + this.step * 1000 * 60 * 60); - // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) - var h = this.current.getHours(); - this.current.setHours(h - (h % this.step)); - break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; - default: break; - } - } - else { - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: this.current = new Date(this.current.valueOf() + this.step); break; - case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() + this.step); break; - case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() + this.step); break; - case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() + this.step); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; - default: break; - } - } - - if (this.step != 1) { - // round down to the correct major value - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; - case TimeStep.SCALE.SECOND: if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; - case TimeStep.SCALE.MINUTE: if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; - case TimeStep.SCALE.HOUR: if(this.current.getHours() < this.step) this.current.setHours(0); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: if(this.current.getDate() < this.step+1) this.current.setDate(1); break; - case TimeStep.SCALE.MONTH: if(this.current.getMonth() < this.step) this.current.setMonth(0); break; - case TimeStep.SCALE.YEAR: break; // nothing to do for year - default: break; - } - } - - // safety mechanism: if current time is still unchanged, move to the end - if (this.current.valueOf() == prev) { - this.current = new Date(this._end.valueOf()); - } - }; - + CustomTime.prototype.getCustomTime = function() { + return new Date(this.customTime.valueOf()); + }; /** - * Get the current datetime - * @return {Date} current The current date + * Start moving horizontally + * @param {Event} event + * @private */ - TimeStep.prototype.getCurrent = function() { - return this.current; + CustomTime.prototype._onDragStart = function(event) { + this.eventParams.dragging = true; + this.eventParams.customTime = this.customTime; + + event.stopPropagation(); + event.preventDefault(); }; /** - * Set a custom scale. Autoscaling will be disabled. - * For example setScale(SCALE.MINUTES, 5) will result - * in minor steps of 5 minutes, and major steps of an hour. - * - * @param {TimeStep.SCALE} newScale - * A scale. Choose from SCALE.MILLISECOND, - * SCALE.SECOND, SCALE.MINUTE, SCALE.HOUR, - * SCALE.WEEKDAY, SCALE.DAY, SCALE.MONTH, - * SCALE.YEAR. - * @param {Number} newStep A step size, by default 1. Choose for - * example 1, 2, 5, or 10. + * Perform moving operating. + * @param {Event} event + * @private */ - TimeStep.prototype.setScale = function(newScale, newStep) { - this.scale = newScale; + CustomTime.prototype._onDrag = function (event) { + if (!this.eventParams.dragging) return; - if (newStep > 0) { - this.step = newStep; - } + var deltaX = event.gesture.deltaX, + x = this.body.util.toScreen(this.eventParams.customTime) + deltaX, + time = this.body.util.toTime(x); - this.autoScale = false; + this.setCustomTime(time); + + // fire a timechange event + this.body.emitter.emit('timechange', { + time: new Date(this.customTime.valueOf()) + }); + + event.stopPropagation(); + event.preventDefault(); }; /** - * Enable or disable autoscaling - * @param {boolean} enable If true, autoascaling is set true + * Stop moving operating. + * @param {event} event + * @private */ - TimeStep.prototype.setAutoScale = function (enable) { - this.autoScale = enable; + CustomTime.prototype._onDragEnd = function (event) { + if (!this.eventParams.dragging) return; + + // fire a timechanged event + this.body.emitter.emit('timechanged', { + time: new Date(this.customTime.valueOf()) + }); + + event.stopPropagation(); + event.preventDefault(); }; + module.exports = CustomTime; - /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds - */ - TimeStep.prototype.setMinimumStep = function(minimumStep) { - if (minimumStep == undefined) { - return; - } - var stepYear = (1000 * 60 * 60 * 24 * 30 * 12); - var stepMonth = (1000 * 60 * 60 * 24 * 30); - var stepDay = (1000 * 60 * 60 * 24); - var stepHour = (1000 * 60 * 60); - var stepMinute = (1000 * 60); - var stepSecond = (1000); - var stepMillisecond= (1); +/***/ }, +/* 21 */ +/***/ function(module, exports, __webpack_require__) { - // find the smallest step that is larger than the provided minimumStep - if (stepYear*1000 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1000;} - if (stepYear*500 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 500;} - if (stepYear*100 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 100;} - if (stepYear*50 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 50;} - if (stepYear*10 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 10;} - if (stepYear*5 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 5;} - if (stepYear > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1;} - if (stepMonth*3 > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 3;} - if (stepMonth > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 1;} - if (stepDay*5 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 5;} - if (stepDay*2 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 2;} - if (stepDay > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 1;} - if (stepDay/2 > minimumStep) {this.scale = TimeStep.SCALE.WEEKDAY; this.step = 1;} - if (stepHour*4 > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 4;} - if (stepHour > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 1;} - if (stepMinute*15 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 15;} - if (stepMinute*10 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 10;} - if (stepMinute*5 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 5;} - if (stepMinute > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 1;} - if (stepSecond*15 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 15;} - if (stepSecond*10 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 10;} - if (stepSecond*5 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 5;} - if (stepSecond > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 1;} - if (stepMillisecond*200 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 200;} - if (stepMillisecond*100 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 100;} - if (stepMillisecond*50 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 50;} - if (stepMillisecond*10 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 10;} - if (stepMillisecond*5 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 5;} - if (stepMillisecond > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 1;} - }; + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(2); + var Component = __webpack_require__(18); + var DataStep = __webpack_require__(14); /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate + * A horizontal time axis + * @param {Object} [options] See DataAxis.setOptions for the available + * options. + * @constructor DataAxis + * @extends Component + * @param body */ - TimeStep.prototype.snap = function(date) { - var clone = new Date(date.valueOf()); + function DataAxis (body, options, svg) { + this.id = util.randomUUID(); + this.body = body; - if (this.scale == TimeStep.SCALE.YEAR) { - var year = clone.getFullYear() + Math.round(clone.getMonth() / 12); - clone.setFullYear(Math.round(year / this.step) * this.step); - clone.setMonth(0); - clone.setDate(0); - clone.setHours(0); - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); - } - else if (this.scale == TimeStep.SCALE.MONTH) { - if (clone.getDate() > 15) { - clone.setDate(1); - clone.setMonth(clone.getMonth() + 1); - // important: first set Date to 1, after that change the month. - } - else { - clone.setDate(1); - } + this.defaultOptions = { + orientation: 'left', // supported: 'left', 'right' + showMinorLabels: true, + showMajorLabels: true, + icons: true, + majorLinesOffset: 7, + minorLinesOffset: 4, + labelOffsetX: 10, + labelOffsetY: 2, + iconWidth: 20, + width: '40px', + visible: true + }; - clone.setHours(0); - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); + this.linegraphSVG = svg; + this.props = {}; + this.DOMelements = { // dynamic elements + lines: {}, + labels: {} + }; + + this.dom = {}; + + this.range = {start:0, end:0}; + + this.options = util.extend({}, this.defaultOptions); + this.conversionFactor = 1; + + this.setOptions(options); + this.width = Number(('' + this.options.width).replace("px","")); + this.minWidth = this.width; + this.height = this.linegraphSVG.offsetHeight; + + this.stepPixels = 25; + this.stepPixelsForced = 25; + this.lineOffset = 0; + this.master = true; + this.svgElements = {}; + + + this.groups = {}; + this.amountOfGroups = 0; + + // create the HTML DOM + this._create(); + } + + DataAxis.prototype = new Component(); + + + + DataAxis.prototype.addGroup = function(label, graphOptions) { + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; } - else if (this.scale == TimeStep.SCALE.DAY) { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 5: - case 2: - clone.setHours(Math.round(clone.getHours() / 24) * 24); break; - default: - clone.setHours(Math.round(clone.getHours() / 12) * 12); break; - } - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); - } - else if (this.scale == TimeStep.SCALE.WEEKDAY) { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 5: - case 2: - clone.setHours(Math.round(clone.getHours() / 12) * 12); break; - default: - clone.setHours(Math.round(clone.getHours() / 6) * 6); break; - } - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); + this.amountOfGroups += 1; + }; + + DataAxis.prototype.updateGroup = function(label, graphOptions) { + this.groups[label] = graphOptions; + }; + + DataAxis.prototype.removeGroup = function(label) { + if (this.groups.hasOwnProperty(label)) { + delete this.groups[label]; + this.amountOfGroups -= 1; } - else if (this.scale == TimeStep.SCALE.HOUR) { - switch (this.step) { - case 4: - clone.setMinutes(Math.round(clone.getMinutes() / 60) * 60); break; - default: - clone.setMinutes(Math.round(clone.getMinutes() / 30) * 30); break; - } - clone.setSeconds(0); - clone.setMilliseconds(0); - } else if (this.scale == TimeStep.SCALE.MINUTE) { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 15: - case 10: - clone.setMinutes(Math.round(clone.getMinutes() / 5) * 5); - clone.setSeconds(0); - break; - case 5: - clone.setSeconds(Math.round(clone.getSeconds() / 60) * 60); break; - default: - clone.setSeconds(Math.round(clone.getSeconds() / 30) * 30); break; + }; + + + DataAxis.prototype.setOptions = function (options) { + if (options) { + var redraw = false; + if (this.options.orientation != options.orientation && options.orientation !== undefined) { + redraw = true; } - clone.setMilliseconds(0); - } - else if (this.scale == TimeStep.SCALE.SECOND) { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 15: - case 10: - clone.setSeconds(Math.round(clone.getSeconds() / 5) * 5); - clone.setMilliseconds(0); - break; - case 5: - clone.setMilliseconds(Math.round(clone.getMilliseconds() / 1000) * 1000); break; - default: - clone.setMilliseconds(Math.round(clone.getMilliseconds() / 500) * 500); break; + var fields = [ + 'orientation', + 'showMinorLabels', + 'showMajorLabels', + 'icons', + 'majorLinesOffset', + 'minorLinesOffset', + 'labelOffsetX', + 'labelOffsetY', + 'iconWidth', + 'width', + 'visible']; + util.selectiveExtend(fields, this.options, options); + + this.minWidth = Number(('' + this.options.width).replace("px","")); + + if (redraw == true && this.dom.frame) { + this.hide(); + this.show(); } } - else if (this.scale == TimeStep.SCALE.MILLISECOND) { - var step = this.step > 5 ? this.step / 2 : 1; - clone.setMilliseconds(Math.round(clone.getMilliseconds() / step) * step); - } - - return clone; }; + /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. + * Create the HTML DOM for the DataAxis */ - TimeStep.prototype.isMajor = function() { - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: - return (this.current.getMilliseconds() == 0); - case TimeStep.SCALE.SECOND: - return (this.current.getSeconds() == 0); - case TimeStep.SCALE.MINUTE: - return (this.current.getHours() == 0) && (this.current.getMinutes() == 0); - // Note: this is no bug. Major label is equal for both minute and hour scale - case TimeStep.SCALE.HOUR: - return (this.current.getHours() == 0); - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: - return (this.current.getDate() == 1); - case TimeStep.SCALE.MONTH: - return (this.current.getMonth() == 0); - case TimeStep.SCALE.YEAR: - return false; - default: - return false; - } + DataAxis.prototype._create = function() { + this.dom.frame = document.createElement('div'); + this.dom.frame.style.width = this.options.width; + this.dom.frame.style.height = this.height; + + this.dom.lineContainer = document.createElement('div'); + this.dom.lineContainer.style.width = '100%'; + this.dom.lineContainer.style.height = this.height; + + // create svg element for graph drawing. + this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.svg.style.position = "absolute"; + this.svg.style.top = '0px'; + this.svg.style.height = '100%'; + this.svg.style.width = '100%'; + this.svg.style.display = "block"; + this.dom.frame.appendChild(this.svg); }; + DataAxis.prototype._redrawGroupIcons = function () { + DOMutil.prepareElements(this.svgElements); - /** - * Returns formatted text for the minor axislabel, depending on the current - * date and the scale. For example when scale is MINUTE, the current time is - * formatted as "hh:mm". - * @param {Date} [date] custom date. if not provided, current date is taken - */ - TimeStep.prototype.getLabelMinor = function(date) { - if (date == undefined) { - date = this.current; + var x; + var iconWidth = this.options.iconWidth; + var iconHeight = 15; + var iconOffset = 4; + var y = iconOffset + 0.5 * iconHeight; + + if (this.options.orientation == 'left') { + x = iconOffset; + } + else { + x = this.width - iconWidth - iconOffset; } - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: return moment(date).format('SSS'); - case TimeStep.SCALE.SECOND: return moment(date).format('s'); - case TimeStep.SCALE.MINUTE: return moment(date).format('HH:mm'); - case TimeStep.SCALE.HOUR: return moment(date).format('HH:mm'); - case TimeStep.SCALE.WEEKDAY: return moment(date).format('ddd D'); - case TimeStep.SCALE.DAY: return moment(date).format('D'); - case TimeStep.SCALE.MONTH: return moment(date).format('MMM'); - case TimeStep.SCALE.YEAR: return moment(date).format('YYYY'); - default: return ''; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true) { + this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); + y += iconHeight + iconOffset; + } + } } - }; + DOMutil.cleanupElements(this.svgElements); + }; /** - * Returns formatted text for the major axis label, depending on the current - * date and the scale. For example when scale is MINUTE, the major scale is - * hours, and the hour will be formatted as "hh". - * @param {Date} [date] custom date. if not provided, current date is taken + * Create the HTML DOM for the DataAxis */ - TimeStep.prototype.getLabelMajor = function(date) { - if (date == undefined) { - date = this.current; + DataAxis.prototype.show = function() { + if (!this.dom.frame.parentNode) { + if (this.options.orientation == 'left') { + this.body.dom.left.appendChild(this.dom.frame); + } + else { + this.body.dom.right.appendChild(this.dom.frame); + } } - //noinspection FallthroughInSwitchStatementJS - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND:return moment(date).format('HH:mm:ss'); - case TimeStep.SCALE.SECOND: return moment(date).format('D MMMM HH:mm'); - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.HOUR: return moment(date).format('ddd D MMMM'); - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: return moment(date).format('MMMM YYYY'); - case TimeStep.SCALE.MONTH: return moment(date).format('YYYY'); - case TimeStep.SCALE.YEAR: return ''; - default: return ''; + if (!this.dom.lineContainer.parentNode) { + this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); } }; - module.exports = TimeStep; - - -/***/ }, -/* 18 */ -/***/ function(module, exports, __webpack_require__) { - /** - * Prototype for visual components - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] - * @param {Object} [options] + * Create the HTML DOM for the DataAxis */ - function Component (body, options) { - this.options = null; - this.props = null; - } + DataAxis.prototype.hide = function() { + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); + } - /** - * Set options for the component. The new options will be merged into the - * current options. - * @param {Object} options - */ - Component.prototype.setOptions = function(options) { - if (options) { - util.extend(this.options, options); + if (this.dom.lineContainer.parentNode) { + this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); } }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Set a range (start and end) + * @param end + * @param start + * @param end */ - Component.prototype.redraw = function() { - // should be implemented by the component - return false; + DataAxis.prototype.setRange = function (start, end) { + this.range.start = start; + this.range.end = end; }; /** - * Destroy the component. Cleanup DOM and event listeners + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - Component.prototype.destroy = function() { - // should be implemented by the component - }; + DataAxis.prototype.redraw = function () { + var changeCalled = false; + var activeGroups = 0; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true) { + activeGroups++; + } + } + } + if (this.amountOfGroups == 0 || activeGroups == 0) { + this.hide(); + } + else { + this.show(); + this.height = Number(this.linegraphSVG.style.height.replace("px","")); + // svg offsetheight did not work in firefox and explorer... - /** - * Test whether the component is resized since the last time _isResized() was - * called. - * @return {Boolean} Returns true if the component is resized - * @protected - */ - Component.prototype._isResized = function() { - var resized = (this.props._previousWidth !== this.props.width || - this.props._previousHeight !== this.props.height); + this.dom.lineContainer.style.height = this.height + 'px'; + this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0; - this.props._previousWidth = this.props.width; - this.props._previousHeight = this.props.height; + var props = this.props; + var frame = this.dom.frame; - return resized; - }; + // update classname + frame.className = 'dataaxis'; - module.exports = Component; + // calculate character width and height + this._calculateCharSize(); + var orientation = this.options.orientation; + var showMinorLabels = this.options.showMinorLabels; + var showMajorLabels = this.options.showMajorLabels; -/***/ }, -/* 19 */ -/***/ function(module, exports, __webpack_require__) { + // determine the width and height of the elemens for the axis + props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; + props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; - var util = __webpack_require__(1); - var Component = __webpack_require__(18); + props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset; + props.minorLineHeight = 1; + props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset; + props.majorLineHeight = 1; + + // take frame offline while updating (is almost twice as fast) + if (orientation == 'left') { + frame.style.top = '0'; + frame.style.left = '0'; + frame.style.bottom = ''; + frame.style.width = this.width + 'px'; + frame.style.height = this.height + "px"; + } + else { // right + frame.style.top = ''; + frame.style.bottom = '0'; + frame.style.left = '0'; + frame.style.width = this.width + 'px'; + frame.style.height = this.height + "px"; + } + changeCalled = this._redrawLabels(); + if (this.options.icons == true) { + this._redrawGroupIcons(); + } + } + return changeCalled; + }; /** - * A current time bar - * @param {{range: Range, dom: Object, domProps: Object}} body - * @param {Object} [options] Available parameters: - * {Boolean} [showCurrentTime] - * @constructor CurrentTime - * @extends Component + * Repaint major and minor text labels and vertical grid lines + * @private */ - function CurrentTime (body, options) { - this.body = body; + DataAxis.prototype._redrawLabels = function () { + DOMutil.prepareElements(this.DOMelements.lines); + DOMutil.prepareElements(this.DOMelements.labels); - // default options - this.defaultOptions = { - showCurrentTime: true - }; - this.options = util.extend({}, this.defaultOptions); + var orientation = this.options['orientation']; - this._create(); + // calculate range and step (step such that we have space for 7 characters per label) + var minimumStep = this.master ? this.props.majorCharHeight || 10 : this.stepPixelsForced; + var step = new DataStep(this.range.start, this.range.end, minimumStep, this.dom.frame.offsetHeight); + this.step = step; + step.first(); + // get the distance in pixels for a step + var stepPixels = this.dom.frame.offsetHeight / ((step.marginRange / step.step) + 1); + this.stepPixels = stepPixels; - this.setOptions(options); - } + var amountOfSteps = this.height / stepPixels; + var stepDifference = 0; - CurrentTime.prototype = new Component(); + if (this.master == false) { + stepPixels = this.stepPixelsForced; + stepDifference = Math.round((this.height / stepPixels) - amountOfSteps); + for (var i = 0; i < 0.5 * stepDifference; i++) { + step.previous(); + } + amountOfSteps = this.height / stepPixels; + } - /** - * Create the HTML DOM for the current time bar - * @private - */ - CurrentTime.prototype._create = function() { - var bar = document.createElement('div'); - bar.className = 'currenttime'; - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; - this.bar = bar; - }; + this.valueAtZero = step.marginEnd; + var marginStartPos = 0; - /** - * Destroy the CurrentTime bar - */ - CurrentTime.prototype.destroy = function () { - this.options.showCurrentTime = false; - this.redraw(); // will remove the bar from the DOM and stop refreshing + // do not draw the first label + var max = 1; + step.next(); - this.body = null; - }; + this.maxLabelSize = 0; + var y = 0; + while (max < Math.round(amountOfSteps)) { - /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {boolean} [showCurrentTime] - */ - CurrentTime.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showCurrentTime'], this.options, options); - } - }; + y = Math.round(max * stepPixels); + marginStartPos = max * stepPixels; + var isMajor = step.isMajor(); - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - CurrentTime.prototype.redraw = function() { - if (this.options.showCurrentTime) { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); + if (this.options['showMinorLabels'] && isMajor == false || this.master == false && this.options['showMinorLabels'] == true) { + this._redrawLabel(y - 2, step.getCurrent(), orientation, 'yAxis minor', this.props.minorCharHeight); + } - this.start(); + if (isMajor && this.options['showMajorLabels'] && this.master == true || + this.options['showMinorLabels'] == false && this.master == false && isMajor == true) { + if (y >= 0) { + this._redrawLabel(y - 2, step.getCurrent(), orientation, 'yAxis major', this.props.majorCharHeight); + } + this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); + } + else { + this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth); } - var now = new Date(); - var x = this.body.util.toScreen(now); + step.next(); + max++; + } - this.bar.style.left = x + 'px'; - this.bar.title = 'Current time: ' + now; + this.conversionFactor = marginStartPos/((amountOfSteps-1) * step.step); + + var offset = this.options.icons == true ? this.options.iconWidth + this.options.labelOffsetX + 15 : this.options.labelOffsetX + 15; + // this will resize the yAxis to accomodate the labels. + if (this.maxLabelSize > (this.width - offset) && this.options.visible == true) { + this.width = this.maxLabelSize + offset; + this.options.width = this.width + "px"; + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + this.redraw(); + return true; + } + // this will resize the yAxis if it is too big for the labels. + else if (this.maxLabelSize < (this.width - offset) && this.options.visible == true && this.width > this.minWidth) { + this.width = Math.max(this.minWidth,this.maxLabelSize + offset); + this.options.width = this.width + "px"; + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + this.redraw(); + return true; } else { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - this.stop(); + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + return false; } - - return false; }; /** - * Start auto refreshing the current time bar + * Create a label for the axis at position x + * @private + * @param y + * @param text + * @param orientation + * @param className + * @param characterHeight */ - CurrentTime.prototype.start = function() { - var me = this; - - function update () { - me.stop(); + DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) { + // reuse redundant label + var label = DOMutil.getDOMElement('div',this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift(); + label.className = className; + label.innerHTML = text; + if (orientation == 'left') { + label.style.left = '-' + this.options.labelOffsetX + 'px'; + label.style.textAlign = "right"; + } + else { + label.style.right = '-' + this.options.labelOffsetX + 'px'; + label.style.textAlign = "left"; + } - // determine interval to refresh - var scale = me.body.range.conversion(me.body.domProps.center.width).scale; - var interval = 1 / scale / 10; - if (interval < 30) interval = 30; - if (interval > 1000) interval = 1000; + label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px'; - me.redraw(); + text += ''; - // start a timer to adjust for the new time - me.currentTimeTimer = setTimeout(update, interval); + var largestWidth = Math.max(this.props.majorCharWidth,this.props.minorCharWidth); + if (this.maxLabelSize < text.length * largestWidth) { + this.maxLabelSize = text.length * largestWidth; } - - update(); - }; + }; /** - * Stop auto refreshing the current time bar + * Create a minor line for the axis at position y + * @param y + * @param orientation + * @param className + * @param offset + * @param width */ - CurrentTime.prototype.stop = function() { - if (this.currentTimeTimer !== undefined) { - clearTimeout(this.currentTimeTimer); - delete this.currentTimeTimer; + DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) { + if (this.master == true) { + var line = DOMutil.getDOMElement('div',this.DOMelements.lines, this.dom.lineContainer);//this.dom.redundant.lines.shift(); + line.className = className; + line.innerHTML = ''; + + if (orientation == 'left') { + line.style.left = (this.width - offset) + 'px'; + } + else { + line.style.right = (this.width - offset) + 'px'; + } + + line.style.width = width + 'px'; + line.style.top = y + 'px'; } }; - module.exports = CurrentTime; - -/***/ }, -/* 20 */ -/***/ function(module, exports, __webpack_require__) { + DataAxis.prototype.convertValue = function (value) { + var invertedValue = this.valueAtZero - value; + var convertedValue = invertedValue * this.conversionFactor; + return convertedValue; // the -2 is to compensate for the borders + }; - var Hammer = __webpack_require__(41); - var util = __webpack_require__(1); - var Component = __webpack_require__(18); /** - * A custom time bar - * @param {{range: Range, dom: Object}} body - * @param {Object} [options] Available parameters: - * {Boolean} [showCustomTime] - * @constructor CustomTime - * @extends Component + * Determine the size of text on the axis (both major and minor axis). + * The size is calculated only once and then cached in this.props. + * @private */ + DataAxis.prototype._calculateCharSize = function () { + // determine the char width and height on the minor axis + if (!('minorCharHeight' in this.props)) { + var textMinor = document.createTextNode('0'); + var measureCharMinor = document.createElement('DIV'); + measureCharMinor.className = 'yAxis minor measure'; + measureCharMinor.appendChild(textMinor); + this.dom.frame.appendChild(measureCharMinor); - function CustomTime (body, options) { - this.body = body; - - // default options - this.defaultOptions = { - showCustomTime: false - }; - this.options = util.extend({}, this.defaultOptions); - - this.customTime = new Date(); - this.eventParams = {}; // stores state parameters while dragging the bar + this.props.minorCharHeight = measureCharMinor.clientHeight; + this.props.minorCharWidth = measureCharMinor.clientWidth; - // create the DOM - this._create(); + this.dom.frame.removeChild(measureCharMinor); + } - this.setOptions(options); - } + if (!('majorCharHeight' in this.props)) { + var textMajor = document.createTextNode('0'); + var measureCharMajor = document.createElement('DIV'); + measureCharMajor.className = 'yAxis major measure'; + measureCharMajor.appendChild(textMajor); + this.dom.frame.appendChild(measureCharMajor); - CustomTime.prototype = new Component(); + this.props.majorCharHeight = measureCharMajor.clientHeight; + this.props.majorCharWidth = measureCharMajor.clientWidth; - /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {boolean} [showCustomTime] - */ - CustomTime.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showCustomTime'], this.options, options); + this.dom.frame.removeChild(measureCharMajor); } }; /** - * Create the DOM for the custom time - * @private + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate */ - CustomTime.prototype._create = function() { - var bar = document.createElement('div'); - bar.className = 'customtime'; - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; - this.bar = bar; - - var drag = document.createElement('div'); - drag.style.position = 'relative'; - drag.style.top = '0px'; - drag.style.left = '-10px'; - drag.style.height = '100%'; - drag.style.width = '20px'; - bar.appendChild(drag); - - // attach event listeners - this.hammer = Hammer(bar, { - prevent_default: true - }); - this.hammer.on('dragstart', this._onDragStart.bind(this)); - this.hammer.on('drag', this._onDrag.bind(this)); - this.hammer.on('dragend', this._onDragEnd.bind(this)); + DataAxis.prototype.snap = function(date) { + return this.step.snap(date); }; - /** - * Destroy the CustomTime bar - */ - CustomTime.prototype.destroy = function () { - this.options.showCustomTime = false; - this.redraw(); // will remove the bar from the DOM + module.exports = DataAxis; - this.hammer.enable(false); - this.hammer = null; - this.body = null; - }; +/***/ }, +/* 22 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(2); /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * @constructor Group + * @param {Number | String} groupId + * @param {Object} data + * @param {ItemSet} itemSet */ - CustomTime.prototype.redraw = function () { - if (this.options.showCustomTime) { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); - } - - var x = this.body.util.toScreen(this.customTime); + function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) { + this.id = groupId; + var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom'] + this.options = util.selectiveBridgeObject(fields,options); + this.usingDefaultStyle = group.className === undefined; + this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; + this.zeroPosition = 0; + this.update(group); + if (this.usingDefaultStyle == true) { + this.groupsUsingDefaultStyles[0] += 1; + } + this.itemsData = []; + this.visible = group.visible === undefined ? true : group.visible; + } - this.bar.style.left = x + 'px'; - this.bar.title = 'Time: ' + this.customTime; + GraphGroup.prototype.setItems = function(items) { + if (items != null) { + this.itemsData = items; + if (this.options.sort == true) { + this.itemsData.sort(function (a,b) {return a.x - b.x;}) + } } else { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } + this.itemsData = []; } - - return false; }; - /** - * Set custom time. - * @param {Date} time - */ - CustomTime.prototype.setCustomTime = function(time) { - this.customTime = new Date(time.valueOf()); - this.redraw(); + GraphGroup.prototype.setZeroPosition = function(pos) { + this.zeroPosition = pos; }; - /** - * Retrieve the current custom time. - * @return {Date} customTime - */ - CustomTime.prototype.getCustomTime = function() { - return new Date(this.customTime.valueOf()); - }; + GraphGroup.prototype.setOptions = function(options) { + if (options !== undefined) { + var fields = ['sampling','style','sort','yAxisOrientation','barChart']; + util.selectiveDeepExtend(fields, this.options, options); - /** - * Start moving horizontally - * @param {Event} event - * @private - */ - CustomTime.prototype._onDragStart = function(event) { - this.eventParams.dragging = true; - this.eventParams.customTime = this.customTime; + util.mergeOptions(this.options, options,'catmullRom'); + util.mergeOptions(this.options, options,'drawPoints'); + util.mergeOptions(this.options, options,'shaded'); - event.stopPropagation(); - event.preventDefault(); + if (options.catmullRom) { + if (typeof options.catmullRom == 'object') { + if (options.catmullRom.parametrization) { + if (options.catmullRom.parametrization == 'uniform') { + this.options.catmullRom.alpha = 0; + } + else if (options.catmullRom.parametrization == 'chordal') { + this.options.catmullRom.alpha = 1.0; + } + else { + this.options.catmullRom.parametrization = 'centripetal'; + this.options.catmullRom.alpha = 0.5; + } + } + } + } + } }; - /** - * Perform moving operating. - * @param {Event} event - * @private - */ - CustomTime.prototype._onDrag = function (event) { - if (!this.eventParams.dragging) return; + GraphGroup.prototype.update = function(group) { + this.group = group; + this.content = group.content || 'graph'; + this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10; + this.visible = group.visible === undefined ? true : group.visible; + this.setOptions(group.options); + }; - var deltaX = event.gesture.deltaX, - x = this.body.util.toScreen(this.eventParams.customTime) + deltaX, - time = this.body.util.toTime(x); + GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) { + var fillHeight = iconHeight * 0.5; + var path, fillPath; - this.setCustomTime(time); + var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer); + outline.setAttributeNS(null, "x", x); + outline.setAttributeNS(null, "y", y - fillHeight); + outline.setAttributeNS(null, "width", iconWidth); + outline.setAttributeNS(null, "height", 2*fillHeight); + outline.setAttributeNS(null, "class", "outline"); - // fire a timechange event - this.body.emitter.emit('timechange', { - time: new Date(this.customTime.valueOf()) - }); + if (this.options.style == 'line') { + path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); + path.setAttributeNS(null, "class", this.className); + path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+""); + if (this.options.shaded.enabled == true) { + fillPath = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); + if (this.options.shaded.orientation == 'top') { + fillPath.setAttributeNS(null, "d", "M"+x+", " + (y - fillHeight) + + "L"+x+","+y+" L"+ (x + iconWidth) + ","+y+" L"+ (x + iconWidth) + "," + (y - fillHeight)); + } + else { + fillPath.setAttributeNS(null, "d", "M"+x+","+y+" " + + "L"+x+"," + (y + fillHeight) + " " + + "L"+ (x + iconWidth) + "," + (y + fillHeight) + + "L"+ (x + iconWidth) + ","+y); + } + fillPath.setAttributeNS(null, "class", this.className + " iconFill"); + } - event.stopPropagation(); - event.preventDefault(); + if (this.options.drawPoints.enabled == true) { + DOMutil.drawPoint(x + 0.5 * iconWidth,y, this, JSONcontainer, SVGcontainer); + } + } + else { + var barWidth = Math.round(0.3 * iconWidth); + var bar1Height = Math.round(0.4 * iconHeight); + var bar2Height = Math.round(0.75 * iconHeight); + + var offset = Math.round((iconWidth - (2 * barWidth))/3); + + DOMutil.drawBar(x + 0.5*barWidth + offset , y + fillHeight - bar1Height - 1, barWidth, bar1Height, this.className + ' bar', JSONcontainer, SVGcontainer); + DOMutil.drawBar(x + 1.5*barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, this.className + ' bar', JSONcontainer, SVGcontainer); + } }; /** - * Stop moving operating. - * @param {event} event - * @private + * + * @param iconWidth + * @param iconHeight + * @returns {{icon: HTMLElement, label: (group.content|*|string), orientation: (.options.yAxisOrientation|*)}} */ - CustomTime.prototype._onDragEnd = function (event) { - if (!this.eventParams.dragging) return; - - // fire a timechanged event - this.body.emitter.emit('timechanged', { - time: new Date(this.customTime.valueOf()) - }); - - event.stopPropagation(); - event.preventDefault(); - }; + GraphGroup.prototype.getLegend = function(iconWidth, iconHeight) { + var svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.drawIcon(0,0.5*iconHeight,[],svg,iconWidth,iconHeight); + return {icon: svg, label: this.content, orientation:this.options.yAxisOrientation}; + } - module.exports = CustomTime; + module.exports = GraphGroup; /***/ }, -/* 21 */ +/* 23 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var Component = __webpack_require__(18); - var DataStep = __webpack_require__(14); + var stack = __webpack_require__(16); + var ItemRange = __webpack_require__(31); /** - * A horizontal time axis - * @param {Object} [options] See DataAxis.setOptions for the available - * options. - * @constructor DataAxis - * @extends Component - * @param body + * @constructor Group + * @param {Number | String} groupId + * @param {Object} data + * @param {ItemSet} itemSet */ - function DataAxis (body, options, svg) { - this.id = util.randomUUID(); - this.body = body; - - this.defaultOptions = { - orientation: 'left', // supported: 'left', 'right' - showMinorLabels: true, - showMajorLabels: true, - icons: true, - majorLinesOffset: 7, - minorLinesOffset: 4, - labelOffsetX: 10, - labelOffsetY: 2, - iconWidth: 20, - width: '40px', - visible: true - }; + function Group (groupId, data, itemSet) { + this.groupId = groupId; - this.linegraphSVG = svg; - this.props = {}; - this.DOMelements = { // dynamic elements - lines: {}, - labels: {} - }; + this.itemSet = itemSet; this.dom = {}; + this.props = { + label: { + width: 0, + height: 0 + } + }; + this.className = null; - this.range = {start:0, end:0}; - - this.options = util.extend({}, this.defaultOptions); - this.conversionFactor = 1; - - this.setOptions(options); - this.width = Number(('' + this.options.width).replace("px","")); - this.minWidth = this.width; - this.height = this.linegraphSVG.offsetHeight; - - this.stepPixels = 25; - this.stepPixelsForced = 25; - this.lineOffset = 0; - this.master = true; - this.svgElements = {}; - - - this.groups = {}; - this.amountOfGroups = 0; + this.items = {}; // items filtered by groupId of this group + this.visibleItems = []; // items currently visible in window + this.orderedItems = { // items sorted by start and by end + byStart: [], + byEnd: [] + }; - // create the HTML DOM this._create(); + + this.setData(data); } - DataAxis.prototype = new Component(); + /** + * Create DOM elements for the group + * @private + */ + Group.prototype._create = function() { + var label = document.createElement('div'); + label.className = 'vlabel'; + this.dom.label = label; + var inner = document.createElement('div'); + inner.className = 'inner'; + label.appendChild(inner); + this.dom.inner = inner; + var foreground = document.createElement('div'); + foreground.className = 'group'; + foreground['timeline-group'] = this; + this.dom.foreground = foreground; - DataAxis.prototype.addGroup = function(label, graphOptions) { - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; - } - this.amountOfGroups += 1; - }; + this.dom.background = document.createElement('div'); + this.dom.background.className = 'group'; - DataAxis.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; + this.dom.axis = document.createElement('div'); + this.dom.axis.className = 'group'; - DataAxis.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; - } + // create a hidden marker to detect when the Timelines container is attached + // to the DOM, or the style of a parent of the Timeline is changed from + // display:none is changed to visible. + this.dom.marker = document.createElement('div'); + this.dom.marker.style.visibility = 'hidden'; + this.dom.marker.innerHTML = '?'; + this.dom.background.appendChild(this.dom.marker); }; + /** + * Set the group data for this group + * @param {Object} data Group data, can contain properties content and className + */ + Group.prototype.setData = function(data) { + // update contents + var content = data && data.content; + if (content instanceof Element) { + this.dom.inner.appendChild(content); + } + else if (content !== undefined && content !== null) { + this.dom.inner.innerHTML = content; + } + else { + this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null + } - DataAxis.prototype.setOptions = function (options) { - if (options) { - var redraw = false; - if (this.options.orientation != options.orientation && options.orientation !== undefined) { - redraw = true; - } - var fields = [ - 'orientation', - 'showMinorLabels', - 'showMajorLabels', - 'icons', - 'majorLinesOffset', - 'minorLinesOffset', - 'labelOffsetX', - 'labelOffsetY', - 'iconWidth', - 'width', - 'visible']; - util.selectiveExtend(fields, this.options, options); + // update title + this.dom.label.title = data && data.title || ''; - this.minWidth = Number(('' + this.options.width).replace("px","")); + if (!this.dom.inner.firstChild) { + util.addClassName(this.dom.inner, 'hidden'); + } + else { + util.removeClassName(this.dom.inner, 'hidden'); + } - if (redraw == true && this.dom.frame) { - this.hide(); - this.show(); + // update className + var className = data && data.className || null; + if (className != this.className) { + if (this.className) { + util.removeClassName(this.dom.label, className); + util.removeClassName(this.dom.foreground, className); + util.removeClassName(this.dom.background, className); + util.removeClassName(this.dom.axis, className); } + util.addClassName(this.dom.label, className); + util.addClassName(this.dom.foreground, className); + util.addClassName(this.dom.background, className); + util.addClassName(this.dom.axis, className); } }; - /** - * Create the HTML DOM for the DataAxis + * Get the width of the group label + * @return {number} width */ - DataAxis.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.style.width = this.options.width; - this.dom.frame.style.height = this.height; + Group.prototype.getLabelWidth = function() { + return this.props.label.width; + }; - this.dom.lineContainer = document.createElement('div'); - this.dom.lineContainer.style.width = '100%'; - this.dom.lineContainer.style.height = this.height; - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = "absolute"; - this.svg.style.top = '0px'; - this.svg.style.height = '100%'; - this.svg.style.width = '100%'; - this.svg.style.display = "block"; - this.dom.frame.appendChild(this.svg); - }; + /** + * Repaint this group + * @param {{start: number, end: number}} range + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @param {boolean} [restack=false] Force restacking of all items + * @return {boolean} Returns true if the group is resized + */ + Group.prototype.redraw = function(range, margin, restack) { + var resized = false; - DataAxis.prototype._redrawGroupIcons = function () { - DOMutil.prepareElements(this.svgElements); + this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); - var x; - var iconWidth = this.options.iconWidth; - var iconHeight = 15; - var iconOffset = 4; - var y = iconOffset + 0.5 * iconHeight; + // force recalculation of the height of the items when the marker height changed + // (due to the Timeline being attached to the DOM or changed from display:none to visible) + var markerHeight = this.dom.marker.clientHeight; + if (markerHeight != this.lastMarkerHeight) { + this.lastMarkerHeight = markerHeight; - if (this.options.orientation == 'left') { - x = iconOffset; + util.forEach(this.items, function (item) { + item.dirty = true; + if (item.displayed) item.redraw(); + }); + + restack = true; } - else { - x = this.width - iconWidth - iconOffset; + + // reposition visible items vertically + if (this.itemSet.options.stack) { // TODO: ugly way to access options... + stack.stack(this.visibleItems, margin, restack); + } + else { // no stacking + stack.nostack(this.visibleItems, margin); } - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + iconOffset; + // recalculate the height of the group + var height; + var visibleItems = this.visibleItems; + if (visibleItems.length) { + var min = visibleItems[0].top; + var max = visibleItems[0].top + visibleItems[0].height; + util.forEach(visibleItems, function (item) { + min = Math.min(min, item.top); + max = Math.max(max, (item.top + item.height)); + }); + if (min > margin.axis) { + // there is an empty gap between the lowest item and the axis + var offset = min - margin.axis; + max -= offset; + util.forEach(visibleItems, function (item) { + item.top -= offset; + }); } + height = max + margin.item.vertical / 2; + } + else { + height = margin.axis + margin.item.vertical; } + height = Math.max(height, this.props.label.height); - DOMutil.cleanupElements(this.svgElements); + // calculate actual size and position + var foreground = this.dom.foreground; + this.top = foreground.offsetTop; + this.left = foreground.offsetLeft; + this.width = foreground.offsetWidth; + resized = util.updateProperty(this, 'height', height) || resized; + + // recalculate size of label + resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; + resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; + + // apply new height + this.dom.background.style.height = height + 'px'; + this.dom.foreground.style.height = height + 'px'; + this.dom.label.style.height = height + 'px'; + + // update vertical position of items after they are re-stacked and the height of the group is calculated + for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { + var item = this.visibleItems[i]; + item.repositionY(); + } + + return resized; }; /** - * Create the HTML DOM for the DataAxis + * Show this group: attach to the DOM */ - DataAxis.prototype.show = function() { - if (!this.dom.frame.parentNode) { - if (this.options.orientation == 'left') { - this.body.dom.left.appendChild(this.dom.frame); - } - else { - this.body.dom.right.appendChild(this.dom.frame); - } + Group.prototype.show = function() { + if (!this.dom.label.parentNode) { + this.itemSet.dom.labelSet.appendChild(this.dom.label); } - if (!this.dom.lineContainer.parentNode) { - this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); + if (!this.dom.foreground.parentNode) { + this.itemSet.dom.foreground.appendChild(this.dom.foreground); + } + + if (!this.dom.background.parentNode) { + this.itemSet.dom.background.appendChild(this.dom.background); + } + + if (!this.dom.axis.parentNode) { + this.itemSet.dom.axis.appendChild(this.dom.axis); } }; /** - * Create the HTML DOM for the DataAxis + * Hide this group: remove from the DOM */ - DataAxis.prototype.hide = function() { - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); + Group.prototype.hide = function() { + var label = this.dom.label; + if (label.parentNode) { + label.parentNode.removeChild(label); } - if (this.dom.lineContainer.parentNode) { - this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); + var foreground = this.dom.foreground; + if (foreground.parentNode) { + foreground.parentNode.removeChild(foreground); + } + + var background = this.dom.background; + if (background.parentNode) { + background.parentNode.removeChild(background); + } + + var axis = this.dom.axis; + if (axis.parentNode) { + axis.parentNode.removeChild(axis); } }; /** - * Set a range (start and end) - * @param end - * @param start - * @param end + * Add an item to the group + * @param {Item} item */ - DataAxis.prototype.setRange = function (start, end) { - this.range.start = start; - this.range.end = end; + Group.prototype.add = function(item) { + this.items[item.id] = item; + item.setParent(this); + + if (this.visibleItems.indexOf(item) == -1) { + var range = this.itemSet.body.range; // TODO: not nice accessing the range like this + this._checkIfVisible(item, this.visibleItems, range); + } }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Remove an item from the group + * @param {Item} item */ - DataAxis.prototype.redraw = function () { - var changeCalled = false; - if (this.amountOfGroups == 0) { - this.hide(); - } - else { - this.show(); - this.height = Number(this.linegraphSVG.style.height.replace("px","")); - // svg offsetheight did not work in firefox and explorer... - - this.dom.lineContainer.style.height = this.height + 'px'; - this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0; + Group.prototype.remove = function(item) { + delete this.items[item.id]; + item.setParent(this.itemSet); - var props = this.props; - var frame = this.dom.frame; + // remove from visible items + var index = this.visibleItems.indexOf(item); + if (index != -1) this.visibleItems.splice(index, 1); - // update classname - frame.className = 'dataaxis'; + // TODO: also remove from ordered items? + }; - // calculate character width and height - this._calculateCharSize(); + /** + * Remove an item from the corresponding DataSet + * @param {Item} item + */ + Group.prototype.removeFromDataSet = function(item) { + this.itemSet.removeItem(item.id); + }; - var orientation = this.options.orientation; - var showMinorLabels = this.options.showMinorLabels; - var showMajorLabels = this.options.showMajorLabels; + /** + * Reorder the items + */ + Group.prototype.order = function() { + var array = util.toArray(this.items); + this.orderedItems.byStart = array; + this.orderedItems.byEnd = this._constructByEndArray(array); - // determine the width and height of the elemens for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + stack.orderByStart(this.orderedItems.byStart); + stack.orderByEnd(this.orderedItems.byEnd); + }; - props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset; - props.minorLineHeight = 1; - props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset; - props.majorLineHeight = 1; + /** + * Create an array containing all items being a range (having an end date) + * @param {Item[]} array + * @returns {ItemRange[]} + * @private + */ + Group.prototype._constructByEndArray = function(array) { + var endArray = []; - // take frame offline while updating (is almost twice as fast) - if (orientation == 'left') { - frame.style.top = '0'; - frame.style.left = '0'; - frame.style.bottom = ''; - frame.style.width = this.width + 'px'; - frame.style.height = this.height + "px"; - } - else { // right - frame.style.top = ''; - frame.style.bottom = '0'; - frame.style.left = '0'; - frame.style.width = this.width + 'px'; - frame.style.height = this.height + "px"; - } - changeCalled = this._redrawLabels(); - if (this.options.icons == true) { - this._redrawGroupIcons(); + for (var i = 0; i < array.length; i++) { + if (array[i] instanceof ItemRange) { + endArray.push(array[i]); } } - return changeCalled; + return endArray; }; /** - * Repaint major and minor text labels and vertical grid lines + * Update the visible items + * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date + * @param {Item[]} visibleItems The previously visible items. + * @param {{start: number, end: number}} range Visible range + * @return {Item[]} visibleItems The new visible items. * @private */ - DataAxis.prototype._redrawLabels = function () { - DOMutil.prepareElements(this.DOMelements); - - var orientation = this.options['orientation']; - - // calculate range and step (step such that we have space for 7 characters per label) - var minimumStep = this.master ? this.props.majorCharHeight || 10 : this.stepPixelsForced; - var step = new DataStep(this.range.start, this.range.end, minimumStep, this.dom.frame.offsetHeight); - this.step = step; - step.first(); - - // get the distance in pixels for a step - var stepPixels = this.dom.frame.offsetHeight / ((step.marginRange / step.step) + 1); - this.stepPixels = stepPixels; - - var amountOfSteps = this.height / stepPixels; - var stepDifference = 0; + Group.prototype._updateVisibleItems = function(orderedItems, visibleItems, range) { + var initialPosByStart, + newVisibleItems = [], + i; - if (this.master == false) { - stepPixels = this.stepPixelsForced; - stepDifference = Math.round((this.height / stepPixels) - amountOfSteps); - for (var i = 0; i < 0.5 * stepDifference; i++) { - step.previous(); + // first check if the items that were in view previously are still in view. + // this handles the case for the ItemRange that is both before and after the current one. + if (visibleItems.length > 0) { + for (i = 0; i < visibleItems.length; i++) { + this._checkIfVisible(visibleItems[i], newVisibleItems, range); } - amountOfSteps = this.height / stepPixels; } + // If there were no visible items previously, use binarySearch to find a visible ItemPoint or ItemRange (based on startTime) + if (newVisibleItems.length == 0) { + initialPosByStart = util.binarySearch(orderedItems.byStart, range, 'data','start'); + } + else { + initialPosByStart = orderedItems.byStart.indexOf(newVisibleItems[0]); + } - this.valueAtZero = step.marginEnd; - var marginStartPos = 0; - - // do not draw the first label - var max = 1; - step.next(); - - this.maxLabelSize = 0; - var y = 0; - while (max < Math.round(amountOfSteps)) { - - y = Math.round(max * stepPixels); - marginStartPos = max * stepPixels; - var isMajor = step.isMajor(); + // use visible search to find a visible ItemRange (only based on endTime) + var initialPosByEnd = util.binarySearch(orderedItems.byEnd, range, 'data','end'); - if (this.options['showMinorLabels'] && isMajor == false || this.master == false && this.options['showMinorLabels'] == true) { - this._redrawLabel(y - 2, step.getCurrent(), orientation, 'yAxis minor', this.props.minorCharHeight); + // if we found a initial ID to use, trace it up and down until we meet an invisible item. + if (initialPosByStart != -1) { + for (i = initialPosByStart; i >= 0; i--) { + if (this._checkIfInvisible(orderedItems.byStart[i], newVisibleItems, range)) {break;} } + for (i = initialPosByStart + 1; i < orderedItems.byStart.length; i++) { + if (this._checkIfInvisible(orderedItems.byStart[i], newVisibleItems, range)) {break;} + } + } - if (isMajor && this.options['showMajorLabels'] && this.master == true || - this.options['showMinorLabels'] == false && this.master == false && isMajor == true) { - - if (y >= 0) { - this._redrawLabel(y - 2, step.getCurrent(), orientation, 'yAxis major', this.props.majorCharHeight); - } - this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); + // if we found a initial ID to use, trace it up and down until we meet an invisible item. + if (initialPosByEnd != -1) { + for (i = initialPosByEnd; i >= 0; i--) { + if (this._checkIfInvisible(orderedItems.byEnd[i], newVisibleItems, range)) {break;} } - else { - this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth); + for (i = initialPosByEnd + 1; i < orderedItems.byEnd.length; i++) { + if (this._checkIfInvisible(orderedItems.byEnd[i], newVisibleItems, range)) {break;} } - - step.next(); - max++; } - this.conversionFactor = marginStartPos/((amountOfSteps-1) * step.step); + return newVisibleItems; + }; - var offset = this.options.icons == true ? this.options.iconWidth + this.options.labelOffsetX + 15 : this.options.labelOffsetX + 15; - // this will resize the yAxis to accomodate the labels. - if (this.maxLabelSize > (this.width - offset) && this.options.visible == true) { - this.width = this.maxLabelSize + offset; - this.options.width = this.width + "px"; - DOMutil.cleanupElements(this.DOMelements); - this.redraw(); - return true; - } - // this will resize the yAxis if it is too big for the labels. - else if (this.maxLabelSize < (this.width - offset) && this.options.visible == true && this.width > this.minWidth) { - this.width = Math.max(this.minWidth,this.maxLabelSize + offset); - this.options.width = this.width + "px"; - DOMutil.cleanupElements(this.DOMelements); - this.redraw(); - return true; + + + /** + * this function checks if an item is invisible. If it is NOT we make it visible + * and add it to the global visible items. If it is, return true. + * + * @param {Item} item + * @param {Item[]} visibleItems + * @param {{start:number, end:number}} range + * @returns {boolean} + * @private + */ + Group.prototype._checkIfInvisible = function(item, visibleItems, range) { + if (item.isVisible(range)) { + if (!item.displayed) item.show(); + item.repositionX(); + if (visibleItems.indexOf(item) == -1) { + visibleItems.push(item); + } + return false; } else { - DOMutil.cleanupElements(this.DOMelements); - return false; + if (item.displayed) item.hide(); + return true; } }; /** - * Create a label for the axis at position x + * this function is very similar to the _checkIfInvisible() but it does not + * return booleans, hides the item if it should not be seen and always adds to + * the visibleItems. + * this one is for brute forcing and hiding. + * + * @param {Item} item + * @param {Array} visibleItems + * @param {{start:number, end:number}} range * @private - * @param y - * @param text - * @param orientation - * @param className - * @param characterHeight */ - DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) { - // reuse redundant label - var label = DOMutil.getDOMElement('div',this.DOMelements, this.dom.frame); //this.dom.redundant.labels.shift(); - label.className = className; - label.innerHTML = text; - - if (orientation == 'left') { - label.style.left = '-' + this.options.labelOffsetX + 'px'; - label.style.textAlign = "right"; + Group.prototype._checkIfVisible = function(item, visibleItems, range) { + if (item.isVisible(range)) { + if (!item.displayed) item.show(); + // reposition item horizontally + item.repositionX(); + visibleItems.push(item); } else { - label.style.right = '-' + this.options.labelOffsetX + 'px'; - label.style.textAlign = "left"; - } - - label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px'; - - text += ''; - - var largestWidth = Math.max(this.props.majorCharWidth,this.props.minorCharWidth); - if (this.maxLabelSize < text.length * largestWidth) { - this.maxLabelSize = text.length * largestWidth; + if (item.displayed) item.hide(); } }; - /** - * Create a minor line for the axis at position y - * @param y - * @param orientation - * @param className - * @param offset - * @param width - */ - DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) { - if (this.master == true) { - var line = DOMutil.getDOMElement('div',this.DOMelements, this.dom.lineContainer);//this.dom.redundant.lines.shift(); - line.className = className; - line.innerHTML = ''; + module.exports = Group; - if (orientation == 'left') { - line.style.left = (this.width - offset) + 'px'; - } - else { - line.style.right = (this.width - offset) + 'px'; - } - line.style.width = width + 'px'; - line.style.top = y + 'px'; - } - }; +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + var Hammer = __webpack_require__(41); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(3); + var DataView = __webpack_require__(4); + var Component = __webpack_require__(18); + var Group = __webpack_require__(23); + var ItemBox = __webpack_require__(28); + var ItemPoint = __webpack_require__(30); + var ItemRange = __webpack_require__(31); - DataAxis.prototype.convertValue = function (value) { - var invertedValue = this.valueAtZero - value; - var convertedValue = invertedValue * this.conversionFactor; - return convertedValue; // the -2 is to compensate for the borders - }; + var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items /** - * Determine the size of text on the axis (both major and minor axis). - * The size is calculated only once and then cached in this.props. - * @private + * An ItemSet holds a set of items and ranges which can be displayed in a + * range. The width is determined by the parent of the ItemSet, and the height + * is determined by the size of the items. + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body + * @param {Object} [options] See ItemSet.setOptions for the available options. + * @constructor ItemSet + * @extends Component */ - DataAxis.prototype._calculateCharSize = function () { - // determine the char width and height on the minor axis - if (!('minorCharHeight' in this.props)) { + function ItemSet(body, options) { + this.body = body; - var textMinor = document.createTextNode('0'); - var measureCharMinor = document.createElement('DIV'); - measureCharMinor.className = 'yAxis minor measure'; - measureCharMinor.appendChild(textMinor); - this.dom.frame.appendChild(measureCharMinor); + this.defaultOptions = { + type: null, // 'box', 'point', 'range' + orientation: 'bottom', // 'top' or 'bottom' + align: 'center', // alignment of box items + stack: true, + groupOrder: null, - this.props.minorCharHeight = measureCharMinor.clientHeight; - this.props.minorCharWidth = measureCharMinor.clientWidth; + selectable: true, + editable: { + updateTime: false, + updateGroup: false, + add: false, + remove: false + }, - this.dom.frame.removeChild(measureCharMinor); - } + onAdd: function (item, callback) { + callback(item); + }, + onUpdate: function (item, callback) { + callback(item); + }, + onMove: function (item, callback) { + callback(item); + }, + onRemove: function (item, callback) { + callback(item); + }, - if (!('majorCharHeight' in this.props)) { - var textMajor = document.createTextNode('0'); - var measureCharMajor = document.createElement('DIV'); - measureCharMajor.className = 'yAxis major measure'; - measureCharMajor.appendChild(textMajor); - this.dom.frame.appendChild(measureCharMajor); - - this.props.majorCharHeight = measureCharMajor.clientHeight; - this.props.majorCharWidth = measureCharMajor.clientWidth; + margin: { + item: { + horizontal: 10, + vertical: 10 + }, + axis: 20 + }, + padding: 5 + }; - this.dom.frame.removeChild(measureCharMajor); - } - }; + // options is shared by this ItemSet and all its items + this.options = util.extend({}, this.defaultOptions); - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate - */ - DataAxis.prototype.snap = function(date) { - return this.step.snap(date); - }; + // options for getting items from the DataSet with the correct type + this.itemOptions = { + type: {start: 'Date', end: 'Date'} + }; - module.exports = DataAxis; + this.conversion = { + toScreen: body.util.toScreen, + toTime: body.util.toTime + }; + this.dom = {}; + this.props = {}; + this.hammer = null; + var me = this; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet -/***/ }, -/* 22 */ -/***/ function(module, exports, __webpack_require__) { + // listeners for the DataSet of the items + this.itemListeners = { + 'add': function (event, params, senderId) { + me._onAdd(params.items); + }, + 'update': function (event, params, senderId) { + me._onUpdate(params.items); + }, + 'remove': function (event, params, senderId) { + me._onRemove(params.items); + } + }; - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); + // listeners for the DataSet of the groups + this.groupListeners = { + 'add': function (event, params, senderId) { + me._onAddGroups(params.items); + }, + 'update': function (event, params, senderId) { + me._onUpdateGroups(params.items); + }, + 'remove': function (event, params, senderId) { + me._onRemoveGroups(params.items); + } + }; - /** - * @constructor Group - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet - */ - function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) { - this.id = groupId; - var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom'] - this.options = util.selectiveBridgeObject(fields,options); - this.usingDefaultStyle = group.className === undefined; - this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; - this.zeroPosition = 0; - this.update(group); - if (this.usingDefaultStyle == true) { - this.groupsUsingDefaultStyles[0] += 1; - } - this.itemsData = []; - } + this.items = {}; // object with an Item for every data item + this.groups = {}; // Group object for every group + this.groupIds = []; - GraphGroup.prototype.setItems = function(items) { - if (items != null) { - this.itemsData = items; - if (this.options.sort == true) { - this.itemsData.sort(function (a,b) {return a.x - b.x;}) - } - } - else { - this.itemsData = []; - } - }; + this.selection = []; // list with the ids of all selected nodes + this.stackDirty = true; // if true, all items will be restacked on next redraw - GraphGroup.prototype.setZeroPosition = function(pos) { - this.zeroPosition = pos; - }; + this.touchParams = {}; // stores properties while dragging + // create the HTML DOM - GraphGroup.prototype.setOptions = function(options) { - if (options !== undefined) { - var fields = ['sampling','style','sort','yAxisOrientation','barChart']; - util.selectiveDeepExtend(fields, this.options, options); + this._create(); - util.mergeOptions(this.options, options,'catmullRom'); - util.mergeOptions(this.options, options,'drawPoints'); - util.mergeOptions(this.options, options,'shaded'); + this.setOptions(options); + } - if (options.catmullRom) { - if (typeof options.catmullRom == 'object') { - if (options.catmullRom.parametrization) { - if (options.catmullRom.parametrization == 'uniform') { - this.options.catmullRom.alpha = 0; - } - else if (options.catmullRom.parametrization == 'chordal') { - this.options.catmullRom.alpha = 1.0; - } - else { - this.options.catmullRom.parametrization = 'centripetal'; - this.options.catmullRom.alpha = 0.5; - } - } - } - } - } - }; + ItemSet.prototype = new Component(); - GraphGroup.prototype.update = function(group) { - this.group = group; - this.content = group.content || 'graph'; - this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10; - this.setOptions(group.options); + // available item types will be registered here + ItemSet.types = { + box: ItemBox, + range: ItemRange, + point: ItemPoint }; - GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) { - var fillHeight = iconHeight * 0.5; - var path, fillPath; + /** + * Create the HTML DOM for the ItemSet + */ + ItemSet.prototype._create = function(){ + var frame = document.createElement('div'); + frame.className = 'itemset'; + frame['timeline-itemset'] = this; + this.dom.frame = frame; - var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer); - outline.setAttributeNS(null, "x", x); - outline.setAttributeNS(null, "y", y - fillHeight); - outline.setAttributeNS(null, "width", iconWidth); - outline.setAttributeNS(null, "height", 2*fillHeight); - outline.setAttributeNS(null, "class", "outline"); + // create background panel + var background = document.createElement('div'); + background.className = 'background'; + frame.appendChild(background); + this.dom.background = background; - if (this.options.style == 'line') { - path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); - path.setAttributeNS(null, "class", this.className); - path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+""); - if (this.options.shaded.enabled == true) { - fillPath = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); - if (this.options.shaded.orientation == 'top') { - fillPath.setAttributeNS(null, "d", "M"+x+", " + (y - fillHeight) + - "L"+x+","+y+" L"+ (x + iconWidth) + ","+y+" L"+ (x + iconWidth) + "," + (y - fillHeight)); - } - else { - fillPath.setAttributeNS(null, "d", "M"+x+","+y+" " + - "L"+x+"," + (y + fillHeight) + " " + - "L"+ (x + iconWidth) + "," + (y + fillHeight) + - "L"+ (x + iconWidth) + ","+y); - } - fillPath.setAttributeNS(null, "class", this.className + " iconFill"); - } + // create foreground panel + var foreground = document.createElement('div'); + foreground.className = 'foreground'; + frame.appendChild(foreground); + this.dom.foreground = foreground; - if (this.options.drawPoints.enabled == true) { - DOMutil.drawPoint(x + 0.5 * iconWidth,y, this, JSONcontainer, SVGcontainer); - } - } - else { - var barWidth = Math.round(0.3 * iconWidth); - var bar1Height = Math.round(0.4 * iconHeight); - var bar2Height = Math.round(0.75 * iconHeight); + // create axis panel + var axis = document.createElement('div'); + axis.className = 'axis'; + this.dom.axis = axis; - var offset = Math.round((iconWidth - (2 * barWidth))/3); + // create labelset + var labelSet = document.createElement('div'); + labelSet.className = 'labelset'; + this.dom.labelSet = labelSet; - DOMutil.drawBar(x + 0.5*barWidth + offset , y + fillHeight - bar1Height - 1, barWidth, bar1Height, this.className + ' bar', JSONcontainer, SVGcontainer); - DOMutil.drawBar(x + 1.5*barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, this.className + ' bar', JSONcontainer, SVGcontainer); - } - }; + // create ungrouped Group + this._updateUngrouped(); - module.exports = GraphGroup; + // attach event listeners + // Note: we bind to the centerContainer for the case where the height + // of the center container is larger than of the ItemSet, so we + // can click in the empty area to create a new item or deselect an item. + this.hammer = Hammer(this.body.dom.centerContainer, { + prevent_default: true + }); + // drag items when selected + this.hammer.on('touch', this._onTouch.bind(this)); + this.hammer.on('dragstart', this._onDragStart.bind(this)); + this.hammer.on('drag', this._onDrag.bind(this)); + this.hammer.on('dragend', this._onDragEnd.bind(this)); -/***/ }, -/* 23 */ -/***/ function(module, exports, __webpack_require__) { + // single select (or unselect) when tapping an item + this.hammer.on('tap', this._onSelectItem.bind(this)); - var util = __webpack_require__(1); - var stack = __webpack_require__(16); - var ItemRange = __webpack_require__(31); + // multi select when holding mouse/touch, or on ctrl+click + this.hammer.on('hold', this._onMultiSelectItem.bind(this)); - /** - * @constructor Group - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet - */ - function Group (groupId, data, itemSet) { - this.groupId = groupId; + // add item on doubletap + this.hammer.on('doubletap', this._onAddItem.bind(this)); - this.itemSet = itemSet; + // attach to the DOM + this.show(); + }; - this.dom = {}; - this.props = { - label: { - width: 0, - height: 0 + /** + * Set options for the ItemSet. Existing options will be extended/overwritten. + * @param {Object} [options] The following options are available: + * {String} type + * Default type for the items. Choose from 'box' + * (default), 'point', or 'range'. The default + * Style can be overwritten by individual items. + * {String} align + * Alignment for the items, only applicable for + * ItemBox. Choose 'center' (default), 'left', or + * 'right'. + * {String} orientation + * Orientation of the item set. Choose 'top' or + * 'bottom' (default). + * {Function} groupOrder + * A sorting function for ordering groups + * {Boolean} stack + * If true (deafult), items will be stacked on + * top of each other. + * {Number} margin.axis + * Margin between the axis and the items in pixels. + * Default is 20. + * {Number} margin.item.horizontal + * Horizontal margin between items in pixels. + * Default is 10. + * {Number} margin.item.vertical + * Vertical Margin between items in pixels. + * Default is 10. + * {Number} margin.item + * Margin between items in pixels in both horizontal + * and vertical direction. Default is 10. + * {Number} margin + * Set margin for both axis and items in pixels. + * {Number} padding + * Padding of the contents of an item in pixels. + * Must correspond with the items css. Default is 5. + * {Boolean} selectable + * If true (default), items can be selected. + * {Boolean} editable + * Set all editable options to true or false + * {Boolean} editable.updateTime + * Allow dragging an item to an other moment in time + * {Boolean} editable.updateGroup + * Allow dragging an item to an other group + * {Boolean} editable.add + * Allow creating new items on double tap + * {Boolean} editable.remove + * Allow removing items by clicking the delete button + * top right of a selected item. + * {Function(item: Item, callback: Function)} onAdd + * Callback function triggered when an item is about to be added: + * when the user double taps an empty space in the Timeline. + * {Function(item: Item, callback: Function)} onUpdate + * Callback function fired when an item is about to be updated. + * This function typically has to show a dialog where the user + * change the item. If not implemented, nothing happens. + * {Function(item: Item, callback: Function)} onMove + * Fired when an item has been moved. If not implemented, + * the move action will be accepted. + * {Function(item: Item, callback: Function)} onRemove + * Fired when an item is about to be deleted. + * If not implemented, the item will be always removed. + */ + ItemSet.prototype.setOptions = function(options) { + if (options) { + // copy all options that we know + var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder']; + util.selectiveExtend(fields, this.options, options); + + if ('margin' in options) { + if (typeof options.margin === 'number') { + this.options.margin.axis = options.margin; + this.options.margin.item.horizontal = options.margin; + this.options.margin.item.vertical = options.margin; + } + else if (typeof options.margin === 'object') { + util.selectiveExtend(['axis'], this.options.margin, options.margin); + if ('item' in options.margin) { + if (typeof options.margin.item === 'number') { + this.options.margin.item.horizontal = options.margin.item; + this.options.margin.item.vertical = options.margin.item; + } + else if (typeof options.margin.item === 'object') { + util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); + } + } + } } - }; - this.className = null; - this.items = {}; // items filtered by groupId of this group - this.visibleItems = []; // items currently visible in window - this.orderedItems = { // items sorted by start and by end - byStart: [], - byEnd: [] - }; + if ('editable' in options) { + if (typeof options.editable === 'boolean') { + this.options.editable.updateTime = options.editable; + this.options.editable.updateGroup = options.editable; + this.options.editable.add = options.editable; + this.options.editable.remove = options.editable; + } + else if (typeof options.editable === 'object') { + util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable); + } + } - this._create(); + // callback functions + var addCallback = (function (name) { + if (name in options) { + var fn = options[name]; + if (!(fn instanceof Function)) { + throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)'); + } + this.options[name] = fn; + } + }).bind(this); + ['onAdd', 'onUpdate', 'onRemove', 'onMove'].forEach(addCallback); - this.setData(data); - } + // force the itemSet to refresh: options like orientation and margins may be changed + this.markDirty(); + } + }; /** - * Create DOM elements for the group - * @private + * Mark the ItemSet dirty so it will refresh everything with next redraw */ - Group.prototype._create = function() { - var label = document.createElement('div'); - label.className = 'vlabel'; - this.dom.label = label; - - var inner = document.createElement('div'); - inner.className = 'inner'; - label.appendChild(inner); - this.dom.inner = inner; - - var foreground = document.createElement('div'); - foreground.className = 'group'; - foreground['timeline-group'] = this; - this.dom.foreground = foreground; + ItemSet.prototype.markDirty = function() { + this.groupIds = []; + this.stackDirty = true; + }; - this.dom.background = document.createElement('div'); - this.dom.background.className = 'group'; + /** + * Destroy the ItemSet + */ + ItemSet.prototype.destroy = function() { + this.hide(); + this.setItems(null); + this.setGroups(null); - this.dom.axis = document.createElement('div'); - this.dom.axis.className = 'group'; + this.hammer = null; - // create a hidden marker to detect when the Timelines container is attached - // to the DOM, or the style of a parent of the Timeline is changed from - // display:none is changed to visible. - this.dom.marker = document.createElement('div'); - this.dom.marker.style.visibility = 'hidden'; - this.dom.marker.innerHTML = '?'; - this.dom.background.appendChild(this.dom.marker); + this.body = null; + this.conversion = null; }; /** - * Set the group data for this group - * @param {Object} data Group data, can contain properties content and className + * Hide the component from the DOM */ - Group.prototype.setData = function(data) { - // update contents - var content = data && data.content; - if (content instanceof Element) { - this.dom.inner.appendChild(content); - } - else if (content != undefined) { - this.dom.inner.innerHTML = content; - } - else { - this.dom.inner.innerHTML = this.groupId; + ItemSet.prototype.hide = function() { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } - // update title - this.dom.label.title = data && data.title || ''; - - if (!this.dom.inner.firstChild) { - util.addClassName(this.dom.inner, 'hidden'); - } - else { - util.removeClassName(this.dom.inner, 'hidden'); + // remove the axis with dots + if (this.dom.axis.parentNode) { + this.dom.axis.parentNode.removeChild(this.dom.axis); } - // update className - var className = data && data.className || null; - if (className != this.className) { - if (this.className) { - util.removeClassName(this.dom.label, className); - util.removeClassName(this.dom.foreground, className); - util.removeClassName(this.dom.background, className); - util.removeClassName(this.dom.axis, className); - } - util.addClassName(this.dom.label, className); - util.addClassName(this.dom.foreground, className); - util.addClassName(this.dom.background, className); - util.addClassName(this.dom.axis, className); + // remove the labelset containing all group labels + if (this.dom.labelSet.parentNode) { + this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); } }; /** - * Get the width of the group label - * @return {number} width + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - Group.prototype.getLabelWidth = function() { - return this.props.label.width; - }; + ItemSet.prototype.show = function() { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); + } + // show axis with dots + if (!this.dom.axis.parentNode) { + this.body.dom.backgroundVertical.appendChild(this.dom.axis); + } + + // show labelset containing labels + if (!this.dom.labelSet.parentNode) { + this.body.dom.left.appendChild(this.dom.labelSet); + } + }; /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized + * Set selected items by their id. Replaces the current selection + * Unknown id's are silently ignored. + * @param {Array} [ids] An array with zero or more id's of the items to be + * selected. If ids is an empty array, all items will be + * unselected. */ - Group.prototype.redraw = function(range, margin, restack) { - var resized = false; + ItemSet.prototype.setSelection = function(ids) { + var i, ii, id, item; - this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); + if (ids) { + if (!Array.isArray(ids)) { + throw new TypeError('Array expected'); + } - // force recalculation of the height of the items when the marker height changed - // (due to the Timeline being attached to the DOM or changed from display:none to visible) - var markerHeight = this.dom.marker.clientHeight; - if (markerHeight != this.lastMarkerHeight) { - this.lastMarkerHeight = markerHeight; - - util.forEach(this.items, function (item) { - item.dirty = true; - if (item.displayed) item.redraw(); - }); - - restack = true; - } - - // reposition visible items vertically - if (this.itemSet.options.stack) { // TODO: ugly way to access options... - stack.stack(this.visibleItems, margin, restack); - } - else { // no stacking - stack.nostack(this.visibleItems, margin); - } - - // recalculate the height of the group - var height; - var visibleItems = this.visibleItems; - if (visibleItems.length) { - var min = visibleItems[0].top; - var max = visibleItems[0].top + visibleItems[0].height; - util.forEach(visibleItems, function (item) { - min = Math.min(min, item.top); - max = Math.max(max, (item.top + item.height)); - }); - if (min > margin.axis) { - // there is an empty gap between the lowest item and the axis - var offset = min - margin.axis; - max -= offset; - util.forEach(visibleItems, function (item) { - item.top -= offset; - }); + // unselect currently selected items + for (i = 0, ii = this.selection.length; i < ii; i++) { + id = this.selection[i]; + item = this.items[id]; + if (item) item.unselect(); } - height = max + margin.item.vertical / 2; - } - else { - height = margin.axis + margin.item.vertical; - } - height = Math.max(height, this.props.label.height); - - // calculate actual size and position - var foreground = this.dom.foreground; - this.top = foreground.offsetTop; - this.left = foreground.offsetLeft; - this.width = foreground.offsetWidth; - resized = util.updateProperty(this, 'height', height) || resized; - - // recalculate size of label - resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; - resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; - - // apply new height - this.dom.background.style.height = height + 'px'; - this.dom.foreground.style.height = height + 'px'; - this.dom.label.style.height = height + 'px'; - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(); + // select items + this.selection = []; + for (i = 0, ii = ids.length; i < ii; i++) { + id = ids[i]; + item = this.items[id]; + if (item) { + this.selection.push(id); + item.select(); + } + } } - - return resized; }; /** - * Show this group: attach to the DOM + * Get the selected items by their id + * @return {Array} ids The ids of the selected items */ - Group.prototype.show = function() { - if (!this.dom.label.parentNode) { - this.itemSet.dom.labelSet.appendChild(this.dom.label); - } - - if (!this.dom.foreground.parentNode) { - this.itemSet.dom.foreground.appendChild(this.dom.foreground); - } - - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); - } - - if (!this.dom.axis.parentNode) { - this.itemSet.dom.axis.appendChild(this.dom.axis); - } + ItemSet.prototype.getSelection = function() { + return this.selection.concat([]); }; /** - * Hide this group: remove from the DOM + * Get the id's of the currently visible items. + * @returns {Array} The ids of the visible items */ - Group.prototype.hide = function() { - var label = this.dom.label; - if (label.parentNode) { - label.parentNode.removeChild(label); - } + ItemSet.prototype.getVisibleItems = function() { + var range = this.body.range.getRange(); + var left = this.body.util.toScreen(range.start); + var right = this.body.util.toScreen(range.end); - var foreground = this.dom.foreground; - if (foreground.parentNode) { - foreground.parentNode.removeChild(foreground); - } + var ids = []; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + var group = this.groups[groupId]; + var rawVisibleItems = group.visibleItems; - var background = this.dom.background; - if (background.parentNode) { - background.parentNode.removeChild(background); + // filter the "raw" set with visibleItems into a set which is really + // visible by pixels + for (var i = 0; i < rawVisibleItems.length; i++) { + var item = rawVisibleItems[i]; + // TODO: also check whether visible vertically + if ((item.left < right) && (item.left + item.width > left)) { + ids.push(item.id); + } + } + } } - var axis = this.dom.axis; - if (axis.parentNode) { - axis.parentNode.removeChild(axis); - } + return ids; }; /** - * Add an item to the group - * @param {Item} item + * Deselect a selected item + * @param {String | Number} id + * @private */ - Group.prototype.add = function(item) { - this.items[item.id] = item; - item.setParent(this); - - if (item instanceof ItemRange && this.visibleItems.indexOf(item) == -1) { - var range = this.itemSet.body.range; // TODO: not nice accessing the range like this - this._checkIfVisible(item, this.visibleItems, range); + ItemSet.prototype._deselect = function(id) { + var selection = this.selection; + for (var i = 0, ii = selection.length; i < ii; i++) { + if (selection[i] == id) { // non-strict comparison! + selection.splice(i, 1); + break; + } } }; /** - * Remove an item from the group - * @param {Item} item + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - Group.prototype.remove = function(item) { - delete this.items[item.id]; - item.setParent(this.itemSet); + ItemSet.prototype.redraw = function() { + var margin = this.options.margin, + range = this.body.range, + asSize = util.option.asSize, + options = this.options, + orientation = options.orientation, + resized = false, + frame = this.dom.frame, + editable = options.editable.updateTime || options.editable.updateGroup; - // remove from visible items - var index = this.visibleItems.indexOf(item); - if (index != -1) this.visibleItems.splice(index, 1); + // update class name + frame.className = 'itemset' + (editable ? ' editable' : ''); - // TODO: also remove from ordered items? - }; + // reorder the groups (if needed) + resized = this._orderGroups() || resized; - /** - * Remove an item from the corresponding DataSet - * @param {Item} item - */ - Group.prototype.removeFromDataSet = function(item) { - this.itemSet.removeItem(item.id); - }; + // check whether zoomed (in that case we need to re-stack everything) + // TODO: would be nicer to get this as a trigger from Range + var visibleInterval = range.end - range.start; + var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth); + if (zoomed) this.stackDirty = true; + this.lastVisibleInterval = visibleInterval; + this.props.lastWidth = this.props.width; - /** - * Reorder the items - */ - Group.prototype.order = function() { - var array = util.toArray(this.items); - this.orderedItems.byStart = array; - this.orderedItems.byEnd = this._constructByEndArray(array); + // redraw all groups + var restack = this.stackDirty, + firstGroup = this._firstGroup(), + firstMargin = { + item: margin.item, + axis: margin.axis + }, + nonFirstMargin = { + item: margin.item, + axis: margin.item.vertical / 2 + }, + height = 0, + minHeight = margin.axis + margin.item.vertical; + util.forEach(this.groups, function (group) { + var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin; + var groupResized = group.redraw(range, groupMargin, restack); + resized = groupResized || resized; + height += group.height; + }); + height = Math.max(height, minHeight); + this.stackDirty = false; - stack.orderByStart(this.orderedItems.byStart); - stack.orderByEnd(this.orderedItems.byEnd); + // update frame height + frame.style.height = asSize(height); + + // calculate actual size and position + this.props.top = frame.offsetTop; + this.props.left = frame.offsetLeft; + this.props.width = frame.offsetWidth; + this.props.height = height; + + // reposition axis + this.dom.axis.style.top = asSize((orientation == 'top') ? + (this.body.domProps.top.height + this.body.domProps.border.top) : + (this.body.domProps.top.height + this.body.domProps.centerContainer.height)); + this.dom.axis.style.left = this.body.domProps.border.left + 'px'; + + // check if this component is resized + resized = this._isResized() || resized; + + return resized; }; /** - * Create an array containing all items being a range (having an end date) - * @param {Item[]} array - * @returns {ItemRange[]} + * Get the first group, aligned with the axis + * @return {Group | null} firstGroup * @private */ - Group.prototype._constructByEndArray = function(array) { - var endArray = []; + ItemSet.prototype._firstGroup = function() { + var firstGroupIndex = (this.options.orientation == 'top') ? 0 : (this.groupIds.length - 1); + var firstGroupId = this.groupIds[firstGroupIndex]; + var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED]; - for (var i = 0; i < array.length; i++) { - if (array[i] instanceof ItemRange) { - endArray.push(array[i]); - } - } - return endArray; + return firstGroup || null; }; /** - * Update the visible items - * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date - * @param {Item[]} visibleItems The previously visible items. - * @param {{start: number, end: number}} range Visible range - * @return {Item[]} visibleItems The new visible items. - * @private + * Create or delete the group holding all ungrouped items. This group is used when + * there are no groups specified. + * @protected */ - Group.prototype._updateVisibleItems = function(orderedItems, visibleItems, range) { - var initialPosByStart, - newVisibleItems = [], - i; + ItemSet.prototype._updateUngrouped = function() { + var ungrouped = this.groups[UNGROUPED]; - // first check if the items that were in view previously are still in view. - // this handles the case for the ItemRange that is both before and after the current one. - if (visibleItems.length > 0) { - for (i = 0; i < visibleItems.length; i++) { - this._checkIfVisible(visibleItems[i], newVisibleItems, range); + if (this.groupsData) { + // remove the group holding all ungrouped items + if (ungrouped) { + ungrouped.hide(); + delete this.groups[UNGROUPED]; } } - - // If there were no visible items previously, use binarySearch to find a visible ItemPoint or ItemRange (based on startTime) - if (newVisibleItems.length == 0) { - initialPosByStart = util.binarySearch(orderedItems.byStart, range, 'data','start'); - } else { - initialPosByStart = orderedItems.byStart.indexOf(newVisibleItems[0]); - } - - // use visible search to find a visible ItemRange (only based on endTime) - var initialPosByEnd = util.binarySearch(orderedItems.byEnd, range, 'data','end'); + // create a group holding all (unfiltered) items + if (!ungrouped) { + var id = null; + var data = null; + ungrouped = new Group(id, data, this); + this.groups[UNGROUPED] = ungrouped; - // if we found a initial ID to use, trace it up and down until we meet an invisible item. - if (initialPosByStart != -1) { - for (i = initialPosByStart; i >= 0; i--) { - if (this._checkIfInvisible(orderedItems.byStart[i], newVisibleItems, range)) {break;} - } - for (i = initialPosByStart + 1; i < orderedItems.byStart.length; i++) { - if (this._checkIfInvisible(orderedItems.byStart[i], newVisibleItems, range)) {break;} - } - } + for (var itemId in this.items) { + if (this.items.hasOwnProperty(itemId)) { + ungrouped.add(this.items[itemId]); + } + } - // if we found a initial ID to use, trace it up and down until we meet an invisible item. - if (initialPosByEnd != -1) { - for (i = initialPosByEnd; i >= 0; i--) { - if (this._checkIfInvisible(orderedItems.byEnd[i], newVisibleItems, range)) {break;} - } - for (i = initialPosByEnd + 1; i < orderedItems.byEnd.length; i++) { - if (this._checkIfInvisible(orderedItems.byEnd[i], newVisibleItems, range)) {break;} + ungrouped.show(); } } - - return newVisibleItems; }; - - /** - * this function checks if an item is invisible. If it is NOT we make it visible - * and add it to the global visible items. If it is, return true. - * - * @param {Item} item - * @param {Item[]} visibleItems - * @param {{start:number, end:number}} range - * @returns {boolean} - * @private + * Get the element for the labelset + * @return {HTMLElement} labelSet */ - Group.prototype._checkIfInvisible = function(item, visibleItems, range) { - if (item.isVisible(range)) { - if (!item.displayed) item.show(); - item.repositionX(); - if (visibleItems.indexOf(item) == -1) { - visibleItems.push(item); - } - return false; - } - else { - if (item.displayed) item.hide(); - return true; - } + ItemSet.prototype.getLabelSet = function() { + return this.dom.labelSet; }; /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private + * Set items + * @param {vis.DataSet | null} items */ - Group.prototype._checkIfVisible = function(item, visibleItems, range) { - if (item.isVisible(range)) { - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); - visibleItems.push(item); + ItemSet.prototype.setItems = function(items) { + var me = this, + ids, + oldItemsData = this.itemsData; + + // replace the dataset + if (!items) { + this.itemsData = null; + } + else if (items instanceof DataSet || items instanceof DataView) { + this.itemsData = items; } else { - if (item.displayed) item.hide(); + throw new TypeError('Data must be an instance of DataSet or DataView'); } - }; - module.exports = Group; + if (oldItemsData) { + // unsubscribe from old dataset + util.forEach(this.itemListeners, function (callback, event) { + oldItemsData.off(event, callback); + }); + // remove all drawn items + ids = oldItemsData.getIds(); + this._onRemove(ids); + } -/***/ }, -/* 24 */ -/***/ function(module, exports, __webpack_require__) { + if (this.itemsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.itemListeners, function (callback, event) { + me.itemsData.on(event, callback, id); + }); - var Hammer = __webpack_require__(41); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Component = __webpack_require__(18); - var Group = __webpack_require__(23); - var ItemBox = __webpack_require__(29); - var ItemPoint = __webpack_require__(30); - var ItemRange = __webpack_require__(31); + // add all new items + ids = this.itemsData.getIds(); + this._onAdd(ids); + // update the group holding all ungrouped items + this._updateUngrouped(); + } + }; - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + /** + * Get the current items + * @returns {vis.DataSet | null} + */ + ItemSet.prototype.getItems = function() { + return this.itemsData; + }; /** - * An ItemSet holds a set of items and ranges which can be displayed in a - * range. The width is determined by the parent of the ItemSet, and the height - * is determined by the size of the items. - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See ItemSet.setOptions for the available options. - * @constructor ItemSet - * @extends Component + * Set groups + * @param {vis.DataSet} groups */ - function ItemSet(body, options) { - this.body = body; + ItemSet.prototype.setGroups = function(groups) { + var me = this, + ids; - this.defaultOptions = { - type: null, // 'box', 'point', 'range' - orientation: 'bottom', // 'top' or 'bottom' - align: 'center', // alignment of box items - stack: true, - groupOrder: null, + // unsubscribe from current dataset + if (this.groupsData) { + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.unsubscribe(event, callback); + }); - selectable: true, - editable: { - updateTime: false, - updateGroup: false, - add: false, - remove: false - }, + // remove all drawn groups + ids = this.groupsData.getIds(); + this.groupsData = null; + this._onRemoveGroups(ids); // note: this will cause a redraw + } - onAdd: function (item, callback) { - callback(item); - }, - onUpdate: function (item, callback) { - callback(item); - }, - onMove: function (item, callback) { - callback(item); - }, - onRemove: function (item, callback) { - callback(item); - }, + // replace the dataset + if (!groups) { + this.groupsData = null; + } + else if (groups instanceof DataSet || groups instanceof DataView) { + this.groupsData = groups; + } + else { + throw new TypeError('Data must be an instance of DataSet or DataView'); + } - margin: { - item: { - horizontal: 10, - vertical: 10 - }, - axis: 20 - }, - padding: 5 - }; + if (this.groupsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.on(event, callback, id); + }); - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); + // draw all ms + ids = this.groupsData.getIds(); + this._onAddGroups(ids); + } - // options for getting items from the DataSet with the correct type - this.itemOptions = { - type: {start: 'Date', end: 'Date'} - }; + // update the group holding all ungrouped items + this._updateUngrouped(); - this.conversion = { - toScreen: body.util.toScreen, - toTime: body.util.toTime - }; - this.dom = {}; - this.props = {}; - this.hammer = null; + // update the order of all items in each group + this._order(); - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + this.body.emitter.emit('change'); + }; - // listeners for the DataSet of the items - this.itemListeners = { - 'add': function (event, params, senderId) { - me._onAdd(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdate(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemove(params.items); - } - }; + /** + * Get the current groups + * @returns {vis.DataSet | null} groups + */ + ItemSet.prototype.getGroups = function() { + return this.groupsData; + }; - // listeners for the DataSet of the groups - this.groupListeners = { - 'add': function (event, params, senderId) { - me._onAddGroups(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdateGroups(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemoveGroups(params.items); - } - }; + /** + * Remove an item by its id + * @param {String | Number} id + */ + ItemSet.prototype.removeItem = function(id) { + var item = this.itemsData.get(id), + dataset = this.itemsData.getDataSet(); - this.items = {}; // object with an Item for every data item - this.groups = {}; // Group object for every group - this.groupIds = []; + if (item) { + // confirm deletion + this.options.onRemove(item, function (item) { + if (item) { + // remove by id here, it is possible that an item has no id defined + // itself, so better not delete by the item itself + dataset.remove(id); + } + }); + } + }; - this.selection = []; // list with the ids of all selected nodes - this.stackDirty = true; // if true, all items will be restacked on next redraw + /** + * Handle updated items + * @param {Number[]} ids + * @protected + */ + ItemSet.prototype._onUpdate = function(ids) { + var me = this; - this.touchParams = {}; // stores properties while dragging - // create the HTML DOM + ids.forEach(function (id) { + var itemData = me.itemsData.get(id, me.itemOptions), + item = me.items[id], + type = itemData.type || me.options.type || (itemData.end ? 'range' : 'box'); - this._create(); + var constructor = ItemSet.types[type]; - this.setOptions(options); - } + if (item) { + // update item + if (!constructor || !(item instanceof constructor)) { + // item type has changed, delete the item and recreate it + me._removeItem(item); + item = null; + } + else { + me._updateItem(item, itemData); + } + } - ItemSet.prototype = new Component(); + if (!item) { + // create item + if (constructor) { + item = new constructor(itemData, me.conversion, me.options); + item.id = id; // TODO: not so nice setting id afterwards + me._addItem(item); + } + else if (type == 'rangeoverflow') { + // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day + throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' + + '.vis.timeline .item.range .content {overflow: visible;}'); + } + else { + throw new TypeError('Unknown item type "' + type + '"'); + } + } + }); - // available item types will be registered here - ItemSet.types = { - box: ItemBox, - range: ItemRange, - point: ItemPoint + this._order(); + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('change'); }; /** - * Create the HTML DOM for the ItemSet + * Handle added items + * @param {Number[]} ids + * @protected */ - ItemSet.prototype._create = function(){ - var frame = document.createElement('div'); - frame.className = 'itemset'; - frame['timeline-itemset'] = this; - this.dom.frame = frame; + ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; - // create background panel - var background = document.createElement('div'); - background.className = 'background'; - frame.appendChild(background); - this.dom.background = background; + /** + * Handle removed items + * @param {Number[]} ids + * @protected + */ + ItemSet.prototype._onRemove = function(ids) { + var count = 0; + var me = this; + ids.forEach(function (id) { + var item = me.items[id]; + if (item) { + count++; + me._removeItem(item); + } + }); - // create foreground panel - var foreground = document.createElement('div'); - foreground.className = 'foreground'; - frame.appendChild(foreground); - this.dom.foreground = foreground; + if (count) { + // update order + this._order(); + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('change'); + } + }; - // create axis panel - var axis = document.createElement('div'); - axis.className = 'axis'; - this.dom.axis = axis; + /** + * Update the order of item in all groups + * @private + */ + ItemSet.prototype._order = function() { + // reorder the items in all groups + // TODO: optimization: only reorder groups affected by the changed items + util.forEach(this.groups, function (group) { + group.order(); + }); + }; - // create labelset - var labelSet = document.createElement('div'); - labelSet.className = 'labelset'; - this.dom.labelSet = labelSet; + /** + * Handle updated groups + * @param {Number[]} ids + * @private + */ + ItemSet.prototype._onUpdateGroups = function(ids) { + this._onAddGroups(ids); + }; - // create ungrouped Group - this._updateUngrouped(); + /** + * Handle changed groups + * @param {Number[]} ids + * @private + */ + ItemSet.prototype._onAddGroups = function(ids) { + var me = this; - // attach event listeners - // Note: we bind to the centerContainer for the case where the height - // of the center container is larger than of the ItemSet, so we - // can click in the empty area to create a new item or deselect an item. - this.hammer = Hammer(this.body.dom.centerContainer, { - prevent_default: true - }); + ids.forEach(function (id) { + var groupData = me.groupsData.get(id); + var group = me.groups[id]; - // drag items when selected - this.hammer.on('touch', this._onTouch.bind(this)); - this.hammer.on('dragstart', this._onDragStart.bind(this)); - this.hammer.on('drag', this._onDrag.bind(this)); - this.hammer.on('dragend', this._onDragEnd.bind(this)); + if (!group) { + // check for reserved ids + if (id == UNGROUPED) { + throw new Error('Illegal group id. ' + id + ' is a reserved id.'); + } - // single select (or unselect) when tapping an item - this.hammer.on('tap', this._onSelectItem.bind(this)); + var groupOptions = Object.create(me.options); + util.extend(groupOptions, { + height: null + }); - // multi select when holding mouse/touch, or on ctrl+click - this.hammer.on('hold', this._onMultiSelectItem.bind(this)); + group = new Group(id, groupData, me); + me.groups[id] = group; - // add item on doubletap - this.hammer.on('doubletap', this._onAddItem.bind(this)); + // add items with this groupId to the new group + for (var itemId in me.items) { + if (me.items.hasOwnProperty(itemId)) { + var item = me.items[itemId]; + if (item.data.group == id) { + group.add(item); + } + } + } - // attach to the DOM - this.show(); + group.order(); + group.show(); + } + else { + // update group + group.setData(groupData); + } + }); + + this.body.emitter.emit('change'); }; /** - * Set options for the ItemSet. Existing options will be extended/overwritten. - * @param {Object} [options] The following options are available: - * {String} type - * Default type for the items. Choose from 'box' - * (default), 'point', or 'range'. The default - * Style can be overwritten by individual items. - * {String} align - * Alignment for the items, only applicable for - * ItemBox. Choose 'center' (default), 'left', or - * 'right'. - * {String} orientation - * Orientation of the item set. Choose 'top' or - * 'bottom' (default). - * {Function} groupOrder - * A sorting function for ordering groups - * {Boolean} stack - * If true (deafult), items will be stacked on - * top of each other. - * {Number} margin.axis - * Margin between the axis and the items in pixels. - * Default is 20. - * {Number} margin.item.horizontal - * Horizontal margin between items in pixels. - * Default is 10. - * {Number} margin.item.vertical - * Vertical Margin between items in pixels. - * Default is 10. - * {Number} margin.item - * Margin between items in pixels in both horizontal - * and vertical direction. Default is 10. - * {Number} margin - * Set margin for both axis and items in pixels. - * {Number} padding - * Padding of the contents of an item in pixels. - * Must correspond with the items css. Default is 5. - * {Boolean} selectable - * If true (default), items can be selected. - * {Boolean} editable - * Set all editable options to true or false - * {Boolean} editable.updateTime - * Allow dragging an item to an other moment in time - * {Boolean} editable.updateGroup - * Allow dragging an item to an other group - * {Boolean} editable.add - * Allow creating new items on double tap - * {Boolean} editable.remove - * Allow removing items by clicking the delete button - * top right of a selected item. - * {Function(item: Item, callback: Function)} onAdd - * Callback function triggered when an item is about to be added: - * when the user double taps an empty space in the Timeline. - * {Function(item: Item, callback: Function)} onUpdate - * Callback function fired when an item is about to be updated. - * This function typically has to show a dialog where the user - * change the item. If not implemented, nothing happens. - * {Function(item: Item, callback: Function)} onMove - * Fired when an item has been moved. If not implemented, - * the move action will be accepted. - * {Function(item: Item, callback: Function)} onRemove - * Fired when an item is about to be deleted. - * If not implemented, the item will be always removed. + * Handle removed groups + * @param {Number[]} ids + * @private */ - ItemSet.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder']; - util.selectiveExtend(fields, this.options, options); - - if ('margin' in options) { - if (typeof options.margin === 'number') { - this.options.margin.axis = options.margin; - this.options.margin.item.horizontal = options.margin; - this.options.margin.item.vertical = options.margin; - } - else if (typeof options.margin === 'object') { - util.selectiveExtend(['axis'], this.options.margin, options.margin); - if ('item' in options.margin) { - if (typeof options.margin.item === 'number') { - this.options.margin.item.horizontal = options.margin.item; - this.options.margin.item.vertical = options.margin.item; - } - else if (typeof options.margin.item === 'object') { - util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); - } - } - } - } + ItemSet.prototype._onRemoveGroups = function(ids) { + var groups = this.groups; + ids.forEach(function (id) { + var group = groups[id]; - if ('editable' in options) { - if (typeof options.editable === 'boolean') { - this.options.editable.updateTime = options.editable; - this.options.editable.updateGroup = options.editable; - this.options.editable.add = options.editable; - this.options.editable.remove = options.editable; - } - else if (typeof options.editable === 'object') { - util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable); - } + if (group) { + group.hide(); + delete groups[id]; } + }); - // callback functions - var addCallback = (function (name) { - if (name in options) { - var fn = options[name]; - if (!(fn instanceof Function)) { - throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)'); - } - this.options[name] = fn; - } - }).bind(this); - ['onAdd', 'onUpdate', 'onRemove', 'onMove'].forEach(addCallback); + this.markDirty(); - // force the itemSet to refresh: options like orientation and margins may be changed - this.markDirty(); - } + this.body.emitter.emit('change'); }; /** - * Mark the ItemSet dirty so it will refresh everything with next redraw + * Reorder the groups if needed + * @return {boolean} changed + * @private */ - ItemSet.prototype.markDirty = function() { - this.groupIds = []; - this.stackDirty = true; + ItemSet.prototype._orderGroups = function () { + if (this.groupsData) { + // reorder the groups + var groupIds = this.groupsData.getIds({ + order: this.options.groupOrder + }); + + var changed = !util.equalArray(groupIds, this.groupIds); + if (changed) { + // hide all groups, removes them from the DOM + var groups = this.groups; + groupIds.forEach(function (groupId) { + groups[groupId].hide(); + }); + + // show the groups again, attach them to the DOM in correct order + groupIds.forEach(function (groupId) { + groups[groupId].show(); + }); + + this.groupIds = groupIds; + } + + return changed; + } + else { + return false; + } }; /** - * Destroy the ItemSet + * Add a new item + * @param {Item} item + * @private */ - ItemSet.prototype.destroy = function() { - this.hide(); - this.setItems(null); - this.setGroups(null); - - this.hammer = null; + ItemSet.prototype._addItem = function(item) { + this.items[item.id] = item; - this.body = null; - this.conversion = null; + // add to group + var groupId = this.groupsData ? item.data.group : UNGROUPED; + var group = this.groups[groupId]; + if (group) group.add(item); }; /** - * Hide the component from the DOM + * Update an existing item + * @param {Item} item + * @param {Object} itemData + * @private */ - ItemSet.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } + ItemSet.prototype._updateItem = function(item, itemData) { + var oldGroupId = item.data.group; - // remove the axis with dots - if (this.dom.axis.parentNode) { - this.dom.axis.parentNode.removeChild(this.dom.axis); + item.data = itemData; + if (item.displayed) { + item.redraw(); } - // remove the labelset containing all group labels - if (this.dom.labelSet.parentNode) { - this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); + // update group + if (oldGroupId != item.data.group) { + var oldGroup = this.groups[oldGroupId]; + if (oldGroup) oldGroup.remove(item); + + var groupId = this.groupsData ? item.data.group : UNGROUPED; + var group = this.groups[groupId]; + if (group) group.add(item); } }; /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * Delete an item from the ItemSet: remove it from the DOM, from the map + * with items, and from the map with visible items, and from the selection + * @param {Item} item + * @private */ - ItemSet.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } + ItemSet.prototype._removeItem = function(item) { + // remove from DOM + item.hide(); - // show axis with dots - if (!this.dom.axis.parentNode) { - this.body.dom.backgroundVertical.appendChild(this.dom.axis); - } + // remove from items + delete this.items[item.id]; - // show labelset containing labels - if (!this.dom.labelSet.parentNode) { - this.body.dom.left.appendChild(this.dom.labelSet); - } + // remove from selection + var index = this.selection.indexOf(item.id); + if (index != -1) this.selection.splice(index, 1); + + // remove from group + var groupId = this.groupsData ? item.data.group : UNGROUPED; + var group = this.groups[groupId]; + if (group) group.remove(item); }; /** - * Set selected items by their id. Replaces the current selection - * Unknown id's are silently ignored. - * @param {Array} [ids] An array with zero or more id's of the items to be - * selected. If ids is an empty array, all items will be - * unselected. + * Create an array containing all items being a range (having an end date) + * @param array + * @returns {Array} + * @private */ - ItemSet.prototype.setSelection = function(ids) { - var i, ii, id, item; + ItemSet.prototype._constructByEndArray = function(array) { + var endArray = []; - if (ids) { - if (!Array.isArray(ids)) { - throw new TypeError('Array expected'); - } - - // unselect currently selected items - for (i = 0, ii = this.selection.length; i < ii; i++) { - id = this.selection[i]; - item = this.items[id]; - if (item) item.unselect(); - } - - // select items - this.selection = []; - for (i = 0, ii = ids.length; i < ii; i++) { - id = ids[i]; - item = this.items[id]; - if (item) { - this.selection.push(id); - item.select(); - } + for (var i = 0; i < array.length; i++) { + if (array[i] instanceof ItemRange) { + endArray.push(array[i]); } } + return endArray; }; /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items - */ - ItemSet.prototype.getSelection = function() { - return this.selection.concat([]); - }; - - /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items + * Register the clicked item on touch, before dragStart is initiated. + * + * dragStart is initiated from a mousemove event, which can have left the item + * already resulting in an item == null + * + * @param {Event} event + * @private */ - ItemSet.prototype.getVisibleItems = function() { - var range = this.body.range.getRange(); - var left = this.body.util.toScreen(range.start); - var right = this.body.util.toScreen(range.end); - - var ids = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - var group = this.groups[groupId]; - var rawVisibleItems = group.visibleItems; - - // filter the "raw" set with visibleItems into a set which is really - // visible by pixels - for (var i = 0; i < rawVisibleItems.length; i++) { - var item = rawVisibleItems[i]; - // TODO: also check whether visible vertically - if ((item.left < right) && (item.left + item.width > left)) { - ids.push(item.id); - } - } - } - } - - return ids; + ItemSet.prototype._onTouch = function (event) { + // store the touched item, used in _onDragStart + this.touchParams.item = ItemSet.itemFromTarget(event); }; /** - * Deselect a selected item - * @param {String | Number} id + * Start dragging the selected events + * @param {Event} event * @private */ - ItemSet.prototype._deselect = function(id) { - var selection = this.selection; - for (var i = 0, ii = selection.length; i < ii; i++) { - if (selection[i] == id) { // non-strict comparison! - selection.splice(i, 1); - break; - } + ItemSet.prototype._onDragStart = function (event) { + if (!this.options.editable.updateTime && !this.options.editable.updateGroup) { + return; } - }; - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - ItemSet.prototype.redraw = function() { - var margin = this.options.margin, - range = this.body.range, - asSize = util.option.asSize, - options = this.options, - orientation = options.orientation, - resized = false, - frame = this.dom.frame, - editable = options.editable.updateTime || options.editable.updateGroup; + var item = this.touchParams.item || null, + me = this, + props; - // update class name - frame.className = 'itemset' + (editable ? ' editable' : ''); + if (item && item.selected) { + var dragLeftItem = event.target.dragLeftItem; + var dragRightItem = event.target.dragRightItem; - // reorder the groups (if needed) - resized = this._orderGroups() || resized; + if (dragLeftItem) { + props = { + item: dragLeftItem + }; - // check whether zoomed (in that case we need to re-stack everything) - // TODO: would be nicer to get this as a trigger from Range - var visibleInterval = range.end - range.start; - var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth); - if (zoomed) this.stackDirty = true; - this.lastVisibleInterval = visibleInterval; - this.props.lastWidth = this.props.width; + if (me.options.editable.updateTime) { + props.start = item.data.start.valueOf(); + } + if (me.options.editable.updateGroup) { + if ('group' in item.data) props.group = item.data.group; + } - // redraw all groups - var restack = this.stackDirty, - firstGroup = this._firstGroup(), - firstMargin = { - item: margin.item, - axis: margin.axis - }, - nonFirstMargin = { - item: margin.item, - axis: margin.item.vertical / 2 - }, - height = 0, - minHeight = margin.axis + margin.item.vertical; - util.forEach(this.groups, function (group) { - var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin; - var groupResized = group.redraw(range, groupMargin, restack); - resized = groupResized || resized; - height += group.height; - }); - height = Math.max(height, minHeight); - this.stackDirty = false; + this.touchParams.itemProps = [props]; + } + else if (dragRightItem) { + props = { + item: dragRightItem + }; - // update frame height - frame.style.height = asSize(height); + if (me.options.editable.updateTime) { + props.end = item.data.end.valueOf(); + } + if (me.options.editable.updateGroup) { + if ('group' in item.data) props.group = item.data.group; + } - // calculate actual size and position - this.props.top = frame.offsetTop; - this.props.left = frame.offsetLeft; - this.props.width = frame.offsetWidth; - this.props.height = height; + this.touchParams.itemProps = [props]; + } + else { + this.touchParams.itemProps = this.getSelection().map(function (id) { + var item = me.items[id]; + var props = { + item: item + }; - // reposition axis - this.dom.axis.style.top = asSize((orientation == 'top') ? - (this.body.domProps.top.height + this.body.domProps.border.top) : - (this.body.domProps.top.height + this.body.domProps.centerContainer.height)); - this.dom.axis.style.left = this.body.domProps.border.left + 'px'; + if (me.options.editable.updateTime) { + if ('start' in item.data) props.start = item.data.start.valueOf(); + if ('end' in item.data) props.end = item.data.end.valueOf(); + } + if (me.options.editable.updateGroup) { + if ('group' in item.data) props.group = item.data.group; + } - // check if this component is resized - resized = this._isResized() || resized; + return props; + }); + } - return resized; + event.stopPropagation(); + } }; /** - * Get the first group, aligned with the axis - * @return {Group | null} firstGroup + * Drag selected items + * @param {Event} event * @private */ - ItemSet.prototype._firstGroup = function() { - var firstGroupIndex = (this.options.orientation == 'top') ? 0 : (this.groupIds.length - 1); - var firstGroupId = this.groupIds[firstGroupIndex]; - var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED]; + ItemSet.prototype._onDrag = function (event) { + if (this.touchParams.itemProps) { + var range = this.body.range, + snap = this.body.util.snap || null, + deltaX = event.gesture.deltaX, + scale = (this.props.width / (range.end - range.start)), + offset = deltaX / scale; - return firstGroup || null; - }; + // move + this.touchParams.itemProps.forEach(function (props) { + if ('start' in props) { + var start = new Date(props.start + offset); + props.item.data.start = snap ? snap(start) : start; + } - /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. - * @protected - */ - ItemSet.prototype._updateUngrouped = function() { - var ungrouped = this.groups[UNGROUPED]; + if ('end' in props) { + var end = new Date(props.end + offset); + props.item.data.end = snap ? snap(end) : end; + } - if (this.groupsData) { - // remove the group holding all ungrouped items - if (ungrouped) { - ungrouped.hide(); - delete this.groups[UNGROUPED]; - } - } - else { - // create a group holding all (unfiltered) items - if (!ungrouped) { - var id = null; - var data = null; - ungrouped = new Group(id, data, this); - this.groups[UNGROUPED] = ungrouped; + if ('group' in props) { + // drag from one group to another + var group = ItemSet.groupFromTarget(event); + if (group && group.groupId != props.item.data.group) { + var oldGroup = props.item.parent; + oldGroup.remove(props.item); + oldGroup.order(); + group.add(props.item); + group.order(); - for (var itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - ungrouped.add(this.items[itemId]); + props.item.data.group = group.groupId; } } + }); - ungrouped.show(); - } + // TODO: implement onMoving handler + + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('change'); + + event.stopPropagation(); } }; /** - * Get the element for the labelset - * @return {HTMLElement} labelSet - */ - ItemSet.prototype.getLabelSet = function() { - return this.dom.labelSet; - }; - - /** - * Set items - * @param {vis.DataSet | null} items + * End of dragging selected items + * @param {Event} event + * @private */ - ItemSet.prototype.setItems = function(items) { - var me = this, - ids, - oldItemsData = this.itemsData; + ItemSet.prototype._onDragEnd = function (event) { + if (this.touchParams.itemProps) { + // prepare a change set for the changed items + var changes = [], + me = this, + dataset = this.itemsData.getDataSet(); - // replace the dataset - if (!items) { - this.itemsData = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - this.itemsData = items; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } + this.touchParams.itemProps.forEach(function (props) { + var id = props.item.id, + itemData = me.itemsData.get(id, me.itemOptions); - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); + var changed = false; + if ('start' in props.item.data) { + changed = (props.start != props.item.data.start.valueOf()); + itemData.start = util.convert(props.item.data.start, + dataset._options.type && dataset._options.type.start || 'Date'); + } + if ('end' in props.item.data) { + changed = changed || (props.end != props.item.data.end.valueOf()); + itemData.end = util.convert(props.item.data.end, + dataset._options.type && dataset._options.type.end || 'Date'); + } + if ('group' in props.item.data) { + changed = changed || (props.group != props.item.data.group); + itemData.group = props.item.data.group; + } - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } + // only apply changes when start or end is actually changed + if (changed) { + me.options.onMove(itemData, function (itemData) { + if (itemData) { + // apply changes + itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) + changes.push(itemData); + } + else { + // restore original values + if ('start' in props) props.item.data.start = props.start; + if ('end' in props) props.item.data.end = props.end; - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); + me.stackDirty = true; // force re-stacking of all items next redraw + me.body.emitter.emit('change'); + } + }); + } }); + this.touchParams.itemProps = null; - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); + // apply the changes to the data (if there are changes) + if (changes.length) { + dataset.update(changes); + } - // update the group holding all ungrouped items - this._updateUngrouped(); + event.stopPropagation(); } }; /** - * Get the current items - * @returns {vis.DataSet | null} + * Handle selecting/deselecting an item when tapping it + * @param {Event} event + * @private */ - ItemSet.prototype.getItems = function() { - return this.itemsData; - }; + ItemSet.prototype._onSelectItem = function (event) { + if (!this.options.selectable) return; - /** - * Set groups - * @param {vis.DataSet} groups - */ - ItemSet.prototype.setGroups = function(groups) { - var me = this, - ids; + var ctrlKey = event.gesture.srcEvent && event.gesture.srcEvent.ctrlKey; + var shiftKey = event.gesture.srcEvent && event.gesture.srcEvent.shiftKey; + if (ctrlKey || shiftKey) { + this._onMultiSelectItem(event); + return; + } - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.unsubscribe(event, callback); - }); + var oldSelection = this.getSelection(); - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw - } + var item = ItemSet.itemFromTarget(event); + var selection = item ? [item.id] : []; + this.setSelection(selection); - // replace the dataset - if (!groups) { - this.groupsData = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - this.groupsData = groups; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } + var newSelection = this.getSelection(); - if (this.groupsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); + // emit a select event, + // except when old selection is empty and new selection is still empty + if (newSelection.length > 0 || oldSelection.length > 0) { + this.body.emitter.emit('select', { + items: this.getSelection() }); - - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); } - // update the group holding all ungrouped items - this._updateUngrouped(); - - // update the order of all items in each group - this._order(); - - this.body.emitter.emit('change'); + event.stopPropagation(); }; /** - * Get the current groups - * @returns {vis.DataSet | null} groups + * Handle creation and updates of an item on double tap + * @param event + * @private */ - ItemSet.prototype.getGroups = function() { - return this.groupsData; - }; + ItemSet.prototype._onAddItem = function (event) { + if (!this.options.selectable) return; + if (!this.options.editable.add) return; - /** - * Remove an item by its id - * @param {String | Number} id - */ - ItemSet.prototype.removeItem = function(id) { - var item = this.itemsData.get(id), - dataset = this.itemsData.getDataSet(); + var me = this, + snap = this.body.util.snap || null, + item = ItemSet.itemFromTarget(event); if (item) { - // confirm deletion - this.options.onRemove(item, function (item) { + // update item + + // execute async handler to update the item (or cancel it) + var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset + this.options.onUpdate(itemData, function (itemData) { + if (itemData) { + me.itemsData.update(itemData); + } + }); + } + else { + // add item + var xAbs = util.getAbsoluteLeft(this.dom.frame); + var x = event.gesture.center.pageX - xAbs; + var start = this.body.util.toTime(x); + var newItem = { + start: snap ? snap(start) : start, + content: 'new item' + }; + + // when default type is a range, add a default end date to the new item + if (this.options.type === 'range') { + var end = this.body.util.toTime(x + this.props.width / 5); + newItem.end = snap ? snap(end) : end; + } + + newItem[this.itemsData.fieldId] = util.randomUUID(); + + var group = ItemSet.groupFromTarget(event); + if (group) { + newItem.group = group.groupId; + } + + // execute async handler to customize (or cancel) adding an item + this.options.onAdd(newItem, function (item) { if (item) { - // remove by id here, it is possible that an item has no id defined - // itself, so better not delete by the item itself - dataset.remove(id); + me.itemsData.add(newItem); + // TODO: need to trigger a redraw? } }); } }; /** - * Handle updated items - * @param {Number[]} ids - * @protected + * Handle selecting/deselecting multiple items when holding an item + * @param {Event} event + * @private */ - ItemSet.prototype._onUpdate = function(ids) { - var me = this; + ItemSet.prototype._onMultiSelectItem = function (event) { + if (!this.options.selectable) return; - ids.forEach(function (id) { - var itemData = me.itemsData.get(id, me.itemOptions), - item = me.items[id], - type = itemData.type || me.options.type || (itemData.end ? 'range' : 'box'); + var selection, + item = ItemSet.itemFromTarget(event); - var constructor = ItemSet.types[type]; + if (item) { + // multi select items + selection = this.getSelection(); // current selection + var index = selection.indexOf(item.id); + if (index == -1) { + // item is not yet selected -> select it + selection.push(item.id); + } + else { + // item is already selected -> deselect it + selection.splice(index, 1); + } + this.setSelection(selection); - if (item) { - // update item - if (!constructor || !(item instanceof constructor)) { - // item type has changed, delete the item and recreate it - me._removeItem(item); - item = null; - } - else { - me._updateItem(item, itemData); - } - } - - if (!item) { - // create item - if (constructor) { - item = new constructor(itemData, me.conversion, me.options); - item.id = id; // TODO: not so nice setting id afterwards - me._addItem(item); - } - else if (type == 'rangeoverflow') { - // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day - throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' + - '.vis.timeline .item.range .content {overflow: visible;}'); - } - else { - throw new TypeError('Unknown item type "' + type + '"'); - } - } - }); + this.body.emitter.emit('select', { + items: this.getSelection() + }); - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change'); + event.stopPropagation(); + } }; /** - * Handle added items - * @param {Number[]} ids - * @protected - */ - ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; - - /** - * Handle removed items - * @param {Number[]} ids - * @protected + * Find an item from an event target: + * searches for the attribute 'timeline-item' in the event target's element tree + * @param {Event} event + * @return {Item | null} item */ - ItemSet.prototype._onRemove = function(ids) { - var count = 0; - var me = this; - ids.forEach(function (id) { - var item = me.items[id]; - if (item) { - count++; - me._removeItem(item); + ItemSet.itemFromTarget = function(event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-item')) { + return target['timeline-item']; } - }); - - if (count) { - // update order - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change'); + target = target.parentNode; } + + return null; }; /** - * Update the order of item in all groups - * @private + * Find the Group from an event target: + * searches for the attribute 'timeline-group' in the event target's element tree + * @param {Event} event + * @return {Group | null} group */ - ItemSet.prototype._order = function() { - // reorder the items in all groups - // TODO: optimization: only reorder groups affected by the changed items - util.forEach(this.groups, function (group) { - group.order(); - }); + ItemSet.groupFromTarget = function(event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-group')) { + return target['timeline-group']; + } + target = target.parentNode; + } + + return null; }; /** - * Handle updated groups - * @param {Number[]} ids - * @private + * Find the ItemSet from an event target: + * searches for the attribute 'timeline-itemset' in the event target's element tree + * @param {Event} event + * @return {ItemSet | null} item */ - ItemSet.prototype._onUpdateGroups = function(ids) { - this._onAddGroups(ids); + ItemSet.itemSetFromTarget = function(event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-itemset')) { + return target['timeline-itemset']; + } + target = target.parentNode; + } + + return null; }; + module.exports = ItemSet; + + +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(2); + var Component = __webpack_require__(18); + /** - * Handle changed groups - * @param {Number[]} ids - * @private + * Legend for Graph2d */ - ItemSet.prototype._onAddGroups = function(ids) { - var me = this; + function Legend(body, options, side) { + this.body = body; + this.defaultOptions = { + enabled: true, + icons: true, + iconSize: 20, + iconSpacing: 6, + left: { + visible: true, + position: 'top-left' // top/bottom - left,center,right + }, + right: { + visible: true, + position: 'top-left' // top/bottom - left,center,right + } + } + this.side = side; + this.options = util.extend({},this.defaultOptions); - ids.forEach(function (id) { - var groupData = me.groupsData.get(id); - var group = me.groups[id]; + this.svgElements = {}; + this.dom = {}; + this.groups = {}; + this.amountOfGroups = 0; + this._create(); - if (!group) { - // check for reserved ids - if (id == UNGROUPED) { - throw new Error('Illegal group id. ' + id + ' is a reserved id.'); - } + this.setOptions(options); + } - var groupOptions = Object.create(me.options); - util.extend(groupOptions, { - height: null - }); + Legend.prototype = new Component(); - group = new Group(id, groupData, me); - me.groups[id] = group; - // add items with this groupId to the new group - for (var itemId in me.items) { - if (me.items.hasOwnProperty(itemId)) { - var item = me.items[itemId]; - if (item.data.group == id) { - group.add(item); - } - } - } + Legend.prototype.addGroup = function(label, graphOptions) { + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; + } + this.amountOfGroups += 1; + }; - group.order(); - group.show(); - } - else { - // update group - group.setData(groupData); - } - }); + Legend.prototype.updateGroup = function(label, graphOptions) { + this.groups[label] = graphOptions; + }; - this.body.emitter.emit('change'); + Legend.prototype.removeGroup = function(label) { + if (this.groups.hasOwnProperty(label)) { + delete this.groups[label]; + this.amountOfGroups -= 1; + } }; - /** - * Handle removed groups - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onRemoveGroups = function(ids) { - var groups = this.groups; - ids.forEach(function (id) { - var group = groups[id]; + Legend.prototype._create = function() { + this.dom.frame = document.createElement('div'); + this.dom.frame.className = 'legend'; + this.dom.frame.style.position = "absolute"; + this.dom.frame.style.top = "10px"; + this.dom.frame.style.display = "block"; - if (group) { - group.hide(); - delete groups[id]; - } - }); + this.dom.textArea = document.createElement('div'); + this.dom.textArea.className = 'legendText'; + this.dom.textArea.style.position = "relative"; + this.dom.textArea.style.top = "0px"; - this.markDirty(); + this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.svg.style.position = 'absolute'; + this.svg.style.top = 0 +'px'; + this.svg.style.width = this.options.iconSize + 5 + 'px'; - this.body.emitter.emit('change'); + this.dom.frame.appendChild(this.svg); + this.dom.frame.appendChild(this.dom.textArea); }; /** - * Reorder the groups if needed - * @return {boolean} changed - * @private + * Hide the component from the DOM */ - ItemSet.prototype._orderGroups = function () { - if (this.groupsData) { - // reorder the groups - var groupIds = this.groupsData.getIds({ - order: this.options.groupOrder - }); - - var changed = !util.equalArray(groupIds, this.groupIds); - if (changed) { - // hide all groups, removes them from the DOM - var groups = this.groups; - groupIds.forEach(function (groupId) { - groups[groupId].hide(); - }); - - // show the groups again, attach them to the DOM in correct order - groupIds.forEach(function (groupId) { - groups[groupId].show(); - }); - - this.groupIds = groupIds; - } - - return changed; - } - else { - return false; - } - }; - - /** - * Add a new item - * @param {Item} item - * @private - */ - ItemSet.prototype._addItem = function(item) { - this.items[item.id] = item; - - // add to group - var groupId = this.groupsData ? item.data.group : UNGROUPED; - var group = this.groups[groupId]; - if (group) group.add(item); - }; + Legend.prototype.hide = function() { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); + } + }; /** - * Update an existing item - * @param {Item} item - * @param {Object} itemData - * @private + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - ItemSet.prototype._updateItem = function(item, itemData) { - var oldGroupId = item.data.group; - - item.data = itemData; - if (item.displayed) { - item.redraw(); - } - - // update group - if (oldGroupId != item.data.group) { - var oldGroup = this.groups[oldGroupId]; - if (oldGroup) oldGroup.remove(item); - - var groupId = this.groupsData ? item.data.group : UNGROUPED; - var group = this.groups[groupId]; - if (group) group.add(item); + Legend.prototype.show = function() { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); } }; - /** - * Delete an item from the ItemSet: remove it from the DOM, from the map - * with items, and from the map with visible items, and from the selection - * @param {Item} item - * @private - */ - ItemSet.prototype._removeItem = function(item) { - // remove from DOM - item.hide(); - - // remove from items - delete this.items[item.id]; - - // remove from selection - var index = this.selection.indexOf(item.id); - if (index != -1) this.selection.splice(index, 1); - - // remove from group - var groupId = this.groupsData ? item.data.group : UNGROUPED; - var group = this.groups[groupId]; - if (group) group.remove(item); + Legend.prototype.setOptions = function(options) { + var fields = ['enabled','orientation','icons','left','right']; + util.selectiveDeepExtend(fields, this.options, options); }; - /** - * Create an array containing all items being a range (having an end date) - * @param array - * @returns {Array} - * @private - */ - ItemSet.prototype._constructByEndArray = function(array) { - var endArray = []; - - for (var i = 0; i < array.length; i++) { - if (array[i] instanceof ItemRange) { - endArray.push(array[i]); + Legend.prototype.redraw = function() { + var activeGroups = 0; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true) { + activeGroups++; + } } } - return endArray; - }; - - /** - * Register the clicked item on touch, before dragStart is initiated. - * - * dragStart is initiated from a mousemove event, which can have left the item - * already resulting in an item == null - * - * @param {Event} event - * @private - */ - ItemSet.prototype._onTouch = function (event) { - // store the touched item, used in _onDragStart - this.touchParams.item = ItemSet.itemFromTarget(event); - }; - /** - * Start dragging the selected events - * @param {Event} event - * @private - */ - ItemSet.prototype._onDragStart = function (event) { - if (!this.options.editable.updateTime && !this.options.editable.updateGroup) { - return; + if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { + this.hide(); } + else { + this.show(); + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { + this.dom.frame.style.left = '4px'; + this.dom.frame.style.textAlign = "left"; + this.dom.textArea.style.textAlign = "left"; + this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; + this.dom.textArea.style.right = ''; + this.svg.style.left = 0 +'px'; + this.svg.style.right = ''; + } + else { + this.dom.frame.style.right = '4px'; + this.dom.frame.style.textAlign = "right"; + this.dom.textArea.style.textAlign = "right"; + this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; + this.dom.textArea.style.left = ''; + this.svg.style.right = 0 +'px'; + this.svg.style.left = ''; + } - var item = this.touchParams.item || null, - me = this, - props; - - if (item && item.selected) { - var dragLeftItem = event.target.dragLeftItem; - var dragRightItem = event.target.dragRightItem; + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { + this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; + this.dom.frame.style.bottom = ''; + } + else { + this.dom.frame.style.bottom = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; + this.dom.frame.style.top = ''; + } - if (dragLeftItem) { - props = { - item: dragLeftItem - }; + if (this.options.icons == false) { + this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; + this.dom.textArea.style.right = ''; + this.dom.textArea.style.left = ''; + this.svg.style.width = '0px'; + } + else { + this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' + this.drawLegendIcons(); + } - if (me.options.editable.updateTime) { - props.start = item.data.start.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; + var content = ''; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true) { + content += this.groups[groupId].content + '
'; + } } - - this.touchParams.itemProps = [props]; } - else if (dragRightItem) { - props = { - item: dragRightItem - }; + this.dom.textArea.innerHTML = content; + this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; + } + }; - if (me.options.editable.updateTime) { - props.end = item.data.end.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; - } + Legend.prototype.drawLegendIcons = function() { + if (this.dom.frame.parentNode) { + DOMutil.prepareElements(this.svgElements); + var padding = window.getComputedStyle(this.dom.frame).paddingTop; + var iconOffset = Number(padding.replace('px','')); + var x = iconOffset; + var iconWidth = this.options.iconSize; + var iconHeight = 0.75 * this.options.iconSize; + var y = iconOffset + 0.5 * iconHeight + 3; - this.touchParams.itemProps = [props]; - } - else { - this.touchParams.itemProps = this.getSelection().map(function (id) { - var item = me.items[id]; - var props = { - item: item - }; + this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; - if (me.options.editable.updateTime) { - if ('start' in item.data) props.start = item.data.start.valueOf(); - if ('end' in item.data) props.end = item.data.end.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true) { + this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); + y += iconHeight + this.options.iconSpacing; } - - return props; - }); + } } - event.stopPropagation(); + DOMutil.cleanupElements(this.svgElements); } }; - /** - * Drag selected items - * @param {Event} event - * @private - */ - ItemSet.prototype._onDrag = function (event) { - if (this.touchParams.itemProps) { - var range = this.body.range, - snap = this.body.util.snap || null, - deltaX = event.gesture.deltaX, - scale = (this.props.width / (range.end - range.start)), - offset = deltaX / scale; + module.exports = Legend; - // move - this.touchParams.itemProps.forEach(function (props) { - if ('start' in props) { - var start = new Date(props.start + offset); - props.item.data.start = snap ? snap(start) : start; - } - if ('end' in props) { - var end = new Date(props.end + offset); - props.item.data.end = snap ? snap(end) : end; - } +/***/ }, +/* 26 */ +/***/ function(module, exports, __webpack_require__) { - if ('group' in props) { - // drag from one group to another - var group = ItemSet.groupFromTarget(event); - if (group && group.groupId != props.item.data.group) { - var oldGroup = props.item.parent; - oldGroup.remove(props.item); - oldGroup.order(); - group.add(props.item); - group.order(); + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(2); + var DataSet = __webpack_require__(3); + var DataView = __webpack_require__(4); + var Component = __webpack_require__(18); + var DataAxis = __webpack_require__(21); + var GraphGroup = __webpack_require__(22); + var Legend = __webpack_require__(25); - props.item.data.group = group.groupId; - } - } - }); + var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items - // TODO: implement onMoving handler + /** + * This is the constructor of the LineGraph. It requires a Timeline body and options. + * + * @param body + * @param options + * @constructor + */ + function LineGraph(body, options) { + this.id = util.randomUUID(); + this.body = body; - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change'); + this.defaultOptions = { + yAxisOrientation: 'left', + defaultGroup: 'default', + sort: true, + sampling: true, + graphHeight: '400px', + shaded: { + enabled: false, + orientation: 'bottom' // top, bottom + }, + style: 'line', // line, bar + barChart: { + width: 50, + align: 'center' // left, center, right + }, + catmullRom: { + enabled: true, + parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) + alpha: 0.5 + }, + drawPoints: { + enabled: true, + size: 6, + style: 'square' // square, circle + }, + dataAxis: { + showMinorLabels: true, + showMajorLabels: true, + icons: false, + width: '40px', + visible: true + }, + legend: { + enabled: false, + icons: true, + left: { + visible: true, + position: 'top-left' // top/bottom - left,right + }, + right: { + visible: true, + position: 'top-right' // top/bottom - left,right + } + } + }; - event.stopPropagation(); - } - }; + // options is shared by this ItemSet and all its items + this.options = util.extend({}, this.defaultOptions); + this.dom = {}; + this.props = {}; + this.hammer = null; + this.groups = {}; - /** - * End of dragging selected items - * @param {Event} event - * @private - */ - ItemSet.prototype._onDragEnd = function (event) { - if (this.touchParams.itemProps) { - // prepare a change set for the changed items - var changes = [], - me = this, - dataset = this.itemsData.getDataSet(); + var me = this; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet - this.touchParams.itemProps.forEach(function (props) { - var id = props.item.id, - itemData = me.itemsData.get(id, me.itemOptions); + // listeners for the DataSet of the items + this.itemListeners = { + 'add': function (event, params, senderId) { + me._onAdd(params.items); + }, + 'update': function (event, params, senderId) { + me._onUpdate(params.items); + }, + 'remove': function (event, params, senderId) { + me._onRemove(params.items); + } + }; - var changed = false; - if ('start' in props.item.data) { - changed = (props.start != props.item.data.start.valueOf()); - itemData.start = util.convert(props.item.data.start, - dataset._options.type && dataset._options.type.start || 'Date'); - } - if ('end' in props.item.data) { - changed = changed || (props.end != props.item.data.end.valueOf()); - itemData.end = util.convert(props.item.data.end, - dataset._options.type && dataset._options.type.end || 'Date'); - } - if ('group' in props.item.data) { - changed = changed || (props.group != props.item.data.group); - itemData.group = props.item.data.group; - } + // listeners for the DataSet of the groups + this.groupListeners = { + 'add': function (event, params, senderId) { + me._onAddGroups(params.items); + }, + 'update': function (event, params, senderId) { + me._onUpdateGroups(params.items); + }, + 'remove': function (event, params, senderId) { + me._onRemoveGroups(params.items); + } + }; - // only apply changes when start or end is actually changed - if (changed) { - me.options.onMove(itemData, function (itemData) { - if (itemData) { - // apply changes - itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) - changes.push(itemData); - } - else { - // restore original values - if ('start' in props) props.item.data.start = props.start; - if ('end' in props) props.item.data.end = props.end; + this.items = {}; // object with an Item for every data item + this.selection = []; // list with the ids of all selected nodes + this.lastStart = this.body.range.start; + this.touchParams = {}; // stores properties while dragging - me.stackDirty = true; // force re-stacking of all items next redraw - me.body.emitter.emit('change'); - } - }); + this.svgElements = {}; + this.setOptions(options); + this.groupsUsingDefaultStyles = [0]; + + this.body.emitter.on("rangechange",function() { + if (me.lastStart != 0) { + var offset = me.body.range.start - me.lastStart; + var range = me.body.range.end - me.body.range.start; + if (me.width != 0) { + var rangePerPixelInv = me.width/range; + var xOffset = offset * rangePerPixelInv; + me.svg.style.left = (-me.width - xOffset) + "px"; + } } }); - this.touchParams.itemProps = null; + this.body.emitter.on("rangechanged", function() { + me.lastStart = me.body.range.start; + me.svg.style.left = util.option.asSize(-me.width); + me._updateGraph.apply(me); + }); - // apply the changes to the data (if there are changes) - if (changes.length) { - dataset.update(changes); - } + // create the HTML DOM + this._create(); + this.body.emitter.emit("change"); + } - event.stopPropagation(); - } - }; + LineGraph.prototype = new Component(); /** - * Handle selecting/deselecting an item when tapping it - * @param {Event} event - * @private + * Create the HTML DOM for the ItemSet */ - ItemSet.prototype._onSelectItem = function (event) { - if (!this.options.selectable) return; - - var ctrlKey = event.gesture.srcEvent && event.gesture.srcEvent.ctrlKey; - var shiftKey = event.gesture.srcEvent && event.gesture.srcEvent.shiftKey; - if (ctrlKey || shiftKey) { - this._onMultiSelectItem(event); - return; - } + LineGraph.prototype._create = function(){ + var frame = document.createElement('div'); + frame.className = 'LineGraph'; + this.dom.frame = frame; - var oldSelection = this.getSelection(); + // create svg element for graph drawing. + this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.svg.style.position = "relative"; + this.svg.style.height = ('' + this.options.graphHeight).replace("px",'') + 'px'; + this.svg.style.display = "block"; + frame.appendChild(this.svg); - var item = ItemSet.itemFromTarget(event); - var selection = item ? [item.id] : []; - this.setSelection(selection); + // data axis + this.options.dataAxis.orientation = 'left'; + this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg); - var newSelection = this.getSelection(); + this.options.dataAxis.orientation = 'right'; + this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg); + delete this.options.dataAxis.orientation; - // emit a select event, - // except when old selection is empty and new selection is still empty - if (newSelection.length > 0 || oldSelection.length > 0) { - this.body.emitter.emit('select', { - items: this.getSelection() - }); - } + // legends + this.legendLeft = new Legend(this.body, this.options.legend, 'left'); + this.legendRight = new Legend(this.body, this.options.legend, 'right'); - event.stopPropagation(); + this.show(); }; /** - * Handle creation and updates of an item on double tap - * @param event - * @private + * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element. + * @param options */ - ItemSet.prototype._onAddItem = function (event) { - if (!this.options.selectable) return; - if (!this.options.editable.add) return; - - var me = this, - snap = this.body.util.snap || null, - item = ItemSet.itemFromTarget(event); - - if (item) { - // update item + LineGraph.prototype.setOptions = function(options) { + if (options) { + var fields = ['sampling','defaultGroup','graphHeight','yAxisOrientation','style','barChart','dataAxis','sort']; + util.selectiveDeepExtend(fields, this.options, options); + util.mergeOptions(this.options, options,'catmullRom'); + util.mergeOptions(this.options, options,'drawPoints'); + util.mergeOptions(this.options, options,'shaded'); + util.mergeOptions(this.options, options,'legend'); - // execute async handler to update the item (or cancel it) - var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset - this.options.onUpdate(itemData, function (itemData) { - if (itemData) { - me.itemsData.update(itemData); + if (options.catmullRom) { + if (typeof options.catmullRom == 'object') { + if (options.catmullRom.parametrization) { + if (options.catmullRom.parametrization == 'uniform') { + this.options.catmullRom.alpha = 0; + } + else if (options.catmullRom.parametrization == 'chordal') { + this.options.catmullRom.alpha = 1.0; + } + else { + this.options.catmullRom.parametrization = 'centripetal'; + this.options.catmullRom.alpha = 0.5; + } + } } - }); - } - else { - // add item - var xAbs = util.getAbsoluteLeft(this.dom.frame); - var x = event.gesture.center.pageX - xAbs; - var start = this.body.util.toTime(x); - var newItem = { - start: snap ? snap(start) : start, - content: 'new item' - }; - - // when default type is a range, add a default end date to the new item - if (this.options.type === 'range') { - var end = this.body.util.toTime(x + this.props.width / 5); - newItem.end = snap ? snap(end) : end; } - newItem[this.itemsData.fieldId] = util.randomUUID(); - - var group = ItemSet.groupFromTarget(event); - if (group) { - newItem.group = group.groupId; + if (this.yAxisLeft) { + if (options.dataAxis !== undefined) { + this.yAxisLeft.setOptions(this.options.dataAxis); + this.yAxisRight.setOptions(this.options.dataAxis); + } } - // execute async handler to customize (or cancel) adding an item - this.options.onAdd(newItem, function (item) { - if (item) { - me.itemsData.add(newItem); - // TODO: need to trigger a redraw? + if (this.legendLeft) { + if (options.legend !== undefined) { + this.legendLeft.setOptions(this.options.legend); + this.legendRight.setOptions(this.options.legend); } - }); - } - }; - - /** - * Handle selecting/deselecting multiple items when holding an item - * @param {Event} event - * @private - */ - ItemSet.prototype._onMultiSelectItem = function (event) { - if (!this.options.selectable) return; - - var selection, - item = ItemSet.itemFromTarget(event); - - if (item) { - // multi select items - selection = this.getSelection(); // current selection - var index = selection.indexOf(item.id); - if (index == -1) { - // item is not yet selected -> select it - selection.push(item.id); - } - else { - // item is already selected -> deselect it - selection.splice(index, 1); } - this.setSelection(selection); - - this.body.emitter.emit('select', { - items: this.getSelection() - }); - - event.stopPropagation(); - } - }; - /** - * Find an item from an event target: - * searches for the attribute 'timeline-item' in the event target's element tree - * @param {Event} event - * @return {Item | null} item - */ - ItemSet.itemFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-item')) { - return target['timeline-item']; + if (this.groups.hasOwnProperty(UNGROUPED)) { + this.groups[UNGROUPED].setOptions(options); } - target = target.parentNode; } - - return null; + if (this.dom.frame) { + this._updateGraph(); + } }; /** - * Find the Group from an event target: - * searches for the attribute 'timeline-group' in the event target's element tree - * @param {Event} event - * @return {Group | null} group + * Hide the component from the DOM */ - ItemSet.groupFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-group')) { - return target['timeline-group']; - } - target = target.parentNode; + LineGraph.prototype.hide = function() { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } - - return null; }; /** - * Find the ItemSet from an event target: - * searches for the attribute 'timeline-itemset' in the event target's element tree - * @param {Event} event - * @return {ItemSet | null} item + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - ItemSet.itemSetFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-itemset')) { - return target['timeline-itemset']; - } - target = target.parentNode; + LineGraph.prototype.show = function() { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); } - - return null; }; - module.exports = ItemSet; - - -/***/ }, -/* 25 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var Component = __webpack_require__(18); /** - * Legend for Graph2d + * Set items + * @param {vis.DataSet | null} items */ - function Legend(body, options, side) { - this.body = body; - this.defaultOptions = { - enabled: true, - icons: true, - iconSize: 20, - iconSpacing: 6, - left: { - visible: true, - position: 'top-left' // top/bottom - left,center,right - }, - right: { - visible: true, - position: 'top-left' // top/bottom - left,center,right - } - } - this.side = side; - this.options = util.extend({},this.defaultOptions); + LineGraph.prototype.setItems = function(items) { + var me = this, + ids, + oldItemsData = this.itemsData; - this.svgElements = {}; - this.dom = {}; - this.groups = {}; - this.amountOfGroups = 0; - this._create(); + // replace the dataset + if (!items) { + this.itemsData = null; + } + else if (items instanceof DataSet || items instanceof DataView) { + this.itemsData = items; + } + else { + throw new TypeError('Data must be an instance of DataSet or DataView'); + } - this.setOptions(options); - } + if (oldItemsData) { + // unsubscribe from old dataset + util.forEach(this.itemListeners, function (callback, event) { + oldItemsData.off(event, callback); + }); - Legend.prototype = new Component(); + // remove all drawn items + ids = oldItemsData.getIds(); + this._onRemove(ids); + } + if (this.itemsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.itemListeners, function (callback, event) { + me.itemsData.on(event, callback, id); + }); - Legend.prototype.addGroup = function(label, graphOptions) { - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; + // add all new items + ids = this.itemsData.getIds(); + this._onAdd(ids); } - this.amountOfGroups += 1; + this._updateUngrouped(); + this._updateGraph(); + this.redraw(); }; - Legend.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; + /** + * Set groups + * @param {vis.DataSet} groups + */ + LineGraph.prototype.setGroups = function(groups) { + var me = this, + ids; - Legend.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; + // unsubscribe from current dataset + if (this.groupsData) { + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.unsubscribe(event, callback); + }); + + // remove all drawn groups + ids = this.groupsData.getIds(); + this.groupsData = null; + this._onRemoveGroups(ids); // note: this will cause a redraw } - }; - Legend.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.className = 'legend'; - this.dom.frame.style.position = "absolute"; - this.dom.frame.style.top = "10px"; - this.dom.frame.style.display = "block"; - - this.dom.textArea = document.createElement('div'); - this.dom.textArea.className = 'legendText'; - this.dom.textArea.style.position = "relative"; - this.dom.textArea.style.top = "0px"; - - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = 'absolute'; - this.svg.style.top = 0 +'px'; - this.svg.style.width = this.options.iconSize + 5 + 'px'; + // replace the dataset + if (!groups) { + this.groupsData = null; + } + else if (groups instanceof DataSet || groups instanceof DataView) { + this.groupsData = groups; + } + else { + throw new TypeError('Data must be an instance of DataSet or DataView'); + } - this.dom.frame.appendChild(this.svg); - this.dom.frame.appendChild(this.dom.textArea); - }; + if (this.groupsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.on(event, callback, id); + }); - /** - * Hide the component from the DOM - */ - Legend.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); + // draw all ms + ids = this.groupsData.getIds(); + this._onAddGroups(ids); } + this._onUpdate(); }; - /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed - */ - Legend.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } + + + LineGraph.prototype._onUpdate = function(ids) { + this._updateUngrouped(); + this._updateAllGroupData(); + this._updateGraph(); + this.redraw(); }; + LineGraph.prototype._onAdd = function (ids) {this._onUpdate(ids);}; + LineGraph.prototype._onRemove = function (ids) {this._onUpdate(ids);}; + LineGraph.prototype._onUpdateGroups = function (groupIds) { + for (var i = 0; i < groupIds.length; i++) { + var group = this.groupsData.get(groupIds[i]); + this._updateGroup(group, groupIds[i]); + } - Legend.prototype.setOptions = function(options) { - var fields = ['enabled','orientation','icons','left','right']; - util.selectiveDeepExtend(fields, this.options, options); + this._updateGraph(); + this.redraw(); }; + LineGraph.prototype._onAddGroups = function (groupIds) {this._onUpdateGroups(groupIds);}; - Legend.prototype.redraw = function() { - if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false) { - this.hide(); + LineGraph.prototype._onRemoveGroups = function (groupIds) { + for (var i = 0; i < groupIds.length; i++) { + if (!this.groups.hasOwnProperty(groupIds[i])) { + if (this.groups[groupIds[i]].options.yAxisOrientation == 'right') { + this.yAxisRight.removeGroup(groupIds[i]); + this.legendRight.removeGroup(groupIds[i]); + this.legendRight.redraw(); + } + else { + this.yAxisLeft.removeGroup(groupIds[i]); + this.legendLeft.removeGroup(groupIds[i]); + this.legendLeft.redraw(); + } + delete this.groups[groupIds[i]]; + } } - else { - this.show(); - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { - this.dom.frame.style.left = '4px'; - this.dom.frame.style.textAlign = "left"; - this.dom.textArea.style.textAlign = "left"; - this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.right = ''; - this.svg.style.left = 0 +'px'; - this.svg.style.right = ''; + this._updateUngrouped(); + this._updateGraph(); + this.redraw(); + }; + + /** + * update a group object + * + * @param group + * @param groupId + * @private + */ + LineGraph.prototype._updateGroup = function (group, groupId) { + if (!this.groups.hasOwnProperty(groupId)) { + this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles); + if (this.groups[groupId].options.yAxisOrientation == 'right') { + this.yAxisRight.addGroup(groupId, this.groups[groupId]); + this.legendRight.addGroup(groupId, this.groups[groupId]); } else { - this.dom.frame.style.right = '4px'; - this.dom.frame.style.textAlign = "right"; - this.dom.textArea.style.textAlign = "right"; - this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.left = ''; - this.svg.style.right = 0 +'px'; - this.svg.style.left = ''; + this.yAxisLeft.addGroup(groupId, this.groups[groupId]); + this.legendLeft.addGroup(groupId, this.groups[groupId]); } - - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { - this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.bottom = ''; + } + else { + this.groups[groupId].update(group); + if (this.groups[groupId].options.yAxisOrientation == 'right') { + this.yAxisRight.updateGroup(groupId, this.groups[groupId]); + this.legendRight.updateGroup(groupId, this.groups[groupId]); } else { - this.dom.frame.style.bottom = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.top = ''; + this.yAxisLeft.updateGroup(groupId, this.groups[groupId]); + this.legendLeft.updateGroup(groupId, this.groups[groupId]); } + } + this.legendLeft.redraw(); + this.legendRight.redraw(); + }; - if (this.options.icons == false) { - this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; - this.dom.textArea.style.right = ''; - this.dom.textArea.style.left = ''; - this.svg.style.width = '0px'; + LineGraph.prototype._updateAllGroupData = function () { + if (this.itemsData != null) { + var groupsContent = {}; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + groupsContent[groupId] = []; + } } - else { - this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' - this.drawLegendIcons(); + for (var itemId in this.itemsData._data) { + if (this.itemsData._data.hasOwnProperty(itemId)) { + var item = this.itemsData._data[itemId]; + item.x = util.convert(item.x,"Date"); + groupsContent[item.group].push(item); + } } - - var content = ''; for (var groupId in this.groups) { if (this.groups.hasOwnProperty(groupId)) { - content += this.groups[groupId].content + '
'; + this.groups[groupId].setItems(groupsContent[groupId]); } } - this.dom.textArea.innerHTML = content; - this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; } }; - Legend.prototype.drawLegendIcons = function() { - if (this.dom.frame.parentNode) { - DOMutil.prepareElements(this.svgElements); - var padding = window.getComputedStyle(this.dom.frame).paddingTop; - var iconOffset = Number(padding.replace('px','')); - var x = iconOffset; - var iconWidth = this.options.iconSize; - var iconHeight = 0.75 * this.options.iconSize; - var y = iconOffset + 0.5 * iconHeight + 3; - - this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; - - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + this.options.iconSpacing; + /** + * Create or delete the group holding all ungrouped items. This group is used when + * there are no groups specified. This anonymous group is called 'graph'. + * @protected + */ + LineGraph.prototype._updateUngrouped = function() { + if (this.itemsData != null) { + // var t0 = new Date(); + var group = {id: UNGROUPED, content: this.options.defaultGroup}; + this._updateGroup(group, UNGROUPED); + var ungroupedCounter = 0; + if (this.itemsData) { + for (var itemId in this.itemsData._data) { + if (this.itemsData._data.hasOwnProperty(itemId)) { + var item = this.itemsData._data[itemId]; + if (item != undefined) { + if (item.hasOwnProperty('group')) { + if (item.group === undefined) { + item.group = UNGROUPED; + } + } + else { + item.group = UNGROUPED; + } + ungroupedCounter = item.group == UNGROUPED ? ungroupedCounter + 1 : ungroupedCounter; + } + } } } - DOMutil.cleanupElements(this.svgElements); + // much much slower + // var datapoints = this.itemsData.get({ + // filter: function (item) {return item.group === undefined;}, + // showInternalIds:true + // }); + // if (datapoints.length > 0) { + // var updateQuery = []; + // for (var i = 0; i < datapoints.length; i++) { + // updateQuery.push({id:datapoints[i].id, group: UNGROUPED}); + // } + // this.itemsData.update(updateQuery, true); + // } + // var t1 = new Date(); + // var pointInUNGROUPED = this.itemsData.get({filter: function (item) {return item.group == UNGROUPED;}}); + if (ungroupedCounter == 0) { + delete this.groups[UNGROUPED]; + this.legendLeft.removeGroup(UNGROUPED); + this.legendRight.removeGroup(UNGROUPED); + this.yAxisLeft.removeGroup(UNGROUPED); + this.yAxisRight.removeGroup(UNGROUPED); + } + // console.log("getting amount ungrouped",new Date() - t1); + // console.log("putting in ungrouped",new Date() - t0); + } + else { + delete this.groups[UNGROUPED]; + this.legendLeft.removeGroup(UNGROUPED); + this.legendRight.removeGroup(UNGROUPED); + this.yAxisLeft.removeGroup(UNGROUPED); + this.yAxisRight.removeGroup(UNGROUPED); } + + this.legendLeft.redraw(); + this.legendRight.redraw(); }; - module.exports = Legend; + /** + * Redraw the component, mandatory function + * @return {boolean} Returns true if the component is resized + */ + LineGraph.prototype.redraw = function() { + var resized = false; -/***/ }, -/* 26 */ -/***/ function(module, exports, __webpack_require__) { + this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px'; + if (this.lastWidth === undefined && this.width || this.lastWidth != this.width) { + resized = true; + } + // check if this component is resized + resized = this._isResized() || resized; + // check whether zoomed (in that case we need to re-stack everything) + var visibleInterval = this.body.range.end - this.body.range.start; + var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth); + this.lastVisibleInterval = visibleInterval; + this.lastWidth = this.width; - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Component = __webpack_require__(18); - var DataAxis = __webpack_require__(21); - var GraphGroup = __webpack_require__(22); - var Legend = __webpack_require__(25); + // calculate actual size and position + this.width = this.dom.frame.offsetWidth; - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + // the svg element is three times as big as the width, this allows for fully dragging left and right + // without reloading the graph. the controls for this are bound to events in the constructor + if (resized == true) { + this.svg.style.width = util.option.asSize(3*this.width); + this.svg.style.left = util.option.asSize(-this.width); + } + if (zoomed == true) { + this._updateGraph(); + } + + this.legendLeft.redraw(); + this.legendRight.redraw(); + + return resized; + }; /** - * This is the constructor of the LineGraph. It requires a Timeline body and options. + * Update and redraw the graph. * - * @param body - * @param options - * @constructor */ - function LineGraph(body, options) { - this.id = util.randomUUID(); - this.body = body; + LineGraph.prototype._updateGraph = function () { + // reset the svg elements + DOMutil.prepareElements(this.svgElements); - this.defaultOptions = { - yAxisOrientation: 'left', - defaultGroup: 'default', - sort: true, - sampling: true, - graphHeight: '400px', - shaded: { - enabled: false, - orientation: 'bottom' // top, bottom - }, - style: 'line', // line, bar - barChart: { - width: 50, - align: 'center' // left, center, right - }, - catmullRom: { - enabled: true, - parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) - alpha: 0.5 - }, - drawPoints: { - enabled: true, - size: 6, - style: 'square' // square, circle - }, - dataAxis: { - showMinorLabels: true, - showMajorLabels: true, - icons: false, - width: '40px', - visible: true - }, - legend: { - enabled: false, - icons: true, - left: { - visible: true, - position: 'top-left' // top/bottom - left,right - }, - right: { - visible: true, - position: 'top-right' // top/bottom - left,right + if (this.width != 0 && this.itemsData != null) { + var group, groupData, preprocessedGroup, i; + var preprocessedGroupData = []; + var processedGroupData = []; + var groupRanges = []; + var changeCalled = false; + + // getting group Ids + var groupIds = []; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + groupIds.push(groupId); } } - }; - - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); - this.dom = {}; - this.props = {}; - this.hammer = null; - this.groups = {}; - - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet - // listeners for the DataSet of the items - this.itemListeners = { - 'add': function (event, params, senderId) { - me._onAdd(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdate(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemove(params.items); - } - }; + // this is the range of the SVG canvas + var minDate = this.body.util.toGlobalTime(- this.body.domProps.root.width); + var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width); - // listeners for the DataSet of the groups - this.groupListeners = { - 'add': function (event, params, senderId) { - me._onAddGroups(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdateGroups(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemoveGroups(params.items); - } - }; + // first select and preprocess the data from the datasets. + // the groups have their preselection of data, we now loop over this data to see + // what data we need to draw. Sorted data is much faster. + // more optimization is possible by doing the sampling before and using the binary search + // to find the end date to determine the increment. + if (groupIds.length > 0) { + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + if (group.visible == true) { + groupData = []; + // optimization for sorted data + if (group.options.sort == true) { + var guess = Math.max(0,util.binarySearchGeneric(group.itemsData, minDate, 'x', 'before')); + + for (var j = guess; j < group.itemsData.length; j++) { + var item = group.itemsData[j]; + if (item !== undefined) { + if (item.x > maxDate) { + groupData.push(item); + break; + } + else { + groupData.push(item); + } + } + } + } + else { + for (var j = 0; j < group.itemsData.length; j++) { + var item = group.itemsData[j]; + if (item !== undefined) { + if (item.x > minDate && item.x < maxDate) { + groupData.push(item); + } + } + } + } + // preprocess, split into ranges and data + if (groupData.length > 0) { + preprocessedGroup = this._preprocessData(groupData, group); + groupRanges.push({min: preprocessedGroup.min, max: preprocessedGroup.max}); + preprocessedGroupData.push(preprocessedGroup.data); + } + else { + groupRanges.push({}); + preprocessedGroupData.push([]); + } + } + else { + groupRanges.push({}); + preprocessedGroupData.push([]); + } + } - this.items = {}; // object with an Item for every data item - this.selection = []; // list with the ids of all selected nodes - this.lastStart = this.body.range.start; - this.touchParams = {}; // stores properties while dragging + // update the Y axis first, we use this data to draw at the correct Y points + // changeCalled is required to clean the SVG on a change emit. + changeCalled = this._updateYAxis(groupIds, groupRanges); + if (changeCalled == true) { + DOMutil.cleanupElements(this.svgElements); + this.body.emitter.emit("change"); + return; + } - this.svgElements = {}; - this.setOptions(options); - this.groupsUsingDefaultStyles = [0]; + // with the yAxis scaled correctly, use this to get the Y values of the points. + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + processedGroupData.push(this._convertYvalues(preprocessedGroupData[i],group)) + } - this.body.emitter.on("rangechange",function() { - if (me.lastStart != 0) { - var offset = me.body.range.start - me.lastStart; - var range = me.body.range.end - me.body.range.start; - if (me.width != 0) { - var rangePerPixelInv = me.width/range; - var xOffset = offset * rangePerPixelInv; - me.svg.style.left = (-me.width - xOffset) + "px"; + // draw the groups + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + if (group.visible == true) { + if (group.options.style == 'line') { + this._drawLineGraph(processedGroupData[i], group); + } + else { + this._drawBarGraph (processedGroupData[i], group); + } } } - }); - this.body.emitter.on("rangechanged", function() { - me.lastStart = me.body.range.start; - me.svg.style.left = util.option.asSize(-me.width); - me._updateGraph.apply(me); - }); - - // create the HTML DOM - this._create(); - this.body.emitter.emit("change"); - } + } + } - LineGraph.prototype = new Component(); + // cleanup unused svg elements + DOMutil.cleanupElements(this.svgElements); + }; /** - * Create the HTML DOM for the ItemSet + * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden. + * @param {array} groupIds + * @private */ - LineGraph.prototype._create = function(){ - var frame = document.createElement('div'); - frame.className = 'LineGraph'; - this.dom.frame = frame; - - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = "relative"; - this.svg.style.height = ('' + this.options.graphHeight).replace("px",'') + 'px'; - this.svg.style.display = "block"; - frame.appendChild(this.svg); + LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) { + var changeCalled = false; + var yAxisLeftUsed = false; + var yAxisRightUsed = false; + var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal; + var orientation = 'left'; - // data axis - this.options.dataAxis.orientation = 'left'; - this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg); + // if groups are present + if (groupIds.length > 0) { + for (var i = 0; i < groupIds.length; i++) { + orientation = 'left'; + var group = this.groups[groupIds[i]]; + if (group.visible == true) { + if (group.options.yAxisOrientation == 'right') { + orientation = 'right'; + } - this.options.dataAxis.orientation = 'right'; - this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg); - delete this.options.dataAxis.orientation; + minVal = groupRanges[i].min; + maxVal = groupRanges[i].max; - // legends - this.legendLeft = new Legend(this.body, this.options.legend, 'left'); - this.legendRight = new Legend(this.body, this.options.legend, 'right'); - - this.show(); - }; - - /** - * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element. - * @param options - */ - LineGraph.prototype.setOptions = function(options) { - if (options) { - var fields = ['sampling','defaultGroup','graphHeight','yAxisOrientation','style','barChart','dataAxis','sort']; - util.selectiveDeepExtend(fields, this.options, options); - util.mergeOptions(this.options, options,'catmullRom'); - util.mergeOptions(this.options, options,'drawPoints'); - util.mergeOptions(this.options, options,'shaded'); - util.mergeOptions(this.options, options,'legend'); - - if (options.catmullRom) { - if (typeof options.catmullRom == 'object') { - if (options.catmullRom.parametrization) { - if (options.catmullRom.parametrization == 'uniform') { - this.options.catmullRom.alpha = 0; - } - else if (options.catmullRom.parametrization == 'chordal') { - this.options.catmullRom.alpha = 1.0; - } - else { - this.options.catmullRom.parametrization = 'centripetal'; - this.options.catmullRom.alpha = 0.5; - } + if (orientation == 'left') { + yAxisLeftUsed = true; + minLeft = minLeft > minVal ? minVal : minLeft; + maxLeft = maxLeft < maxVal ? maxVal : maxLeft; + } + else { + yAxisRightUsed = true; + minRight = minRight > minVal ? minVal : minRight; + maxRight = maxRight < maxVal ? maxVal : maxRight; } } } - - if (this.yAxisLeft) { - if (options.dataAxis !== undefined) { - this.yAxisLeft.setOptions(this.options.dataAxis); - this.yAxisRight.setOptions(this.options.dataAxis); - } - } - - if (this.legendLeft) { - if (options.legend !== undefined) { - this.legendLeft.setOptions(this.options.legend); - this.legendRight.setOptions(this.options.legend); - } + if (yAxisLeftUsed == true) { + this.yAxisLeft.setRange(minLeft, maxLeft); } - - if (this.groups.hasOwnProperty(UNGROUPED)) { - this.groups[UNGROUPED].setOptions(options); + if (yAxisRightUsed == true) { + this.yAxisRight.setRange(minRight, maxRight); } } - if (this.dom.frame) { - this._updateGraph(); - } - }; - - /** - * Hide the component from the DOM - */ - LineGraph.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - }; - - /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed - */ - LineGraph.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } - }; + changeCalled = this._toggleAxisVisiblity(yAxisLeftUsed , this.yAxisLeft) || changeCalled; + changeCalled = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || changeCalled; - /** - * Set items - * @param {vis.DataSet | null} items - */ - LineGraph.prototype.setItems = function(items) { - var me = this, - ids, - oldItemsData = this.itemsData; - - // replace the dataset - if (!items) { - this.itemsData = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - this.itemsData = items; + if (yAxisRightUsed == true && yAxisLeftUsed == true) { + this.yAxisLeft.drawIcons = true; + this.yAxisRight.drawIcons = true; } else { - throw new TypeError('Data must be an instance of DataSet or DataView'); + this.yAxisLeft.drawIcons = false; + this.yAxisRight.drawIcons = false; } - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); - - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } + this.yAxisRight.master = !yAxisLeftUsed; - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); - }); + if (this.yAxisRight.master == false) { + if (yAxisRightUsed == true) {this.yAxisLeft.lineOffset = this.yAxisRight.width;} + else {this.yAxisLeft.lineOffset = 0;} - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); + changeCalled = this.yAxisLeft.redraw() || changeCalled; + this.yAxisRight.stepPixelsForced = this.yAxisLeft.stepPixels; + changeCalled = this.yAxisRight.redraw() || changeCalled; } - this._updateUngrouped(); - this._updateGraph(); - this.redraw(); + else { + changeCalled = this.yAxisRight.redraw() || changeCalled; + } + return changeCalled; }; /** - * Set groups - * @param {vis.DataSet} groups + * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function + * + * @param {boolean} axisUsed + * @returns {boolean} + * @private + * @param axis */ - LineGraph.prototype.setGroups = function(groups) { - var me = this, - ids; - - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.unsubscribe(event, callback); - }); - - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw - } - - // replace the dataset - if (!groups) { - this.groupsData = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - this.groupsData = groups; + LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) { + var changed = false; + if (axisUsed == false) { + if (axis.dom.frame.parentNode) { + axis.hide(); + changed = true; + } } else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } - - if (this.groupsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); - }); - - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); + if (!axis.dom.frame.parentNode) { + axis.show(); + changed = true; + } } - this._onUpdate(); + return changed; }; + /** + * draw a bar graph + * @param datapoints + * @param group + */ + LineGraph.prototype._drawBarGraph = function (dataset, group) { + if (dataset != null) { + if (dataset.length > 0) { + var coreDistance; + var minWidth = 0.1 * group.options.barChart.width; + var offset = 0; + var width = group.options.barChart.width; - LineGraph.prototype._onUpdate = function(ids) { - this._updateUngrouped(); - this._updateAllGroupData(); - this._updateGraph(); - this.redraw(); - }; - LineGraph.prototype._onAdd = function (ids) {this._onUpdate(ids);}; - LineGraph.prototype._onRemove = function (ids) {this._onUpdate(ids);}; - LineGraph.prototype._onUpdateGroups = function (groupIds) { - for (var i = 0; i < groupIds.length; i++) { - var group = this.groupsData.get(groupIds[i]); - this._updateGroup(group, groupIds[i]); - } + if (group.options.barChart.align == 'left') {offset -= 0.5*width;} + else if (group.options.barChart.align == 'right') {offset += 0.5*width;} - this._updateGraph(); - this.redraw(); - }; - LineGraph.prototype._onAddGroups = function (groupIds) {this._onUpdateGroups(groupIds);}; + for (var i = 0; i < dataset.length; i++) { + // dynammically downscale the width so there is no overlap up to 1/10th the original width + if (i+1 < dataset.length) {coreDistance = Math.abs(dataset[i+1].x - dataset[i].x);} + if (i > 0) {coreDistance = Math.min(coreDistance,Math.abs(dataset[i-1].x - dataset[i].x));} + if (coreDistance < width) {width = coreDistance < minWidth ? minWidth : coreDistance;} - LineGraph.prototype._onRemoveGroups = function (groupIds) { - for (var i = 0; i < groupIds.length; i++) { - if (!this.groups.hasOwnProperty(groupIds[i])) { - if (this.groups[groupIds[i]].options.yAxisOrientation == 'right') { - this.yAxisRight.removeGroup(groupIds[i]); - this.legendRight.removeGroup(groupIds[i]); - this.legendRight.redraw(); + DOMutil.drawBar(dataset[i].x + offset, dataset[i].y, width, group.zeroPosition - dataset[i].y, group.className + ' bar', this.svgElements, this.svg); } - else { - this.yAxisLeft.removeGroup(groupIds[i]); - this.legendLeft.removeGroup(groupIds[i]); - this.legendLeft.redraw(); + + // draw points + if (group.options.drawPoints.enabled == true) { + this._drawPoints(dataset, group, this.svgElements, this.svg, offset); } - delete this.groups[groupIds[i]]; } } - this._updateUngrouped(); - this._updateGraph(); - this.redraw(); }; + /** - * update a group object + * draw a line graph * + * @param datapoints * @param group - * @param groupId - * @private */ - LineGraph.prototype._updateGroup = function (group, groupId) { - if (!this.groups.hasOwnProperty(groupId)) { - this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles); - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.addGroup(groupId, this.groups[groupId]); - this.legendRight.addGroup(groupId, this.groups[groupId]); - } - else { - this.yAxisLeft.addGroup(groupId, this.groups[groupId]); - this.legendLeft.addGroup(groupId, this.groups[groupId]); - } - } - else { - this.groups[groupId].update(group); - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.updateGroup(groupId, this.groups[groupId]); - this.legendRight.updateGroup(groupId, this.groups[groupId]); - } - else { - this.yAxisLeft.updateGroup(groupId, this.groups[groupId]); - this.legendLeft.updateGroup(groupId, this.groups[groupId]); - } - } - this.legendLeft.redraw(); - this.legendRight.redraw(); - }; - - LineGraph.prototype._updateAllGroupData = function () { - if (this.itemsData != null) { - // ~450 ms @ 500k + LineGraph.prototype._drawLineGraph = function (dataset, group) { + if (dataset != null) { + if (dataset.length > 0) { + var path, d; + var svgHeight = Number(this.svg.style.height.replace("px","")); + path = DOMutil.getSVGElement('path', this.svgElements, this.svg); + path.setAttributeNS(null, "class", group.className); - var groupsContent = {}; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - groupsContent[groupId] = []; + // construct path from dataset + if (group.options.catmullRom.enabled == true) { + d = this._catmullRom(dataset, group); } - } - for (var itemId in this.itemsData._data) { - if (this.itemsData._data.hasOwnProperty(itemId)) { - var item = this.itemsData._data[itemId]; - item.x = util.convert(item.x,"Date"); - groupsContent[item.group].push(item); + else { + d = this._linear(dataset); } - } - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - this.groups[groupId].setItems(groupsContent[groupId]); + + // append with points for fill and finalize the path + if (group.options.shaded.enabled == true) { + var fillPath = DOMutil.getSVGElement('path',this.svgElements, this.svg); + var dFill; + if (group.options.shaded.orientation == 'top') { + dFill = "M" + dataset[0].x + "," + 0 + " " + d + "L" + dataset[dataset.length - 1].x + "," + 0; + } + else { + dFill = "M" + dataset[0].x + "," + svgHeight + " " + d + "L" + dataset[dataset.length - 1].x + "," + svgHeight; + } + fillPath.setAttributeNS(null, "class", group.className + " fill"); + fillPath.setAttributeNS(null, "d", dFill); + } + // copy properties to path for drawing. + path.setAttributeNS(null, "d", "M" + d); + + // draw points + if (group.options.drawPoints.enabled == true) { + this._drawPoints(dataset, group, this.svgElements, this.svg); } } - // // ~4500ms @ 500k - // for (var groupId in this.groups) { - // if (this.groups.hasOwnProperty(groupId)) { - // this.groups[groupId].setItems(this.itemsData.get({filter: - // function (item) { - // return (item.group == groupId); - // }, type:{x:"Date"}} - // )); - // } - // } } }; /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. This anonymous group is called 'graph'. - * @protected + * draw the data points + * + * @param dataset + * @param JSONcontainer + * @param svg + * @param group */ - LineGraph.prototype._updateUngrouped = function() { - if (this.itemsData != null) { - // var t0 = new Date(); - var group = {id: UNGROUPED, content: this.options.defaultGroup}; - this._updateGroup(group, UNGROUPED); - var ungroupedCounter = 0; - if (this.itemsData) { - for (var itemId in this.itemsData._data) { - if (this.itemsData._data.hasOwnProperty(itemId)) { - var item = this.itemsData._data[itemId]; - if (item != undefined) { - if (item.hasOwnProperty('group')) { - if (item.group === undefined) { - item.group = UNGROUPED; - } - } - else { - item.group = UNGROUPED; - } - ungroupedCounter = item.group == UNGROUPED ? ungroupedCounter + 1 : ungroupedCounter; - } - } - } - } - - // much much slower - // var datapoints = this.itemsData.get({ - // filter: function (item) {return item.group === undefined;}, - // showInternalIds:true - // }); - // if (datapoints.length > 0) { - // var updateQuery = []; - // for (var i = 0; i < datapoints.length; i++) { - // updateQuery.push({id:datapoints[i].id, group: UNGROUPED}); - // } - // this.itemsData.update(updateQuery, true); - // } - // var t1 = new Date(); - // var pointInUNGROUPED = this.itemsData.get({filter: function (item) {return item.group == UNGROUPED;}}); - if (ungroupedCounter == 0) { - delete this.groups[UNGROUPED]; - this.legendLeft.removeGroup(UNGROUPED); - this.legendRight.removeGroup(UNGROUPED); - this.yAxisLeft.removeGroup(UNGROUPED); - this.yAxisRight.removeGroup(UNGROUPED); - } - // console.log("getting amount ungrouped",new Date() - t1); - // console.log("putting in ungrouped",new Date() - t0); - } - else { - delete this.groups[UNGROUPED]; - this.legendLeft.removeGroup(UNGROUPED); - this.legendRight.removeGroup(UNGROUPED); - this.yAxisLeft.removeGroup(UNGROUPED); - this.yAxisRight.removeGroup(UNGROUPED); + LineGraph.prototype._drawPoints = function (dataset, group, JSONcontainer, svg, offset) { + if (offset === undefined) {offset = 0;} + for (var i = 0; i < dataset.length; i++) { + DOMutil.drawPoint(dataset[i].x + offset, dataset[i].y, group, JSONcontainer, svg); } - - this.legendLeft.redraw(); - this.legendRight.redraw(); }; + /** - * Redraw the component, mandatory function - * @return {boolean} Returns true if the component is resized + * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the + * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for + * the yAxis. + * + * @param datapoints + * @returns {Array} + * @private */ - LineGraph.prototype.redraw = function() { - var resized = false; + LineGraph.prototype._preprocessData = function (datapoints, group) { + var extractedData = []; + var xValue, yValue; + var toScreen = this.body.util.toScreen; - this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px'; - if (this.lastWidth === undefined && this.width || this.lastWidth != this.width) { - resized = true; - } - // check if this component is resized - resized = this._isResized() || resized; - // check whether zoomed (in that case we need to re-stack everything) - var visibleInterval = this.body.range.end - this.body.range.start; - var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth); - this.lastVisibleInterval = visibleInterval; - this.lastWidth = this.width; + var increment = 1; + var amountOfPoints = datapoints.length; - // calculate actual size and position - this.width = this.dom.frame.offsetWidth; + var yMin = datapoints[0].y; + var yMax = datapoints[0].y; - // the svg element is three times as big as the width, this allows for fully dragging left and right - // without reloading the graph. the controls for this are bound to events in the constructor - if (resized == true) { - this.svg.style.width = util.option.asSize(3*this.width); - this.svg.style.left = util.option.asSize(-this.width); - } - if (zoomed == true) { - this._updateGraph(); + // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop + // of width changing of the yAxis. + if (group.options.sampling == true) { + var xDistance = this.body.util.toGlobalScreen(datapoints[datapoints.length-1].x) - this.body.util.toGlobalScreen(datapoints[0].x); + var pointsPerPixel = amountOfPoints/xDistance; + increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1,Math.round(pointsPerPixel))); } - this.legendLeft.redraw(); - this.legendRight.redraw(); + for (var i = 0; i < amountOfPoints; i += increment) { + xValue = toScreen(datapoints[i].x) + this.width - 1; + yValue = datapoints[i].y; + extractedData.push({x: xValue, y: yValue}); + yMin = yMin > yValue ? yValue : yMin; + yMax = yMax < yValue ? yValue : yMax; + } - return resized; + // extractedData.sort(function (a,b) {return a.x - b.x;}); + return {min: yMin, max: yMax, data: extractedData}; }; /** - * Update and redraw the graph. + * This uses the DataAxis object to generate the correct Y coordinate on the SVG window. It uses the + * util function toScreen to get the x coordinate from the timestamp. * + * @param datapoints + * @param options + * @returns {Array} + * @private */ - LineGraph.prototype._updateGraph = function () { - // reset the svg elements - DOMutil.prepareElements(this.svgElements); - // // very slow... - // groupData = group.itemsData.get({filter: - // function (item) { - // return (item.x > minDate && item.x < maxDate); - // }} - // ); + LineGraph.prototype._convertYvalues = function (datapoints, group) { + var extractedData = []; + var xValue, yValue; + var axis = this.yAxisLeft; + var svgHeight = Number(this.svg.style.height.replace("px","")); + if (group.options.yAxisOrientation == 'right') { + axis = this.yAxisRight; + } - if (this.width != 0 && this.itemsData != null) { - var group, groupData, preprocessedGroup, i; - var preprocessedGroupData = []; - var processedGroupData = []; - var groupRanges = []; - var changeCalled = false; + for (var i = 0; i < datapoints.length; i++) { + xValue = datapoints[i].x; + yValue = Math.round(axis.convertValue(datapoints[i].y)); + extractedData.push({x: xValue, y: yValue}); + } - // getting group Ids - var groupIds = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - groupIds.push(groupId); - } - } + group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0))); - // this is the range of the SVG canvas - var minDate = this.body.util.toGlobalTime(- this.body.domProps.root.width); - var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width); + // extractedData.sort(function (a,b) {return a.x - b.x;}); + return extractedData; + }; - // first select and preprocess the data from the datasets. - // the groups have their preselection of data, we now loop over this data to see - // what data we need to draw. Sorted data is much faster. - // more optimization is possible by doing the sampling before and using the binary search - // to find the end date to determine the increment. - if (groupIds.length > 0) { - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - groupData = []; - // optimization for sorted data - if (group.options.sort == true) { - var guess = Math.max(0,util.binarySearchGeneric(group.itemsData, minDate, 'x', 'before')); - - for (var j = guess; j < group.itemsData.length; j++) { - var item = group.itemsData[j]; - if (item !== undefined) { - if (item.x > maxDate) { - groupData.push(item); - break; - } - else { - groupData.push(item); - } - } - } - } - else { - for (var j = 0; j < group.itemsData.length; j++) { - var item = group.itemsData[j]; - if (item !== undefined) { - if (item.x > minDate && item.x < maxDate) { - groupData.push(item); - } - } - } - } - // preprocess, split into ranges and data - preprocessedGroup = this._preprocessData(groupData, group); - groupRanges.push({min: preprocessedGroup.min, max: preprocessedGroup.max}); - preprocessedGroupData.push(preprocessedGroup.data); - } - // update the Y axis first, we use this data to draw at the correct Y points - // changeCalled is required to clean the SVG on a change emit. - changeCalled = this._updateYAxis(groupIds, groupRanges); - if (changeCalled == true) { - DOMutil.cleanupElements(this.svgElements); - this.body.emitter.emit("change"); - return; - } + /** + * This uses an uniform parametrization of the CatmullRom algorithm: + * "On the Parameterization of Catmull-Rom Curves" by Cem Yuksel et al. + * @param data + * @returns {string} + * @private + */ + LineGraph.prototype._catmullRomUniform = function(data) { + // catmull rom + var p0, p1, p2, p3, bp1, bp2; + var d = Math.round(data[0].x) + "," + Math.round(data[0].y) + " "; + var normalization = 1/6; + var length = data.length; + for (var i = 0; i < length - 1; i++) { - // with the yAxis scaled correctly, use this to get the Y values of the points. - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - processedGroupData.push(this._convertYvalues(preprocessedGroupData[i],group)) - } + p0 = (i == 0) ? data[0] : data[i-1]; + p1 = data[i]; + p2 = data[i+1]; + p3 = (i + 2 < length) ? data[i+2] : p2; - // draw the groups - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (group.options.style == 'line') { - this._drawLineGraph(processedGroupData[i], group); - } - else { - this._drawBarGraph (processedGroupData[i], group); - } - } - } + + // Catmull-Rom to Cubic Bezier conversion matrix + // 0 1 0 0 + // -1/6 1 1/6 0 + // 0 1/6 1 -1/6 + // 0 0 1 0 + + // bp0 = { x: p1.x, y: p1.y }; + bp1 = { x: ((-p0.x + 6*p1.x + p2.x) *normalization), y: ((-p0.y + 6*p1.y + p2.y) *normalization)}; + bp2 = { x: (( p1.x + 6*p2.x - p3.x) *normalization), y: (( p1.y + 6*p2.y - p3.y) *normalization)}; + // bp0 = { x: p2.x, y: p2.y }; + + d += "C" + + bp1.x + "," + + bp1.y + " " + + bp2.x + "," + + bp2.y + " " + + p2.x + "," + + p2.y + " "; } - // cleanup unused svg elements - DOMutil.cleanupElements(this.svgElements); + return d; }; /** - * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden. - * @param {array} groupIds + * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm. + * By default, the centripetal parameterization is used because this gives the nicest results. + * These parameterizations are relatively heavy because the distance between 4 points have to be calculated. + * + * One optimization can be used to reuse distances since this is a sliding window approach. + * @param data + * @returns {string} * @private */ - LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) { - var changeCalled = false; - var yAxisLeftUsed = false; - var yAxisRightUsed = false; - var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal; - var orientation = 'left'; + LineGraph.prototype._catmullRom = function(data, group) { + var alpha = group.options.catmullRom.alpha; + if (alpha == 0 || alpha === undefined) { + return this._catmullRomUniform(data); + } + else { + var p0, p1, p2, p3, bp1, bp2, d1,d2,d3, A, B, N, M; + var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA; + var d = Math.round(data[0].x) + "," + Math.round(data[0].y) + " "; + var length = data.length; + for (var i = 0; i < length - 1; i++) { - // if groups are present - if (groupIds.length > 0) { - for (var i = 0; i < groupIds.length; i++) { - orientation = 'left'; - var group = this.groups[groupIds[i]]; - if (group.options.yAxisOrientation == 'right') { - orientation = 'right'; - } + p0 = (i == 0) ? data[0] : data[i-1]; + p1 = data[i]; + p2 = data[i+1]; + p3 = (i + 2 < length) ? data[i+2] : p2; - minVal = groupRanges[i].min; - maxVal = groupRanges[i].max; + d1 = Math.sqrt(Math.pow(p0.x - p1.x,2) + Math.pow(p0.y - p1.y,2)); + d2 = Math.sqrt(Math.pow(p1.x - p2.x,2) + Math.pow(p1.y - p2.y,2)); + d3 = Math.sqrt(Math.pow(p2.x - p3.x,2) + Math.pow(p2.y - p3.y,2)); - if (orientation == 'left') { - yAxisLeftUsed = true; - minLeft = minLeft > minVal ? minVal : minLeft; - maxLeft = maxLeft < maxVal ? maxVal : maxLeft; - } - else { - yAxisRightUsed = true; - minRight = minRight > minVal ? minVal : minRight; - maxRight = maxRight < maxVal ? maxVal : maxRight; - } - } - if (yAxisLeftUsed == true) { - this.yAxisLeft.setRange(minLeft, maxLeft); - } - if (yAxisRightUsed == true) { - this.yAxisRight.setRange(minRight, maxRight); - } - } + // Catmull-Rom to Cubic Bezier conversion matrix + // + // A = 2d1^2a + 3d1^a * d2^a + d3^2a + // B = 2d3^2a + 3d3^a * d2^a + d2^2a + // + // [ 0 1 0 0 ] + // [ -d2^2a/N A/N d1^2a/N 0 ] + // [ 0 d3^2a/M B/M -d2^2a/M ] + // [ 0 0 1 0 ] - changeCalled = this._toggleAxisVisiblity(yAxisLeftUsed , this.yAxisLeft) || changeCalled; - changeCalled = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || changeCalled; + // [ 0 1 0 0 ] + // [ -d2pow2a/N A/N d1pow2a/N 0 ] + // [ 0 d3pow2a/M B/M -d2pow2a/M ] + // [ 0 0 1 0 ] - if (yAxisRightUsed == true && yAxisLeftUsed == true) { - this.yAxisLeft.drawIcons = true; - this.yAxisRight.drawIcons = true; - } - else { - this.yAxisLeft.drawIcons = false; - this.yAxisRight.drawIcons = false; - } + d3powA = Math.pow(d3, alpha); + d3pow2A = Math.pow(d3,2*alpha); + d2powA = Math.pow(d2, alpha); + d2pow2A = Math.pow(d2,2*alpha); + d1powA = Math.pow(d1, alpha); + d1pow2A = Math.pow(d1,2*alpha); - this.yAxisRight.master = !yAxisLeftUsed; + A = 2*d1pow2A + 3*d1powA * d2powA + d2pow2A; + B = 2*d3pow2A + 3*d3powA * d2powA + d2pow2A; + N = 3*d1powA * (d1powA + d2powA); + if (N > 0) {N = 1 / N;} + M = 3*d3powA * (d3powA + d2powA); + if (M > 0) {M = 1 / M;} - if (this.yAxisRight.master == false) { - if (yAxisRightUsed == true) { - this.yAxisLeft.lineOffset = this.yAxisRight.width; + bp1 = { x: ((-d2pow2A * p0.x + A*p1.x + d1pow2A * p2.x) * N), + y: ((-d2pow2A * p0.y + A*p1.y + d1pow2A * p2.y) * N)}; + + bp2 = { x: (( d3pow2A * p1.x + B*p2.x - d2pow2A * p3.x) * M), + y: (( d3pow2A * p1.y + B*p2.y - d2pow2A * p3.y) * M)}; + + if (bp1.x == 0 && bp1.y == 0) {bp1 = p1;} + if (bp2.x == 0 && bp2.y == 0) {bp2 = p2;} + d += "C" + + bp1.x + "," + + bp1.y + " " + + bp2.x + "," + + bp2.y + " " + + p2.x + "," + + p2.y + " "; } - changeCalled = this.yAxisLeft.redraw() || changeCalled; - this.yAxisRight.stepPixelsForced = this.yAxisLeft.stepPixels; - changeCalled = this.yAxisRight.redraw() || changeCalled; - } - else { - changeCalled = this.yAxisRight.redraw() || changeCalled; + + return d; } - return changeCalled; }; /** - * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function - * - * @param {boolean} axisUsed - * @returns {boolean} + * this generates the SVG path for a linear drawing between datapoints. + * @param data + * @returns {string} * @private - * @param axis */ - LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) { - var changed = false; - if (axisUsed == false) { - if (axis.dom.frame.parentNode) { - axis.hide(); - changed = true; + LineGraph.prototype._linear = function(data) { + // linear + var d = ""; + for (var i = 0; i < data.length; i++) { + if (i == 0) { + d += data[i].x + "," + data[i].y; } - } - else { - if (!axis.dom.frame.parentNode) { - axis.show(); - changed = true; + else { + d += " " + data[i].x + "," + data[i].y; } } - return changed; + return d; }; + module.exports = LineGraph; - /** - * draw a bar graph - * @param datapoints - * @param group - */ - LineGraph.prototype._drawBarGraph = function (dataset, group) { - if (dataset != null) { - if (dataset.length > 0) { - var coreDistance; - var minWidth = 0.1 * group.options.barChart.width; - var offset = 0; - var width = group.options.barChart.width; - - if (group.options.barChart.align == 'left') {offset -= 0.5*width;} - else if (group.options.barChart.align == 'right') {offset += 0.5*width;} - - for (var i = 0; i < dataset.length; i++) { - // dynammically downscale the width so there is no overlap up to 1/10th the original width - if (i+1 < dataset.length) {coreDistance = Math.abs(dataset[i+1].x - dataset[i].x);} - if (i > 0) {coreDistance = Math.min(coreDistance,Math.abs(dataset[i-1].x - dataset[i].x));} - if (coreDistance < width) {width = coreDistance < minWidth ? minWidth : coreDistance;} - - DOMutil.drawBar(dataset[i].x + offset, dataset[i].y, width, group.zeroPosition - dataset[i].y, group.className + ' bar', this.svgElements, this.svg); - } - // draw points - if (group.options.drawPoints.enabled == true) { - this._drawPoints(dataset, group, this.svgElements, this.svg, offset); - } - } - } - }; +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + var util = __webpack_require__(1); + var Component = __webpack_require__(18); + var TimeStep = __webpack_require__(17); /** - * draw a line graph - * - * @param datapoints - * @param group - */ - LineGraph.prototype._drawLineGraph = function (dataset, group) { - if (dataset != null) { - if (dataset.length > 0) { - var path, d; - var svgHeight = Number(this.svg.style.height.replace("px","")); - path = DOMutil.getSVGElement('path', this.svgElements, this.svg); - path.setAttributeNS(null, "class", group.className); + * A horizontal time axis + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body + * @param {Object} [options] See TimeAxis.setOptions for the available + * options. + * @constructor TimeAxis + * @extends Component + */ + function TimeAxis (body, options) { + this.dom = { + foreground: null, + majorLines: [], + majorTexts: [], + minorLines: [], + minorTexts: [], + redundant: { + majorLines: [], + majorTexts: [], + minorLines: [], + minorTexts: [] + } + }; + this.props = { + range: { + start: 0, + end: 0, + minimumStep: 0 + }, + lineTop: 0 + }; - // construct path from dataset - if (group.options.catmullRom.enabled == true) { - d = this._catmullRom(dataset, group); - } - else { - d = this._linear(dataset); - } + this.defaultOptions = { + orientation: 'bottom', // supported: 'top', 'bottom' + // TODO: implement timeaxis orientations 'left' and 'right' + showMinorLabels: true, + showMajorLabels: true + }; + this.options = util.extend({}, this.defaultOptions); - // append with points for fill and finalize the path - if (group.options.shaded.enabled == true) { - var fillPath = DOMutil.getSVGElement('path',this.svgElements, this.svg); - var dFill; - if (group.options.shaded.orientation == 'top') { - dFill = "M" + dataset[0].x + "," + 0 + " " + d + "L" + dataset[dataset.length - 1].x + "," + 0; - } - else { - dFill = "M" + dataset[0].x + "," + svgHeight + " " + d + "L" + dataset[dataset.length - 1].x + "," + svgHeight; - } - fillPath.setAttributeNS(null, "class", group.className + " fill"); - fillPath.setAttributeNS(null, "d", dFill); - } - // copy properties to path for drawing. - path.setAttributeNS(null, "d", "M" + d); + this.body = body; - // draw points - if (group.options.drawPoints.enabled == true) { - this._drawPoints(dataset, group, this.svgElements, this.svg); - } - } - } - }; + // create the HTML DOM + this._create(); + + this.setOptions(options); + } + + TimeAxis.prototype = new Component(); /** - * draw the data points - * - * @param dataset - * @param JSONcontainer - * @param svg - * @param group + * Set options for the TimeAxis. + * Parameters will be merged in current options. + * @param {Object} options Available options: + * {string} [orientation] + * {boolean} [showMinorLabels] + * {boolean} [showMajorLabels] */ - LineGraph.prototype._drawPoints = function (dataset, group, JSONcontainer, svg, offset) { - if (offset === undefined) {offset = 0;} - for (var i = 0; i < dataset.length; i++) { - DOMutil.drawPoint(dataset[i].x + offset, dataset[i].y, group, JSONcontainer, svg); + TimeAxis.prototype.setOptions = function(options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels'], this.options, options); } }; - - /** - * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the - * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for - * the yAxis. - * - * @param datapoints - * @returns {Array} - * @private + * Create the HTML DOM for the TimeAxis */ - LineGraph.prototype._preprocessData = function (datapoints, group) { - var extractedData = []; - var xValue, yValue; - var toScreen = this.body.util.toScreen; - - var increment = 1; - var amountOfPoints = datapoints.length; + TimeAxis.prototype._create = function() { + this.dom.foreground = document.createElement('div'); + this.dom.background = document.createElement('div'); - var yMin = datapoints[0].y; - var yMax = datapoints[0].y; + this.dom.foreground.className = 'timeaxis foreground'; + this.dom.background.className = 'timeaxis background'; + }; - // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop - // of width changing of the yAxis. - if (group.options.sampling == true) { - var xDistance = this.body.util.toGlobalScreen(datapoints[datapoints.length-1].x) - this.body.util.toGlobalScreen(datapoints[0].x); - var pointsPerPixel = amountOfPoints/xDistance; - increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1,Math.round(pointsPerPixel))); + /** + * Destroy the TimeAxis + */ + TimeAxis.prototype.destroy = function() { + // remove from DOM + if (this.dom.foreground.parentNode) { + this.dom.foreground.parentNode.removeChild(this.dom.foreground); } - - for (var i = 0; i < amountOfPoints; i += increment) { - xValue = toScreen(datapoints[i].x) + this.width - 1; - yValue = datapoints[i].y; - extractedData.push({x: xValue, y: yValue}); - yMin = yMin > yValue ? yValue : yMin; - yMax = yMax < yValue ? yValue : yMax; + if (this.dom.background.parentNode) { + this.dom.background.parentNode.removeChild(this.dom.background); } - // extractedData.sort(function (a,b) {return a.x - b.x;}); - return {min: yMin, max: yMax, data: extractedData}; + this.body = null; }; /** - * This uses the DataAxis object to generate the correct Y coordinate on the SVG window. It uses the - * util function toScreen to get the x coordinate from the timestamp. - * - * @param datapoints - * @param options - * @returns {Array} - * @private + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - LineGraph.prototype._convertYvalues = function (datapoints, group) { - var extractedData = []; - var xValue, yValue; - var axis = this.yAxisLeft; - var svgHeight = Number(this.svg.style.height.replace("px","")); - - if (group.options.yAxisOrientation == 'right') { - axis = this.yAxisRight; - } - - for (var i = 0; i < datapoints.length; i++) { - xValue = datapoints[i].x; - yValue = Math.round(axis.convertValue(datapoints[i].y)); - extractedData.push({x: xValue, y: yValue}); - } + TimeAxis.prototype.redraw = function () { + var options = this.options, + props = this.props, + foreground = this.dom.foreground, + background = this.dom.background; - group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0))); + // determine the correct parent DOM element (depending on option orientation) + var parent = (options.orientation == 'top') ? this.body.dom.top : this.body.dom.bottom; + var parentChanged = (foreground.parentNode !== parent); - // extractedData.sort(function (a,b) {return a.x - b.x;}); - return extractedData; - }; + // calculate character width and height + this._calculateCharSize(); + // TODO: recalculate sizes only needed when parent is resized or options is changed + var orientation = this.options.orientation, + showMinorLabels = this.options.showMinorLabels, + showMajorLabels = this.options.showMajorLabels; - /** - * This uses an uniform parametrization of the CatmullRom algorithm: - * "On the Parameterization of Catmull-Rom Curves" by Cem Yuksel et al. - * @param data - * @returns {string} - * @private - */ - LineGraph.prototype._catmullRomUniform = function(data) { - // catmull rom - var p0, p1, p2, p3, bp1, bp2; - var d = Math.round(data[0].x) + "," + Math.round(data[0].y) + " "; - var normalization = 1/6; - var length = data.length; - for (var i = 0; i < length - 1; i++) { + // determine the width and height of the elemens for the axis + props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; + props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + props.height = props.minorLabelHeight + props.majorLabelHeight; + props.width = foreground.offsetWidth; - p0 = (i == 0) ? data[0] : data[i-1]; - p1 = data[i]; - p2 = data[i+1]; - p3 = (i + 2 < length) ? data[i+2] : p2; + props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - + (options.orientation == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); + props.minorLineWidth = 1; // TODO: really calculate width + props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; + props.majorLineWidth = 1; // TODO: really calculate width + // take foreground and background offline while updating (is almost twice as fast) + var foregroundNextSibling = foreground.nextSibling; + var backgroundNextSibling = background.nextSibling; + foreground.parentNode && foreground.parentNode.removeChild(foreground); + background.parentNode && background.parentNode.removeChild(background); - // Catmull-Rom to Cubic Bezier conversion matrix - // 0 1 0 0 - // -1/6 1 1/6 0 - // 0 1/6 1 -1/6 - // 0 0 1 0 + foreground.style.height = this.props.height + 'px'; - // bp0 = { x: p1.x, y: p1.y }; - bp1 = { x: ((-p0.x + 6*p1.x + p2.x) *normalization), y: ((-p0.y + 6*p1.y + p2.y) *normalization)}; - bp2 = { x: (( p1.x + 6*p2.x - p3.x) *normalization), y: (( p1.y + 6*p2.y - p3.y) *normalization)}; - // bp0 = { x: p2.x, y: p2.y }; + this._repaintLabels(); - d += "C" + - bp1.x + "," + - bp1.y + " " + - bp2.x + "," + - bp2.y + " " + - p2.x + "," + - p2.y + " "; + // put DOM online again (at the same place) + if (foregroundNextSibling) { + parent.insertBefore(foreground, foregroundNextSibling); + } + else { + parent.appendChild(foreground) + } + if (backgroundNextSibling) { + this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); + } + else { + this.body.dom.backgroundVertical.appendChild(background) } - return d; + return this._isResized() || parentChanged; }; /** - * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm. - * By default, the centripetal parameterization is used because this gives the nicest results. - * These parameterizations are relatively heavy because the distance between 4 points have to be calculated. - * - * One optimization can be used to reuse distances since this is a sliding window approach. - * @param data - * @returns {string} + * Repaint major and minor text labels and vertical grid lines * @private */ - LineGraph.prototype._catmullRom = function(data, group) { - var alpha = group.options.catmullRom.alpha; - if (alpha == 0 || alpha === undefined) { - return this._catmullRomUniform(data); - } - else { - var p0, p1, p2, p3, bp1, bp2, d1,d2,d3, A, B, N, M; - var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA; - var d = Math.round(data[0].x) + "," + Math.round(data[0].y) + " "; - var length = data.length; - for (var i = 0; i < length - 1; i++) { + TimeAxis.prototype._repaintLabels = function () { + var orientation = this.options.orientation; - p0 = (i == 0) ? data[0] : data[i-1]; - p1 = data[i]; - p2 = data[i+1]; - p3 = (i + 2 < length) ? data[i+2] : p2; + // calculate range and step (step such that we have space for 7 characters per label) + var start = util.convert(this.body.range.start, 'Number'), + end = util.convert(this.body.range.end, 'Number'), + minimumStep = this.body.util.toTime((this.props.minorCharWidth || 10) * 7).valueOf() + -this.body.util.toTime(0).valueOf(); + var step = new TimeStep(new Date(start), new Date(end), minimumStep); + this.step = step; - d1 = Math.sqrt(Math.pow(p0.x - p1.x,2) + Math.pow(p0.y - p1.y,2)); - d2 = Math.sqrt(Math.pow(p1.x - p2.x,2) + Math.pow(p1.y - p2.y,2)); - d3 = Math.sqrt(Math.pow(p2.x - p3.x,2) + Math.pow(p2.y - p3.y,2)); + // Move all DOM elements to a "redundant" list, where they + // can be picked for re-use, and clear the lists with lines and texts. + // At the end of the function _repaintLabels, left over elements will be cleaned up + var dom = this.dom; + dom.redundant.majorLines = dom.majorLines; + dom.redundant.majorTexts = dom.majorTexts; + dom.redundant.minorLines = dom.minorLines; + dom.redundant.minorTexts = dom.minorTexts; + dom.majorLines = []; + dom.majorTexts = []; + dom.minorLines = []; + dom.minorTexts = []; - // Catmull-Rom to Cubic Bezier conversion matrix - // - // A = 2d1^2a + 3d1^a * d2^a + d3^2a - // B = 2d3^2a + 3d3^a * d2^a + d2^2a - // - // [ 0 1 0 0 ] - // [ -d2^2a/N A/N d1^2a/N 0 ] - // [ 0 d3^2a/M B/M -d2^2a/M ] - // [ 0 0 1 0 ] + step.first(); + var xFirstMajorLabel = undefined; + var max = 0; + while (step.hasNext() && max < 1000) { + max++; + var cur = step.getCurrent(), + x = this.body.util.toScreen(cur), + isMajor = step.isMajor(); - // [ 0 1 0 0 ] - // [ -d2pow2a/N A/N d1pow2a/N 0 ] - // [ 0 d3pow2a/M B/M -d2pow2a/M ] - // [ 0 0 1 0 ] + // TODO: lines must have a width, such that we can create css backgrounds - d3powA = Math.pow(d3, alpha); - d3pow2A = Math.pow(d3,2*alpha); - d2powA = Math.pow(d2, alpha); - d2pow2A = Math.pow(d2,2*alpha); - d1powA = Math.pow(d1, alpha); - d1pow2A = Math.pow(d1,2*alpha); + if (this.options.showMinorLabels) { + this._repaintMinorText(x, step.getLabelMinor(), orientation); + } - A = 2*d1pow2A + 3*d1powA * d2powA + d2pow2A; - B = 2*d3pow2A + 3*d3powA * d2powA + d2pow2A; - N = 3*d1powA * (d1powA + d2powA); - if (N > 0) {N = 1 / N;} - M = 3*d3powA * (d3powA + d2powA); - if (M > 0) {M = 1 / M;} + if (isMajor && this.options.showMajorLabels) { + if (x > 0) { + if (xFirstMajorLabel == undefined) { + xFirstMajorLabel = x; + } + this._repaintMajorText(x, step.getLabelMajor(), orientation); + } + this._repaintMajorLine(x, orientation); + } + else { + this._repaintMinorLine(x, orientation); + } - bp1 = { x: ((-d2pow2A * p0.x + A*p1.x + d1pow2A * p2.x) * N), - y: ((-d2pow2A * p0.y + A*p1.y + d1pow2A * p2.y) * N)}; + step.next(); + } - bp2 = { x: (( d3pow2A * p1.x + B*p2.x - d2pow2A * p3.x) * M), - y: (( d3pow2A * p1.y + B*p2.y - d2pow2A * p3.y) * M)}; + // create a major label on the left when needed + if (this.options.showMajorLabels) { + var leftTime = this.body.util.toTime(0), + leftText = step.getLabelMajor(leftTime), + widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation - if (bp1.x == 0 && bp1.y == 0) {bp1 = p1;} - if (bp2.x == 0 && bp2.y == 0) {bp2 = p2;} - d += "C" + - bp1.x + "," + - bp1.y + " " + - bp2.x + "," + - bp2.y + " " + - p2.x + "," + - p2.y + " "; + if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { + this._repaintMajorText(0, leftText, orientation); } - - return d; } + + // Cleanup leftover DOM elements from the redundant list + util.forEach(this.dom.redundant, function (arr) { + while (arr.length) { + var elem = arr.pop(); + if (elem && elem.parentNode) { + elem.parentNode.removeChild(elem); + } + } + }); }; /** - * this generates the SVG path for a linear drawing between datapoints. - * @param data - * @returns {string} + * Create a minor label for the axis at position x + * @param {Number} x + * @param {String} text + * @param {String} orientation "top" or "bottom" (default) * @private */ - LineGraph.prototype._linear = function(data) { - // linear - var d = ""; - for (var i = 0; i < data.length; i++) { - if (i == 0) { - d += data[i].x + "," + data[i].y; - } - else { - d += " " + data[i].x + "," + data[i].y; - } - } - return d; - }; - - module.exports = LineGraph; + TimeAxis.prototype._repaintMinorText = function (x, text, orientation) { + // reuse redundant label + var label = this.dom.redundant.minorTexts.shift(); + if (!label) { + // create new label + var content = document.createTextNode(''); + label = document.createElement('div'); + label.appendChild(content); + label.className = 'text minor'; + this.dom.foreground.appendChild(label); + } + this.dom.minorTexts.push(label); -/***/ }, -/* 27 */ -/***/ function(module, exports, __webpack_require__) { + label.childNodes[0].nodeValue = text; - var util = __webpack_require__(1); - var Component = __webpack_require__(18); - var TimeStep = __webpack_require__(17); + label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0'; + label.style.left = x + 'px'; + //label.title = title; // TODO: this is a heavy operation + }; /** - * A horizontal time axis - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See TimeAxis.setOptions for the available - * options. - * @constructor TimeAxis - * @extends Component + * Create a Major label for the axis at position x + * @param {Number} x + * @param {String} text + * @param {String} orientation "top" or "bottom" (default) + * @private */ - function TimeAxis (body, options) { - this.dom = { - foreground: null, - majorLines: [], - majorTexts: [], - minorLines: [], - minorTexts: [], - redundant: { - majorLines: [], - majorTexts: [], - minorLines: [], - minorTexts: [] - } - }; - this.props = { - range: { - start: 0, - end: 0, - minimumStep: 0 - }, - lineTop: 0 - }; - - this.defaultOptions = { - orientation: 'bottom', // supported: 'top', 'bottom' - // TODO: implement timeaxis orientations 'left' and 'right' - showMinorLabels: true, - showMajorLabels: true - }; - this.options = util.extend({}, this.defaultOptions); - - this.body = body; - - // create the HTML DOM - this._create(); + TimeAxis.prototype._repaintMajorText = function (x, text, orientation) { + // reuse redundant label + var label = this.dom.redundant.majorTexts.shift(); - this.setOptions(options); - } + if (!label) { + // create label + var content = document.createTextNode(text); + label = document.createElement('div'); + label.className = 'text major'; + label.appendChild(content); + this.dom.foreground.appendChild(label); + } + this.dom.majorTexts.push(label); - TimeAxis.prototype = new Component(); + label.childNodes[0].nodeValue = text; + //label.title = title; // TODO: this is a heavy operation - /** - * Set options for the TimeAxis. - * Parameters will be merged in current options. - * @param {Object} options Available options: - * {string} [orientation] - * {boolean} [showMinorLabels] - * {boolean} [showMajorLabels] - */ - TimeAxis.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels'], this.options, options); - } + label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight + 'px'); + label.style.left = x + 'px'; }; /** - * Create the HTML DOM for the TimeAxis - */ - TimeAxis.prototype._create = function() { - this.dom.foreground = document.createElement('div'); - this.dom.background = document.createElement('div'); - - this.dom.foreground.className = 'timeaxis foreground'; - this.dom.background.className = 'timeaxis background'; - }; - - /** - * Destroy the TimeAxis - */ - TimeAxis.prototype.destroy = function() { - // remove from DOM - if (this.dom.foreground.parentNode) { - this.dom.foreground.parentNode.removeChild(this.dom.foreground); - } - if (this.dom.background.parentNode) { - this.dom.background.parentNode.removeChild(this.dom.background); - } - - this.body = null; - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - TimeAxis.prototype.redraw = function () { - var options = this.options, - props = this.props, - foreground = this.dom.foreground, - background = this.dom.background; - - // determine the correct parent DOM element (depending on option orientation) - var parent = (options.orientation == 'top') ? this.body.dom.top : this.body.dom.bottom; - var parentChanged = (foreground.parentNode !== parent); - - // calculate character width and height - this._calculateCharSize(); - - // TODO: recalculate sizes only needed when parent is resized or options is changed - var orientation = this.options.orientation, - showMinorLabels = this.options.showMinorLabels, - showMajorLabels = this.options.showMajorLabels; - - // determine the width and height of the elemens for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; - props.height = props.minorLabelHeight + props.majorLabelHeight; - props.width = foreground.offsetWidth; - - props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - - (options.orientation == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); - props.minorLineWidth = 1; // TODO: really calculate width - props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; - props.majorLineWidth = 1; // TODO: really calculate width - - // take foreground and background offline while updating (is almost twice as fast) - var foregroundNextSibling = foreground.nextSibling; - var backgroundNextSibling = background.nextSibling; - foreground.parentNode && foreground.parentNode.removeChild(foreground); - background.parentNode && background.parentNode.removeChild(background); - - foreground.style.height = this.props.height + 'px'; - - this._repaintLabels(); - - // put DOM online again (at the same place) - if (foregroundNextSibling) { - parent.insertBefore(foreground, foregroundNextSibling); - } - else { - parent.appendChild(foreground) - } - if (backgroundNextSibling) { - this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); - } - else { - this.body.dom.backgroundVertical.appendChild(background) - } - - return this._isResized() || parentChanged; - }; - - /** - * Repaint major and minor text labels and vertical grid lines - * @private - */ - TimeAxis.prototype._repaintLabels = function () { - var orientation = this.options.orientation; - - // calculate range and step (step such that we have space for 7 characters per label) - var start = util.convert(this.body.range.start, 'Number'), - end = util.convert(this.body.range.end, 'Number'), - minimumStep = this.body.util.toTime((this.props.minorCharWidth || 10) * 7).valueOf() - -this.body.util.toTime(0).valueOf(); - var step = new TimeStep(new Date(start), new Date(end), minimumStep); - this.step = step; - - // Move all DOM elements to a "redundant" list, where they - // can be picked for re-use, and clear the lists with lines and texts. - // At the end of the function _repaintLabels, left over elements will be cleaned up - var dom = this.dom; - dom.redundant.majorLines = dom.majorLines; - dom.redundant.majorTexts = dom.majorTexts; - dom.redundant.minorLines = dom.minorLines; - dom.redundant.minorTexts = dom.minorTexts; - dom.majorLines = []; - dom.majorTexts = []; - dom.minorLines = []; - dom.minorTexts = []; - - step.first(); - var xFirstMajorLabel = undefined; - var max = 0; - while (step.hasNext() && max < 1000) { - max++; - var cur = step.getCurrent(), - x = this.body.util.toScreen(cur), - isMajor = step.isMajor(); - - // TODO: lines must have a width, such that we can create css backgrounds - - if (this.options.showMinorLabels) { - this._repaintMinorText(x, step.getLabelMinor(), orientation); - } - - if (isMajor && this.options.showMajorLabels) { - if (x > 0) { - if (xFirstMajorLabel == undefined) { - xFirstMajorLabel = x; - } - this._repaintMajorText(x, step.getLabelMajor(), orientation); - } - this._repaintMajorLine(x, orientation); - } - else { - this._repaintMinorLine(x, orientation); - } - - step.next(); - } - - // create a major label on the left when needed - if (this.options.showMajorLabels) { - var leftTime = this.body.util.toTime(0), - leftText = step.getLabelMajor(leftTime), - widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation - - if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { - this._repaintMajorText(0, leftText, orientation); - } - } - - // Cleanup leftover DOM elements from the redundant list - util.forEach(this.dom.redundant, function (arr) { - while (arr.length) { - var elem = arr.pop(); - if (elem && elem.parentNode) { - elem.parentNode.removeChild(elem); - } - } - }); - }; - - /** - * Create a minor label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) - * @private - */ - TimeAxis.prototype._repaintMinorText = function (x, text, orientation) { - // reuse redundant label - var label = this.dom.redundant.minorTexts.shift(); - - if (!label) { - // create new label - var content = document.createTextNode(''); - label = document.createElement('div'); - label.appendChild(content); - label.className = 'text minor'; - this.dom.foreground.appendChild(label); - } - this.dom.minorTexts.push(label); - - label.childNodes[0].nodeValue = text; - - label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0'; - label.style.left = x + 'px'; - //label.title = title; // TODO: this is a heavy operation - }; - - /** - * Create a Major label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) - * @private - */ - TimeAxis.prototype._repaintMajorText = function (x, text, orientation) { - // reuse redundant label - var label = this.dom.redundant.majorTexts.shift(); - - if (!label) { - // create label - var content = document.createTextNode(text); - label = document.createElement('div'); - label.className = 'text major'; - label.appendChild(content); - this.dom.foreground.appendChild(label); - } - this.dom.majorTexts.push(label); - - label.childNodes[0].nodeValue = text; - //label.title = title; // TODO: this is a heavy operation - - label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight + 'px'); - label.style.left = x + 'px'; - }; - - /** - * Create a minor line for the axis at position x - * @param {Number} x - * @param {String} orientation "top" or "bottom" (default) - * @private + * Create a minor line for the axis at position x + * @param {Number} x + * @param {String} orientation "top" or "bottom" (default) + * @private */ TimeAxis.prototype._repaintMinorLine = function (x, orientation) { // reuse redundant line @@ -13680,178 +12528,29 @@ return /******/ (function(modules) { // webpackBootstrap /* 28 */ /***/ function(module, exports, __webpack_require__) { - var Hammer = __webpack_require__(41); + var Item = __webpack_require__(29); /** - * @constructor Item - * @param {Object} data Object containing (optional) parameters type, - * start, end, content, group, className. + * @constructor ItemBox + * @extends Item + * @param {Object} data Object containing parameters start + * content, className. * @param {{toScreen: function, toTime: function}} conversion * Conversion functions from time to screen and vice versa - * @param {Object} options Configuration options + * @param {Object} [options] Configuration options * // TODO: describe available options */ - function Item (data, conversion, options) { - this.id = null; - this.parent = null; - this.data = data; - this.dom = null; - this.conversion = conversion || {}; - this.options = options || {}; - - this.selected = false; - this.displayed = false; - this.dirty = true; - - this.top = null; - this.left = null; - this.width = null; - this.height = null; - } - - /** - * Select current item - */ - Item.prototype.select = function() { - this.selected = true; - if (this.displayed) this.redraw(); - }; - - /** - * Unselect current item - */ - Item.prototype.unselect = function() { - this.selected = false; - if (this.displayed) this.redraw(); - }; - - /** - * Set a parent for the item - * @param {ItemSet | Group} parent - */ - Item.prototype.setParent = function(parent) { - if (this.displayed) { - this.hide(); - this.parent = parent; - if (this.parent) { - this.show(); - } - } - else { - this.parent = parent; - } - }; - - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - Item.prototype.isVisible = function(range) { - // Should be implemented by Item implementations - return false; - }; - - /** - * Show the Item in the DOM (when not already visible) - * @return {Boolean} changed - */ - Item.prototype.show = function() { - return false; - }; - - /** - * Hide the Item from the DOM (when visible) - * @return {Boolean} changed - */ - Item.prototype.hide = function() { - return false; - }; - - /** - * Repaint the item - */ - Item.prototype.redraw = function() { - // should be implemented by the item - }; - - /** - * Reposition the Item horizontally - */ - Item.prototype.repositionX = function() { - // should be implemented by the item - }; - - /** - * Reposition the Item vertically - */ - Item.prototype.repositionY = function() { - // should be implemented by the item - }; - - /** - * Repaint a delete button on the top right of the item when the item is selected - * @param {HTMLElement} anchor - * @protected - */ - Item.prototype._repaintDeleteButton = function (anchor) { - if (this.selected && this.options.editable.remove && !this.dom.deleteButton) { - // create and show button - var me = this; - - var deleteButton = document.createElement('div'); - deleteButton.className = 'delete'; - deleteButton.title = 'Delete this item'; - - Hammer(deleteButton, { - preventDefault: true - }).on('tap', function (event) { - me.parent.removeFromDataSet(me); - event.stopPropagation(); - }); - - anchor.appendChild(deleteButton); - this.dom.deleteButton = deleteButton; - } - else if (!this.selected && this.dom.deleteButton) { - // remove button - if (this.dom.deleteButton.parentNode) { - this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton); - } - this.dom.deleteButton = null; - } - }; - - module.exports = Item; - - -/***/ }, -/* 29 */ -/***/ function(module, exports, __webpack_require__) { - - var Item = __webpack_require__(28); - - /** - * @constructor ItemBox - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe available options - */ - function ItemBox (data, conversion, options) { - this.props = { - dot: { - width: 0, - height: 0 - }, - line: { - width: 0, - height: 0 - } - }; + function ItemBox (data, conversion, options) { + this.props = { + dot: { + width: 0, + height: 0 + }, + line: { + width: 0, + height: 0 + } + }; // validate data if (data) { @@ -14072,75 +12771,224 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 30 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { - var Item = __webpack_require__(28); + var Hammer = __webpack_require__(41); /** - * @constructor ItemPoint - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. + * @constructor Item + * @param {Object} data Object containing (optional) parameters type, + * start, end, content, group, className. * @param {{toScreen: function, toTime: function}} conversion * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options + * @param {Object} options Configuration options * // TODO: describe available options */ - function ItemPoint (data, conversion, options) { - this.props = { - dot: { - top: 0, - width: 0, - height: 0 - }, - content: { - height: 0, - marginLeft: 0 - } - }; + function Item (data, conversion, options) { + this.id = null; + this.parent = null; + this.data = data; + this.dom = null; + this.conversion = conversion || {}; + this.options = options || {}; - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); - } - } + this.selected = false; + this.displayed = false; + this.dirty = true; - Item.call(this, data, conversion, options); + this.top = null; + this.left = null; + this.width = null; + this.height = null; } - ItemPoint.prototype = new Item (null, null, null); + /** + * Select current item + */ + Item.prototype.select = function() { + this.selected = true; + if (this.displayed) this.redraw(); + }; + + /** + * Unselect current item + */ + Item.prototype.unselect = function() { + this.selected = false; + if (this.displayed) this.redraw(); + }; + + /** + * Set a parent for the item + * @param {ItemSet | Group} parent + */ + Item.prototype.setParent = function(parent) { + if (this.displayed) { + this.hide(); + this.parent = parent; + if (this.parent) { + this.show(); + } + } + else { + this.parent = parent; + } + }; /** * Check whether this item is visible inside given range * @returns {{start: Number, end: Number}} range with a timestamp for start and end * @returns {boolean} True if visible */ - ItemPoint.prototype.isVisible = function(range) { - // determine visibility - // TODO: account for the real width of the item. Right now we just add 1/4 to the window - var interval = (range.end - range.start) / 4; - return (this.data.start > range.start - interval) && (this.data.start < range.end + interval); + Item.prototype.isVisible = function(range) { + // Should be implemented by Item implementations + return false; }; /** - * Repaint the item + * Show the Item in the DOM (when not already visible) + * @return {Boolean} changed */ - ItemPoint.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // background box - dom.point = document.createElement('div'); - // className is updated in redraw() + Item.prototype.show = function() { + return false; + }; - // contents box, right from the dot - dom.content = document.createElement('div'); - dom.content.className = 'content'; + /** + * Hide the Item from the DOM (when visible) + * @return {Boolean} changed + */ + Item.prototype.hide = function() { + return false; + }; + + /** + * Repaint the item + */ + Item.prototype.redraw = function() { + // should be implemented by the item + }; + + /** + * Reposition the Item horizontally + */ + Item.prototype.repositionX = function() { + // should be implemented by the item + }; + + /** + * Reposition the Item vertically + */ + Item.prototype.repositionY = function() { + // should be implemented by the item + }; + + /** + * Repaint a delete button on the top right of the item when the item is selected + * @param {HTMLElement} anchor + * @protected + */ + Item.prototype._repaintDeleteButton = function (anchor) { + if (this.selected && this.options.editable.remove && !this.dom.deleteButton) { + // create and show button + var me = this; + + var deleteButton = document.createElement('div'); + deleteButton.className = 'delete'; + deleteButton.title = 'Delete this item'; + + Hammer(deleteButton, { + preventDefault: true + }).on('tap', function (event) { + me.parent.removeFromDataSet(me); + event.stopPropagation(); + }); + + anchor.appendChild(deleteButton); + this.dom.deleteButton = deleteButton; + } + else if (!this.selected && this.dom.deleteButton) { + // remove button + if (this.dom.deleteButton.parentNode) { + this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton); + } + this.dom.deleteButton = null; + } + }; + + module.exports = Item; + + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + + var Item = __webpack_require__(29); + + /** + * @constructor ItemPoint + * @extends Item + * @param {Object} data Object containing parameters start + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe available options + */ + function ItemPoint (data, conversion, options) { + this.props = { + dot: { + top: 0, + width: 0, + height: 0 + }, + content: { + height: 0, + marginLeft: 0 + } + }; + + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data); + } + } + + Item.call(this, data, conversion, options); + } + + ItemPoint.prototype = new Item (null, null, null); + + /** + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible + */ + ItemPoint.prototype.isVisible = function(range) { + // determine visibility + // TODO: account for the real width of the item. Right now we just add 1/4 to the window + var interval = (range.end - range.start) / 4; + return (this.data.start > range.start - interval) && (this.data.start < range.end + interval); + }; + + /** + * Repaint the item + */ + ItemPoint.prototype.redraw = function() { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; + + // background box + dom.point = document.createElement('div'); + // className is updated in redraw() + + // contents box, right from the dot + dom.content = document.createElement('div'); + dom.content.className = 'content'; dom.point.appendChild(dom.content); // dot at start @@ -14282,7 +13130,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ function(module, exports, __webpack_require__) { var Hammer = __webpack_require__(41); - var Item = __webpack_require__(28); + var Item = __webpack_require__(29); /** * @constructor ItemRange @@ -14578,11 +13426,11 @@ return /******/ (function(modules) { // webpackBootstrap /* 32 */ /***/ function(module, exports, __webpack_require__) { - var Emitter = __webpack_require__(45); + var Emitter = __webpack_require__(46); var Hammer = __webpack_require__(41); var mousetrap = __webpack_require__(47); var util = __webpack_require__(1); - var hammerUtil = __webpack_require__(42); + var hammerUtil = __webpack_require__(43); var DataSet = __webpack_require__(3); var DataView = __webpack_require__(4); var dotparser = __webpack_require__(38); @@ -14592,10 +13440,10 @@ return /******/ (function(modules) { // webpackBootstrap var Node = __webpack_require__(36); var Edge = __webpack_require__(33); var Popup = __webpack_require__(37); - var MixinLoader = __webpack_require__(44); + var MixinLoader = __webpack_require__(45); // Load custom shapes into CanvasRenderingContext2D - __webpack_require__(43); + __webpack_require__(44); /** * @constructor Network @@ -14617,8 +13465,6 @@ return /******/ (function(modules) { // webpackBootstrap // create variables and set default values this.containerElement = container; - this.width = '100%'; - this.height = '100%'; // render and calculation settings this.renderRefreshRate = 60; // hz (fps) @@ -14627,17 +13473,14 @@ return /******/ (function(modules) { // webpackBootstrap this.maxPhysicsTicksPerRender = 3; // max amount of physics ticks per render step. this.physicsDiscreteStepsize = 0.50; // discrete stepsize of the simulation - this.stabilize = true; // stabilize before displaying the network - this.selectable = true; this.initializing = true; - // these functions are triggered when the dataset is edited this.triggerFunctions = {add:null,edit:null,editEdge:null,connect:null,del:null}; - // set constant values - this.constants = { + this.defaultOptions = { nodes: { + mass: 1, radiusMin: 10, radiusMax: 30, radius: 10, @@ -14771,6 +13614,7 @@ return /******/ (function(modules) { // webpackBootstrap dynamicSmoothCurves: true, maxVelocity: 30, minVelocity: 0.1, // px/s + stabilize: true, // stabilize before displaying the network stabilizationIterations: 1000, // maximum number of iteration to stabilize labels:{ add:"Add Node", @@ -14805,8 +13649,13 @@ return /******/ (function(modules) { // webpackBootstrap zoomable: true, hover: false, hideEdgesOnDrag: false, - hideNodesOnDrag: false + hideNodesOnDrag: false, + width : '100%', + height : '100%', + selectable: true }; + this.constants = util.extend({}, this.defaultOptions); + this.hoverObj = {nodes:{},edges:{}}; this.controlNodesActive = false; @@ -14909,7 +13758,7 @@ return /******/ (function(modules) { // webpackBootstrap } else { // zoom so all data will fit on the screen, if clustering is enabled, we do not want start to be called here. - if (this.stabilize == false) { + if (this.constants.stabilize == false) { this.zoomExtent(true,this.constants.clustering.enabled); } } @@ -15126,7 +13975,7 @@ return /******/ (function(modules) { // webpackBootstrap this._putDataInSector(); if (!disableStart) { // find a stable position or start animating to a stable position - if (this.stabilize) { + if (this.constants.stabilize) { var me = this; setTimeout(function() {me._stabilize(); me.start();},0) } @@ -15144,72 +13993,17 @@ return /******/ (function(modules) { // webpackBootstrap Network.prototype.setOptions = function (options) { if (options) { var prop; - // retrieve parameter values - if (options.width !== undefined) {this.width = options.width;} - if (options.height !== undefined) {this.height = options.height;} - if (options.stabilize !== undefined) {this.stabilize = options.stabilize;} - if (options.selectable !== undefined) {this.selectable = options.selectable;} - if (options.freezeForStabilization !== undefined) {this.constants.freezeForStabilization = options.freezeForStabilization;} - if (options.configurePhysics !== undefined){this.constants.configurePhysics = options.configurePhysics;} - if (options.stabilizationIterations !== undefined) {this.constants.stabilizationIterations = options.stabilizationIterations;} - if (options.dragNetwork !== undefined) {this.constants.dragNetwork = options.dragNetwork;} - if (options.dragNodes !== undefined) {this.constants.dragNodes = options.dragNodes;} - if (options.zoomable !== undefined) {this.constants.zoomable = options.zoomable;} - if (options.hover !== undefined) {this.constants.hover = options.hover;} - if (options.hideEdgesOnDrag !== undefined) {this.constants.hideEdgesOnDrag = options.hideEdgesOnDrag;} - if (options.hideNodesOnDrag !== undefined) {this.constants.hideNodesOnDrag = options.hideNodesOnDrag;} - - // TODO: deprecated since version 3.0.0. Cleanup some day - if (options.dragGraph !== undefined) { - throw new Error('Option dragGraph is renamed to dragNetwork'); - } - - if (options.labels !== undefined) { - for (prop in options.labels) { - if (options.labels.hasOwnProperty(prop)) { - this.constants.labels[prop] = options.labels[prop]; - } - } - } - if (options.onAdd) { - this.triggerFunctions.add = options.onAdd; - } - - if (options.onEdit) { - this.triggerFunctions.edit = options.onEdit; - } - - if (options.onEditEdge) { - this.triggerFunctions.editEdge = options.onEditEdge; - } - - if (options.onConnect) { - this.triggerFunctions.connect = options.onConnect; - } - - if (options.onDelete) { - this.triggerFunctions.del = options.onDelete; - } + var fields = ['nodes','edges','smoothCurves','hierarchicalLayout','clustering','navigation','keyboard','dataManipulation', + 'onAdd','onEdit','onEditEdge','onConnect','onDelete' + ]; + util.selectiveNotDeepExtend(fields,this.constants, options); + util.selectiveNotDeepExtend(['color'],this.constants.nodes, options.nodes); + util.selectiveNotDeepExtend(['color','length'],this.constants.edges, options.edges); if (options.physics) { - if (options.physics.barnesHut) { - this.constants.physics.barnesHut.enabled = true; - for (prop in options.physics.barnesHut) { - if (options.physics.barnesHut.hasOwnProperty(prop)) { - this.constants.physics.barnesHut[prop] = options.physics.barnesHut[prop]; - } - } - } - - if (options.physics.repulsion) { - this.constants.physics.barnesHut.enabled = false; - for (prop in options.physics.repulsion) { - if (options.physics.repulsion.hasOwnProperty(prop)) { - this.constants.physics.repulsion[prop] = options.physics.repulsion[prop]; - } - } - } + util.mergeOptions(this.constants.physics, options.physics,'barnesHut'); + util.mergeOptions(this.constants.physics, options.physics,'repulsion'); if (options.physics.hierarchicalRepulsion) { this.constants.hierarchicalLayout.enabled = true; @@ -15223,91 +14017,27 @@ return /******/ (function(modules) { // webpackBootstrap } } - if (options.smoothCurves !== undefined) { - if (typeof options.smoothCurves == 'boolean') { - this.constants.smoothCurves.enabled = options.smoothCurves; - } - else { - this.constants.smoothCurves.enabled = true; - for (prop in options.smoothCurves) { - if (options.smoothCurves.hasOwnProperty(prop)) { - this.constants.smoothCurves[prop] = options.smoothCurves[prop]; - } - } - } - } - - if (options.hierarchicalLayout) { - this.constants.hierarchicalLayout.enabled = true; - for (prop in options.hierarchicalLayout) { - if (options.hierarchicalLayout.hasOwnProperty(prop)) { - this.constants.hierarchicalLayout[prop] = options.hierarchicalLayout[prop]; - } - } - } - else if (options.hierarchicalLayout !== undefined) { - this.constants.hierarchicalLayout.enabled = false; - } - - if (options.clustering) { - this.constants.clustering.enabled = true; - for (prop in options.clustering) { - if (options.clustering.hasOwnProperty(prop)) { - this.constants.clustering[prop] = options.clustering[prop]; - } - } - } - else if (options.clustering !== undefined) { - this.constants.clustering.enabled = false; - } + if (options.onAdd) {this.triggerFunctions.add = options.onAdd;} + if (options.onEdit) {this.triggerFunctions.edit = options.onEdit;} + if (options.onEditEdge) {this.triggerFunctions.editEdge = options.onEditEdge;} + if (options.onConnect) {this.triggerFunctions.connect = options.onConnect;} + if (options.onDelete) {this.triggerFunctions.del = options.onDelete;} - if (options.navigation) { - this.constants.navigation.enabled = true; - for (prop in options.navigation) { - if (options.navigation.hasOwnProperty(prop)) { - this.constants.navigation[prop] = options.navigation[prop]; - } - } - } - else if (options.navigation !== undefined) { - this.constants.navigation.enabled = false; - } + util.mergeOptions(this.constants, options,'smoothCurves'); + util.mergeOptions(this.constants, options,'hierarchicalLayout'); + util.mergeOptions(this.constants, options,'clustering'); + util.mergeOptions(this.constants, options,'navigation'); + util.mergeOptions(this.constants, options,'keyboard'); + util.mergeOptions(this.constants, options,'dataManipulation'); - if (options.keyboard) { - this.constants.keyboard.enabled = true; - for (prop in options.keyboard) { - if (options.keyboard.hasOwnProperty(prop)) { - this.constants.keyboard[prop] = options.keyboard[prop]; - } - } - } - else if (options.keyboard !== undefined) { - this.constants.keyboard.enabled = false; - } if (options.dataManipulation) { - this.constants.dataManipulation.enabled = true; - for (prop in options.dataManipulation) { - if (options.dataManipulation.hasOwnProperty(prop)) { - this.constants.dataManipulation[prop] = options.dataManipulation[prop]; - } - } this.editMode = this.constants.dataManipulation.initiallyVisible; } - else if (options.dataManipulation !== undefined) { - this.constants.dataManipulation.enabled = false; - } + // TODO: work out these options and document them if (options.edges) { - for (prop in options.edges) { - if (options.edges.hasOwnProperty(prop)) { - if (typeof options.edges[prop] != "object") { - this.constants.edges[prop] = options.edges[prop]; - } - } - } - if (options.edges.color !== undefined) { if (util.isString(options.edges.color)) { this.constants.edges.color = {}; @@ -15328,38 +14058,18 @@ return /******/ (function(modules) { // webpackBootstrap else if (options.edges.color.color !== undefined) {this.constants.edges.fontColor = options.edges.color.color;} } } - - // Added to support dashed lines - // David Jordan - // 2012-08-08 - if (options.edges.dash) { - if (options.edges.dash.length !== undefined) { - this.constants.edges.dash.length = options.edges.dash.length; - } - if (options.edges.dash.gap !== undefined) { - this.constants.edges.dash.gap = options.edges.dash.gap; - } - if (options.edges.dash.altLength !== undefined) { - this.constants.edges.dash.altLength = options.edges.dash.altLength; - } - } } if (options.nodes) { - for (prop in options.nodes) { - if (options.nodes.hasOwnProperty(prop)) { - this.constants.nodes[prop] = options.nodes[prop]; - } - } - if (options.nodes.color) { - this.constants.nodes.color = util.parseColor(options.nodes.color); + var newColorObj = util.parseColor(options.nodes.color); + this.constants.nodes.color.background = newColorObj.background; + this.constants.nodes.color.border = newColorObj.border; + this.constants.nodes.color.highlight.background = newColorObj.highlight.background; + this.constants.nodes.color.highlight.border = newColorObj.highlight.border; + this.constants.nodes.color.hover.background = newColorObj.hover.background; + this.constants.nodes.color.hover.border = newColorObj.hover.border; } - - /* - if (options.nodes.widthMin) this.constants.nodes.radiusMin = options.nodes.widthMin; - if (options.nodes.widthMax) this.constants.nodes.radiusMax = options.nodes.widthMax; - */ } if (options.groups) { for (var groupname in options.groups) { @@ -15382,7 +14092,6 @@ return /******/ (function(modules) { // webpackBootstrap } } - // (Re)loading the mixins that can be enabled or disabled in the options. // load the force calculation functions, grouped under the physics system. this._loadPhysicsSystem(); @@ -15396,7 +14105,7 @@ return /******/ (function(modules) { // webpackBootstrap // bind keys. If disabled, this will not do anything; this._createKeyBinds(); - this.setSize(this.width, this.height); + this.setSize(this.constants.width, this.constants.height); this.moving = true; this.start(); @@ -16347,7 +15056,7 @@ return /******/ (function(modules) { // webpackBootstrap * chart will be resized too. */ Network.prototype.redraw = function() { - this.setSize(this.width, this.height); + this.setSize(this.constants.width, this.constants.height); this._redraw(); }; @@ -16847,7 +15556,7 @@ return /******/ (function(modules) { // webpackBootstrap // cleanup unused support nodes for (var nodeId in this.sectors['support']['nodes']) { if (this.sectors['support']['nodes'].hasOwnProperty(nodeId)) { - if (this.edges[this.sectors['support']['nodes'][nodeId]] === undefined) { + if (this.edges[this.sectors['support']['nodes'][nodeId].parentEdgeId] === undefined) { delete this.sectors['support']['nodes'][nodeId]; } } @@ -16858,7 +15567,6 @@ return /******/ (function(modules) { // webpackBootstrap this.sectors['support']['nodes'] = {}; for (var edgeId in this.edges) { if (this.edges.hasOwnProperty(edgeId)) { - this.edges[edgeId].smooth = false; this.edges[edgeId].via = null; } } @@ -16885,7 +15593,6 @@ return /******/ (function(modules) { // webpackBootstrap if (this.edges.hasOwnProperty(edgeId)) { var edge = this.edges[edgeId]; if (edge.via == null) { - edge.smooth = true; var nodeId = "edgeId:".concat(edge.id); this.sectors['support']['nodes'][nodeId] = new Node( {id:nodeId, @@ -16991,35 +15698,28 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} constants An object with default values for * example for the color */ - function Edge (properties, network, constants) { + function Edge (properties, network, networkConstants) { if (!network) { throw "No network provided"; } - this.network = network; + var fields = ['edges','physics']; + var constants = util.selectiveBridgeObject(fields,networkConstants); + this.options = constants.edges; + this.physics = constants.physics; + this.options['smoothCurves'] = networkConstants['smoothCurves']; + - // initialize constants - this.widthMin = constants.edges.widthMin; - this.widthMax = constants.edges.widthMax; + this.network = network; // initialize variables this.id = undefined; this.fromId = undefined; this.toId = undefined; - this.style = constants.edges.style; this.title = undefined; - this.width = constants.edges.width; - this.widthSelectionMultiplier = constants.edges.widthSelectionMultiplier; - this.widthSelected = this.width * this.widthSelectionMultiplier; - this.hoverWidth = constants.edges.hoverWidth; + this.widthSelected = this.options.width * this.options.widthSelectionMultiplier; this.value = undefined; - this.length = constants.physics.springLength; - this.customLength = false; this.selected = false; this.hover = false; - this.smoothCurves = constants.smoothCurves; - this.dynamicSmoothCurves = constants.dynamicSmoothCurves; - this.arrowScaleFactor = constants.edges.arrowScaleFactor; - this.inheritColor = constants.edges.inheritColor; this.from = null; // a node this.to = null; // a node @@ -17032,18 +15732,10 @@ return /******/ (function(modules) { // webpackBootstrap this.connected = false; - // Added to support dashed lines - // David Jordan - // 2012-08-08 - this.dash = util.extend({}, constants.edges.dash); // contains properties length, gap, altLength - - this.color = {color:constants.edges.color.color, - highlight:constants.edges.color.highlight, - hover:constants.edges.color.hover}; this.widthFixed = false; this.lengthFixed = false; - this.setProperties(properties, constants); + this.setProperties(properties); this.controlNodesEnabled = false; this.controlNodes = {from:null, to:null, positions:{}}; @@ -17055,62 +15747,41 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} properties an object with properties * @param {Object} constants and object with default, global properties */ - Edge.prototype.setProperties = function(properties, constants) { + Edge.prototype.setProperties = function(properties) { if (!properties) { return; } + var fields = ['style','fontSize','fontFace','fontColor','fontFill','width', + 'widthSelectionMultiplier','hoverWidth','arrowScaleFactor','dash' + ]; + util.selectiveDeepExtend(fields, this.options, properties); + if (properties.from !== undefined) {this.fromId = properties.from;} if (properties.to !== undefined) {this.toId = properties.to;} if (properties.id !== undefined) {this.id = properties.id;} - if (properties.style !== undefined) {this.style = properties.style;} if (properties.label !== undefined) {this.label = properties.label;} - if (this.label) { - this.fontSize = constants.edges.fontSize; - this.fontFace = constants.edges.fontFace; - this.fontColor = constants.edges.fontColor; - this.fontFill = constants.edges.fontFill; - - if (properties.fontColor !== undefined) {this.fontColor = properties.fontColor;} - if (properties.fontSize !== undefined) {this.fontSize = properties.fontSize;} - if (properties.fontFace !== undefined) {this.fontFace = properties.fontFace;} - if (properties.fontFill !== undefined) {this.fontFill = properties.fontFill;} - } - if (properties.title !== undefined) {this.title = properties.title;} - if (properties.width !== undefined) {this.width = properties.width;} - if (properties.widthSelectionMultiplier !== undefined) - {this.widthSelectionMultiplier = properties.widthSelectionMultiplier;} - if (properties.hoverWidth !== undefined) {this.hoverWidth = properties.hoverWidth;} if (properties.value !== undefined) {this.value = properties.value;} - if (properties.length !== undefined) {this.length = properties.length; - this.customLength = true;} + if (properties.length !== undefined) {this.physics.springLength = properties.length;} // scale the arrow - if (properties.arrowScaleFactor !== undefined) {this.arrowScaleFactor = properties.arrowScaleFactor;} - - if (properties.inheritColor !== undefined) {this.inheritColor = properties.inheritColor;} + if (properties.arrowScaleFactor !== undefined) {this.options.arrowScaleFactor = properties.arrowScaleFactor;} - // Added to support dashed lines - // David Jordan - // 2012-08-08 - if (properties.dash) { - if (properties.dash.length !== undefined) {this.dash.length = properties.dash.length;} - if (properties.dash.gap !== undefined) {this.dash.gap = properties.dash.gap;} - if (properties.dash.altLength !== undefined) {this.dash.altLength = properties.dash.altLength;} - } + if (properties.inheritColor !== undefined) {this.options.inheritColor = properties.inheritColor;} if (properties.color !== undefined) { + this.options.inheritColor = false; if (util.isString(properties.color)) { - this.color.color = properties.color; - this.color.highlight = properties.color; + this.options.color.color = properties.color; + this.options.color.highlight = properties.color; } else { - if (properties.color.color !== undefined) {this.color.color = properties.color.color;} - if (properties.color.highlight !== undefined) {this.color.highlight = properties.color.highlight;} - if (properties.color.hover !== undefined) {this.color.hover = properties.color.hover;} + if (properties.color.color !== undefined) {this.options.color.color = properties.color.color;} + if (properties.color.highlight !== undefined) {this.options.color.highlight = properties.color.highlight;} + if (properties.color.hover !== undefined) {this.options.color.hover = properties.color.hover;} } } @@ -17120,10 +15791,10 @@ return /******/ (function(modules) { // webpackBootstrap this.widthFixed = this.widthFixed || (properties.width !== undefined); this.lengthFixed = this.lengthFixed || (properties.length !== undefined); - this.widthSelected = this.width * this.widthSelectionMultiplier; + this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; // set draw method based on style - switch (this.style) { + switch (this.options.style) { case 'line': this.draw = this._drawLine; break; case 'arrow': this.draw = this._drawArrow; break; case 'arrow-center': this.draw = this._drawArrowCenter; break; @@ -17198,9 +15869,9 @@ return /******/ (function(modules) { // webpackBootstrap */ Edge.prototype.setValueRange = function(min, max) { if (!this.widthFixed && this.value !== undefined) { - var scale = (this.widthMax - this.widthMin) / (max - min); - this.width = (this.value - min) * scale + this.widthMin; - this.widthSelected = this.width * this.widthSelectionMultiplier; + var scale = (this.options.widthMax - this.options.widthMin) / (max - min); + this.options.width= (this.value - min) * scale + this.options.widthMin; + this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; } }; @@ -17239,19 +15910,19 @@ return /******/ (function(modules) { // webpackBootstrap }; Edge.prototype._getColor = function() { - var colorObj = this.color; - if (this.inheritColor == "to") { + var colorObj = this.options.color; + if (this.options.inheritColor == "to") { colorObj = { - highlight: this.to.color.highlight.border, - hover: this.to.color.hover.border, - color: this.to.color.border + highlight: this.to.options.color.highlight.border, + hover: this.to.options.color.hover.border, + color: this.to.options.color.border }; } - else if (this.inheritColor == "from" || this.inheritColor == true) { + else if (this.options.inheritColor == "from" || this.options.inheritColor == true) { colorObj = { - highlight: this.from.color.highlight.border, - hover: this.from.color.hover.border, - color: this.from.color.border + highlight: this.from.options.color.highlight.border, + hover: this.from.options.color.hover.border, + color: this.from.options.color.border }; } @@ -17280,7 +15951,7 @@ return /******/ (function(modules) { // webpackBootstrap // draw label var point; if (this.label) { - if (this.smoothCurves.enabled == true && via != null) { + if (this.options.smoothCurves.enabled == true && via != null) { var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); point = {x:midpointX, y:midpointY}; @@ -17293,7 +15964,7 @@ return /******/ (function(modules) { // webpackBootstrap } else { var x, y; - var radius = this.length / 4; + var radius = this.physics.springLength / 4; var node = this.from; if (!node.width) { node.resize(ctx); @@ -17320,14 +15991,14 @@ return /******/ (function(modules) { // webpackBootstrap */ Edge.prototype._getLineWidth = function() { if (this.selected == true) { - return Math.min(this.widthSelected, this.widthMax)*this.networkScaleInv; + return Math.min(this.widthSelected, this.options.widthMax)*this.networkScaleInv; } else { if (this.hover == true) { - return Math.min(this.hoverWidth, this.widthMax)*this.networkScaleInv; + return Math.min(this.options.hoverWidth, this.options.widthMax)*this.networkScaleInv; } else { - return this.width*this.networkScaleInv; + return this.options.width*this.networkScaleInv; } } }; @@ -17335,8 +16006,8 @@ return /******/ (function(modules) { // webpackBootstrap Edge.prototype._getViaCoordinates = function () { var xVia = null; var yVia = null; - var factor = this.smoothCurves.roundness; - var type = this.smoothCurves.type; + var factor = this.options.smoothCurves.roundness; + var type = this.options.smoothCurves.type; var dx = Math.abs(this.from.x - this.to.x); var dy = Math.abs(this.from.y - this.to.y); @@ -17506,8 +16177,8 @@ return /******/ (function(modules) { // webpackBootstrap // draw a straight line ctx.beginPath(); ctx.moveTo(this.from.x, this.from.y); - if (this.smoothCurves.enabled == true) { - if (this.smoothCurves.dynamic == false) { + if (this.options.smoothCurves.enabled == true) { + if (this.options.smoothCurves.dynamic == false) { var via = this._getViaCoordinates(); if (via.x == null) { ctx.lineTo(this.to.x, this.to.y); @@ -17562,17 +16233,17 @@ return /******/ (function(modules) { // webpackBootstrap if (text) { // TODO: cache the calculated size ctx.font = ((this.from.selected || this.to.selected) ? "bold " : "") + - this.fontSize + "px " + this.fontFace; - ctx.fillStyle = this.fontFill; + this.options.fontSize + "px " + this.options.fontFace; + ctx.fillStyle = this.options.fontFill; var width = ctx.measureText(text).width; - var height = this.fontSize; + var height = this.options.fontSize; var left = x - width / 2; var top = y - height / 2; ctx.fillRect(left, top, width, height); // draw text - ctx.fillStyle = this.fontColor || "black"; + ctx.fillStyle = this.options.fontColor || "black"; ctx.textAlign = "left"; ctx.textBaseline = "top"; ctx.fillText(text, left, top); @@ -17590,9 +16261,9 @@ return /******/ (function(modules) { // webpackBootstrap */ Edge.prototype._drawDashLine = function(ctx) { // set style - if (this.selected == true) {ctx.strokeStyle = this.color.highlight;} - else if (this.hover == true) {ctx.strokeStyle = this.color.hover;} - else {ctx.strokeStyle = this.color.color;} + if (this.selected == true) {ctx.strokeStyle = this.options.color.highlight;} + else if (this.hover == true) {ctx.strokeStyle = this.options.color.hover;} + else {ctx.strokeStyle = this.options.color.color;} ctx.lineWidth = this._getLineWidth(); @@ -17601,8 +16272,8 @@ return /******/ (function(modules) { // webpackBootstrap if (ctx.mozDash !== undefined || ctx.setLineDash !== undefined) { // configure the dash pattern var pattern = [0]; - if (this.dash.length !== undefined && this.dash.gap !== undefined) { - pattern = [this.dash.length,this.dash.gap]; + if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) { + pattern = [this.options.dash.length,this.options.dash.gap]; } else { pattern = [5,5]; @@ -17635,15 +16306,15 @@ return /******/ (function(modules) { // webpackBootstrap // draw dashed line ctx.beginPath(); ctx.lineCap = 'round'; - if (this.dash.altLength !== undefined) //If an alt dash value has been set add to the array this value + if (this.options.dash.altLength !== undefined) //If an alt dash value has been set add to the array this value { ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, - [this.dash.length,this.dash.gap,this.dash.altLength,this.dash.gap]); + [this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]); } - else if (this.dash.length !== undefined && this.dash.gap !== undefined) //If a dash and gap value has been set add to the array this value + else if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) //If a dash and gap value has been set add to the array this value { ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, - [this.dash.length,this.dash.gap]); + [this.options.dash.length,this.options.dash.gap]); } else //If all else fails draw a line { @@ -17656,7 +16327,7 @@ return /******/ (function(modules) { // webpackBootstrap // draw label if (this.label) { var point; - if (this.smoothCurves.enabled == true && via != null) { + if (this.options.smoothCurves.enabled == true && via != null) { var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); point = {x:midpointX, y:midpointY}; @@ -17708,9 +16379,9 @@ return /******/ (function(modules) { // webpackBootstrap Edge.prototype._drawArrowCenter = function(ctx) { var point; // set style - if (this.selected == true) {ctx.strokeStyle = this.color.highlight; ctx.fillStyle = this.color.highlight;} - else if (this.hover == true) {ctx.strokeStyle = this.color.hover; ctx.fillStyle = this.color.hover;} - else {ctx.strokeStyle = this.color.color; ctx.fillStyle = this.color.color;} + if (this.selected == true) {ctx.strokeStyle = this.options.color.highlight; ctx.fillStyle = this.options.color.highlight;} + else if (this.hover == true) {ctx.strokeStyle = this.options.color.hover; ctx.fillStyle = this.options.color.hover;} + else {ctx.strokeStyle = this.options.color.color; ctx.fillStyle = this.options.color.color;} ctx.lineWidth = this._getLineWidth(); if (this.from != this.to) { @@ -17718,9 +16389,9 @@ return /******/ (function(modules) { // webpackBootstrap var via = this._line(ctx); var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var length = (10 + 5 * this.width) * this.arrowScaleFactor; + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; // draw an arrow halfway the line - if (this.smoothCurves.enabled == true && via != null) { + if (this.options.smoothCurves.enabled == true && via != null) { var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); point = {x:midpointX, y:midpointY}; @@ -17741,7 +16412,7 @@ return /******/ (function(modules) { // webpackBootstrap else { // draw circle var x, y; - var radius = 0.25 * Math.max(100,this.length); + var radius = 0.25 * Math.max(100,this.physics.springLength); var node = this.from; if (!node.width) { node.resize(ctx); @@ -17758,7 +16429,7 @@ return /******/ (function(modules) { // webpackBootstrap // draw all arrows var angle = 0.2 * Math.PI; - var length = (10 + 5 * this.width) * this.arrowScaleFactor; + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; point = this._pointOnCircle(x, y, radius, 0.5); ctx.arrow(point.x, point.y, angle, length); ctx.fill(); @@ -17783,9 +16454,9 @@ return /******/ (function(modules) { // webpackBootstrap */ Edge.prototype._drawArrow = function(ctx) { // set style - if (this.selected == true) {ctx.strokeStyle = this.color.highlight; ctx.fillStyle = this.color.highlight;} - else if (this.hover == true) {ctx.strokeStyle = this.color.hover; ctx.fillStyle = this.color.hover;} - else {ctx.strokeStyle = this.color.color; ctx.fillStyle = this.color.color;} + if (this.selected == true) {ctx.strokeStyle = this.options.color.highlight; ctx.fillStyle = this.options.color.highlight;} + else if (this.hover == true) {ctx.strokeStyle = this.options.color.hover; ctx.fillStyle = this.options.color.hover;} + else {ctx.strokeStyle = this.options.color.color; ctx.fillStyle = this.options.color.color;} ctx.lineWidth = this._getLineWidth(); @@ -17803,14 +16474,14 @@ return /******/ (function(modules) { // webpackBootstrap var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; var via; - if (this.smoothCurves.dynamic == true && this.smoothCurves.enabled == true ) { + if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true ) { via = this.via; } - else if (this.smoothCurves.enabled == true) { + else if (this.options.smoothCurves.enabled == true) { via = this._getViaCoordinates(); } - if (this.smoothCurves.enabled == true && via.x != null) { + if (this.options.smoothCurves.enabled == true && via.x != null) { angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); dx = (this.to.x - via.x); dy = (this.to.y - via.y); @@ -17820,7 +16491,7 @@ return /******/ (function(modules) { // webpackBootstrap var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; var xTo,yTo; - if (this.smoothCurves.enabled == true && via.x != null) { + if (this.options.smoothCurves.enabled == true && via.x != null) { xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; } @@ -17831,7 +16502,7 @@ return /******/ (function(modules) { // webpackBootstrap ctx.beginPath(); ctx.moveTo(xFrom,yFrom); - if (this.smoothCurves.enabled == true && via.x != null) { + if (this.options.smoothCurves.enabled == true && via.x != null) { ctx.quadraticCurveTo(via.x,via.y,xTo, yTo); } else { @@ -17840,7 +16511,7 @@ return /******/ (function(modules) { // webpackBootstrap ctx.stroke(); // draw arrow at the end of the line - length = (10 + 5 * this.width) * this.arrowScaleFactor; + length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; ctx.arrow(xTo, yTo, angle, length); ctx.fill(); ctx.stroke(); @@ -17848,7 +16519,7 @@ return /******/ (function(modules) { // webpackBootstrap // draw label if (this.label) { var point; - if (this.smoothCurves.enabled == true && via != null) { + if (this.options.smoothCurves.enabled == true && via != null) { var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); point = {x:midpointX, y:midpointY}; @@ -17863,7 +16534,7 @@ return /******/ (function(modules) { // webpackBootstrap // draw circle var node = this.from; var x, y, arrow; - var radius = 0.25 * Math.max(100,this.length); + var radius = 0.25 * Math.max(100,this.physics.springLength); if (!node.width) { node.resize(ctx); } @@ -17891,7 +16562,7 @@ return /******/ (function(modules) { // webpackBootstrap ctx.stroke(); // draw all arrows - var length = (10 + 5 * this.width) * this.arrowScaleFactor; + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; ctx.arrow(arrow.x, arrow.y, arrow.angle, length); ctx.fill(); ctx.stroke(); @@ -17920,9 +16591,9 @@ return /******/ (function(modules) { // webpackBootstrap */ Edge.prototype._getDistanceToEdge = function (x1,y1, x2,y2, x3,y3) { // x3,y3 is the point if (this.from != this.to) { - if (this.smoothCurves.enabled == true) { + if (this.options.smoothCurves.enabled == true) { var xVia, yVia; - if (this.smoothCurves.enabled == true && this.smoothCurves.dynamic == true) { + if (this.options.smoothCurves.enabled == true && this.options.smoothCurves.dynamic == true) { xVia = this.via.x; yVia = this.via.y; } @@ -17952,7 +16623,7 @@ return /******/ (function(modules) { // webpackBootstrap } else { var x, y, dx, dy; - var radius = this.length / 4; + var radius = this.physics.springLength / 4; var node = this.from; if (!node.width) { node.resize(ctx); @@ -18017,7 +16688,7 @@ return /******/ (function(modules) { // webpackBootstrap }; Edge.prototype.positionBezierNode = function() { - if (this.via !== null) { + if (this.via !== null && this.from !== null && this.to !== null) { this.via.x = 0.5 * (this.from.x + this.to.x); this.via.y = 0.5 * (this.from.y + this.to.y); } @@ -18143,14 +16814,14 @@ return /******/ (function(modules) { // webpackBootstrap var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; var via; - if (this.smoothCurves.dynamic == true && this.smoothCurves.enabled == true) { + if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true) { via = this.via; } - else if (this.smoothCurves.enabled == true) { + else if (this.options.smoothCurves.enabled == true) { via = this._getViaCoordinates(); } - if (this.smoothCurves.enabled == true && via.x != null) { + if (this.options.smoothCurves.enabled == true && via.x != null) { angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); dx = (this.to.x - via.x); dy = (this.to.y - via.y); @@ -18160,7 +16831,7 @@ return /******/ (function(modules) { // webpackBootstrap var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; var xTo,yTo; - if (this.smoothCurves.enabled == true && via.x != null) { + if (this.options.smoothCurves.enabled == true && via.x != null) { xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; } @@ -18343,7 +17014,10 @@ return /******/ (function(modules) { // webpackBootstrap * example for the color * */ - function Node(properties, imagelist, grouplist, constants) { + function Node(properties, imagelist, grouplist, networkConstants) { + var constants = util.selectiveBridgeObject(['nodes'],networkConstants); + this.options = constants.nodes; + this.selected = false; this.hover = false; @@ -18351,33 +17025,20 @@ return /******/ (function(modules) { // webpackBootstrap this.dynamicEdges = []; this.reroutedEdges = {}; - this.group = constants.nodes.group; - this.fontSize = Number(constants.nodes.fontSize); - this.fontFace = constants.nodes.fontFace; - this.fontColor = constants.nodes.fontColor; this.fontDrawThreshold = 3; - this.color = constants.nodes.color; - // set defaults for the properties this.id = undefined; - this.shape = constants.nodes.shape; - this.image = constants.nodes.image; this.x = null; this.y = null; this.xFixed = false; this.yFixed = false; this.horizontalAlignLeft = true; // these are for the navigation controls this.verticalAlignTop = true; // these are for the navigation controls - this.radius = constants.nodes.radius; - this.baseRadiusValue = constants.nodes.radius; + this.baseRadiusValue = networkConstants.nodes.radius; this.radiusFixed = false; - this.radiusMin = constants.nodes.radiusMin; - this.radiusMax = constants.nodes.radiusMax; this.level = -1; this.preassignedLevel = false; - this.borderWidth = constants.nodes.borderWidth; - this.borderWidthSelected = constants.nodes.borderWidthSelected; this.imagelist = imagelist; @@ -18388,9 +17049,7 @@ return /******/ (function(modules) { // webpackBootstrap this.fy = 0.0; // external force y this.vx = 0.0; // velocity x this.vy = 0.0; // velocity y - this.minForce = constants.minForce; - this.damping = constants.physics.damping; - this.mass = 1; // kg + this.damping = networkConstants.physics.damping; // written every time gravity is calculated this.fixedData = {x:null,y:null}; @@ -18400,10 +17059,10 @@ return /******/ (function(modules) { // webpackBootstrap this.resetCluster(); this.dynamicEdgesLength = 0; this.clusterSession = 0; - this.clusterSizeWidthFactor = constants.clustering.nodeScaling.width; - this.clusterSizeHeightFactor = constants.clustering.nodeScaling.height; - this.clusterSizeRadiusFactor = constants.clustering.nodeScaling.radius; - this.maxNodeSizeIncrements = constants.clustering.maxNodeSizeIncrements; + this.clusterSizeWidthFactor = networkConstants.clustering.nodeScaling.width; + this.clusterSizeHeightFactor = networkConstants.clustering.nodeScaling.height; + this.clusterSizeRadiusFactor = networkConstants.clustering.nodeScaling.radius; + this.maxNodeSizeIncrements = networkConstants.clustering.maxNodeSizeIncrements; this.growthIndicator = 0; // variables to tell the node about the network. @@ -18463,21 +17122,21 @@ return /******/ (function(modules) { // webpackBootstrap if (!properties) { return; } + + var fields = ['borderWidth','borderWidthSelected','shape','image','radius','fontColor', + 'fontSize','fontFace','group','mass' + ]; + util.selectiveDeepExtend(fields, this.options, properties); + this.originalLabel = undefined; // basic properties if (properties.id !== undefined) {this.id = properties.id;} if (properties.label !== undefined) {this.label = properties.label; this.originalLabel = properties.label;} if (properties.title !== undefined) {this.title = properties.title;} - if (properties.group !== undefined) {this.group = properties.group;} if (properties.x !== undefined) {this.x = properties.x;} if (properties.y !== undefined) {this.y = properties.y;} if (properties.value !== undefined) {this.value = properties.value;} if (properties.level !== undefined) {this.level = properties.level; this.preassignedLevel = true;} - if (properties.borderWidth !== undefined) {this.borderWidth = properties.borderWidth;} - if (properties.borderWidthSelected !== undefined) {this.borderWidthSelected = properties.borderWidthSelected;} - - // physics - if (properties.mass !== undefined) {this.mass = properties.mass;} // navigation controls properties if (properties.horizontalAlignLeft !== undefined) {this.horizontalAlignLeft = properties.horizontalAlignLeft;} @@ -18487,30 +17146,25 @@ return /******/ (function(modules) { // webpackBootstrap if (this.id === undefined) { throw "Node must have an id"; } - + // console.log(this.options); // copy group properties - if (this.group !== undefined && this.group != "") { - var groupObj = this.grouplist.get(this.group); + if (this.options.group !== undefined && this.options.group != "") { + var groupObj = this.grouplist.get(this.options.group); for (var prop in groupObj) { if (groupObj.hasOwnProperty(prop)) { - this[prop] = groupObj[prop]; + this.options[prop] = groupObj[prop]; } } } - // individual shape properties - if (properties.shape !== undefined) {this.shape = properties.shape;} - if (properties.image !== undefined) {this.image = properties.image;} - if (properties.radius !== undefined) {this.radius = properties.radius; this.baseRadiusValue = this.radius;} - if (properties.color !== undefined) {this.color = util.parseColor(properties.color);} - if (properties.fontColor !== undefined) {this.fontColor = properties.fontColor;} - if (properties.fontSize !== undefined) {this.fontSize = properties.fontSize;} - if (properties.fontFace !== undefined) {this.fontFace = properties.fontFace;} + // individual shape properties + if (properties.radius !== undefined) {this.baseRadiusValue = this.options.radius;} + if (properties.color !== undefined) {this.options.color = util.parseColor(properties.color);} - if (this.image !== undefined && this.image != "") { + if (this.options.image!== undefined && this.options.image!= "") { if (this.imagelist) { - this.imageObj = this.imagelist.load(this.image); + this.imageObj = this.imagelist.load(this.options.image); } else { throw "No imagelist provided"; @@ -18521,13 +17175,14 @@ return /******/ (function(modules) { // webpackBootstrap this.yFixed = this.yFixed || (properties.y !== undefined && !properties.allowedToMoveY); this.radiusFixed = this.radiusFixed || (properties.radius !== undefined); - if (this.shape == 'image') { - this.radiusMin = constants.nodes.widthMin; - this.radiusMax = constants.nodes.widthMax; + if (this.options.shape == 'image') { + this.options.radiusMin = constants.nodes.widthMin; + this.options.radiusMax = constants.nodes.widthMax; } + // choose draw method depending on the shape - switch (this.shape) { + switch (this.options.shape) { case 'database': this.draw = this._drawDatabase; this.resize = this._resizeDatabase; break; case 'box': this.draw = this._drawBox; this.resize = this._resizeBox; break; case 'circle': this.draw = this._drawCircle; this.resize = this._resizeCircle; break; @@ -18601,10 +17256,10 @@ return /******/ (function(modules) { // webpackBootstrap this.resize(ctx); } - switch (this.shape) { + switch (this.options.shape) { case 'circle': case 'dot': - return this.radius + borderWidth; + return this.options.radius+ borderWidth; case 'ellipse': var a = this.width / 2; @@ -18663,14 +17318,14 @@ return /******/ (function(modules) { // webpackBootstrap Node.prototype.discreteStep = function(interval) { if (!this.xFixed) { var dx = this.damping * this.vx; // damping force - var ax = (this.fx - dx) / this.mass; // acceleration + var ax = (this.fx - dx) / this.options.mass; // acceleration this.vx += ax * interval; // velocity this.x += this.vx * interval; // position } if (!this.yFixed) { var dy = this.damping * this.vy; // damping force - var ay = (this.fy - dy) / this.mass; // acceleration + var ay = (this.fy - dy) / this.options.mass; // acceleration this.vy += ay * interval; // velocity this.y += this.vy * interval; // position } @@ -18686,7 +17341,7 @@ return /******/ (function(modules) { // webpackBootstrap Node.prototype.discreteStepLimited = function(interval, maxVelocity) { if (!this.xFixed) { var dx = this.damping * this.vx; // damping force - var ax = (this.fx - dx) / this.mass; // acceleration + var ax = (this.fx - dx) / this.options.mass; // acceleration this.vx += ax * interval; // velocity this.vx = (Math.abs(this.vx) > maxVelocity) ? ((this.vx > 0) ? maxVelocity : -maxVelocity) : this.vx; this.x += this.vx * interval; // position @@ -18697,7 +17352,7 @@ return /******/ (function(modules) { // webpackBootstrap if (!this.yFixed) { var dy = this.damping * this.vy; // damping force - var ay = (this.fy - dy) / this.mass; // acceleration + var ay = (this.fy - dy) / this.options.mass; // acceleration this.vy += ay * interval; // velocity this.vy = (Math.abs(this.vy) > maxVelocity) ? ((this.vy > 0) ? maxVelocity : -maxVelocity) : this.vy; this.y += this.vy * interval; // position @@ -18763,14 +17418,14 @@ return /******/ (function(modules) { // webpackBootstrap Node.prototype.setValueRange = function(min, max) { if (!this.radiusFixed && this.value !== undefined) { if (max == min) { - this.radius = (this.radiusMin + this.radiusMax) / 2; + this.options.radius= (this.options.radiusMin + this.options.radiusMax) / 2; } else { - var scale = (this.radiusMax - this.radiusMin) / (max - min); - this.radius = (this.value - min) * scale + this.radiusMin; + var scale = (this.options.radiusMax - this.options.radiusMin) / (max - min); + this.options.radius= (this.value - min) * scale + this.options.radiusMin; } } - this.baseRadiusValue = this.radius; + this.baseRadiusValue = this.options.radius; }; /** @@ -18809,11 +17464,11 @@ return /******/ (function(modules) { // webpackBootstrap if (!this.width || !this.height) { // undefined or 0 var width, height; if (this.value) { - this.radius = this.baseRadiusValue; + this.options.radius= this.baseRadiusValue; var scale = this.imageObj.height / this.imageObj.width; if (scale !== undefined) { - width = this.radius || this.imageObj.width; - height = this.radius * scale || this.imageObj.height; + width = this.options.radius|| this.imageObj.width; + height = this.options.radius* scale || this.imageObj.height; } else { width = 0; @@ -18831,7 +17486,7 @@ return /******/ (function(modules) { // webpackBootstrap if (this.width > 0 && this.height > 0) { this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; + this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; this.growthIndicator = this.width - width; } } @@ -18880,7 +17535,7 @@ return /******/ (function(modules) { // webpackBootstrap this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeWidthFactor; this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeHeightFactor; this.growthIndicator = this.width - (textSize.width + 2 * margin); - // this.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; + // this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; } }; @@ -18892,10 +17547,10 @@ return /******/ (function(modules) { // webpackBootstrap this.top = this.y - this.height / 2; var clusterLineWidth = 2.5; - var borderWidth = this.borderWidth; - var selectionLineWidth = this.borderWidthSelected || 2 * this.borderWidth; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - ctx.strokeStyle = this.selected ? this.color.highlight.border : this.hover ? this.color.hover.border : this.color.border; + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; // draw the outer border if (this.clusterSize > 1) { @@ -18903,16 +17558,16 @@ return /******/ (function(modules) { // webpackBootstrap ctx.lineWidth *= this.networkScaleInv; ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx.roundRect(this.left-2*ctx.lineWidth, this.top-2*ctx.lineWidth, this.width+4*ctx.lineWidth, this.height+4*ctx.lineWidth, this.radius); + ctx.roundRect(this.left-2*ctx.lineWidth, this.top-2*ctx.lineWidth, this.width+4*ctx.lineWidth, this.height+4*ctx.lineWidth, this.options.radius); ctx.stroke(); } ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); ctx.lineWidth *= this.networkScaleInv; ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx.fillStyle = this.selected ? this.color.highlight.background : this.color.background; + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.options.color.background; - ctx.roundRect(this.left, this.top, this.width, this.height, this.radius); + ctx.roundRect(this.left, this.top, this.width, this.height, this.options.radius); ctx.fill(); ctx.stroke(); @@ -18931,7 +17586,7 @@ return /******/ (function(modules) { // webpackBootstrap // scaling used for clustering this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; + this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; this.growthIndicator = this.width - size; } }; @@ -18942,10 +17597,10 @@ return /******/ (function(modules) { // webpackBootstrap this.top = this.y - this.height / 2; var clusterLineWidth = 2.5; - var borderWidth = this.borderWidth; - var selectionLineWidth = this.borderWidthSelected || 2 * this.borderWidth; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - ctx.strokeStyle = this.selected ? this.color.highlight.border : this.hover ? this.color.hover.border : this.color.border; + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; // draw the outer border if (this.clusterSize > 1) { @@ -18960,7 +17615,7 @@ return /******/ (function(modules) { // webpackBootstrap ctx.lineWidth *= this.networkScaleInv; ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx.fillStyle = this.selected ? this.color.highlight.background : this.hover ? this.color.hover.background : this.color.background; + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; ctx.database(this.x - this.width/2, this.y - this.height*0.5, this.width, this.height); ctx.fill(); ctx.stroke(); @@ -18974,7 +17629,7 @@ return /******/ (function(modules) { // webpackBootstrap var margin = 5; var textSize = this.getTextSize(ctx); var diameter = Math.max(textSize.width, textSize.height) + 2 * margin; - this.radius = diameter / 2; + this.options.radius= diameter / 2; this.width = diameter; this.height = diameter; @@ -18982,8 +17637,8 @@ return /******/ (function(modules) { // webpackBootstrap // scaling used for clustering // this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeWidthFactor; // this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeHeightFactor; - this.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; - this.growthIndicator = this.radius - 0.5*diameter; + this.options.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; + this.growthIndicator = this.options.radius- 0.5*diameter; } }; @@ -18993,10 +17648,10 @@ return /******/ (function(modules) { // webpackBootstrap this.top = this.y - this.height / 2; var clusterLineWidth = 2.5; - var borderWidth = this.borderWidth; - var selectionLineWidth = this.borderWidthSelected || 2 * this.borderWidth; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - ctx.strokeStyle = this.selected ? this.color.highlight.border : this.hover ? this.color.hover.border : this.color.border; + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; // draw the outer border if (this.clusterSize > 1) { @@ -19004,15 +17659,15 @@ return /******/ (function(modules) { // webpackBootstrap ctx.lineWidth *= this.networkScaleInv; ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx.circle(this.x, this.y, this.radius+2*ctx.lineWidth); + ctx.circle(this.x, this.y, this.options.radius+2*ctx.lineWidth); ctx.stroke(); } ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); ctx.lineWidth *= this.networkScaleInv; ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx.fillStyle = this.selected ? this.color.highlight.background : this.hover ? this.color.hover.background : this.color.background; - ctx.circle(this.x, this.y, this.radius); + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; + ctx.circle(this.x, this.y, this.options.radius); ctx.fill(); ctx.stroke(); @@ -19033,7 +17688,7 @@ return /******/ (function(modules) { // webpackBootstrap // scaling used for clustering this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; + this.options.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; this.growthIndicator = this.width - defaultSize; } }; @@ -19044,10 +17699,10 @@ return /******/ (function(modules) { // webpackBootstrap this.top = this.y - this.height / 2; var clusterLineWidth = 2.5; - var borderWidth = this.borderWidth; - var selectionLineWidth = this.borderWidthSelected || 2 * this.borderWidth; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - ctx.strokeStyle = this.selected ? this.color.highlight.border : this.hover ? this.color.hover.border : this.color.border; + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; // draw the outer border if (this.clusterSize > 1) { @@ -19062,7 +17717,7 @@ return /******/ (function(modules) { // webpackBootstrap ctx.lineWidth *= this.networkScaleInv; ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx.fillStyle = this.selected ? this.color.highlight.background : this.hover ? this.color.hover.background : this.color.background; + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; ctx.ellipse(this.left, this.top, this.width, this.height); ctx.fill(); @@ -19092,15 +17747,15 @@ return /******/ (function(modules) { // webpackBootstrap Node.prototype._resizeShape = function (ctx) { if (!this.width) { - this.radius = this.baseRadiusValue; - var size = 2 * this.radius; + this.options.radius= this.baseRadiusValue; + var size = 2 * this.options.radius; this.width = size; this.height = size; // scaling used for clustering this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; + this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; this.growthIndicator = this.width - size; } }; @@ -19112,8 +17767,8 @@ return /******/ (function(modules) { // webpackBootstrap this.top = this.y - this.height / 2; var clusterLineWidth = 2.5; - var borderWidth = this.borderWidth; - var selectionLineWidth = this.borderWidthSelected || 2 * this.borderWidth; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; var radiusMultiplier = 2; // choose draw method depending on the shape @@ -19125,23 +17780,22 @@ return /******/ (function(modules) { // webpackBootstrap case 'star': radiusMultiplier = 4; break; } - ctx.strokeStyle = this.selected ? this.color.highlight.border : this.hover ? this.color.hover.border : this.color.border; - + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; // draw the outer border if (this.clusterSize > 1) { ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); ctx.lineWidth *= this.networkScaleInv; ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx[shape](this.x, this.y, this.radius + radiusMultiplier * ctx.lineWidth); + ctx[shape](this.x, this.y, this.options.radius+ radiusMultiplier * ctx.lineWidth); ctx.stroke(); } ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); ctx.lineWidth *= this.networkScaleInv; ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx.fillStyle = this.selected ? this.color.highlight.background : this.hover ? this.color.hover.background : this.color.background; - ctx[shape](this.x, this.y, this.radius); + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; + ctx[shape](this.x, this.y, this.options.radius); ctx.fill(); ctx.stroke(); @@ -19160,7 +17814,7 @@ return /******/ (function(modules) { // webpackBootstrap // scaling used for clustering this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; + this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; this.growthIndicator = this.width - (textSize.width + 2 * margin); } }; @@ -19175,15 +17829,15 @@ return /******/ (function(modules) { // webpackBootstrap Node.prototype._label = function (ctx, text, x, y, align, baseline, labelUnderNode) { - if (text && this.fontSize * this.networkScale > this.fontDrawThreshold) { - ctx.font = (this.selected ? "bold " : "") + this.fontSize + "px " + this.fontFace; - ctx.fillStyle = this.fontColor || "black"; + if (text && Number(this.options.fontSize) * this.networkScale > this.fontDrawThreshold) { + ctx.font = (this.selected ? "bold " : "") + this.options.fontSize + "px " + this.options.fontFace; + ctx.fillStyle = this.options.fontColor || "black"; ctx.textAlign = align || "center"; ctx.textBaseline = baseline || "middle"; var lines = text.split('\n'); var lineCount = lines.length; - var fontSize = (this.fontSize + 4); + var fontSize = (Number(this.options.fontSize) + 4); var yLine = y + (1 - lineCount) / 2 * fontSize; if (labelUnderNode == true) { yLine = y + (1 - lineCount) / (2 * fontSize); @@ -19199,10 +17853,10 @@ return /******/ (function(modules) { // webpackBootstrap Node.prototype.getTextSize = function(ctx) { if (this.label !== undefined) { - ctx.font = (this.selected ? "bold " : "") + this.fontSize + "px " + this.fontFace; + ctx.font = (this.selected ? "bold " : "") + this.options.fontSize + "px " + this.options.fontFace; var lines = this.label.split('\n'), - height = (this.fontSize + 4) * lines.length, + height = (Number(this.options.fontSize) + 4) * lines.length, width = 0; for (var i = 0, iMax = lines.length; i < iMax; i++) { @@ -19289,11 +17943,11 @@ return /******/ (function(modules) { // webpackBootstrap */ Node.prototype.updateVelocity = function(massBeforeClustering) { var energyBefore = this.vx * this.vx * massBeforeClustering; - //this.vx = (this.vx < 0) ? -Math.sqrt(energyBefore/this.mass) : Math.sqrt(energyBefore/this.mass); - this.vx = Math.sqrt(energyBefore/this.mass); + //this.vx = (this.vx < 0) ? -Math.sqrt(energyBefore/this.options.mass) : Math.sqrt(energyBefore/this.options.mass); + this.vx = Math.sqrt(energyBefore/this.options.mass); energyBefore = this.vy * this.vy * massBeforeClustering; - //this.vy = (this.vy < 0) ? -Math.sqrt(energyBefore/this.mass) : Math.sqrt(energyBefore/this.mass); - this.vy = Math.sqrt(energyBefore/this.mass); + //this.vy = (this.vy < 0) ? -Math.sqrt(energyBefore/this.options.mass) : Math.sqrt(energyBefore/this.options.mass); + this.vy = Math.sqrt(energyBefore/this.options.mass); }; module.exports = Node; @@ -20342,7 +18996,7 @@ return /******/ (function(modules) { // webpackBootstrap // first check if moment.js is already loaded in the browser window, if so, // use this instance. Else, load via commonjs. - module.exports = (typeof window !== 'undefined') && window['moment'] || __webpack_require__(46); + module.exports = (typeof window !== 'undefined') && window['moment'] || __webpack_require__(48); /***/ }, @@ -20352,7 +19006,7 @@ return /******/ (function(modules) { // webpackBootstrap // Only load hammer.js when in a browser environment // (loading hammer.js in a node.js environment gives errors) if (typeof window !== 'undefined') { - module.exports = window['Hammer'] || __webpack_require__(48); + module.exports = window['Hammer'] || __webpack_require__(49); } else { module.exports = function () { @@ -20365,4065 +19019,4931 @@ return /******/ (function(modules) { // webpackBootstrap /* 42 */ /***/ function(module, exports, __webpack_require__) { + var Emitter = __webpack_require__(46); var Hammer = __webpack_require__(41); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(3); + var DataView = __webpack_require__(4); + var Range = __webpack_require__(15); + var TimeAxis = __webpack_require__(27); + var CurrentTime = __webpack_require__(19); + var CustomTime = __webpack_require__(20); + var ItemSet = __webpack_require__(24); /** - * Fake a hammer.js gesture. Event can be a ScrollEvent or MouseMoveEvent - * @param {Element} element - * @param {Event} event + * Create a timeline visualization + * @param {HTMLElement} container + * @param {vis.DataSet | Array | google.visualization.DataTable} [items] + * @param {Object} [options] See Core.setOptions for the available options. + * @constructor */ - exports.fakeGesture = function(element, event) { - var eventType = null; - - // for hammer.js 1.0.5 - // var gesture = Hammer.event.collectEventData(this, eventType, event); + function Core () {} - // for hammer.js 1.0.6+ - var touches = Hammer.event.getTouchList(event, eventType); - var gesture = Hammer.event.collectEventData(this, eventType, touches, event); + // turn Core into an event emitter + Emitter(Core.prototype); - // on IE in standards mode, no touches are recognized by hammer.js, - // resulting in NaN values for center.pageX and center.pageY - if (isNaN(gesture.center.pageX)) { - gesture.center.pageX = event.pageX; - } - if (isNaN(gesture.center.pageY)) { - gesture.center.pageY = event.pageY; - } + /** + * Create the main DOM for the Core: a root panel containing left, right, + * top, bottom, content, and background panel. + * @param {Element} container The container element where the Core will + * be attached. + * @private + */ + Core.prototype._create = function (container) { + this.dom = {}; - return gesture; - }; + this.dom.root = document.createElement('div'); + this.dom.background = document.createElement('div'); + this.dom.backgroundVertical = document.createElement('div'); + this.dom.backgroundHorizontal = document.createElement('div'); + this.dom.centerContainer = document.createElement('div'); + this.dom.leftContainer = document.createElement('div'); + this.dom.rightContainer = document.createElement('div'); + this.dom.center = document.createElement('div'); + this.dom.left = document.createElement('div'); + this.dom.right = document.createElement('div'); + this.dom.top = document.createElement('div'); + this.dom.bottom = document.createElement('div'); + this.dom.shadowTop = document.createElement('div'); + this.dom.shadowBottom = document.createElement('div'); + this.dom.shadowTopLeft = document.createElement('div'); + this.dom.shadowBottomLeft = document.createElement('div'); + this.dom.shadowTopRight = document.createElement('div'); + this.dom.shadowBottomRight = document.createElement('div'); + this.dom.background.className = 'vispanel background'; + this.dom.backgroundVertical.className = 'vispanel background vertical'; + this.dom.backgroundHorizontal.className = 'vispanel background horizontal'; + this.dom.centerContainer.className = 'vispanel center'; + this.dom.leftContainer.className = 'vispanel left'; + this.dom.rightContainer.className = 'vispanel right'; + this.dom.top.className = 'vispanel top'; + this.dom.bottom.className = 'vispanel bottom'; + this.dom.left.className = 'content'; + this.dom.center.className = 'content'; + this.dom.right.className = 'content'; + this.dom.shadowTop.className = 'shadow top'; + this.dom.shadowBottom.className = 'shadow bottom'; + this.dom.shadowTopLeft.className = 'shadow top'; + this.dom.shadowBottomLeft.className = 'shadow bottom'; + this.dom.shadowTopRight.className = 'shadow top'; + this.dom.shadowBottomRight.className = 'shadow bottom'; -/***/ }, -/* 43 */ -/***/ function(module, exports, __webpack_require__) { + this.dom.root.appendChild(this.dom.background); + this.dom.root.appendChild(this.dom.backgroundVertical); + this.dom.root.appendChild(this.dom.backgroundHorizontal); + this.dom.root.appendChild(this.dom.centerContainer); + this.dom.root.appendChild(this.dom.leftContainer); + this.dom.root.appendChild(this.dom.rightContainer); + this.dom.root.appendChild(this.dom.top); + this.dom.root.appendChild(this.dom.bottom); - /** - * Canvas shapes used by Network - */ - if (typeof CanvasRenderingContext2D !== 'undefined') { + this.dom.centerContainer.appendChild(this.dom.center); + this.dom.leftContainer.appendChild(this.dom.left); + this.dom.rightContainer.appendChild(this.dom.right); - /** - * Draw a circle shape - */ - CanvasRenderingContext2D.prototype.circle = function(x, y, r) { - this.beginPath(); - this.arc(x, y, r, 0, 2*Math.PI, false); - }; + this.dom.centerContainer.appendChild(this.dom.shadowTop); + this.dom.centerContainer.appendChild(this.dom.shadowBottom); + this.dom.leftContainer.appendChild(this.dom.shadowTopLeft); + this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft); + this.dom.rightContainer.appendChild(this.dom.shadowTopRight); + this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); - /** - * Draw a square shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r size, width and height of the square - */ - CanvasRenderingContext2D.prototype.square = function(x, y, r) { - this.beginPath(); - this.rect(x - r, y - r, r * 2, r * 2); - }; + this.on('rangechange', this.redraw.bind(this)); + this.on('change', this.redraw.bind(this)); + this.on('touch', this._onTouch.bind(this)); + this.on('pinch', this._onPinch.bind(this)); + this.on('dragstart', this._onDragStart.bind(this)); + this.on('drag', this._onDrag.bind(this)); - /** - * Draw a triangle shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.triangle = function(x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); + // create event listeners for all interesting events, these events will be + // emitted via emitter + this.hammer = Hammer(this.dom.root, { + prevent_default: true + }); + this.listeners = {}; - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height + var me = this; + var events = [ + 'touch', 'pinch', + 'tap', 'doubletap', 'hold', + 'dragstart', 'drag', 'dragend', + 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox + ]; + events.forEach(function (event) { + var listener = function () { + var args = [event].concat(Array.prototype.slice.call(arguments, 0)); + me.emit.apply(me, args); + }; + me.hammer.on(event, listener); + me.listeners[event] = listener; + }); - this.moveTo(x, y - (h - ir)); - this.lineTo(x + s2, y + ir); - this.lineTo(x - s2, y + ir); - this.lineTo(x, y - (h - ir)); - this.closePath(); + // size properties of each of the panels + this.props = { + root: {}, + background: {}, + centerContainer: {}, + leftContainer: {}, + rightContainer: {}, + center: {}, + left: {}, + right: {}, + top: {}, + bottom: {}, + border: {}, + scrollTop: 0, + scrollTopMin: 0 }; + this.touch = {}; // store state information needed for touch events - /** - * Draw a triangle shape in downward orientation - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius - */ - CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); + // attach the root panel to the provided container + if (!container) throw new Error('No container provided'); + container.appendChild(this.dom.root); + }; - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height + /** + * Destroy the Core, clean up all DOM elements and event listeners. + */ + Core.prototype.destroy = function () { + // unbind datasets + this.clear(); - this.moveTo(x, y + (h - ir)); - this.lineTo(x + s2, y - ir); - this.lineTo(x - s2, y - ir); - this.lineTo(x, y + (h - ir)); - this.closePath(); - }; + // remove all event listeners + this.off(); - /** - * Draw a star shape, a star with 5 points - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.star = function(x, y, r) { - // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ - this.beginPath(); + // stop checking for changed size + this._stopAutoResize(); - for (var n = 0; n < 10; n++) { - var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5; - this.lineTo( - x + radius * Math.sin(n * 2 * Math.PI / 10), - y - radius * Math.cos(n * 2 * Math.PI / 10) - ); - } + // remove from DOM + if (this.dom.root.parentNode) { + this.dom.root.parentNode.removeChild(this.dom.root); + } + this.dom = null; - this.closePath(); - }; + // cleanup hammer touch events + for (var event in this.listeners) { + if (this.listeners.hasOwnProperty(event)) { + delete this.listeners[event]; + } + } + this.listeners = null; + this.hammer = null; - /** - * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas - */ - CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) { - var r2d = Math.PI/180; - if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x - if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y - this.beginPath(); - this.moveTo(x+r,y); - this.lineTo(x+w-r,y); - this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false); - this.lineTo(x+w,y+h-r); - this.arc(x+w-r,y+h-r,r,0,r2d*90,false); - this.lineTo(x+r,y+h); - this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false); - this.lineTo(x,y+r); - this.arc(x+r,y+r,r,r2d*180,r2d*270,false); - }; + // give all components the opportunity to cleanup + this.components.forEach(function (component) { + component.destroy(); + }); - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) { - var kappa = .5522848, - ox = (w / 2) * kappa, // control point offset horizontal - oy = (h / 2) * kappa, // control point offset vertical - xe = x + w, // x-end - ye = y + h, // y-end - xm = x + w / 2, // x-middle - ym = y + h / 2; // y-middle + this.body = null; + }; - this.beginPath(); - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - }; + /** + * Set a custom time bar + * @param {Date} time + */ + Core.prototype.setCustomTime = function (time) { + if (!this.customTime) { + throw new Error('Cannot get custom time: Custom time bar is not enabled'); + } + this.customTime.setCustomTime(time); + }; - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.database = function(x, y, w, h) { - var f = 1/3; - var wEllipse = w; - var hEllipse = h * f; - - var kappa = .5522848, - ox = (wEllipse / 2) * kappa, // control point offset horizontal - oy = (hEllipse / 2) * kappa, // control point offset vertical - xe = x + wEllipse, // x-end - ye = y + hEllipse, // y-end - xm = x + wEllipse / 2, // x-middle - ym = y + hEllipse / 2, // y-middle - ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse - yeb = y + h; // y-end, bottom ellipse - - this.beginPath(); - this.moveTo(xe, ym); - - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - - this.lineTo(xe, ymb); - - this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); - this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); - - this.lineTo(x, ym); - }; - - - /** - * Draw an arrow point (no line) - */ - CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) { - // tail - var xt = x - length * Math.cos(angle); - var yt = y - length * Math.sin(angle); - - // inner tail - // TODO: allow to customize different shapes - var xi = x - length * 0.9 * Math.cos(angle); - var yi = y - length * 0.9 * Math.sin(angle); - - // left - var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); - var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); - - // right - var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); - var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); - - this.beginPath(); - this.moveTo(x, y); - this.lineTo(xl, yl); - this.lineTo(xi, yi); - this.lineTo(xr, yr); - this.closePath(); - }; + /** + * Retrieve the current custom time. + * @return {Date} customTime + */ + Core.prototype.getCustomTime = function() { + if (!this.customTime) { + throw new Error('Cannot get custom time: Custom time bar is not enabled'); + } - /** - * Sets up the dashedLine functionality for drawing - * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas - * @author David Jordan - * @date 2012-08-08 - */ - CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){ - if (!dashArray) dashArray=[10,5]; - if (dashLength==0) dashLength = 0.001; // Hack for Safari - var dashCount = dashArray.length; - this.moveTo(x, y); - var dx = (x2-x), dy = (y2-y); - var slope = dy/dx; - var distRemaining = Math.sqrt( dx*dx + dy*dy ); - var dashIndex=0, draw=true; - while (distRemaining>=0.1){ - var dashLength = dashArray[dashIndex++%dashCount]; - if (dashLength > distRemaining) dashLength = distRemaining; - var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) ); - if (dx<0) xStep = -xStep; - x += xStep; - y += slope*xStep; - this[draw ? 'lineTo' : 'moveTo'](x,y); - distRemaining -= dashLength; - draw = !draw; - } - }; + return this.customTime.getCustomTime(); + }; - // TODO: add diamond shape - } + /** + * Get the id's of the currently visible items. + * @returns {Array} The ids of the visible items + */ + Core.prototype.getVisibleItems = function() { + return this.itemSet && this.itemSet.getVisibleItems() || []; + }; -/***/ }, -/* 44 */ -/***/ function(module, exports, __webpack_require__) { - var PhysicsMixin = __webpack_require__(55); - var ClusterMixin = __webpack_require__(49); - var SectorsMixin = __webpack_require__(50); - var SelectionMixin = __webpack_require__(51); - var ManipulationMixin = __webpack_require__(52); - var NavigationMixin = __webpack_require__(53); - var HierarchicalLayoutMixin = __webpack_require__(54); /** - * Load a mixin into the network object + * Clear the Core. By Default, items, groups and options are cleared. + * Example usage: * - * @param {Object} sourceVariable | this object has to contain functions. - * @private + * timeline.clear(); // clear items, groups, and options + * timeline.clear({options: true}); // clear options only + * + * @param {Object} [what] Optionally specify what to clear. By default: + * {items: true, groups: true, options: true} */ - exports._loadMixin = function (sourceVariable) { - for (var mixinFunction in sourceVariable) { - if (sourceVariable.hasOwnProperty(mixinFunction)) { - this[mixinFunction] = sourceVariable[mixinFunction]; - } + Core.prototype.clear = function(what) { + // clear items + if (!what || what.items) { + this.setItems(null); } - }; + // clear groups + if (!what || what.groups) { + this.setGroups(null); + } + + // clear options of timeline and of each of the components + if (!what || what.options) { + this.components.forEach(function (component) { + component.setOptions(component.defaultOptions); + }); + + this.setOptions(this.defaultOptions); // this will also do a redraw + } + }; /** - * removes a mixin from the network object. - * - * @param {Object} sourceVariable | this object has to contain functions. - * @private + * Set Core window such that it fits all items */ - exports._clearMixin = function (sourceVariable) { - for (var mixinFunction in sourceVariable) { - if (sourceVariable.hasOwnProperty(mixinFunction)) { - this[mixinFunction] = undefined; + Core.prototype.fit = function() { + // apply the data range as range + var dataRange = this.getItemRange(); + + // add 5% space on both sides + var start = dataRange.min; + var end = dataRange.max; + if (start != null && end != null) { + var interval = (end.valueOf() - start.valueOf()); + if (interval <= 0) { + // prevent an empty interval + interval = 24 * 60 * 60 * 1000; // 1 day } + start = new Date(start.valueOf() - interval * 0.05); + end = new Date(end.valueOf() + interval * 0.05); + } + + // skip range set if there is no start and end date + if (start === null && end === null) { + return; } + + this.range.setRange(start, end); }; /** - * Mixin the physics system and initialize the parameters required. + * Set the visible window. Both parameters are optional, you can change only + * start or only end. Syntax: * - * @private + * TimeLine.setWindow(start, end) + * TimeLine.setWindow(range) + * + * Where start and end can be a Date, number, or string, and range is an + * object with properties start and end. + * + * @param {Date | Number | String | Object} [start] Start date of visible window + * @param {Date | Number | String} [end] End date of visible window */ - exports._loadPhysicsSystem = function () { - this._loadMixin(PhysicsMixin); - this._loadSelectedForceSolver(); - if (this.constants.configurePhysics == true) { - this._loadPhysicsConfiguration(); + Core.prototype.setWindow = function(start, end) { + if (arguments.length == 1) { + var range = arguments[0]; + this.range.setRange(range.start, range.end); + } + else { + this.range.setRange(start, end); } }; - /** - * Mixin the cluster system and initialize the parameters required. - * - * @private + * Get the visible window + * @return {{start: Date, end: Date}} Visible range */ - exports._loadClusterSystem = function () { - this.clusterSession = 0; - this.hubThreshold = 5; - this._loadMixin(ClusterMixin); + Core.prototype.getWindow = function() { + var range = this.range.getRange(); + return { + start: new Date(range.start), + end: new Date(range.end) + }; }; - /** - * Mixin the sector system and initialize the parameters required - * - * @private + * Force a redraw of the Core. Can be useful to manually redraw when + * option autoResize=false */ - exports._loadSectorSystem = function () { - this.sectors = {}; - this.activeSector = ["default"]; - this.sectors["active"] = {}; - this.sectors["active"]["default"] = {"nodes": {}, - "edges": {}, - "nodeIndices": [], - "formationScale": 1.0, - "drawingNode": undefined }; - this.sectors["frozen"] = {}; - this.sectors["support"] = {"nodes": {}, - "edges": {}, - "nodeIndices": [], - "formationScale": 1.0, - "drawingNode": undefined }; + Core.prototype.redraw = function() { + var resized = false, + options = this.options, + props = this.props, + dom = this.dom; - this.nodeIndices = this.sectors["active"]["default"]["nodeIndices"]; // the node indices list is used to speed up the computation of the repulsion fields + if (!dom) return; // when destroyed - this._loadMixin(SectorsMixin); - }; + // update class names + dom.root.className = 'vis timeline root ' + options.orientation; + // update root width and height options + dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); + dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); + dom.root.style.width = util.option.asSize(options.width, ''); - /** - * Mixin the selection system and initialize the parameters required - * - * @private - */ - exports._loadSelectionSystem = function () { - this.selectionObj = {nodes: {}, edges: {}}; + // calculate border widths + props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; + props.border.right = props.border.left; + props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; + props.border.bottom = props.border.top; + var borderRootHeight= dom.root.offsetHeight - dom.root.clientHeight; + var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; - this._loadMixin(SelectionMixin); - }; + // calculate the heights. If any of the side panels is empty, we set the height to + // minus the border width, such that the border will be invisible + props.center.height = dom.center.offsetHeight; + props.left.height = dom.left.offsetHeight; + props.right.height = dom.right.offsetHeight; + props.top.height = dom.top.clientHeight || -props.border.top; + props.bottom.height = dom.bottom.clientHeight || -props.border.bottom; + // TODO: compensate borders when any of the panels is empty. - /** - * Mixin the navigationUI (User Interface) system and initialize the parameters required - * - * @private - */ - exports._loadManipulationSystem = function () { - // reset global variables -- these are used by the selection of nodes and edges. - this.blockConnectingEdgeSelection = false; - this.forceAppendSelection = false; + // apply auto height + // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM) + var contentHeight = Math.max(props.left.height, props.center.height, props.right.height); + var autoHeight = props.top.height + contentHeight + props.bottom.height + + borderRootHeight + props.border.top + props.border.bottom; + dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); - if (this.constants.dataManipulation.enabled == true) { - // load the manipulator HTML elements. All styling done in css. - if (this.manipulationDiv === undefined) { - this.manipulationDiv = document.createElement('div'); - this.manipulationDiv.className = 'network-manipulationDiv'; - this.manipulationDiv.id = 'network-manipulationDiv'; - if (this.editMode == true) { - this.manipulationDiv.style.display = "block"; - } - else { - this.manipulationDiv.style.display = "none"; - } - this.containerElement.insertBefore(this.manipulationDiv, this.frame); - } + // calculate heights of the content panels + props.root.height = dom.root.offsetHeight; + props.background.height = props.root.height - borderRootHeight; + var containerHeight = props.root.height - props.top.height - props.bottom.height - + borderRootHeight; + props.centerContainer.height = containerHeight; + props.leftContainer.height = containerHeight; + props.rightContainer.height = props.leftContainer.height; - if (this.editModeDiv === undefined) { - this.editModeDiv = document.createElement('div'); - this.editModeDiv.className = 'network-manipulation-editMode'; - this.editModeDiv.id = 'network-manipulation-editMode'; - if (this.editMode == true) { - this.editModeDiv.style.display = "none"; - } - else { - this.editModeDiv.style.display = "block"; - } - this.containerElement.insertBefore(this.editModeDiv, this.frame); - } + // calculate the widths of the panels + props.root.width = dom.root.offsetWidth; + props.background.width = props.root.width - borderRootWidth; + props.left.width = dom.leftContainer.clientWidth || -props.border.left; + props.leftContainer.width = props.left.width; + props.right.width = dom.rightContainer.clientWidth || -props.border.right; + props.rightContainer.width = props.right.width; + var centerWidth = props.root.width - props.left.width - props.right.width - borderRootWidth; + props.center.width = centerWidth; + props.centerContainer.width = centerWidth; + props.top.width = centerWidth; + props.bottom.width = centerWidth; - if (this.closeDiv === undefined) { - this.closeDiv = document.createElement('div'); - this.closeDiv.className = 'network-manipulation-closeDiv'; - this.closeDiv.id = 'network-manipulation-closeDiv'; - this.closeDiv.style.display = this.manipulationDiv.style.display; - this.containerElement.insertBefore(this.closeDiv, this.frame); - } + // resize the panels + dom.background.style.height = props.background.height + 'px'; + dom.backgroundVertical.style.height = props.background.height + 'px'; + dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px'; + dom.centerContainer.style.height = props.centerContainer.height + 'px'; + dom.leftContainer.style.height = props.leftContainer.height + 'px'; + dom.rightContainer.style.height = props.rightContainer.height + 'px'; - // load the manipulation functions - this._loadMixin(ManipulationMixin); + dom.background.style.width = props.background.width + 'px'; + dom.backgroundVertical.style.width = props.centerContainer.width + 'px'; + dom.backgroundHorizontal.style.width = props.background.width + 'px'; + dom.centerContainer.style.width = props.center.width + 'px'; + dom.top.style.width = props.top.width + 'px'; + dom.bottom.style.width = props.bottom.width + 'px'; - // create the manipulator toolbar - this._createManipulatorBar(); + // reposition the panels + dom.background.style.left = '0'; + dom.background.style.top = '0'; + dom.backgroundVertical.style.left = props.left.width + 'px'; + dom.backgroundVertical.style.top = '0'; + dom.backgroundHorizontal.style.left = '0'; + dom.backgroundHorizontal.style.top = props.top.height + 'px'; + dom.centerContainer.style.left = props.left.width + 'px'; + dom.centerContainer.style.top = props.top.height + 'px'; + dom.leftContainer.style.left = '0'; + dom.leftContainer.style.top = props.top.height + 'px'; + dom.rightContainer.style.left = (props.left.width + props.center.width) + 'px'; + dom.rightContainer.style.top = props.top.height + 'px'; + dom.top.style.left = props.left.width + 'px'; + dom.top.style.top = '0'; + dom.bottom.style.left = props.left.width + 'px'; + dom.bottom.style.top = (props.top.height + props.centerContainer.height) + 'px'; + + // update the scrollTop, feasible range for the offset can be changed + // when the height of the Core or of the contents of the center changed + this._updateScrollTop(); + + // reposition the scrollable contents + var offset = this.props.scrollTop; + if (options.orientation == 'bottom') { + offset += Math.max(this.props.centerContainer.height - this.props.center.height - + this.props.border.top - this.props.border.bottom, 0); } - else { - if (this.manipulationDiv !== undefined) { - // removes all the bindings and overloads - this._createManipulatorBar(); - // remove the manipulation divs - this.containerElement.removeChild(this.manipulationDiv); - this.containerElement.removeChild(this.editModeDiv); - this.containerElement.removeChild(this.closeDiv); + dom.center.style.left = '0'; + dom.center.style.top = offset + 'px'; + dom.left.style.left = '0'; + dom.left.style.top = offset + 'px'; + dom.right.style.left = '0'; + dom.right.style.top = offset + 'px'; - this.manipulationDiv = undefined; - this.editModeDiv = undefined; - this.closeDiv = undefined; - // remove the mixin functions - this._clearMixin(ManipulationMixin); - } + // show shadows when vertical scrolling is available + var visibilityTop = this.props.scrollTop == 0 ? 'hidden' : ''; + var visibilityBottom = this.props.scrollTop == this.props.scrollTopMin ? 'hidden' : ''; + dom.shadowTop.style.visibility = visibilityTop; + dom.shadowBottom.style.visibility = visibilityBottom; + dom.shadowTopLeft.style.visibility = visibilityTop; + dom.shadowBottomLeft.style.visibility = visibilityBottom; + dom.shadowTopRight.style.visibility = visibilityTop; + dom.shadowBottomRight.style.visibility = visibilityBottom; + + // redraw all components + this.components.forEach(function (component) { + resized = component.redraw() || resized; + }); + if (resized) { + // keep repainting until all sizes are settled + this.redraw(); } }; + // TODO: deprecated since version 1.1.0, remove some day + Core.prototype.repaint = function () { + throw new Error('Function repaint is deprecated. Use redraw instead.'); + }; /** - * Mixin the navigation (User Interface) system and initialize the parameters required - * + * Convert a position on screen (pixels) to a datetime + * @param {int} x Position on the screen in pixels + * @return {Date} time The datetime the corresponds with given position x * @private */ - exports._loadNavigationControls = function () { - this._loadMixin(NavigationMixin); - - // the clean function removes the button divs, this is done to remove the bindings. - this._cleanNavigation(); - if (this.constants.navigation.enabled == true) { - this._loadNavigationElements(); - } + // TODO: move this function to Range + Core.prototype._toTime = function(x) { + var conversion = this.range.conversion(this.props.center.width); + return new Date(x / conversion.scale + conversion.offset); }; /** - * Mixin the hierarchical layout system. - * + * Convert a position on the global screen (pixels) to a datetime + * @param {int} x Position on the screen in pixels + * @return {Date} time The datetime the corresponds with given position x * @private */ - exports._loadHierarchySystem = function () { - this._loadMixin(HierarchicalLayoutMixin); + // TODO: move this function to Range + Core.prototype._toGlobalTime = function(x) { + var conversion = this.range.conversion(this.props.root.width); + return new Date(x / conversion.scale + conversion.offset); }; - -/***/ }, -/* 45 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Expose `Emitter`. + * Convert a datetime (Date object) into a position on the screen + * @param {Date} time A date + * @return {int} x The position on the screen in pixels which corresponds + * with the given date. + * @private */ + // TODO: move this function to Range + Core.prototype._toScreen = function(time) { + var conversion = this.range.conversion(this.props.center.width); + return (time.valueOf() - conversion.offset) * conversion.scale; + }; - module.exports = Emitter; /** - * Initialize a new `Emitter`. - * - * @api public + * Convert a datetime (Date object) into a position on the root + * This is used to get the pixel density estimate for the screen, not the center panel + * @param {Date} time A date + * @return {int} x The position on root in pixels which corresponds + * with the given date. + * @private */ - - function Emitter(obj) { - if (obj) return mixin(obj); + // TODO: move this function to Range + Core.prototype._toGlobalScreen = function(time) { + var conversion = this.range.conversion(this.props.root.width); + return (time.valueOf() - conversion.offset) * conversion.scale; }; + /** - * Mixin the emitter properties. - * - * @param {Object} obj - * @return {Object} - * @api private + * Initialize watching when option autoResize is true + * @private */ - - function mixin(obj) { - for (var key in Emitter.prototype) { - obj[key] = Emitter.prototype[key]; + Core.prototype._initAutoResize = function () { + if (this.options.autoResize == true) { + this._startAutoResize(); } - return obj; - } + else { + this._stopAutoResize(); + } + }; /** - * Listen on the given `event` with `fn`. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public + * Watch for changes in the size of the container. On resize, the Panel will + * automatically redraw itself. + * @private */ + Core.prototype._startAutoResize = function () { + var me = this; - Emitter.prototype.on = - Emitter.prototype.addEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - (this._callbacks[event] = this._callbacks[event] || []) - .push(fn); - return this; - }; + this._stopAutoResize(); - /** - * Adds an `event` listener that will be invoked a single - * time then automatically removed. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ + this._onResize = function() { + if (me.options.autoResize != true) { + // stop watching when the option autoResize is changed to false + me._stopAutoResize(); + return; + } - Emitter.prototype.once = function(event, fn){ - var self = this; - this._callbacks = this._callbacks || {}; + if (me.dom.root) { + // check whether the frame is resized + if ((me.dom.root.clientWidth != me.props.lastWidth) || + (me.dom.root.clientHeight != me.props.lastHeight)) { + me.props.lastWidth = me.dom.root.clientWidth; + me.props.lastHeight = me.dom.root.clientHeight; - function on() { - self.off(event, on); - fn.apply(this, arguments); - } + me.emit('change'); + } + } + }; - on.fn = fn; - this.on(event, on); - return this; + // add event listener to window resize + util.addEventListener(window, 'resize', this._onResize); + + this.watchTimer = setInterval(this._onResize, 1000); }; /** - * Remove the given callback for `event` or all - * registered callbacks. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public + * Stop watching for a resize of the frame. + * @private */ - - Emitter.prototype.off = - Emitter.prototype.removeListener = - Emitter.prototype.removeAllListeners = - Emitter.prototype.removeEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - - // all - if (0 == arguments.length) { - this._callbacks = {}; - return this; + Core.prototype._stopAutoResize = function () { + if (this.watchTimer) { + clearInterval(this.watchTimer); + this.watchTimer = undefined; } - // specific event - var callbacks = this._callbacks[event]; - if (!callbacks) return this; + // remove event listener on window.resize + util.removeEventListener(window, 'resize', this._onResize); + this._onResize = null; + }; - // remove all handlers - if (1 == arguments.length) { - delete this._callbacks[event]; - return this; - } + /** + * Start moving the timeline vertically + * @param {Event} event + * @private + */ + Core.prototype._onTouch = function (event) { + this.touch.allowDragging = true; + }; - // remove specific handler - var cb; - for (var i = 0; i < callbacks.length; i++) { - cb = callbacks[i]; - if (cb === fn || cb.fn === fn) { - callbacks.splice(i, 1); - break; - } - } - return this; + /** + * Start moving the timeline vertically + * @param {Event} event + * @private + */ + Core.prototype._onPinch = function (event) { + this.touch.allowDragging = false; }; /** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} + * Start moving the timeline vertically + * @param {Event} event + * @private */ + Core.prototype._onDragStart = function (event) { + this.touch.initialScrollTop = this.props.scrollTop; + }; - Emitter.prototype.emit = function(event){ - this._callbacks = this._callbacks || {}; - var args = [].slice.call(arguments, 1) - , callbacks = this._callbacks[event]; + /** + * Move the timeline vertically + * @param {Event} event + * @private + */ + Core.prototype._onDrag = function (event) { + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.touch.allowDragging) return; - if (callbacks) { - callbacks = callbacks.slice(0); - for (var i = 0, len = callbacks.length; i < len; ++i) { - callbacks[i].apply(this, args); - } + var delta = event.gesture.deltaY; + + var oldScrollTop = this._getScrollTop(); + var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); + + if (newScrollTop != oldScrollTop) { + this.redraw(); // TODO: this causes two redraws when dragging, the other is triggered by rangechange already } + }; - return this; + /** + * Apply a scrollTop + * @param {Number} scrollTop + * @returns {Number} scrollTop Returns the applied scrollTop + * @private + */ + Core.prototype._setScrollTop = function (scrollTop) { + this.props.scrollTop = scrollTop; + this._updateScrollTop(); + return this.props.scrollTop; }; /** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public + * Update the current scrollTop when the height of the containers has been changed + * @returns {Number} scrollTop Returns the applied scrollTop + * @private */ + Core.prototype._updateScrollTop = function () { + // recalculate the scrollTopMin + var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero + if (scrollTopMin != this.props.scrollTopMin) { + // in case of bottom orientation, change the scrollTop such that the contents + // do not move relative to the time axis at the bottom + if (this.options.orientation == 'bottom') { + this.props.scrollTop += (scrollTopMin - this.props.scrollTopMin); + } + this.props.scrollTopMin = scrollTopMin; + } - Emitter.prototype.listeners = function(event){ - this._callbacks = this._callbacks || {}; - return this._callbacks[event] || []; + // limit the scrollTop to the feasible scroll range + if (this.props.scrollTop > 0) this.props.scrollTop = 0; + if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; + + return this.props.scrollTop; }; /** - * Check if this emitter has `event` handlers. - * - * @param {String} event - * @return {Boolean} - * @api public + * Get the current scrollTop + * @returns {number} scrollTop + * @private */ - - Emitter.prototype.hasListeners = function(event){ - return !! this.listeners(event).length; + Core.prototype._getScrollTop = function () { + return this.props.scrollTop; }; + module.exports = Core; + /***/ }, -/* 46 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { - var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {//! moment.js - //! version : 2.7.0 - //! authors : Tim Wood, Iskren Chernev, Moment.js contributors - //! license : MIT - //! momentjs.com - - (function (undefined) { + var Hammer = __webpack_require__(41); - /************************************ - Constants - ************************************/ + /** + * Fake a hammer.js gesture. Event can be a ScrollEvent or MouseMoveEvent + * @param {Element} element + * @param {Event} event + */ + exports.fakeGesture = function(element, event) { + var eventType = null; - var moment, - VERSION = "2.7.0", - // the global-scope this is NOT the global object in Node.js - globalScope = typeof global !== 'undefined' ? global : this, - oldGlobalMoment, - round = Math.round, - i, + // for hammer.js 1.0.5 + // var gesture = Hammer.event.collectEventData(this, eventType, event); - YEAR = 0, - MONTH = 1, - DATE = 2, - HOUR = 3, - MINUTE = 4, - SECOND = 5, - MILLISECOND = 6, + // for hammer.js 1.0.6+ + var touches = Hammer.event.getTouchList(event, eventType); + var gesture = Hammer.event.collectEventData(this, eventType, touches, event); - // internal storage for language config files - languages = {}, - - // moment internal properties - momentProperties = { - _isAMomentObject: null, - _i : null, - _f : null, - _l : null, - _strict : null, - _tzm : null, - _isUTC : null, - _offset : null, // optional. Combine with _isUTC - _pf : null, - _lang : null // optional - }, + // on IE in standards mode, no touches are recognized by hammer.js, + // resulting in NaN values for center.pageX and center.pageY + if (isNaN(gesture.center.pageX)) { + gesture.center.pageX = event.pageX; + } + if (isNaN(gesture.center.pageY)) { + gesture.center.pageY = event.pageY; + } - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports), + return gesture; + }; - // ASP.NET json date format regex - aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, - aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, +/***/ }, +/* 44 */ +/***/ function(module, exports, __webpack_require__) { - // format tokens - formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g, - localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, + /** + * Canvas shapes used by Network + */ + if (typeof CanvasRenderingContext2D !== 'undefined') { - // parsing token regexes - parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 - parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 - parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 - parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 - parseTokenDigits = /\d+/, // nonzero number of digits - parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. - parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z - parseTokenT = /T/i, // T (ISO separator) - parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 - parseTokenOrdinal = /\d{1,2}/, + /** + * Draw a circle shape + */ + CanvasRenderingContext2D.prototype.circle = function(x, y, r) { + this.beginPath(); + this.arc(x, y, r, 0, 2*Math.PI, false); + }; + + /** + * Draw a square shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r size, width and height of the square + */ + CanvasRenderingContext2D.prototype.square = function(x, y, r) { + this.beginPath(); + this.rect(x - r, y - r, r * 2, r * 2); + }; + + /** + * Draw a triangle shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle + */ + CanvasRenderingContext2D.prototype.triangle = function(x, y, r) { + // http://en.wikipedia.org/wiki/Equilateral_triangle + this.beginPath(); + + var s = r * 2; + var s2 = s / 2; + var ir = Math.sqrt(3) / 6 * s; // radius of inner circle + var h = Math.sqrt(s * s - s2 * s2); // height + + this.moveTo(x, y - (h - ir)); + this.lineTo(x + s2, y + ir); + this.lineTo(x - s2, y + ir); + this.lineTo(x, y - (h - ir)); + this.closePath(); + }; + + /** + * Draw a triangle shape in downward orientation + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius + */ + CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) { + // http://en.wikipedia.org/wiki/Equilateral_triangle + this.beginPath(); + + var s = r * 2; + var s2 = s / 2; + var ir = Math.sqrt(3) / 6 * s; // radius of inner circle + var h = Math.sqrt(s * s - s2 * s2); // height + + this.moveTo(x, y + (h - ir)); + this.lineTo(x + s2, y - ir); + this.lineTo(x - s2, y - ir); + this.lineTo(x, y + (h - ir)); + this.closePath(); + }; + + /** + * Draw a star shape, a star with 5 points + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle + */ + CanvasRenderingContext2D.prototype.star = function(x, y, r) { + // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ + this.beginPath(); + + for (var n = 0; n < 10; n++) { + var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5; + this.lineTo( + x + radius * Math.sin(n * 2 * Math.PI / 10), + y - radius * Math.cos(n * 2 * Math.PI / 10) + ); + } + + this.closePath(); + }; + + /** + * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas + */ + CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) { + var r2d = Math.PI/180; + if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x + if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y + this.beginPath(); + this.moveTo(x+r,y); + this.lineTo(x+w-r,y); + this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false); + this.lineTo(x+w,y+h-r); + this.arc(x+w-r,y+h-r,r,0,r2d*90,false); + this.lineTo(x+r,y+h); + this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false); + this.lineTo(x,y+r); + this.arc(x+r,y+r,r,r2d*180,r2d*270,false); + }; + + /** + * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + */ + CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) { + var kappa = .5522848, + ox = (w / 2) * kappa, // control point offset horizontal + oy = (h / 2) * kappa, // control point offset vertical + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle + + this.beginPath(); + this.moveTo(x, ym); + this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + }; + + + + /** + * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + */ + CanvasRenderingContext2D.prototype.database = function(x, y, w, h) { + var f = 1/3; + var wEllipse = w; + var hEllipse = h * f; + + var kappa = .5522848, + ox = (wEllipse / 2) * kappa, // control point offset horizontal + oy = (hEllipse / 2) * kappa, // control point offset vertical + xe = x + wEllipse, // x-end + ye = y + hEllipse, // y-end + xm = x + wEllipse / 2, // x-middle + ym = y + hEllipse / 2, // y-middle + ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse + yeb = y + h; // y-end, bottom ellipse + + this.beginPath(); + this.moveTo(xe, ym); + + this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + + this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + + this.lineTo(xe, ymb); + + this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); + this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); + + this.lineTo(x, ym); + }; + + + /** + * Draw an arrow point (no line) + */ + CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) { + // tail + var xt = x - length * Math.cos(angle); + var yt = y - length * Math.sin(angle); + + // inner tail + // TODO: allow to customize different shapes + var xi = x - length * 0.9 * Math.cos(angle); + var yi = y - length * 0.9 * Math.sin(angle); + + // left + var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); + var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); + + // right + var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); + var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); + + this.beginPath(); + this.moveTo(x, y); + this.lineTo(xl, yl); + this.lineTo(xi, yi); + this.lineTo(xr, yr); + this.closePath(); + }; + + /** + * Sets up the dashedLine functionality for drawing + * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas + * @author David Jordan + * @date 2012-08-08 + */ + CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){ + if (!dashArray) dashArray=[10,5]; + if (dashLength==0) dashLength = 0.001; // Hack for Safari + var dashCount = dashArray.length; + this.moveTo(x, y); + var dx = (x2-x), dy = (y2-y); + var slope = dy/dx; + var distRemaining = Math.sqrt( dx*dx + dy*dy ); + var dashIndex=0, draw=true; + while (distRemaining>=0.1){ + var dashLength = dashArray[dashIndex++%dashCount]; + if (dashLength > distRemaining) dashLength = distRemaining; + var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) ); + if (dx<0) xStep = -xStep; + x += xStep; + y += slope*xStep; + this[draw ? 'lineTo' : 'moveTo'](x,y); + distRemaining -= dashLength; + draw = !draw; + } + }; + + // TODO: add diamond shape + } + + +/***/ }, +/* 45 */ +/***/ function(module, exports, __webpack_require__) { + + var PhysicsMixin = __webpack_require__(56); + var ClusterMixin = __webpack_require__(50); + var SectorsMixin = __webpack_require__(51); + var SelectionMixin = __webpack_require__(52); + var ManipulationMixin = __webpack_require__(53); + var NavigationMixin = __webpack_require__(54); + var HierarchicalLayoutMixin = __webpack_require__(55); + + /** + * Load a mixin into the network object + * + * @param {Object} sourceVariable | this object has to contain functions. + * @private + */ + exports._loadMixin = function (sourceVariable) { + for (var mixinFunction in sourceVariable) { + if (sourceVariable.hasOwnProperty(mixinFunction)) { + this[mixinFunction] = sourceVariable[mixinFunction]; + } + } + }; + + + /** + * removes a mixin from the network object. + * + * @param {Object} sourceVariable | this object has to contain functions. + * @private + */ + exports._clearMixin = function (sourceVariable) { + for (var mixinFunction in sourceVariable) { + if (sourceVariable.hasOwnProperty(mixinFunction)) { + this[mixinFunction] = undefined; + } + } + }; + + + /** + * Mixin the physics system and initialize the parameters required. + * + * @private + */ + exports._loadPhysicsSystem = function () { + this._loadMixin(PhysicsMixin); + this._loadSelectedForceSolver(); + if (this.constants.configurePhysics == true) { + this._loadPhysicsConfiguration(); + } + }; + + + /** + * Mixin the cluster system and initialize the parameters required. + * + * @private + */ + exports._loadClusterSystem = function () { + this.clusterSession = 0; + this.hubThreshold = 5; + this._loadMixin(ClusterMixin); + }; + + + /** + * Mixin the sector system and initialize the parameters required + * + * @private + */ + exports._loadSectorSystem = function () { + this.sectors = {}; + this.activeSector = ["default"]; + this.sectors["active"] = {}; + this.sectors["active"]["default"] = {"nodes": {}, + "edges": {}, + "nodeIndices": [], + "formationScale": 1.0, + "drawingNode": undefined }; + this.sectors["frozen"] = {}; + this.sectors["support"] = {"nodes": {}, + "edges": {}, + "nodeIndices": [], + "formationScale": 1.0, + "drawingNode": undefined }; + + this.nodeIndices = this.sectors["active"]["default"]["nodeIndices"]; // the node indices list is used to speed up the computation of the repulsion fields + + this._loadMixin(SectorsMixin); + }; + + + /** + * Mixin the selection system and initialize the parameters required + * + * @private + */ + exports._loadSelectionSystem = function () { + this.selectionObj = {nodes: {}, edges: {}}; + + this._loadMixin(SelectionMixin); + }; + + + /** + * Mixin the navigationUI (User Interface) system and initialize the parameters required + * + * @private + */ + exports._loadManipulationSystem = function () { + // reset global variables -- these are used by the selection of nodes and edges. + this.blockConnectingEdgeSelection = false; + this.forceAppendSelection = false; + + if (this.constants.dataManipulation.enabled == true) { + // load the manipulator HTML elements. All styling done in css. + if (this.manipulationDiv === undefined) { + this.manipulationDiv = document.createElement('div'); + this.manipulationDiv.className = 'network-manipulationDiv'; + this.manipulationDiv.id = 'network-manipulationDiv'; + if (this.editMode == true) { + this.manipulationDiv.style.display = "block"; + } + else { + this.manipulationDiv.style.display = "none"; + } + this.containerElement.insertBefore(this.manipulationDiv, this.frame); + } + + if (this.editModeDiv === undefined) { + this.editModeDiv = document.createElement('div'); + this.editModeDiv.className = 'network-manipulation-editMode'; + this.editModeDiv.id = 'network-manipulation-editMode'; + if (this.editMode == true) { + this.editModeDiv.style.display = "none"; + } + else { + this.editModeDiv.style.display = "block"; + } + this.containerElement.insertBefore(this.editModeDiv, this.frame); + } + + if (this.closeDiv === undefined) { + this.closeDiv = document.createElement('div'); + this.closeDiv.className = 'network-manipulation-closeDiv'; + this.closeDiv.id = 'network-manipulation-closeDiv'; + this.closeDiv.style.display = this.manipulationDiv.style.display; + this.containerElement.insertBefore(this.closeDiv, this.frame); + } + + // load the manipulation functions + this._loadMixin(ManipulationMixin); + + // create the manipulator toolbar + this._createManipulatorBar(); + } + else { + if (this.manipulationDiv !== undefined) { + // removes all the bindings and overloads + this._createManipulatorBar(); + // remove the manipulation divs + this.containerElement.removeChild(this.manipulationDiv); + this.containerElement.removeChild(this.editModeDiv); + this.containerElement.removeChild(this.closeDiv); + + this.manipulationDiv = undefined; + this.editModeDiv = undefined; + this.closeDiv = undefined; + // remove the mixin functions + this._clearMixin(ManipulationMixin); + } + } + }; + + + /** + * Mixin the navigation (User Interface) system and initialize the parameters required + * + * @private + */ + exports._loadNavigationControls = function () { + this._loadMixin(NavigationMixin); + + // the clean function removes the button divs, this is done to remove the bindings. + this._cleanNavigation(); + if (this.constants.navigation.enabled == true) { + this._loadNavigationElements(); + } + }; + + + /** + * Mixin the hierarchical layout system. + * + * @private + */ + exports._loadHierarchySystem = function () { + this._loadMixin(HierarchicalLayoutMixin); + }; + + +/***/ }, +/* 46 */ +/***/ function(module, exports, __webpack_require__) { + + + /** + * Expose `Emitter`. + */ + + module.exports = Emitter; + + /** + * Initialize a new `Emitter`. + * + * @api public + */ + + function Emitter(obj) { + if (obj) return mixin(obj); + }; + + /** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + + function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + return obj; + } + + /** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.on = + Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks[event] = this._callbacks[event] || []) + .push(fn); + return this; + }; + + /** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.once = function(event, fn){ + var self = this; + this._callbacks = this._callbacks || {}; + + function on() { + self.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; + }; + + /** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.off = + Emitter.prototype.removeListener = + Emitter.prototype.removeAllListeners = + Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks[event]; + if (!callbacks) return this; + + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks[event]; + return this; + } + + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + return this; + }; + + /** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + + Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks[event]; + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; + }; + + /** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + + Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks[event] || []; + }; + + /** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + + Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; + }; + + +/***/ }, +/* 47 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2012 Craig Campbell + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Mousetrap is a simple keyboard shortcut library for Javascript with + * no external dependencies + * + * @version 1.1.2 + * @url craig.is/killing/mice + */ + + /** + * mapping of special keycodes to their corresponding keys + * + * everything in this dictionary cannot use keypress events + * so it has to be here to map to the correct keycodes for + * keyup/keydown events + * + * @type {Object} + */ + var _MAP = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 16: 'shift', + 17: 'ctrl', + 18: 'alt', + 20: 'capslock', + 27: 'esc', + 32: 'space', + 33: 'pageup', + 34: 'pagedown', + 35: 'end', + 36: 'home', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 45: 'ins', + 46: 'del', + 91: 'meta', + 93: 'meta', + 224: 'meta' + }, + + /** + * mapping for special characters so they can support + * + * this dictionary is only used incase you want to bind a + * keyup or keydown event to one of these keys + * + * @type {Object} + */ + _KEYCODE_MAP = { + 106: '*', + 107: '+', + 109: '-', + 110: '.', + 111 : '/', + 186: ';', + 187: '=', + 188: ',', + 189: '-', + 190: '.', + 191: '/', + 192: '`', + 219: '[', + 220: '\\', + 221: ']', + 222: '\'' + }, + + /** + * this is a mapping of keys that require shift on a US keypad + * back to the non shift equivelents + * + * this is so you can use keyup events with these keys + * + * note that this will only work reliably on US keyboards + * + * @type {Object} + */ + _SHIFT_MAP = { + '~': '`', + '!': '1', + '@': '2', + '#': '3', + '$': '4', + '%': '5', + '^': '6', + '&': '7', + '*': '8', + '(': '9', + ')': '0', + '_': '-', + '+': '=', + ':': ';', + '\"': '\'', + '<': ',', + '>': '.', + '?': '/', + '|': '\\' + }, + + /** + * this is a list of special strings you can use to map + * to modifier keys when you specify your keyboard shortcuts + * + * @type {Object} + */ + _SPECIAL_ALIASES = { + 'option': 'alt', + 'command': 'meta', + 'return': 'enter', + 'escape': 'esc' + }, + + /** + * variable to store the flipped version of _MAP from above + * needed to check if we should use keypress or not when no action + * is specified + * + * @type {Object|undefined} + */ + _REVERSE_MAP, + + /** + * a list of all the callbacks setup via Mousetrap.bind() + * + * @type {Object} + */ + _callbacks = {}, + + /** + * direct map of string combinations to callbacks used for trigger() + * + * @type {Object} + */ + _direct_map = {}, + + /** + * keeps track of what level each sequence is at since multiple + * sequences can start out with the same sequence + * + * @type {Object} + */ + _sequence_levels = {}, + + /** + * variable to store the setTimeout call + * + * @type {null|number} + */ + _reset_timer, + + /** + * temporary state where we will ignore the next keyup + * + * @type {boolean|string} + */ + _ignore_next_keyup = false, + + /** + * are we currently inside of a sequence? + * type of action ("keyup" or "keydown" or "keypress") or false + * + * @type {boolean|string} + */ + _inside_sequence = false; + + /** + * loop through the f keys, f1 to f19 and add them to the map + * programatically + */ + for (var i = 1; i < 20; ++i) { + _MAP[111 + i] = 'f' + i; + } + + /** + * loop through to map numbers on the numeric keypad + */ + for (i = 0; i <= 9; ++i) { + _MAP[i + 96] = i; + } + + /** + * cross browser add event method + * + * @param {Element|HTMLDocument} object + * @param {string} type + * @param {Function} callback + * @returns void + */ + function _addEvent(object, type, callback) { + if (object.addEventListener) { + return object.addEventListener(type, callback, false); + } - //strict parsing regexes - parseTokenOneDigit = /\d/, // 0 - 9 - parseTokenTwoDigits = /\d\d/, // 00 - 99 - parseTokenThreeDigits = /\d{3}/, // 000 - 999 - parseTokenFourDigits = /\d{4}/, // 0000 - 9999 - parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 - parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf + object.attachEvent('on' + type, callback); + } - // iso 8601 regex - // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + /** + * takes the event and returns the key character + * + * @param {Event} e + * @return {string} + */ + function _characterFromEvent(e) { - isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', + // for keypress events we should return the character as is + if (e.type == 'keypress') { + return String.fromCharCode(e.which); + } - isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], - ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], - ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], - ['GGGG-[W]WW', /\d{4}-W\d{2}/], - ['YYYY-DDD', /\d{4}-\d{3}/] - ], + // for non keypress events the special maps are needed + if (_MAP[e.which]) { + return _MAP[e.which]; + } - // iso time formats and regexes - isoTimes = [ - ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], - ['HH:mm', /(T| )\d\d:\d\d/], - ['HH', /(T| )\d\d/] - ], + if (_KEYCODE_MAP[e.which]) { + return _KEYCODE_MAP[e.which]; + } - // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"] - parseTimezoneChunker = /([\+\-]|\d\d)/gi, + // if it is not in the special map + return String.fromCharCode(e.which).toLowerCase(); + } - // getter and setter names - proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), - unitMillisecondFactors = { - 'Milliseconds' : 1, - 'Seconds' : 1e3, - 'Minutes' : 6e4, - 'Hours' : 36e5, - 'Days' : 864e5, - 'Months' : 2592e6, - 'Years' : 31536e6 - }, + /** + * should we stop this event before firing off callbacks + * + * @param {Event} e + * @return {boolean} + */ + function _stop(e) { + var element = e.target || e.srcElement, + tag_name = element.tagName; - unitAliases = { - ms : 'millisecond', - s : 'second', - m : 'minute', - h : 'hour', - d : 'day', - D : 'date', - w : 'week', - W : 'isoWeek', - M : 'month', - Q : 'quarter', - y : 'year', - DDD : 'dayOfYear', - e : 'weekday', - E : 'isoWeekday', - gg: 'weekYear', - GG: 'isoWeekYear' - }, + // if the element has the class "mousetrap" then no need to stop + if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { + return false; + } - camelFunctions = { - dayofyear : 'dayOfYear', - isoweekday : 'isoWeekday', - isoweek : 'isoWeek', - weekyear : 'weekYear', - isoweekyear : 'isoWeekYear' - }, + // stop for input, select, and textarea + return tag_name == 'INPUT' || tag_name == 'SELECT' || tag_name == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true'); + } - // format function strings - formatFunctions = {}, + /** + * checks if two arrays are equal + * + * @param {Array} modifiers1 + * @param {Array} modifiers2 + * @returns {boolean} + */ + function _modifiersMatch(modifiers1, modifiers2) { + return modifiers1.sort().join(',') === modifiers2.sort().join(','); + } - // default relative time thresholds - relativeTimeThresholds = { - s: 45, //seconds to minutes - m: 45, //minutes to hours - h: 22, //hours to days - dd: 25, //days to month (month == 1) - dm: 45, //days to months (months > 1) - dy: 345 //days to year - }, + /** + * resets all sequence counters except for the ones passed in + * + * @param {Object} do_not_reset + * @returns void + */ + function _resetSequences(do_not_reset) { + do_not_reset = do_not_reset || {}; - // tokens to ordinalize and pad - ordinalizeTokens = 'DDD w W M D d'.split(' '), - paddedTokens = 'M D H h m s w W'.split(' '), + var active_sequences = false, + key; - formatTokenFunctions = { - M : function () { - return this.month() + 1; - }, - MMM : function (format) { - return this.lang().monthsShort(this, format); - }, - MMMM : function (format) { - return this.lang().months(this, format); - }, - D : function () { - return this.date(); - }, - DDD : function () { - return this.dayOfYear(); - }, - d : function () { - return this.day(); - }, - dd : function (format) { - return this.lang().weekdaysMin(this, format); - }, - ddd : function (format) { - return this.lang().weekdaysShort(this, format); - }, - dddd : function (format) { - return this.lang().weekdays(this, format); - }, - w : function () { - return this.week(); - }, - W : function () { - return this.isoWeek(); - }, - YY : function () { - return leftZeroFill(this.year() % 100, 2); - }, - YYYY : function () { - return leftZeroFill(this.year(), 4); - }, - YYYYY : function () { - return leftZeroFill(this.year(), 5); - }, - YYYYYY : function () { - var y = this.year(), sign = y >= 0 ? '+' : '-'; - return sign + leftZeroFill(Math.abs(y), 6); - }, - gg : function () { - return leftZeroFill(this.weekYear() % 100, 2); - }, - gggg : function () { - return leftZeroFill(this.weekYear(), 4); - }, - ggggg : function () { - return leftZeroFill(this.weekYear(), 5); - }, - GG : function () { - return leftZeroFill(this.isoWeekYear() % 100, 2); - }, - GGGG : function () { - return leftZeroFill(this.isoWeekYear(), 4); - }, - GGGGG : function () { - return leftZeroFill(this.isoWeekYear(), 5); - }, - e : function () { - return this.weekday(); - }, - E : function () { - return this.isoWeekday(); - }, - a : function () { - return this.lang().meridiem(this.hours(), this.minutes(), true); - }, - A : function () { - return this.lang().meridiem(this.hours(), this.minutes(), false); - }, - H : function () { - return this.hours(); - }, - h : function () { - return this.hours() % 12 || 12; - }, - m : function () { - return this.minutes(); - }, - s : function () { - return this.seconds(); - }, - S : function () { - return toInt(this.milliseconds() / 100); - }, - SS : function () { - return leftZeroFill(toInt(this.milliseconds() / 10), 2); - }, - SSS : function () { - return leftZeroFill(this.milliseconds(), 3); - }, - SSSS : function () { - return leftZeroFill(this.milliseconds(), 3); - }, - Z : function () { - var a = -this.zone(), - b = "+"; - if (a < 0) { - a = -a; - b = "-"; - } - return b + leftZeroFill(toInt(a / 60), 2) + ":" + leftZeroFill(toInt(a) % 60, 2); - }, - ZZ : function () { - var a = -this.zone(), - b = "+"; - if (a < 0) { - a = -a; - b = "-"; - } - return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); - }, - z : function () { - return this.zoneAbbr(); - }, - zz : function () { - return this.zoneName(); - }, - X : function () { - return this.unix(); - }, - Q : function () { - return this.quarter(); - } - }, + for (key in _sequence_levels) { + if (do_not_reset[key]) { + active_sequences = true; + continue; + } + _sequence_levels[key] = 0; + } - lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; + if (!active_sequences) { + _inside_sequence = false; + } + } - // Pick the first defined of two or three arguments. dfl comes from - // default. - function dfl(a, b, c) { - switch (arguments.length) { - case 2: return a != null ? a : b; - case 3: return a != null ? a : b != null ? b : c; - default: throw new Error("Implement me"); - } - } + /** + * finds all callbacks that match based on the keycode, modifiers, + * and action + * + * @param {string} character + * @param {Array} modifiers + * @param {string} action + * @param {boolean=} remove - should we remove any matches + * @param {string=} combination + * @returns {Array} + */ + function _getMatches(character, modifiers, action, remove, combination) { + var i, + callback, + matches = []; - function defaultParsingFlags() { - // We need to deep clone this object, and es5 standard is not very - // helpful. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso: false - }; - } + // if there are no events related to this keycode + if (!_callbacks[character]) { + return []; + } - function deprecate(msg, fn) { - var firstTime = true; - function printMsg() { - if (moment.suppressDeprecationWarnings === false && - typeof console !== 'undefined' && console.warn) { - console.warn("Deprecation warning: " + msg); - } - } - return extend(function () { - if (firstTime) { - printMsg(); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } + // if a modifier key is coming up on its own we should allow it + if (action == 'keyup' && _isModifier(character)) { + modifiers = [character]; + } - function padToken(func, count) { - return function (a) { - return leftZeroFill(func.call(this, a), count); - }; - } - function ordinalizeToken(func, period) { - return function (a) { - return this.lang().ordinal(func.call(this, a), period); - }; - } + // loop through all callbacks for the key that was pressed + // and see if any of them match + for (i = 0; i < _callbacks[character].length; ++i) { + callback = _callbacks[character][i]; - while (ordinalizeTokens.length) { - i = ordinalizeTokens.pop(); - formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); - } - while (paddedTokens.length) { - i = paddedTokens.pop(); - formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); - } - formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); + // if this is a sequence but it is not at the right level + // then move onto the next match + if (callback.seq && _sequence_levels[callback.seq] != callback.level) { + continue; + } + // if the action we are looking for doesn't match the action we got + // then we should keep going + if (action != callback.action) { + continue; + } - /************************************ - Constructors - ************************************/ + // if this is a keypress event that means that we need to only + // look at the character, otherwise check the modifiers as + // well + if (action == 'keypress' || _modifiersMatch(modifiers, callback.modifiers)) { - function Language() { + // remove is used so if you change your mind and call bind a + // second time with a new function the first one is overwritten + if (remove && callback.combo == combination) { + _callbacks[character].splice(i, 1); + } - } + matches.push(callback); + } + } - // Moment prototype object - function Moment(config) { - checkOverflow(config); - extend(this, config); - } + return matches; + } - // Duration Constructor - function Duration(duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; + /** + * takes a key event and figures out what the modifiers are + * + * @param {Event} e + * @returns {Array} + */ + function _eventModifiers(e) { + var modifiers = []; - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 36e5; // 1000 * 60 * 60 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; + if (e.shiftKey) { + modifiers.push('shift'); + } - this._data = {}; + if (e.altKey) { + modifiers.push('alt'); + } - this._bubble(); - } + if (e.ctrlKey) { + modifiers.push('ctrl'); + } + + if (e.metaKey) { + modifiers.push('meta'); + } + + return modifiers; + } + + /** + * actually calls the callback function + * + * if your callback function returns false this will use the jquery + * convention - prevent default and stop propogation on the event + * + * @param {Function} callback + * @param {Event} e + * @returns void + */ + function _fireCallback(callback, e) { + if (callback(e) === false) { + if (e.preventDefault) { + e.preventDefault(); + } + + if (e.stopPropagation) { + e.stopPropagation(); + } + + e.returnValue = false; + e.cancelBubble = true; + } + } + + /** + * handles a character key event + * + * @param {string} character + * @param {Event} e + * @returns void + */ + function _handleCharacter(character, e) { + + // if this event should not happen stop here + if (_stop(e)) { + return; + } + + var callbacks = _getMatches(character, _eventModifiers(e), e.type), + i, + do_not_reset = {}, + processed_sequence_callback = false; + + // loop through matching callbacks for this key event + for (i = 0; i < callbacks.length; ++i) { + + // fire for all sequence callbacks + // this is because if for example you have multiple sequences + // bound such as "g i" and "g t" they both need to fire the + // callback for matching g cause otherwise you can only ever + // match the first one + if (callbacks[i].seq) { + processed_sequence_callback = true; + + // keep a list of which sequences were matches for later + do_not_reset[callbacks[i].seq] = 1; + _fireCallback(callbacks[i].callback, e); + continue; + } + + // if there were no sequence matches but we are still here + // that means this is a regular match so we should fire that + if (!processed_sequence_callback && !_inside_sequence) { + _fireCallback(callbacks[i].callback, e); + } + } + + // if you are inside of a sequence and the key you are pressing + // is not a modifier key then we should reset all sequences + // that were not matched by this key event + if (e.type == _inside_sequence && !_isModifier(character)) { + _resetSequences(do_not_reset); + } + } + + /** + * handles a keydown event + * + * @param {Event} e + * @returns void + */ + function _handleKey(e) { - /************************************ - Helpers - ************************************/ + // normalize e.which for key events + // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion + e.which = typeof e.which == "number" ? e.which : e.keyCode; + var character = _characterFromEvent(e); - function extend(a, b) { - for (var i in b) { - if (b.hasOwnProperty(i)) { - a[i] = b[i]; - } - } + // no character found then stop + if (!character) { + return; + } - if (b.hasOwnProperty("toString")) { - a.toString = b.toString; - } + if (e.type == 'keyup' && _ignore_next_keyup == character) { + _ignore_next_keyup = false; + return; + } - if (b.hasOwnProperty("valueOf")) { - a.valueOf = b.valueOf; - } + _handleCharacter(character, e); + } - return a; - } + /** + * determines if the keycode specified is a modifier key or not + * + * @param {string} key + * @returns {boolean} + */ + function _isModifier(key) { + return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta'; + } - function cloneMoment(m) { - var result = {}, i; - for (i in m) { - if (m.hasOwnProperty(i) && momentProperties.hasOwnProperty(i)) { - result[i] = m[i]; - } - } + /** + * called to set a 1 second timeout on the specified sequence + * + * this is so after each key press in the sequence you have 1 second + * to press the next key before you have to start over + * + * @returns void + */ + function _resetSequenceTimer() { + clearTimeout(_reset_timer); + _reset_timer = setTimeout(_resetSequences, 1000); + } - return result; - } + /** + * reverses the map lookup so that we can look for specific keys + * to see what can and can't use keypress + * + * @return {Object} + */ + function _getReverseMap() { + if (!_REVERSE_MAP) { + _REVERSE_MAP = {}; + for (var key in _MAP) { - function absRound(number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } - } + // pull out the numeric keypad from here cause keypress should + // be able to detect the keys from the character + if (key > 95 && key < 112) { + continue; + } - // left zero fill a number - // see http://jsperf.com/left-zero-filling for performance comparison - function leftZeroFill(number, targetLength, forceSign) { - var output = '' + Math.abs(number), - sign = number >= 0; + if (_MAP.hasOwnProperty(key)) { + _REVERSE_MAP[_MAP[key]] = key; + } + } + } + return _REVERSE_MAP; + } - while (output.length < targetLength) { - output = '0' + output; - } - return (sign ? (forceSign ? '+' : '') : '-') + output; - } + /** + * picks the best action based on the key combination + * + * @param {string} key - character for key + * @param {Array} modifiers + * @param {string=} action passed in + */ + function _pickBestAction(key, modifiers, action) { - // helper function for _.addTime and _.subtractTime - function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - updateOffset = updateOffset == null ? true : updateOffset; + // if no action was picked in we should try to pick the one + // that we think would work best for this key + if (!action) { + action = _getReverseMap()[key] ? 'keydown' : 'keypress'; + } - if (milliseconds) { - mom._d.setTime(+mom._d + milliseconds * isAdding); - } - if (days) { - rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); - } - if (months) { - rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - moment.updateOffset(mom, days || months); - } - } + // modifier keys don't work as expected with keypress, + // switch to keydown + if (action == 'keypress' && modifiers.length) { + action = 'keydown'; + } - // check if is an array - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; - } + return action; + } - function isDate(input) { - return Object.prototype.toString.call(input) === '[object Date]' || - input instanceof Date; - } + /** + * binds a key sequence to an event + * + * @param {string} combo - combo specified in bind call + * @param {Array} keys + * @param {Function} callback + * @param {string=} action + * @returns void + */ + function _bindSequence(combo, keys, callback, action) { - // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; - } + // start off by adding a sequence level record for this combination + // and setting the level to 0 + _sequence_levels[combo] = 0; - function normalizeUnits(units) { - if (units) { - var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); - units = unitAliases[units] || camelFunctions[lowered] || lowered; - } - return units; - } + // if there is no action pick the best one for the first key + // in the sequence + if (!action) { + action = _pickBestAction(keys[0], []); + } - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; + /** + * callback to increase the sequence level for this sequence and reset + * all other sequences that were active + * + * @param {Event} e + * @returns void + */ + var _increaseSequence = function(e) { + _inside_sequence = action; + ++_sequence_levels[combo]; + _resetSequenceTimer(); + }, - for (prop in inputObject) { - if (inputObject.hasOwnProperty(prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } + /** + * wraps the specified callback inside of another function in order + * to reset all sequence counters as soon as this sequence is done + * + * @param {Event} e + * @returns void + */ + _callbackAndReset = function(e) { + _fireCallback(callback, e); - return normalizedInput; - } + // we should ignore the next key up if the action is key down + // or keypress. this is so if you finish a sequence and + // release the key the final key will not trigger a keyup + if (action !== 'keyup') { + _ignore_next_keyup = _characterFromEvent(e); + } - function makeList(field) { - var count, setter; + // weird race condition if a sequence ends with the key + // another sequence begins with + setTimeout(_resetSequences, 10); + }, + i; - if (field.indexOf('week') === 0) { - count = 7; - setter = 'day'; - } - else if (field.indexOf('month') === 0) { - count = 12; - setter = 'month'; - } - else { - return; - } + // loop through keys one at a time and bind the appropriate callback + // function. for any key leading up to the final one it should + // increase the sequence. after the final, it should reset all sequences + for (i = 0; i < keys.length; ++i) { + _bindSingle(keys[i], i < keys.length - 1 ? _increaseSequence : _callbackAndReset, action, combo, i); + } + } - moment[field] = function (format, index) { - var i, getter, - method = moment.fn._lang[field], - results = []; + /** + * binds a single keyboard combination + * + * @param {string} combination + * @param {Function} callback + * @param {string=} action + * @param {string=} sequence_name - name of sequence if part of sequence + * @param {number=} level - what part of the sequence the command is + * @returns void + */ + function _bindSingle(combination, callback, action, sequence_name, level) { + + // make sure multiple spaces in a row become a single space + combination = combination.replace(/\s+/g, ' '); - if (typeof format === 'number') { - index = format; - format = undefined; - } + var sequence = combination.split(' '), + i, + key, + keys, + modifiers = []; - getter = function (i) { - var m = moment().utc().set(setter, i); - return method.call(moment.fn._lang, m, format || ''); - }; + // if this pattern is a sequence of keys then run through this method + // to reprocess each pattern one key at a time + if (sequence.length > 1) { + return _bindSequence(combination, sequence, callback, action); + } - if (index != null) { - return getter(index); - } - else { - for (i = 0; i < count; i++) { - results.push(getter(i)); - } - return results; - } - }; - } + // take the keys from this pattern and figure out what the actual + // pattern is all about + keys = combination === '+' ? ['+'] : combination.split('+'); - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - if (coercedNumber >= 0) { - value = Math.floor(coercedNumber); - } else { - value = Math.ceil(coercedNumber); - } - } + // normalize key names + if (_SPECIAL_ALIASES[key]) { + key = _SPECIAL_ALIASES[key]; + } - return value; - } + // if this is not a keypress event then we should + // be smart about using shift keys + // this will only work for US keyboards however + if (action && action != 'keypress' && _SHIFT_MAP[key]) { + key = _SHIFT_MAP[key]; + modifiers.push('shift'); + } - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } + // if this key is a modifier then add it to the list of modifiers + if (_isModifier(key)) { + modifiers.push(key); + } + } - function weeksInYear(year, dow, doy) { - return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; - } + // depending on what the key combination is + // we will try to pick the best event for it + action = _pickBestAction(key, modifiers, action); - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } + // make sure to initialize array if this is the first time + // a callback is added for this key + if (!_callbacks[key]) { + _callbacks[key] = []; + } - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } + // remove an existing match if there is one + _getMatches(key, modifiers, action, !sequence_name, combination); - function checkOverflow(m) { - var overflow; - if (m._a && m._pf.overflow === -2) { - overflow = - m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : - m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : - m._a[HOUR] < 0 || m._a[HOUR] > 23 ? HOUR : - m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : - m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : - m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : - -1; + // add this call back to the array + // if it is a sequence put it at the beginning + // if not put it at the end + // + // this is important because the way these are processed expects + // the sequence ones to come first + _callbacks[key][sequence_name ? 'unshift' : 'push']({ + callback: callback, + modifiers: modifiers, + action: action, + seq: sequence_name, + level: level, + combo: combination + }); + } - if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } + /** + * binds multiple combinations to the same callback + * + * @param {Array} combinations + * @param {Function} callback + * @param {string|undefined} action + * @returns void + */ + function _bindMultiple(combinations, callback, action) { + for (var i = 0; i < combinations.length; ++i) { + _bindSingle(combinations[i], callback, action); + } + } - m._pf.overflow = overflow; - } - } + // start! + _addEvent(document, 'keypress', _handleKey); + _addEvent(document, 'keydown', _handleKey); + _addEvent(document, 'keyup', _handleKey); - function isValid(m) { - if (m._isValid == null) { - m._isValid = !isNaN(m._d.getTime()) && - m._pf.overflow < 0 && - !m._pf.empty && - !m._pf.invalidMonth && - !m._pf.nullInput && - !m._pf.invalidFormat && - !m._pf.userInvalidated; + var mousetrap = { - if (m._strict) { - m._isValid = m._isValid && - m._pf.charsLeftOver === 0 && - m._pf.unusedTokens.length === 0; - } - } - return m._isValid; - } + /** + * binds an event to mousetrap + * + * can be a single key, a combination of keys separated with +, + * a comma separated list of keys, an array of keys, or + * a sequence of keys separated by spaces + * + * be sure to list the modifier keys first to make sure that the + * correct key ends up getting bound (the last key in the pattern) + * + * @param {string|Array} keys + * @param {Function} callback + * @param {string=} action - 'keypress', 'keydown', or 'keyup' + * @returns void + */ + bind: function(keys, callback, action) { + _bindMultiple(keys instanceof Array ? keys : [keys], callback, action); + _direct_map[keys + ':' + action] = callback; + return this; + }, - function normalizeLanguage(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } + /** + * unbinds an event to mousetrap + * + * the unbinding sets the callback function of the specified key combo + * to an empty function and deletes the corresponding key in the + * _direct_map dict. + * + * the keycombo+action has to be exactly the same as + * it was defined in the bind method + * + * TODO: actually remove this from the _callbacks dictionary instead + * of binding an empty function + * + * @param {string|Array} keys + * @param {string} action + * @returns void + */ + unbind: function(keys, action) { + if (_direct_map[keys + ':' + action]) { + delete _direct_map[keys + ':' + action]; + this.bind(keys, function() {}, action); + } + return this; + }, - // Return a moment from input, that is local/utc/zone equivalent to model. - function makeAs(input, model) { - return model._isUTC ? moment(input).zone(model._offset || 0) : - moment(input).local(); - } + /** + * triggers an event that has already been bound + * + * @param {string} keys + * @param {string=} action + * @returns void + */ + trigger: function(keys, action) { + _direct_map[keys + ':' + action](); + return this; + }, - /************************************ - Languages - ************************************/ + /** + * resets the library back to its initial state. this is useful + * if you want to clear out the current keyboard shortcuts and bind + * new ones - for example if you switch to another page + * + * @returns void + */ + reset: function() { + _callbacks = {}; + _direct_map = {}; + return this; + } + }; + module.exports = mousetrap; - extend(Language.prototype, { - set : function (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (typeof prop === 'function') { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - }, - _months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), - months : function (m) { - return this._months[m.month()]; - }, +/***/ }, +/* 48 */ +/***/ function(module, exports, __webpack_require__) { - _monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), - monthsShort : function (m) { - return this._monthsShort[m.month()]; - }, + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {//! moment.js + //! version : 2.8.1 + //! authors : Tim Wood, Iskren Chernev, Moment.js contributors + //! license : MIT + //! momentjs.com - monthsParse : function (monthName) { - var i, mom, regex; + (function (undefined) { + /************************************ + Constants + ************************************/ - if (!this._monthsParse) { - this._monthsParse = []; - } + var moment, + VERSION = '2.8.1', + // the global-scope this is NOT the global object in Node.js + globalScope = typeof global !== 'undefined' ? global : this, + oldGlobalMoment, + round = Math.round, + i, - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - if (!this._monthsParse[i]) { - mom = moment.utc([2000, i]); - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (this._monthsParse[i].test(monthName)) { - return i; - } - } - }, + YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, - _weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), - weekdays : function (m) { - return this._weekdays[m.day()]; - }, + // internal storage for locale config files + locales = {}, - _weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), - weekdaysShort : function (m) { - return this._weekdaysShort[m.day()]; - }, + // extra moment internal properties (plugins register props here) + momentProperties = [], - _weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), - weekdaysMin : function (m) { - return this._weekdaysMin[m.day()]; - }, + // check for nodeJS + hasModule = (typeof module !== 'undefined' && module.exports), - weekdaysParse : function (weekdayName) { - var i, mom, regex; + // ASP.NET json date format regex + aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, + aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, - if (!this._weekdaysParse) { - this._weekdaysParse = []; - } + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - if (!this._weekdaysParse[i]) { - mom = moment([2000, 1]).day(i); - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - }, + // format tokens + formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, - _longDateFormat : { - LT : "h:mm A", - L : "MM/DD/YYYY", - LL : "MMMM D YYYY", - LLL : "MMMM D YYYY LT", - LLLL : "dddd, MMMM D YYYY LT" - }, - longDateFormat : function (key) { - var output = this._longDateFormat[key]; - if (!output && this._longDateFormat[key.toUpperCase()]) { - output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - this._longDateFormat[key] = output; - } - return output; - }, + // parsing token regexes + parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 + parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 + parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 + parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 + parseTokenDigits = /\d+/, // nonzero number of digits + parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. + parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + parseTokenT = /T/i, // T (ISO separator) + parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + parseTokenOrdinal = /\d{1,2}/, - isPM : function (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - }, + //strict parsing regexes + parseTokenOneDigit = /\d/, // 0 - 9 + parseTokenTwoDigits = /\d\d/, // 00 - 99 + parseTokenThreeDigits = /\d{3}/, // 000 - 999 + parseTokenFourDigits = /\d{4}/, // 0000 - 9999 + parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 + parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf - _meridiemParse : /[ap]\.?m?\.?/i, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - }, + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, - _calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - calendar : function (key, mom) { - var output = this._calendar[key]; - return typeof output === 'function' ? output.apply(mom) : output; - }, + isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', - _relativeTime : { - future : "in %s", - past : "%s ago", - s : "a few seconds", - m : "a minute", - mm : "%d minutes", - h : "an hour", - hh : "%d hours", - d : "a day", - dd : "%d days", - M : "a month", - MM : "%d months", - y : "a year", - yy : "%d years" - }, - relativeTime : function (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (typeof output === 'function') ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - }, - pastFuture : function (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); - }, + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], + ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], + ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], + ['GGGG-[W]WW', /\d{4}-W\d{2}/], + ['YYYY-DDD', /\d{4}-\d{3}/] + ], - ordinal : function (number) { - return this._ordinal.replace("%d", number); - }, - _ordinal : "%d", + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], + ['HH:mm', /(T| )\d\d:\d\d/], + ['HH', /(T| )\d\d/] + ], - preparse : function (string) { - return string; - }, + // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"] + parseTimezoneChunker = /([\+\-]|\d\d)/gi, - postformat : function (string) { - return string; + // getter and setter names + proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), + unitMillisecondFactors = { + 'Milliseconds' : 1, + 'Seconds' : 1e3, + 'Minutes' : 6e4, + 'Hours' : 36e5, + 'Days' : 864e5, + 'Months' : 2592e6, + 'Years' : 31536e6 }, - week : function (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; + unitAliases = { + ms : 'millisecond', + s : 'second', + m : 'minute', + h : 'hour', + d : 'day', + D : 'date', + w : 'week', + W : 'isoWeek', + M : 'month', + Q : 'quarter', + y : 'year', + DDD : 'dayOfYear', + e : 'weekday', + E : 'isoWeekday', + gg: 'weekYear', + GG: 'isoWeekYear' }, - _week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. + camelFunctions = { + dayofyear : 'dayOfYear', + isoweekday : 'isoWeekday', + isoweek : 'isoWeek', + weekyear : 'weekYear', + isoweekyear : 'isoWeekYear' }, - _invalidDate: 'Invalid date', - invalidDate: function () { - return this._invalidDate; - } - }); - - // Loads a language definition into the `languages` cache. The function - // takes a key and optionally values. If not in the browser and no values - // are provided, it will load the language file module. As a convenience, - // this function also returns the language values. - function loadLang(key, values) { - values.abbr = key; - if (!languages[key]) { - languages[key] = new Language(); - } - languages[key].set(values); - return languages[key]; - } - - // Remove a language from the `languages` cache. Mostly useful in tests. - function unloadLang(key) { - delete languages[key]; - } - - // Determines which language definition to use and returns it. - // - // With no parameters, it will return the global language. If you - // pass in a language key, such as 'en', it will return the - // definition for 'en', so long as 'en' has already been loaded using - // moment.lang. - function getLangDefinition(key) { - var i = 0, j, lang, next, split, - get = function (k) { - if (!languages[k] && hasModule) { - try { - __webpack_require__(56)("./" + k); - } catch (e) { } - } - return languages[k]; - }; + // format function strings + formatFunctions = {}, - if (!key) { - return moment.fn._lang; - } + // default relative time thresholds + relativeTimeThresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }, - if (!isArray(key)) { - //short-circuit everything else - lang = get(key); - if (lang) { - return lang; - } - key = [key]; - } + // tokens to ordinalize and pad + ordinalizeTokens = 'DDD w W M D d'.split(' '), + paddedTokens = 'M D H h m s w W'.split(' '), - //pick the language from the array - //try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - //substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - while (i < key.length) { - split = normalizeLanguage(key[i]).split('-'); - j = split.length; - next = normalizeLanguage(key[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - lang = get(split.slice(0, j).join('-')); - if (lang) { - return lang; + formatTokenFunctions = { + M : function () { + return this.month() + 1; + }, + MMM : function (format) { + return this.localeData().monthsShort(this, format); + }, + MMMM : function (format) { + return this.localeData().months(this, format); + }, + D : function () { + return this.date(); + }, + DDD : function () { + return this.dayOfYear(); + }, + d : function () { + return this.day(); + }, + dd : function (format) { + return this.localeData().weekdaysMin(this, format); + }, + ddd : function (format) { + return this.localeData().weekdaysShort(this, format); + }, + dddd : function (format) { + return this.localeData().weekdays(this, format); + }, + w : function () { + return this.week(); + }, + W : function () { + return this.isoWeek(); + }, + YY : function () { + return leftZeroFill(this.year() % 100, 2); + }, + YYYY : function () { + return leftZeroFill(this.year(), 4); + }, + YYYYY : function () { + return leftZeroFill(this.year(), 5); + }, + YYYYYY : function () { + var y = this.year(), sign = y >= 0 ? '+' : '-'; + return sign + leftZeroFill(Math.abs(y), 6); + }, + gg : function () { + return leftZeroFill(this.weekYear() % 100, 2); + }, + gggg : function () { + return leftZeroFill(this.weekYear(), 4); + }, + ggggg : function () { + return leftZeroFill(this.weekYear(), 5); + }, + GG : function () { + return leftZeroFill(this.isoWeekYear() % 100, 2); + }, + GGGG : function () { + return leftZeroFill(this.isoWeekYear(), 4); + }, + GGGGG : function () { + return leftZeroFill(this.isoWeekYear(), 5); + }, + e : function () { + return this.weekday(); + }, + E : function () { + return this.isoWeekday(); + }, + a : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), true); + }, + A : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), false); + }, + H : function () { + return this.hours(); + }, + h : function () { + return this.hours() % 12 || 12; + }, + m : function () { + return this.minutes(); + }, + s : function () { + return this.seconds(); + }, + S : function () { + return toInt(this.milliseconds() / 100); + }, + SS : function () { + return leftZeroFill(toInt(this.milliseconds() / 10), 2); + }, + SSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + SSSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + Z : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; + return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); + }, + ZZ : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; } - j--; + return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); + }, + z : function () { + return this.zoneAbbr(); + }, + zz : function () { + return this.zoneName(); + }, + X : function () { + return this.unix(); + }, + Q : function () { + return this.quarter(); } - i++; - } - return moment.fn._lang; - } + }, - /************************************ - Formatting - ************************************/ + deprecations = {}, + lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ""); + // Pick the first defined of two or three arguments. dfl comes from + // default. + function dfl(a, b, c) { + switch (arguments.length) { + case 2: return a != null ? a : b; + case 3: return a != null ? a : b != null ? b : c; + default: throw new Error('Implement me'); } - return input.replace(/\\/g, ""); } - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; - - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } - - return function (mom) { - var output = ""; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; + function defaultParsingFlags() { + // We need to deep clone this object, and es5 standard is not very + // helpful. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso: false }; } - // format date using native date object - function formatMoment(m, format) { - - if (!m.isValid()) { - return m.lang().invalidDate(); - } - - format = expandFormat(format, m.lang()); - - if (!formatFunctions[format]) { - formatFunctions[format] = makeFormatFunction(format); + function printMsg(msg) { + if (moment.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && console.warn) { + console.warn("Deprecation warning: " + msg); } - - return formatFunctions[format](m); } - function expandFormat(format, lang) { - var i = 5; - - function replaceLongDateFormatTokens(input) { - return lang.longDateFormat(input) || input; - } + function deprecate(msg, fn) { + var firstTime = true; + return extend(function () { + if (firstTime) { + printMsg(msg); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + printMsg(msg); + deprecations[name] = true; } - - return format; } - - /************************************ - Parsing - ************************************/ - - - // get the regex to find the next token - function getParseRegexForToken(token, config) { - var a, strict = config._strict; - switch (token) { - case 'Q': - return parseTokenOneDigit; - case 'DDDD': - return parseTokenThreeDigits; - case 'YYYY': - case 'GGGG': - case 'gggg': - return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; - case 'Y': - case 'G': - case 'g': - return parseTokenSignedNumber; - case 'YYYYYY': - case 'YYYYY': - case 'GGGGG': - case 'ggggg': - return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; - case 'S': - if (strict) { return parseTokenOneDigit; } - /* falls through */ - case 'SS': - if (strict) { return parseTokenTwoDigits; } - /* falls through */ - case 'SSS': - if (strict) { return parseTokenThreeDigits; } - /* falls through */ - case 'DDD': - return parseTokenOneToThreeDigits; - case 'MMM': - case 'MMMM': - case 'dd': - case 'ddd': - case 'dddd': - return parseTokenWord; - case 'a': - case 'A': - return getLangDefinition(config._l)._meridiemParse; - case 'X': - return parseTokenTimestampMs; - case 'Z': - case 'ZZ': - return parseTokenTimezone; - case 'T': - return parseTokenT; - case 'SSSS': - return parseTokenDigits; - case 'MM': - case 'DD': - case 'YY': - case 'GG': - case 'gg': - case 'HH': - case 'hh': - case 'mm': - case 'ss': - case 'ww': - case 'WW': - return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; - case 'M': - case 'D': - case 'd': - case 'H': - case 'h': - case 'm': - case 's': - case 'w': - case 'W': - case 'e': - case 'E': - return parseTokenOneOrTwoDigits; - case 'Do': - return parseTokenOrdinal; - default : - a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), "i")); - return a; + function padToken(func, count) { + return function (a) { + return leftZeroFill(func.call(this, a), count); + }; + } + function ordinalizeToken(func, period) { + return function (a) { + return this.localeData().ordinal(func.call(this, a), period); + }; + } + + while (ordinalizeTokens.length) { + i = ordinalizeTokens.pop(); + formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); + } + while (paddedTokens.length) { + i = paddedTokens.pop(); + formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); + } + formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); + + + /************************************ + Constructors + ************************************/ + + function Locale() { + } + + // Moment prototype object + function Moment(config, skipOverflow) { + if (skipOverflow !== false) { + checkOverflow(config); } + copyConfig(this, config); + this._d = new Date(+config._d); } - function timezoneMinutesFromString(string) { - string = string || ""; - var possibleTzMatches = (string.match(parseTokenTimezone) || []), - tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], - parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], - minutes = +(parts[1] * 60) + toInt(parts[2]); + // Duration Constructor + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; - return parts[0] === '+' ? -minutes : minutes; + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 36e5; // 1000 * 60 * 60 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = moment.localeData(); + + this._bubble(); } - // function to convert string input to date - function addTimeToArrayFromToken(token, input, config) { - var a, datePartArray = config._a; + /************************************ + Helpers + ************************************/ - switch (token) { - // QUARTER - case 'Q': - if (input != null) { - datePartArray[MONTH] = (toInt(input) - 1) * 3; - } - break; - // MONTH - case 'M' : // fall through to MM - case 'MM' : - if (input != null) { - datePartArray[MONTH] = toInt(input) - 1; - } - break; - case 'MMM' : // fall through to MMMM - case 'MMMM' : - a = getLangDefinition(config._l).monthsParse(input); - // if we didn't find a month name, mark the date as invalid. - if (a != null) { - datePartArray[MONTH] = a; - } else { - config._pf.invalidMonth = input; - } - break; - // DAY OF MONTH - case 'D' : // fall through to DD - case 'DD' : - if (input != null) { - datePartArray[DATE] = toInt(input); - } - break; - case 'Do' : - if (input != null) { - datePartArray[DATE] = toInt(parseInt(input, 10)); - } - break; - // DAY OF YEAR - case 'DDD' : // fall through to DDDD - case 'DDDD' : - if (input != null) { - config._dayOfYear = toInt(input); - } - break; - // YEAR - case 'YY' : - datePartArray[YEAR] = moment.parseTwoDigitYear(input); - break; - case 'YYYY' : - case 'YYYYY' : - case 'YYYYYY' : - datePartArray[YEAR] = toInt(input); - break; - // AM / PM - case 'a' : // fall through to A - case 'A' : - config._isPm = getLangDefinition(config._l).isPM(input); - break; - // 24 HOUR - case 'H' : // fall through to hh - case 'HH' : // fall through to hh - case 'h' : // fall through to hh - case 'hh' : - datePartArray[HOUR] = toInt(input); - break; - // MINUTE - case 'm' : // fall through to mm - case 'mm' : - datePartArray[MINUTE] = toInt(input); - break; - // SECOND - case 's' : // fall through to ss - case 'ss' : - datePartArray[SECOND] = toInt(input); - break; - // MILLISECOND - case 'S' : - case 'SS' : - case 'SSS' : - case 'SSSS' : - datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); - break; - // UNIX TIMESTAMP WITH MS - case 'X': - config._d = new Date(parseFloat(input) * 1000); - break; - // TIMEZONE - case 'Z' : // fall through to ZZ - case 'ZZ' : - config._useUTC = true; - config._tzm = timezoneMinutesFromString(input); - break; - // WEEKDAY - human - case 'dd': - case 'ddd': - case 'dddd': - a = getLangDefinition(config._l).weekdaysParse(input); - // if we didn't get a weekday name, mark the date as invalid - if (a != null) { - config._w = config._w || {}; - config._w['d'] = a; - } else { - config._pf.invalidWeekday = input; - } - break; - // WEEK, WEEK DAY - numeric - case 'w': - case 'ww': - case 'W': - case 'WW': - case 'd': - case 'e': - case 'E': - token = token.substr(0, 1); - /* falls through */ - case 'gggg': - case 'GGGG': - case 'GGGGG': - token = token.substr(0, 2); - if (input) { - config._w = config._w || {}; - config._w[token] = toInt(input); + function extend(a, b) { + for (var i in b) { + if (b.hasOwnProperty(i)) { + a[i] = b[i]; } - break; - case 'gg': - case 'GG': - config._w = config._w || {}; - config._w[token] = moment.parseTwoDigitYear(input); } - } - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp, lang; + if (b.hasOwnProperty('toString')) { + a.toString = b.toString; + } - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; + if (b.hasOwnProperty('valueOf')) { + a.valueOf = b.valueOf; + } - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); - week = dfl(w.W, 1); - weekday = dfl(w.E, 1); - } else { - lang = getLangDefinition(config._l); - dow = lang._week.dow; - doy = lang._week.doy; + return a; + } - weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); - week = dfl(w.w, 1); + function copyConfig(to, from) { + var i, prop, val; - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < dow) { - ++week; + if (typeof from._isAMomentObject !== 'undefined') { + to._isAMomentObject = from._isAMomentObject; + } + if (typeof from._i !== 'undefined') { + to._i = from._i; + } + if (typeof from._f !== 'undefined') { + to._f = from._f; + } + if (typeof from._l !== 'undefined') { + to._l = from._l; + } + if (typeof from._strict !== 'undefined') { + to._strict = from._strict; + } + if (typeof from._tzm !== 'undefined') { + to._tzm = from._tzm; + } + if (typeof from._isUTC !== 'undefined') { + to._isUTC = from._isUTC; + } + if (typeof from._offset !== 'undefined') { + to._offset = from._offset; + } + if (typeof from._pf !== 'undefined') { + to._pf = from._pf; + } + if (typeof from._locale !== 'undefined') { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - } else { - // default to begining of week - weekday = dow; } } - temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; + return to; + } + + function absRound(number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } + } + + // left zero fill a number + // see http://jsperf.com/left-zero-filling for performance comparison + function leftZeroFill(number, targetLength, forceSign) { + var output = '' + Math.abs(number), + sign = number >= 0; + + while (output.length < targetLength) { + output = '0' + output; + } + return (sign ? (forceSign ? '+' : '') : '-') + output; } - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function dateFromConfig(config) { - var i, date, input = [], currentDate, yearToUse; + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; - if (config._d) { - return; + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; } - currentDate = currentDateArray(config); + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); + return res; + } + + function momentsDifference(base, other) { + var res; + other = makeAs(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; } - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); + return res; + } - if (config._dayOfYear > daysInYear(yearToUse)) { - config._pf._overflowDayOfYear = true; + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period)."); + tmp = val; val = period; period = tmp; } - date = makeUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } + val = typeof val === 'string' ? +val : val; + dur = moment.duration(val, period); + addOrSubtractDurationFromMoment(this, dur, direction); + return this; + }; + } - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } + function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + if (milliseconds) { + mom._d.setTime(+mom._d + milliseconds * isAdding); } - - config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); - // Apply timezone offset from input. The actual zone can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); + if (days) { + rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); + } + if (months) { + rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + moment.updateOffset(mom, days || months); } } - function dateFromObject(config) { - var normalizedInput; + // check if is an array + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; + } - if (config._d) { - return; - } + function isDate(input) { + return Object.prototype.toString.call(input) === '[object Date]' || + input instanceof Date; + } - normalizedInput = normalizeObjectUnits(config._i); - config._a = [ - normalizedInput.year, - normalizedInput.month, - normalizedInput.day, - normalizedInput.hour, - normalizedInput.minute, - normalizedInput.second, - normalizedInput.millisecond - ]; + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; + } - dateFromConfig(config); + function normalizeUnits(units) { + if (units) { + var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); + units = unitAliases[units] || camelFunctions[lowered] || lowered; + } + return units; } - function currentDateArray(config) { - var now = new Date(); - if (config._useUTC) { - return [ - now.getUTCFullYear(), - now.getUTCMonth(), - now.getUTCDate() - ]; - } else { - return [now.getFullYear(), now.getMonth(), now.getDate()]; + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (inputObject.hasOwnProperty(prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } } + + return normalizedInput; } - // date from string and format string - function makeDateFromStringAndFormat(config) { + function makeList(field) { + var count, setter; - if (config._f === moment.ISO_8601) { - parseISO(config); + if (field.indexOf('week') === 0) { + count = 7; + setter = 'day'; + } + else if (field.indexOf('month') === 0) { + count = 12; + setter = 'month'; + } + else { return; } - config._a = []; - config._pf.empty = true; + moment[field] = function (format, index) { + var i, getter, + method = moment._locale[field], + results = []; - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var lang = getLangDefinition(config._l), - string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; + if (typeof format === 'number') { + index = format; + format = undefined; + } - tokens = expandFormat(config._f, lang).match(formattingTokens) || []; + getter = function (i) { + var m = moment().utc().set(setter, i); + return method.call(moment._locale, m, format || ''); + }; - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - config._pf.unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; + if (index != null) { + return getter(index); } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - config._pf.empty = false; - } - else { - config._pf.unusedTokens.push(token); + else { + for (i = 0; i < count; i++) { + results.push(getter(i)); } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - config._pf.unusedTokens.push(token); + return results; } - } + }; + } - // add remaining unparsed input length to the string - config._pf.charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - config._pf.unusedInput.push(string); - } + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; - // handle am pm - if (config._isPm && config._a[HOUR] < 12) { - config._a[HOUR] += 12; - } - // if is 12 am, change hours to 0 - if (config._isPm === false && config._a[HOUR] === 12) { - config._a[HOUR] = 0; + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + if (coercedNumber >= 0) { + value = Math.floor(coercedNumber); + } else { + value = Math.ceil(coercedNumber); + } } - dateFromConfig(config); - checkOverflow(config); + return value; } - function unescapeFormat(s) { - return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - }); + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); } - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function regexpEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + function weeksInYear(year, dow, doy) { + return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; } - // date from string and array of format strings - function makeDateFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - config._pf.invalidFormat = true; - config._d = new Date(NaN); - return; - } + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = extend({}, config); - tempConfig._pf = defaultParsingFlags(); - tempConfig._f = config._f[i]; - makeDateFromStringAndFormat(tempConfig); + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } - if (!isValid(tempConfig)) { - continue; - } + function checkOverflow(m) { + var overflow; + if (m._a && m._pf.overflow === -2) { + overflow = + m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : + m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : + m._a[HOUR] < 0 || m._a[HOUR] > 23 ? HOUR : + m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : + m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : + m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : + -1; - // if there is any input that was not parsed add a penalty for that format - currentScore += tempConfig._pf.charsLeftOver; + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } - //or tokens - currentScore += tempConfig._pf.unusedTokens.length * 10; + m._pf.overflow = overflow; + } + } - tempConfig._pf.score = currentScore; + function isValid(m) { + if (m._isValid == null) { + m._isValid = !isNaN(m._d.getTime()) && + m._pf.overflow < 0 && + !m._pf.empty && + !m._pf.invalidMonth && + !m._pf.nullInput && + !m._pf.invalidFormat && + !m._pf.userInvalidated; - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; + if (m._strict) { + m._isValid = m._isValid && + m._pf.charsLeftOver === 0 && + m._pf.unusedTokens.length === 0; } } + return m._isValid; + } - extend(config, bestMoment || tempConfig); + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; } - // date from iso format - function parseISO(config) { - var i, l, - string = config._i, - match = isoRegex.exec(string); + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; - if (match) { - config._pf.iso = true; - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(string)) { - // match[5] should be "T" or undefined - config._f = isoDates[i][0] + (match[6] || " "); - break; + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; } - } - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(string)) { - config._f += isoTimes[i][0]; + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one break; } + j--; } - if (string.match(parseTokenTimezone)) { - config._f += "Z"; - } - makeDateFromStringAndFormat(config); - } else { - config._isValid = false; + i++; } + return null; } - // date from iso format or fallback - function makeDateFromString(config) { - parseISO(config); - if (config._isValid === false) { - delete config._isValid; - moment.createFromInputFallback(config); + function loadLocale(name) { + var oldLocale = null; + if (!locales[name] && hasModule) { + try { + oldLocale = moment.locale(); + !(function webpackMissingModule() { var e = new Error("Cannot find module \"./locale\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()); + // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales + moment.locale(oldLocale); + } catch (e) { } } + return locales[name]; } - function makeDateFromInput(config) { - var input = config._i, - matched = aspNetJsonRegex.exec(input); - - if (input === undefined) { - config._d = new Date(); - } else if (matched) { - config._d = new Date(+matched[1]); - } else if (typeof input === 'string') { - makeDateFromString(config); - } else if (isArray(input)) { - config._a = input.slice(0); - dateFromConfig(config); - } else if (isDate(input)) { - config._d = new Date(+input); - } else if (typeof(input) === 'object') { - dateFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - moment.createFromInputFallback(config); - } + // Return a moment from input, that is local/utc/zone equivalent to model. + function makeAs(input, model) { + return model._isUTC ? moment(input).zone(model._offset || 0) : + moment(input).local(); } - function makeDate(y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); + /************************************ + Locale + ************************************/ - //the date constructor doesn't accept years < 1970 - if (y < 1970) { - date.setFullYear(y); - } - return date; - } - function makeUTCDate(y) { - var date = new Date(Date.UTC.apply(null, arguments)); - if (y < 1970) { - date.setUTCFullYear(y); - } - return date; - } + extend(Locale.prototype, { - function parseWeekday(input, language) { - if (typeof input === 'string') { - if (!isNaN(input)) { - input = parseInt(input, 10); + set : function (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } } - else { - input = language.weekdaysParse(input); - if (typeof input !== 'number') { - return null; + }, + + _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + months : function (m) { + return this._months[m.month()]; + }, + + _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + monthsShort : function (m) { + return this._monthsShort[m.month()]; + }, + + monthsParse : function (monthName) { + var i, mom, regex; + + if (!this._monthsParse) { + this._monthsParse = []; + } + + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + if (!this._monthsParse[i]) { + mom = moment.utc([2000, i]); + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._monthsParse[i].test(monthName)) { + return i; } } - } - return input; - } + }, - /************************************ - Relative Time - ************************************/ + _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdays : function (m) { + return this._weekdays[m.day()]; + }, + _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysShort : function (m) { + return this._weekdaysShort[m.day()]; + }, - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, lang) { - return lang.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } + _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + weekdaysMin : function (m) { + return this._weekdaysMin[m.day()]; + }, - function relativeTime(milliseconds, withoutSuffix, lang) { - var seconds = round(Math.abs(milliseconds) / 1000), - minutes = round(seconds / 60), - hours = round(minutes / 60), - days = round(hours / 24), - years = round(days / 365), - args = seconds < relativeTimeThresholds.s && ['s', seconds] || - minutes === 1 && ['m'] || - minutes < relativeTimeThresholds.m && ['mm', minutes] || - hours === 1 && ['h'] || - hours < relativeTimeThresholds.h && ['hh', hours] || - days === 1 && ['d'] || - days <= relativeTimeThresholds.dd && ['dd', days] || - days <= relativeTimeThresholds.dm && ['M'] || - days < relativeTimeThresholds.dy && ['MM', round(days / 30)] || - years === 1 && ['y'] || ['yy', years]; - args[2] = withoutSuffix; - args[3] = milliseconds > 0; - args[4] = lang; - return substituteTimeAgo.apply({}, args); - } + weekdaysParse : function (weekdayName) { + var i, mom, regex; + if (!this._weekdaysParse) { + this._weekdaysParse = []; + } - /************************************ - Week of Year - ************************************/ + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + if (!this._weekdaysParse[i]) { + mom = moment([2000, 1]).day(i); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + }, + + _longDateFormat : { + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY LT', + LLLL : 'dddd, MMMM D, YYYY LT' + }, + longDateFormat : function (key) { + var output = this._longDateFormat[key]; + if (!output && this._longDateFormat[key.toUpperCase()]) { + output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + this._longDateFormat[key] = output; + } + return output; + }, + + isPM : function (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + }, + + _meridiemParse : /[ap]\.?m?\.?/i, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + }, + + _calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.apply(mom) : output; + }, + _relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, - // firstDayOfWeek 0 = sun, 6 = sat - // the day of the week that starts the week - // (usually sunday or monday) - // firstDayOfWeekOfYear 0 = sun, 6 = sat - // the first week is the week that contains the first - // of this day of the week - // (eg. ISO weeks use thursday (4)) - function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { - var end = firstDayOfWeekOfYear - firstDayOfWeek, - daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), - adjustedMoment; + relativeTime : function (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + }, + pastFuture : function (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + }, - if (daysToDayOfWeek > end) { - daysToDayOfWeek -= 7; - } + ordinal : function (number) { + return this._ordinal.replace('%d', number); + }, + _ordinal : '%d', - if (daysToDayOfWeek < end - 7) { - daysToDayOfWeek += 7; - } + preparse : function (string) { + return string; + }, - adjustedMoment = moment(mom).add('d', daysToDayOfWeek); - return { - week: Math.ceil(adjustedMoment.dayOfYear() / 7), - year: adjustedMoment.year() - }; - } + postformat : function (string) { + return string; + }, - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; + week : function (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + }, - d = d === 0 ? 7 : d; - weekday = weekday != null ? weekday : firstDayOfWeek; - daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); - dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; + _week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + }, - return { - year: dayOfYear > 0 ? year : year - 1, - dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear - }; - } + _invalidDate: 'Invalid date', + invalidDate: function () { + return this._invalidDate; + } + }); /************************************ - Top Level Functions + Formatting ************************************/ - function makeMoment(config) { - var input = config._i, - format = config._f; - - if (input === null || (format === undefined && input === '')) { - return moment.invalid({nullInput: true}); - } - if (typeof input === 'string') { - config._i = input = getLangDefinition().preparse(input); + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); } + return input.replace(/\\/g, ''); + } - if (moment.isMoment(input)) { - config = cloneMoment(input); + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; - config._d = new Date(+input._d); - } else if (format) { - if (isArray(format)) { - makeDateFromStringAndArray(config); + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; } else { - makeDateFromStringAndFormat(config); + array[i] = removeFormattingTokens(array[i]); } - } else { - makeDateFromInput(config); } - return new Moment(config); + return function (mom) { + var output = ''; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; } - moment = function (input, format, lang, strict) { - var c; - - if (typeof(lang) === "boolean") { - strict = lang; - lang = undefined; + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c = {}; - c._isAMomentObject = true; - c._i = input; - c._f = format; - c._l = lang; - c._strict = strict; - c._isUTC = false; - c._pf = defaultParsingFlags(); - return makeMoment(c); - }; + format = expandFormat(format, m.localeData()); - moment.suppressDeprecationWarnings = false; + if (!formatFunctions[format]) { + formatFunctions[format] = makeFormatFunction(format); + } - moment.createFromInputFallback = deprecate( - "moment construction falls back to js Date. This is " + - "discouraged and will be removed in upcoming major " + - "release. Please refer to " + - "https://github.com/moment/moment/issues/1407 for more info.", - function (config) { - config._d = new Date(config._i); - }); + return formatFunctions[format](m); + } - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return moment(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (moments[i][fn](res)) { - res = moments[i]; - } + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; } - return res; - } - moment.min = function () { - var args = [].slice.call(arguments, 0); + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } - return pickBy('isBefore', args); - }; + return format; + } - moment.max = function () { - var args = [].slice.call(arguments, 0); - return pickBy('isAfter', args); - }; + /************************************ + Parsing + ************************************/ - // creating with utc - moment.utc = function (input, format, lang, strict) { - var c; - if (typeof(lang) === "boolean") { - strict = lang; - lang = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c = {}; - c._isAMomentObject = true; - c._useUTC = true; - c._isUTC = true; - c._l = lang; - c._i = input; - c._f = format; - c._strict = strict; - c._pf = defaultParsingFlags(); + // get the regex to find the next token + function getParseRegexForToken(token, config) { + var a, strict = config._strict; + switch (token) { + case 'Q': + return parseTokenOneDigit; + case 'DDDD': + return parseTokenThreeDigits; + case 'YYYY': + case 'GGGG': + case 'gggg': + return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; + case 'Y': + case 'G': + case 'g': + return parseTokenSignedNumber; + case 'YYYYYY': + case 'YYYYY': + case 'GGGGG': + case 'ggggg': + return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; + case 'S': + if (strict) { + return parseTokenOneDigit; + } + /* falls through */ + case 'SS': + if (strict) { + return parseTokenTwoDigits; + } + /* falls through */ + case 'SSS': + if (strict) { + return parseTokenThreeDigits; + } + /* falls through */ + case 'DDD': + return parseTokenOneToThreeDigits; + case 'MMM': + case 'MMMM': + case 'dd': + case 'ddd': + case 'dddd': + return parseTokenWord; + case 'a': + case 'A': + return config._locale._meridiemParse; + case 'X': + return parseTokenTimestampMs; + case 'Z': + case 'ZZ': + return parseTokenTimezone; + case 'T': + return parseTokenT; + case 'SSSS': + return parseTokenDigits; + case 'MM': + case 'DD': + case 'YY': + case 'GG': + case 'gg': + case 'HH': + case 'hh': + case 'mm': + case 'ss': + case 'ww': + case 'WW': + return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; + case 'M': + case 'D': + case 'd': + case 'H': + case 'h': + case 'm': + case 's': + case 'w': + case 'W': + case 'e': + case 'E': + return parseTokenOneOrTwoDigits; + case 'Do': + return parseTokenOrdinal; + default : + a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); + return a; + } + } - return makeMoment(c).utc(); - }; + function timezoneMinutesFromString(string) { + string = string || ''; + var possibleTzMatches = (string.match(parseTokenTimezone) || []), + tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], + parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], + minutes = +(parts[1] * 60) + toInt(parts[2]); - // creating with unix timestamp (in seconds) - moment.unix = function (input) { - return moment(input * 1000); - }; + return parts[0] === '+' ? -minutes : minutes; + } - // duration - moment.duration = function (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - parseIso; + // function to convert string input to date + function addTimeToArrayFromToken(token, input, config) { + var a, datePartArray = config._a; - if (moment.isDuration(input)) { - duration = { - ms: input._milliseconds, - d: input._days, - M: input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; + switch (token) { + // QUARTER + case 'Q': + if (input != null) { + datePartArray[MONTH] = (toInt(input) - 1) * 3; + } + break; + // MONTH + case 'M' : // fall through to MM + case 'MM' : + if (input != null) { + datePartArray[MONTH] = toInt(input) - 1; + } + break; + case 'MMM' : // fall through to MMMM + case 'MMMM' : + a = config._locale.monthsParse(input); + // if we didn't find a month name, mark the date as invalid. + if (a != null) { + datePartArray[MONTH] = a; } else { - duration.milliseconds = input; + config._pf.invalidMonth = input; + } + break; + // DAY OF MONTH + case 'D' : // fall through to DD + case 'DD' : + if (input != null) { + datePartArray[DATE] = toInt(input); + } + break; + case 'Do' : + if (input != null) { + datePartArray[DATE] = toInt(parseInt(input, 10)); + } + break; + // DAY OF YEAR + case 'DDD' : // fall through to DDDD + case 'DDDD' : + if (input != null) { + config._dayOfYear = toInt(input); } - } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { - sign = (match[1] === "-") ? -1 : 1; - duration = { - y: 0, - d: toInt(match[DATE]) * sign, - h: toInt(match[HOUR]) * sign, - m: toInt(match[MINUTE]) * sign, - s: toInt(match[SECOND]) * sign, - ms: toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = isoDurationRegex.exec(input))) { - sign = (match[1] === "-") ? -1 : 1; - parseIso = function (inp) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - }; - duration = { - y: parseIso(match[2]), - M: parseIso(match[3]), - d: parseIso(match[4]), - h: parseIso(match[5]), - m: parseIso(match[6]), - s: parseIso(match[7]), - w: parseIso(match[8]) - }; - } - - ret = new Duration(duration); - if (moment.isDuration(input) && input.hasOwnProperty('_lang')) { - ret._lang = input._lang; + break; + // YEAR + case 'YY' : + datePartArray[YEAR] = moment.parseTwoDigitYear(input); + break; + case 'YYYY' : + case 'YYYYY' : + case 'YYYYYY' : + datePartArray[YEAR] = toInt(input); + break; + // AM / PM + case 'a' : // fall through to A + case 'A' : + config._isPm = config._locale.isPM(input); + break; + // 24 HOUR + case 'H' : // fall through to hh + case 'HH' : // fall through to hh + case 'h' : // fall through to hh + case 'hh' : + datePartArray[HOUR] = toInt(input); + break; + // MINUTE + case 'm' : // fall through to mm + case 'mm' : + datePartArray[MINUTE] = toInt(input); + break; + // SECOND + case 's' : // fall through to ss + case 'ss' : + datePartArray[SECOND] = toInt(input); + break; + // MILLISECOND + case 'S' : + case 'SS' : + case 'SSS' : + case 'SSSS' : + datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); + break; + // UNIX TIMESTAMP WITH MS + case 'X': + config._d = new Date(parseFloat(input) * 1000); + break; + // TIMEZONE + case 'Z' : // fall through to ZZ + case 'ZZ' : + config._useUTC = true; + config._tzm = timezoneMinutesFromString(input); + break; + // WEEKDAY - human + case 'dd': + case 'ddd': + case 'dddd': + a = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (a != null) { + config._w = config._w || {}; + config._w['d'] = a; + } else { + config._pf.invalidWeekday = input; + } + break; + // WEEK, WEEK DAY - numeric + case 'w': + case 'ww': + case 'W': + case 'WW': + case 'd': + case 'e': + case 'E': + token = token.substr(0, 1); + /* falls through */ + case 'gggg': + case 'GGGG': + case 'GGGGG': + token = token.substr(0, 2); + if (input) { + config._w = config._w || {}; + config._w[token] = toInt(input); + } + break; + case 'gg': + case 'GG': + config._w = config._w || {}; + config._w[token] = moment.parseTwoDigitYear(input); } + } - return ret; - }; - - // version number - moment.version = VERSION; - - // default format - moment.defaultFormat = isoFormat; - - // constant that refers to the ISO standard - moment.ISO_8601 = function () {}; - - // Plugins that add properties should also add the key here (null value), - // so we can properly clone ourselves. - moment.momentProperties = momentProperties; - - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - moment.updateOffset = function () {}; - - // This function allows you to set a threshold for relative time strings - moment.relativeTimeThreshold = function(threshold, limit) { - if (relativeTimeThresholds[threshold] === undefined) { - return false; - } - relativeTimeThresholds[threshold] = limit; - return true; - }; + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; - // This function will load languages and then set the global language. If - // no arguments are passed in, it will simply return the current global - // language key. - moment.lang = function (key, values) { - var r; - if (!key) { - return moment.fn._lang._abbr; - } - if (values) { - loadLang(normalizeLanguage(key), values); - } else if (values === null) { - unloadLang(key); - key = 'en'; - } else if (!languages[key]) { - getLangDefinition(key); - } - r = moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key); - return r._abbr; - }; + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; - // returns language data - moment.langData = function (key) { - if (key && key._lang && key._lang._abbr) { - key = key._lang._abbr; - } - return getLangDefinition(key); - }; + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); + week = dfl(w.W, 1); + weekday = dfl(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; - // compare moment object - moment.isMoment = function (obj) { - return obj instanceof Moment || - (obj != null && obj.hasOwnProperty('_isAMomentObject')); - }; + weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); + week = dfl(w.w, 1); - // for typechecking Duration objects - moment.isDuration = function (obj) { - return obj instanceof Duration; - }; + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < dow) { + ++week; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + } else { + // default to begining of week + weekday = dow; + } + } + temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); - for (i = lists.length - 1; i >= 0; --i) { - makeList(lists[i]); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; } - moment.normalizeUnits = function (units) { - return normalizeUnits(units); - }; + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function dateFromConfig(config) { + var i, date, input = [], currentDate, yearToUse; - moment.invalid = function (flags) { - var m = moment.utc(NaN); - if (flags != null) { - extend(m._pf, flags); - } - else { - m._pf.userInvalidated = true; + if (config._d) { + return; } - return m; - }; + currentDate = currentDateArray(config); - moment.parseZone = function () { - return moment.apply(null, arguments).parseZone(); - }; + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } - moment.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); - /************************************ - Moment Prototype - ************************************/ + if (config._dayOfYear > daysInYear(yearToUse)) { + config._pf._overflowDayOfYear = true; + } + date = makeUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } - extend(moment.fn = Moment.prototype, { + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } - clone : function () { - return moment(this); - }, + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } - valueOf : function () { - return +this._d + ((this._offset || 0) * 60000); - }, + config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); + // Apply timezone offset from input. The actual zone can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); + } + } - unix : function () { - return Math.floor(+this / 1000); - }, + function dateFromObject(config) { + var normalizedInput; - toString : function () { - return this.clone().lang('en').format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); - }, + if (config._d) { + return; + } - toDate : function () { - return this._offset ? new Date(+this) : this._d; - }, + normalizedInput = normalizeObjectUnits(config._i); + config._a = [ + normalizedInput.year, + normalizedInput.month, + normalizedInput.day, + normalizedInput.hour, + normalizedInput.minute, + normalizedInput.second, + normalizedInput.millisecond + ]; - toISOString : function () { - var m = moment(this).utc(); - if (0 < m.year() && m.year() <= 9999) { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - }, + dateFromConfig(config); + } - toArray : function () { - var m = this; + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { return [ - m.year(), - m.month(), - m.date(), - m.hours(), - m.minutes(), - m.seconds(), - m.milliseconds() + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() ]; - }, - - isValid : function () { - return isValid(this); - }, - - isDSTShifted : function () { - - if (this._a) { - return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; - } - - return false; - }, - - parsingFlags : function () { - return extend({}, this._pf); - }, + } else { + return [now.getFullYear(), now.getMonth(), now.getDate()]; + } + } - invalidAt: function () { - return this._pf.overflow; - }, + // date from string and format string + function makeDateFromStringAndFormat(config) { + if (config._f === moment.ISO_8601) { + parseISO(config); + return; + } - utc : function () { - return this.zone(0); - }, + config._a = []; + config._pf.empty = true; - local : function () { - this.zone(0); - this._isUTC = false; - return this; - }, + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; - format : function (inputString) { - var output = formatMoment(this, inputString || moment.defaultFormat); - return this.lang().postformat(output); - }, + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - add : function (input, val) { - var dur; - // switch args to support add('s', 1) and add(1, 's') - if (typeof input === 'string' && typeof val === 'string') { - dur = moment.duration(isNaN(+val) ? +input : +val, isNaN(+val) ? val : input); - } else if (typeof input === 'string') { - dur = moment.duration(+val, input); - } else { - dur = moment.duration(input, val); + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + config._pf.unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; } - addOrSubtractDurationFromMoment(this, dur, 1); - return this; - }, - - subtract : function (input, val) { - var dur; - // switch args to support subtract('s', 1) and subtract(1, 's') - if (typeof input === 'string' && typeof val === 'string') { - dur = moment.duration(isNaN(+val) ? +input : +val, isNaN(+val) ? val : input); - } else if (typeof input === 'string') { - dur = moment.duration(+val, input); - } else { - dur = moment.duration(input, val); + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + config._pf.empty = false; + } + else { + config._pf.unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); } - addOrSubtractDurationFromMoment(this, dur, -1); - return this; - }, + else if (config._strict && !parsedInput) { + config._pf.unusedTokens.push(token); + } + } - diff : function (input, units, asFloat) { - var that = makeAs(input, this), - zoneDiff = (this.zone() - that.zone()) * 6e4, - diff, output; + // add remaining unparsed input length to the string + config._pf.charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + config._pf.unusedInput.push(string); + } - units = normalizeUnits(units); + // handle am pm + if (config._isPm && config._a[HOUR] < 12) { + config._a[HOUR] += 12; + } + // if is 12 am, change hours to 0 + if (config._isPm === false && config._a[HOUR] === 12) { + config._a[HOUR] = 0; + } - if (units === 'year' || units === 'month') { - // average number of days in the months in the given dates - diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 - // difference in months - output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); - // adjust by taking difference in days, average number of days - // and dst in the given months. - output += ((this - moment(this).startOf('month')) - - (that - moment(that).startOf('month'))) / diff; - // same as above but with zones, to negate all dst - output -= ((this.zone() - moment(this).startOf('month').zone()) - - (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff; - if (units === 'year') { - output = output / 12; - } - } else { - diff = (this - that); - output = units === 'second' ? diff / 1e3 : // 1000 - units === 'minute' ? diff / 6e4 : // 1000 * 60 - units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - diff; - } - return asFloat ? output : absRound(output); - }, + dateFromConfig(config); + checkOverflow(config); + } - from : function (time, withoutSuffix) { - return moment.duration(this.diff(time)).lang(this.lang()._abbr).humanize(!withoutSuffix); - }, + function unescapeFormat(s) { + return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function regexpEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } - fromNow : function (withoutSuffix) { - return this.from(moment(), withoutSuffix); - }, + // date from string and array of format strings + function makeDateFromStringAndArray(config) { + var tempConfig, + bestMoment, - calendar : function (time) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're zone'd or not. - var now = time || moment(), - sod = makeAs(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - return this.format(this.lang().calendar(format, this)); - }, + scoreToBeat, + i, + currentScore; - isLeapYear : function () { - return isLeapYear(this.year()); - }, + if (config._f.length === 0) { + config._pf.invalidFormat = true; + config._d = new Date(NaN); + return; + } - isDST : function () { - return (this.zone() < this.clone().month(0).zone() || - this.zone() < this.clone().month(5).zone()); - }, + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + tempConfig._pf = defaultParsingFlags(); + tempConfig._f = config._f[i]; + makeDateFromStringAndFormat(tempConfig); - day : function (input) { - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.lang()); - return this.add({ d : input - day }); - } else { - return day; + if (!isValid(tempConfig)) { + continue; } - }, - month : makeAccessor('Month', true), + // if there is any input that was not parsed add a penalty for that format + currentScore += tempConfig._pf.charsLeftOver; - startOf: function (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - /* falls through */ - } + //or tokens + currentScore += tempConfig._pf.unusedTokens.length * 10; - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } else if (units === 'isoWeek') { - this.isoWeekday(1); - } + tempConfig._pf.score = currentScore; - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; } + } - return this; - }, + extend(config, bestMoment || tempConfig); + } - endOf: function (units) { - units = normalizeUnits(units); - return this.startOf(units).add((units === 'isoWeek' ? 'week' : units), 1).subtract('ms', 1); - }, + // date from iso format + function parseISO(config) { + var i, l, + string = config._i, + match = isoRegex.exec(string); - isAfter: function (input, units) { - units = typeof units !== 'undefined' ? units : 'millisecond'; - return +this.clone().startOf(units) > +moment(input).startOf(units); - }, + if (match) { + config._pf.iso = true; + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { + // match[5] should be "T" or undefined + config._f = isoDates[i][0] + (match[6] || ' '); + break; + } + } + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(string)) { + config._f += isoTimes[i][0]; + break; + } + } + if (string.match(parseTokenTimezone)) { + config._f += 'Z'; + } + makeDateFromStringAndFormat(config); + } else { + config._isValid = false; + } + } - isBefore: function (input, units) { - units = typeof units !== 'undefined' ? units : 'millisecond'; - return +this.clone().startOf(units) < +moment(input).startOf(units); - }, + // date from iso format or fallback + function makeDateFromString(config) { + parseISO(config); + if (config._isValid === false) { + delete config._isValid; + moment.createFromInputFallback(config); + } + } - isSame: function (input, units) { - units = units || 'ms'; - return +this.clone().startOf(units) === +makeAs(input, this).startOf(units); - }, + function makeDateFromInput(config) { + var input = config._i, matched; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { + config._d = new Date(+matched[1]); + } else if (typeof input === 'string') { + makeDateFromString(config); + } else if (isArray(input)) { + config._a = input.slice(0); + dateFromConfig(config); + } else if (typeof(input) === 'object') { + dateFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + moment.createFromInputFallback(config); + } + } - min: deprecate( - "moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548", - function (other) { - other = moment.apply(null, arguments); - return other < this ? this : other; - } - ), + function makeDate(y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); - max: deprecate( - "moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548", - function (other) { - other = moment.apply(null, arguments); - return other > this ? this : other; - } - ), + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } - // keepTime = true means only change the timezone, without affecting - // the local hour. So 5:31:26 +0300 --[zone(2, true)]--> 5:31:26 +0200 - // It is possible that 5:31:26 doesn't exist int zone +0200, so we - // adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - zone : function (input, keepTime) { - var offset = this._offset || 0; - if (input != null) { - if (typeof input === "string") { - input = timezoneMinutesFromString(input); - } - if (Math.abs(input) < 16) { - input = input * 60; - } - this._offset = input; - this._isUTC = true; - if (offset !== input) { - if (!keepTime || this._changeInProgress) { - addOrSubtractDurationFromMoment(this, - moment.duration(offset - input, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - moment.updateOffset(this, true); - this._changeInProgress = null; - } + function makeUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } + + function parseWeekday(input, locale) { + if (typeof input === 'string') { + if (!isNaN(input)) { + input = parseInt(input, 10); + } + else { + input = locale.weekdaysParse(input); + if (typeof input !== 'number') { + return null; } - } else { - return this._isUTC ? offset : this._d.getTimezoneOffset(); } - return this; - }, + } + return input; + } - zoneAbbr : function () { - return this._isUTC ? "UTC" : ""; - }, + /************************************ + Relative Time + ************************************/ - zoneName : function () { - return this._isUTC ? "Coordinated Universal Time" : ""; - }, - parseZone : function () { - if (this._tzm) { - this.zone(this._tzm); - } else if (typeof this._i === 'string') { - this.zone(this._i); - } - return this; - }, + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime(posNegDuration, withoutSuffix, locale) { + var duration = moment.duration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + years = round(duration.as('y')), + + args = seconds < relativeTimeThresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < relativeTimeThresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < relativeTimeThresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < relativeTimeThresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < relativeTimeThresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + + args[2] = withoutSuffix; + args[3] = +posNegDuration > 0; + args[4] = locale; + return substituteTimeAgo.apply({}, args); + } + - hasAlignedHourOffset : function (input) { - if (!input) { - input = 0; - } - else { - input = moment(input).zone(); - } + /************************************ + Week of Year + ************************************/ - return (this.zone() - input) % 60 === 0; - }, - daysInMonth : function () { - return daysInMonth(this.year(), this.month()); - }, + // firstDayOfWeek 0 = sun, 6 = sat + // the day of the week that starts the week + // (usually sunday or monday) + // firstDayOfWeekOfYear 0 = sun, 6 = sat + // the first week is the week that contains the first + // of this day of the week + // (eg. ISO weeks use thursday (4)) + function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; - dayOfYear : function (input) { - var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add("d", (input - dayOfYear)); - }, - quarter : function (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - }, + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } - weekYear : function (input) { - var year = weekOfYear(this, this.lang()._week.dow, this.lang()._week.doy).year; - return input == null ? year : this.add("y", (input - year)); - }, + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } - isoWeekYear : function (input) { - var year = weekOfYear(this, 1, 4).year; - return input == null ? year : this.add("y", (input - year)); - }, + adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } - week : function (input) { - var week = this.lang().week(this); - return input == null ? week : this.add("d", (input - week) * 7); - }, + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; - isoWeek : function (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add("d", (input - week) * 7); - }, + d = d === 0 ? 7 : d; + weekday = weekday != null ? weekday : firstDayOfWeek; + daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); + dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; - weekday : function (input) { - var weekday = (this.day() + 7 - this.lang()._week.dow) % 7; - return input == null ? weekday : this.add("d", input - weekday); - }, + return { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; + } - isoWeekday : function (input) { - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - }, + /************************************ + Top Level Functions + ************************************/ - isoWeeksInYear : function () { - return weeksInYear(this.year(), 1, 4); - }, + function makeMoment(config) { + var input = config._i, + format = config._f; - weeksInYear : function () { - var weekInfo = this._lang._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - }, + config._locale = config._locale || moment.localeData(config._l); - get : function (units) { - units = normalizeUnits(units); - return this[units](); - }, + if (input === null || (format === undefined && input === '')) { + return moment.invalid({nullInput: true}); + } - set : function (units, value) { - units = normalizeUnits(units); - if (typeof this[units] === 'function') { - this[units](value); - } - return this; - }, + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } - // If passed a language key, it will set the language for this - // instance. Otherwise, it will return the language configuration - // variables for this instance. - lang : function (key) { - if (key === undefined) { - return this._lang; + if (moment.isMoment(input)) { + return new Moment(input, true); + } else if (format) { + if (isArray(format)) { + makeDateFromStringAndArray(config); } else { - this._lang = getLangDefinition(key); - return this; + makeDateFromStringAndFormat(config); } + } else { + makeDateFromInput(config); } - }); - function rawMonthSetter(mom, value) { - var dayOfMonth; + return new Moment(config); + } - // TODO: Move this out of here! - if (typeof value === 'string') { - value = mom.lang().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } + moment = function (input, format, locale, strict) { + var c; + + if (typeof(locale) === "boolean") { + strict = locale; + locale = undefined; } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._i = input; + c._f = format; + c._l = locale; + c._strict = strict; + c._isUTC = false; + c._pf = defaultParsingFlags(); - dayOfMonth = Math.min(mom.date(), - daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } + return makeMoment(c); + }; - function rawGetter(mom, unit) { - return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); - } + moment.suppressDeprecationWarnings = false; - function rawSetter(mom, unit, value) { - if (unit === 'Month') { - return rawMonthSetter(mom, value); - } else { - return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + moment.createFromInputFallback = deprecate( + 'moment construction falls back to js Date. This is ' + + 'discouraged and will be removed in upcoming major ' + + 'release. Please refer to ' + + 'https://github.com/moment/moment/issues/1407 for more info.', + function (config) { + config._d = new Date(config._i); } - } + ); - function makeAccessor(unit, keepTime) { - return function (value) { - if (value != null) { - rawSetter(this, unit, value); - moment.updateOffset(this, keepTime); - return this; - } else { - return rawGetter(this, unit); + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return moment(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (moments[i][fn](res)) { + res = moments[i]; } - }; + } + return res; } - moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); - moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); - moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); - // moment.fn.month is defined separately - moment.fn.date = makeAccessor('Date', true); - moment.fn.dates = deprecate("dates accessor is deprecated. Use date instead.", makeAccessor('Date', true)); - moment.fn.year = makeAccessor('FullYear', true); - moment.fn.years = deprecate("years accessor is deprecated. Use year instead.", makeAccessor('FullYear', true)); + moment.min = function () { + var args = [].slice.call(arguments, 0); - // add plural methods - moment.fn.days = moment.fn.day; - moment.fn.months = moment.fn.month; - moment.fn.weeks = moment.fn.week; - moment.fn.isoWeeks = moment.fn.isoWeek; - moment.fn.quarters = moment.fn.quarter; + return pickBy('isBefore', args); + }; - // add aliased format methods - moment.fn.toJSON = moment.fn.toISOString; + moment.max = function () { + var args = [].slice.call(arguments, 0); - /************************************ - Duration Prototype - ************************************/ + return pickBy('isAfter', args); + }; + // creating with utc + moment.utc = function (input, format, locale, strict) { + var c; - extend(moment.duration.fn = Duration.prototype, { + if (typeof(locale) === "boolean") { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._useUTC = true; + c._isUTC = true; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + c._pf = defaultParsingFlags(); + + return makeMoment(c).utc(); + }; + + // creating with unix timestamp (in seconds) + moment.unix = function (input) { + return moment(input * 1000); + }; + + // duration + moment.duration = function (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + parseIso, + diffRes; + + if (moment.isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = isoDurationRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + parseIso = function (inp) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + }; + duration = { + y: parseIso(match[2]), + M: parseIso(match[3]), + d: parseIso(match[4]), + h: parseIso(match[5]), + m: parseIso(match[6]), + s: parseIso(match[7]), + w: parseIso(match[8]) + }; + } else if (typeof duration === 'object' && + ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(moment(duration.from), moment(duration.to)); - _bubble : function () { - var milliseconds = this._milliseconds, - days = this._days, - months = this._months, - data = this._data, - seconds, minutes, hours, years; + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; + ret = new Duration(duration); - seconds = absRound(milliseconds / 1000); - data.seconds = seconds % 60; + if (moment.isDuration(input) && input.hasOwnProperty('_locale')) { + ret._locale = input._locale; + } - minutes = absRound(seconds / 60); - data.minutes = minutes % 60; + return ret; + }; - hours = absRound(minutes / 60); - data.hours = hours % 24; + // version number + moment.version = VERSION; - days += absRound(hours / 24); - data.days = days % 30; + // default format + moment.defaultFormat = isoFormat; - months += absRound(days / 30); - data.months = months % 12; + // constant that refers to the ISO standard + moment.ISO_8601 = function () {}; - years = absRound(months / 12); - data.years = years; - }, + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + moment.momentProperties = momentProperties; - weeks : function () { - return absRound(this.days() / 7); - }, + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + moment.updateOffset = function () {}; - valueOf : function () { - return this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6; - }, + // This function allows you to set a threshold for relative time strings + moment.relativeTimeThreshold = function (threshold, limit) { + if (relativeTimeThresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return relativeTimeThresholds[threshold]; + } + relativeTimeThresholds[threshold] = limit; + return true; + }; - humanize : function (withSuffix) { - var difference = +this, - output = relativeTime(difference, !withSuffix, this.lang()); + moment.lang = deprecate( + "moment.lang is deprecated. Use moment.locale instead.", + function (key, value) { + return moment.locale(key, value); + } + ); - if (withSuffix) { - output = this.lang().pastFuture(difference, output); + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + moment.locale = function (key, values) { + var data; + if (key) { + if (typeof(values) !== "undefined") { + data = moment.defineLocale(key, values); + } + else { + data = moment.localeData(key); } - return this.lang().postformat(output); - }, - - add : function (input, val) { - // supports only 2.0-style add(1, 's') or add(moment) - var dur = moment.duration(input, val); - - this._milliseconds += dur._milliseconds; - this._days += dur._days; - this._months += dur._months; + if (data) { + moment.duration._locale = moment._locale = data; + } + } - this._bubble(); + return moment._locale._abbr; + }; - return this; - }, + moment.defineLocale = function (name, values) { + if (values !== null) { + values.abbr = name; + if (!locales[name]) { + locales[name] = new Locale(); + } + locales[name].set(values); - subtract : function (input, val) { - var dur = moment.duration(input, val); + // backwards compat for now: also set the locale + moment.locale(name); - this._milliseconds -= dur._milliseconds; - this._days -= dur._days; - this._months -= dur._months; + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + }; - this._bubble(); + moment.langData = deprecate( + "moment.langData is deprecated. Use moment.localeData instead.", + function (key) { + return moment.localeData(key); + } + ); - return this; - }, + // returns locale data + moment.localeData = function (key) { + var locale; - get : function (units) { - units = normalizeUnits(units); - return this[units.toLowerCase() + 's'](); - }, + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } - as : function (units) { - units = normalizeUnits(units); - return this['as' + units.charAt(0).toUpperCase() + units.slice(1) + 's'](); - }, + if (!key) { + return moment._locale; + } - lang : moment.fn.lang, + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } - toIsoString : function () { - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var years = Math.abs(this.years()), - months = Math.abs(this.months()), - days = Math.abs(this.days()), - hours = Math.abs(this.hours()), - minutes = Math.abs(this.minutes()), - seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); + return chooseLocale(key); + }; - if (!this.asSeconds()) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } + // compare moment object + moment.isMoment = function (obj) { + return obj instanceof Moment || + (obj != null && obj.hasOwnProperty('_isAMomentObject')); + }; - return (this.asSeconds() < 0 ? '-' : '') + - 'P' + - (years ? years + 'Y' : '') + - (months ? months + 'M' : '') + - (days ? days + 'D' : '') + - ((hours || minutes || seconds) ? 'T' : '') + - (hours ? hours + 'H' : '') + - (minutes ? minutes + 'M' : '') + - (seconds ? seconds + 'S' : ''); - } - }); + // for typechecking Duration objects + moment.isDuration = function (obj) { + return obj instanceof Duration; + }; - function makeDurationGetter(name) { - moment.duration.fn[name] = function () { - return this._data[name]; - }; + for (i = lists.length - 1; i >= 0; --i) { + makeList(lists[i]); } - function makeDurationAsGetter(name, factor) { - moment.duration.fn['as' + name] = function () { - return +this / factor; - }; - } + moment.normalizeUnits = function (units) { + return normalizeUnits(units); + }; - for (i in unitMillisecondFactors) { - if (unitMillisecondFactors.hasOwnProperty(i)) { - makeDurationAsGetter(i, unitMillisecondFactors[i]); - makeDurationGetter(i.toLowerCase()); + moment.invalid = function (flags) { + var m = moment.utc(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; } - } - makeDurationAsGetter('Weeks', 6048e5); - moment.duration.fn.asMonths = function () { - return (+this - this.years() * 31536e6) / 2592e6 + this.years() * 12; + return m; + }; + + moment.parseZone = function () { + return moment.apply(null, arguments).parseZone(); }; + moment.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; /************************************ - Default Lang + Moment Prototype ************************************/ - // Set default language, other languages will inherit from English. - moment.lang('en', { - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); + extend(moment.fn = Moment.prototype, { - /* EMBED_LANGUAGES */ + clone : function () { + return moment(this); + }, - /************************************ - Exposing Moment - ************************************/ + valueOf : function () { + return +this._d + ((this._offset || 0) * 60000); + }, - function makeGlobal(shouldDeprecate) { - /*global ender:false */ - if (typeof ender !== 'undefined') { - return; - } - oldGlobalMoment = globalScope.moment; - if (shouldDeprecate) { - globalScope.moment = deprecate( - "Accessing Moment through the global scope is " + - "deprecated, and will be removed in an upcoming " + - "release.", - moment); - } else { - globalScope.moment = moment; - } - } + unix : function () { + return Math.floor(+this / 1000); + }, + + toString : function () { + return this.clone().locale('en').format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); + }, + + toDate : function () { + return this._offset ? new Date(+this) : this._d; + }, + + toISOString : function () { + var m = moment(this).utc(); + if (0 < m.year() && m.year() <= 9999) { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + }, + + toArray : function () { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hours(), + m.minutes(), + m.seconds(), + m.milliseconds() + ]; + }, - // CommonJS module is defined - if (hasModule) { - module.exports = moment; - } else if (true) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, module) { - if (module.config && module.config() && module.config().noGlobal === true) { - // release the global variable - globalScope.moment = oldGlobalMoment; + isValid : function () { + return isValid(this); + }, + + isDSTShifted : function () { + if (this._a) { + return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; } - return moment; - }.call(exports, __webpack_require__, exports, module)), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - makeGlobal(true); - } else { - makeGlobal(); - } - }).call(this); - - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(60)(module))) + return false; + }, -/***/ }, -/* 47 */ -/***/ function(module, exports, __webpack_require__) { + parsingFlags : function () { + return extend({}, this._pf); + }, - /** - * Copyright 2012 Craig Campbell - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Mousetrap is a simple keyboard shortcut library for Javascript with - * no external dependencies - * - * @version 1.1.2 - * @url craig.is/killing/mice - */ + invalidAt: function () { + return this._pf.overflow; + }, - /** - * mapping of special keycodes to their corresponding keys - * - * everything in this dictionary cannot use keypress events - * so it has to be here to map to the correct keycodes for - * keyup/keydown events - * - * @type {Object} - */ - var _MAP = { - 8: 'backspace', - 9: 'tab', - 13: 'enter', - 16: 'shift', - 17: 'ctrl', - 18: 'alt', - 20: 'capslock', - 27: 'esc', - 32: 'space', - 33: 'pageup', - 34: 'pagedown', - 35: 'end', - 36: 'home', - 37: 'left', - 38: 'up', - 39: 'right', - 40: 'down', - 45: 'ins', - 46: 'del', - 91: 'meta', - 93: 'meta', - 224: 'meta' - }, + utc : function (keepLocalTime) { + return this.zone(0, keepLocalTime); + }, - /** - * mapping for special characters so they can support - * - * this dictionary is only used incase you want to bind a - * keyup or keydown event to one of these keys - * - * @type {Object} - */ - _KEYCODE_MAP = { - 106: '*', - 107: '+', - 109: '-', - 110: '.', - 111 : '/', - 186: ';', - 187: '=', - 188: ',', - 189: '-', - 190: '.', - 191: '/', - 192: '`', - 219: '[', - 220: '\\', - 221: ']', - 222: '\'' - }, + local : function (keepLocalTime) { + if (this._isUTC) { + this.zone(0, keepLocalTime); + this._isUTC = false; - /** - * this is a mapping of keys that require shift on a US keypad - * back to the non shift equivelents - * - * this is so you can use keyup events with these keys - * - * note that this will only work reliably on US keyboards - * - * @type {Object} - */ - _SHIFT_MAP = { - '~': '`', - '!': '1', - '@': '2', - '#': '3', - '$': '4', - '%': '5', - '^': '6', - '&': '7', - '*': '8', - '(': '9', - ')': '0', - '_': '-', - '+': '=', - ':': ';', - '\"': '\'', - '<': ',', - '>': '.', - '?': '/', - '|': '\\' - }, + if (keepLocalTime) { + this.add(this._d.getTimezoneOffset(), 'm'); + } + } + return this; + }, - /** - * this is a list of special strings you can use to map - * to modifier keys when you specify your keyboard shortcuts - * - * @type {Object} - */ - _SPECIAL_ALIASES = { - 'option': 'alt', - 'command': 'meta', - 'return': 'enter', - 'escape': 'esc' - }, + format : function (inputString) { + var output = formatMoment(this, inputString || moment.defaultFormat); + return this.localeData().postformat(output); + }, - /** - * variable to store the flipped version of _MAP from above - * needed to check if we should use keypress or not when no action - * is specified - * - * @type {Object|undefined} - */ - _REVERSE_MAP, + add : createAdder(1, 'add'), - /** - * a list of all the callbacks setup via Mousetrap.bind() - * - * @type {Object} - */ - _callbacks = {}, + subtract : createAdder(-1, 'subtract'), - /** - * direct map of string combinations to callbacks used for trigger() - * - * @type {Object} - */ - _direct_map = {}, + diff : function (input, units, asFloat) { + var that = makeAs(input, this), + zoneDiff = (this.zone() - that.zone()) * 6e4, + diff, output; - /** - * keeps track of what level each sequence is at since multiple - * sequences can start out with the same sequence - * - * @type {Object} - */ - _sequence_levels = {}, + units = normalizeUnits(units); - /** - * variable to store the setTimeout call - * - * @type {null|number} - */ - _reset_timer, + if (units === 'year' || units === 'month') { + // average number of days in the months in the given dates + diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 + // difference in months + output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); + // adjust by taking difference in days, average number of days + // and dst in the given months. + output += ((this - moment(this).startOf('month')) - + (that - moment(that).startOf('month'))) / diff; + // same as above but with zones, to negate all dst + output -= ((this.zone() - moment(this).startOf('month').zone()) - + (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff; + if (units === 'year') { + output = output / 12; + } + } else { + diff = (this - that); + output = units === 'second' ? diff / 1e3 : // 1000 + units === 'minute' ? diff / 6e4 : // 1000 * 60 + units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + diff; + } + return asFloat ? output : absRound(output); + }, + + from : function (time, withoutSuffix) { + return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + }, + + fromNow : function (withoutSuffix) { + return this.from(moment(), withoutSuffix); + }, + + calendar : function (time) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're zone'd or not. + var now = time || moment(), + sod = makeAs(now, this).startOf('day'), + diff = this.diff(sod, 'days', true), + format = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + return this.format(this.localeData().calendar(format, this)); + }, - /** - * temporary state where we will ignore the next keyup - * - * @type {boolean|string} - */ - _ignore_next_keyup = false, + isLeapYear : function () { + return isLeapYear(this.year()); + }, - /** - * are we currently inside of a sequence? - * type of action ("keyup" or "keydown" or "keypress") or false - * - * @type {boolean|string} - */ - _inside_sequence = false; + isDST : function () { + return (this.zone() < this.clone().month(0).zone() || + this.zone() < this.clone().month(5).zone()); + }, - /** - * loop through the f keys, f1 to f19 and add them to the map - * programatically - */ - for (var i = 1; i < 20; ++i) { - _MAP[111 + i] = 'f' + i; - } + day : function (input) { + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + }, - /** - * loop through to map numbers on the numeric keypad - */ - for (i = 0; i <= 9; ++i) { - _MAP[i + 96] = i; - } + month : makeAccessor('Month', true), - /** - * cross browser add event method - * - * @param {Element|HTMLDocument} object - * @param {string} type - * @param {Function} callback - * @returns void - */ - function _addEvent(object, type, callback) { - if (object.addEventListener) { - return object.addEventListener(type, callback, false); - } + startOf : function (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + /* falls through */ + } - object.attachEvent('on' + type, callback); - } + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } else if (units === 'isoWeek') { + this.isoWeekday(1); + } - /** - * takes the event and returns the key character - * - * @param {Event} e - * @return {string} - */ - function _characterFromEvent(e) { + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } - // for keypress events we should return the character as is - if (e.type == 'keypress') { - return String.fromCharCode(e.which); - } + return this; + }, - // for non keypress events the special maps are needed - if (_MAP[e.which]) { - return _MAP[e.which]; - } + endOf: function (units) { + units = normalizeUnits(units); + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + }, - if (_KEYCODE_MAP[e.which]) { - return _KEYCODE_MAP[e.which]; - } + isAfter: function (input, units) { + units = typeof units !== 'undefined' ? units : 'millisecond'; + return +this.clone().startOf(units) > +moment(input).startOf(units); + }, - // if it is not in the special map - return String.fromCharCode(e.which).toLowerCase(); - } + isBefore: function (input, units) { + units = typeof units !== 'undefined' ? units : 'millisecond'; + return +this.clone().startOf(units) < +moment(input).startOf(units); + }, - /** - * should we stop this event before firing off callbacks - * - * @param {Event} e - * @return {boolean} - */ - function _stop(e) { - var element = e.target || e.srcElement, - tag_name = element.tagName; + isSame: function (input, units) { + units = units || 'ms'; + return +this.clone().startOf(units) === +makeAs(input, this).startOf(units); + }, - // if the element has the class "mousetrap" then no need to stop - if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { - return false; - } + min: deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other < this ? this : other; + } + ), - // stop for input, select, and textarea - return tag_name == 'INPUT' || tag_name == 'SELECT' || tag_name == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true'); - } + max: deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other > this ? this : other; + } + ), - /** - * checks if two arrays are equal - * - * @param {Array} modifiers1 - * @param {Array} modifiers2 - * @returns {boolean} - */ - function _modifiersMatch(modifiers1, modifiers2) { - return modifiers1.sort().join(',') === modifiers2.sort().join(','); - } + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + zone : function (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = timezoneMinutesFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = this._d.getTimezoneOffset(); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.subtract(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addOrSubtractDurationFromMoment(this, + moment.duration(offset - input, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + moment.updateOffset(this, true); + this._changeInProgress = null; + } + } + } else { + return this._isUTC ? offset : this._d.getTimezoneOffset(); + } + return this; + }, - /** - * resets all sequence counters except for the ones passed in - * - * @param {Object} do_not_reset - * @returns void - */ - function _resetSequences(do_not_reset) { - do_not_reset = do_not_reset || {}; + zoneAbbr : function () { + return this._isUTC ? 'UTC' : ''; + }, - var active_sequences = false, - key; + zoneName : function () { + return this._isUTC ? 'Coordinated Universal Time' : ''; + }, - for (key in _sequence_levels) { - if (do_not_reset[key]) { - active_sequences = true; - continue; - } - _sequence_levels[key] = 0; - } + parseZone : function () { + if (this._tzm) { + this.zone(this._tzm); + } else if (typeof this._i === 'string') { + this.zone(this._i); + } + return this; + }, - if (!active_sequences) { - _inside_sequence = false; - } - } + hasAlignedHourOffset : function (input) { + if (!input) { + input = 0; + } + else { + input = moment(input).zone(); + } - /** - * finds all callbacks that match based on the keycode, modifiers, - * and action - * - * @param {string} character - * @param {Array} modifiers - * @param {string} action - * @param {boolean=} remove - should we remove any matches - * @param {string=} combination - * @returns {Array} - */ - function _getMatches(character, modifiers, action, remove, combination) { - var i, - callback, - matches = []; + return (this.zone() - input) % 60 === 0; + }, + + daysInMonth : function () { + return daysInMonth(this.year(), this.month()); + }, - // if there are no events related to this keycode - if (!_callbacks[character]) { - return []; - } + dayOfYear : function (input) { + var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + }, - // if a modifier key is coming up on its own we should allow it - if (action == 'keyup' && _isModifier(character)) { - modifiers = [character]; - } + quarter : function (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + }, - // loop through all callbacks for the key that was pressed - // and see if any of them match - for (i = 0; i < _callbacks[character].length; ++i) { - callback = _callbacks[character][i]; + weekYear : function (input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); + }, - // if this is a sequence but it is not at the right level - // then move onto the next match - if (callback.seq && _sequence_levels[callback.seq] != callback.level) { - continue; - } + isoWeekYear : function (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + }, - // if the action we are looking for doesn't match the action we got - // then we should keep going - if (action != callback.action) { - continue; - } + week : function (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + }, - // if this is a keypress event that means that we need to only - // look at the character, otherwise check the modifiers as - // well - if (action == 'keypress' || _modifiersMatch(modifiers, callback.modifiers)) { + isoWeek : function (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + }, - // remove is used so if you change your mind and call bind a - // second time with a new function the first one is overwritten - if (remove && callback.combo == combination) { - _callbacks[character].splice(i, 1); - } + weekday : function (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + }, - matches.push(callback); - } - } + isoWeekday : function (input) { + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); + }, - return matches; - } + isoWeeksInYear : function () { + return weeksInYear(this.year(), 1, 4); + }, - /** - * takes a key event and figures out what the modifiers are - * - * @param {Event} e - * @returns {Array} - */ - function _eventModifiers(e) { - var modifiers = []; + weeksInYear : function () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + }, - if (e.shiftKey) { - modifiers.push('shift'); - } + get : function (units) { + units = normalizeUnits(units); + return this[units](); + }, - if (e.altKey) { - modifiers.push('alt'); - } + set : function (units, value) { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + this[units](value); + } + return this; + }, - if (e.ctrlKey) { - modifiers.push('ctrl'); - } + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + locale : function (key) { + if (key === undefined) { + return this._locale._abbr; + } else { + this._locale = moment.localeData(key); + return this; + } + }, - if (e.metaKey) { - modifiers.push('meta'); - } + lang : deprecate( + "moment().lang() is deprecated. Use moment().localeData() instead.", + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + this._locale = moment.localeData(key); + return this; + } + } + ), - return modifiers; - } + localeData : function () { + return this._locale; + } + }); - /** - * actually calls the callback function - * - * if your callback function returns false this will use the jquery - * convention - prevent default and stop propogation on the event - * - * @param {Function} callback - * @param {Event} e - * @returns void - */ - function _fireCallback(callback, e) { - if (callback(e) === false) { - if (e.preventDefault) { - e.preventDefault(); - } + function rawMonthSetter(mom, value) { + var dayOfMonth; - if (e.stopPropagation) { - e.stopPropagation(); - } + // TODO: Move this out of here! + if (typeof value === 'string') { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } + } - e.returnValue = false; - e.cancelBubble = true; - } - } + dayOfMonth = Math.min(mom.date(), + daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } - /** - * handles a character key event - * - * @param {string} character - * @param {Event} e - * @returns void - */ - function _handleCharacter(character, e) { + function rawGetter(mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } - // if this event should not happen stop here - if (_stop(e)) { - return; - } + function rawSetter(mom, unit, value) { + if (unit === 'Month') { + return rawMonthSetter(mom, value); + } else { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } - var callbacks = _getMatches(character, _eventModifiers(e), e.type), - i, - do_not_reset = {}, - processed_sequence_callback = false; + function makeAccessor(unit, keepTime) { + return function (value) { + if (value != null) { + rawSetter(this, unit, value); + moment.updateOffset(this, keepTime); + return this; + } else { + return rawGetter(this, unit); + } + }; + } - // loop through matching callbacks for this key event - for (i = 0; i < callbacks.length; ++i) { + moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); + moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); + moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); + // moment.fn.month is defined separately + moment.fn.date = makeAccessor('Date', true); + moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); + moment.fn.year = makeAccessor('FullYear', true); + moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); - // fire for all sequence callbacks - // this is because if for example you have multiple sequences - // bound such as "g i" and "g t" they both need to fire the - // callback for matching g cause otherwise you can only ever - // match the first one - if (callbacks[i].seq) { - processed_sequence_callback = true; + // add plural methods + moment.fn.days = moment.fn.day; + moment.fn.months = moment.fn.month; + moment.fn.weeks = moment.fn.week; + moment.fn.isoWeeks = moment.fn.isoWeek; + moment.fn.quarters = moment.fn.quarter; - // keep a list of which sequences were matches for later - do_not_reset[callbacks[i].seq] = 1; - _fireCallback(callbacks[i].callback, e); - continue; - } + // add aliased format methods + moment.fn.toJSON = moment.fn.toISOString; - // if there were no sequence matches but we are still here - // that means this is a regular match so we should fire that - if (!processed_sequence_callback && !_inside_sequence) { - _fireCallback(callbacks[i].callback, e); - } - } + /************************************ + Duration Prototype + ************************************/ - // if you are inside of a sequence and the key you are pressing - // is not a modifier key then we should reset all sequences - // that were not matched by this key event - if (e.type == _inside_sequence && !_isModifier(character)) { - _resetSequences(do_not_reset); - } - } - /** - * handles a keydown event - * - * @param {Event} e - * @returns void - */ - function _handleKey(e) { + function daysToYears (days) { + // 400 years have 146097 days (taking into account leap year rules) + return days * 400 / 146097; + } - // normalize e.which for key events - // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion - e.which = typeof e.which == "number" ? e.which : e.keyCode; + function yearsToDays (years) { + // years * 365 + absRound(years / 4) - + // absRound(years / 100) + absRound(years / 400); + return years * 146097 / 400; + } + + extend(moment.duration.fn = Duration.prototype, { + + _bubble : function () { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, minutes, hours, years = 0; + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; - var character = _characterFromEvent(e); + seconds = absRound(milliseconds / 1000); + data.seconds = seconds % 60; - // no character found then stop - if (!character) { - return; - } + minutes = absRound(seconds / 60); + data.minutes = minutes % 60; - if (e.type == 'keyup' && _ignore_next_keyup == character) { - _ignore_next_keyup = false; - return; - } + hours = absRound(minutes / 60); + data.hours = hours % 24; - _handleCharacter(character, e); - } + days += absRound(hours / 24); - /** - * determines if the keycode specified is a modifier key or not - * - * @param {string} key - * @returns {boolean} - */ - function _isModifier(key) { - return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta'; - } + // Accurately convert days to years, assume start from year 0. + years = absRound(daysToYears(days)); + days -= absRound(yearsToDays(years)); - /** - * called to set a 1 second timeout on the specified sequence - * - * this is so after each key press in the sequence you have 1 second - * to press the next key before you have to start over - * - * @returns void - */ - function _resetSequenceTimer() { - clearTimeout(_reset_timer); - _reset_timer = setTimeout(_resetSequences, 1000); - } + // 30 days to a month + // TODO (iskren): Use anchor date (like 1st Jan) to compute this. + months += absRound(days / 30); + days %= 30; - /** - * reverses the map lookup so that we can look for specific keys - * to see what can and can't use keypress - * - * @return {Object} - */ - function _getReverseMap() { - if (!_REVERSE_MAP) { - _REVERSE_MAP = {}; - for (var key in _MAP) { + // 12 months -> 1 year + years += absRound(months / 12); + months %= 12; - // pull out the numeric keypad from here cause keypress should - // be able to detect the keys from the character - if (key > 95 && key < 112) { - continue; - } + data.days = days; + data.months = months; + data.years = years; + }, - if (_MAP.hasOwnProperty(key)) { - _REVERSE_MAP[_MAP[key]] = key; - } - } - } - return _REVERSE_MAP; - } + abs : function () { + this._milliseconds = Math.abs(this._milliseconds); + this._days = Math.abs(this._days); + this._months = Math.abs(this._months); - /** - * picks the best action based on the key combination - * - * @param {string} key - character for key - * @param {Array} modifiers - * @param {string=} action passed in - */ - function _pickBestAction(key, modifiers, action) { + this._data.milliseconds = Math.abs(this._data.milliseconds); + this._data.seconds = Math.abs(this._data.seconds); + this._data.minutes = Math.abs(this._data.minutes); + this._data.hours = Math.abs(this._data.hours); + this._data.months = Math.abs(this._data.months); + this._data.years = Math.abs(this._data.years); - // if no action was picked in we should try to pick the one - // that we think would work best for this key - if (!action) { - action = _getReverseMap()[key] ? 'keydown' : 'keypress'; - } + return this; + }, - // modifier keys don't work as expected with keypress, - // switch to keydown - if (action == 'keypress' && modifiers.length) { - action = 'keydown'; - } + weeks : function () { + return absRound(this.days() / 7); + }, - return action; - } + valueOf : function () { + return this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6; + }, - /** - * binds a key sequence to an event - * - * @param {string} combo - combo specified in bind call - * @param {Array} keys - * @param {Function} callback - * @param {string=} action - * @returns void - */ - function _bindSequence(combo, keys, callback, action) { + humanize : function (withSuffix) { + var output = relativeTime(this, !withSuffix, this.localeData()); - // start off by adding a sequence level record for this combination - // and setting the level to 0 - _sequence_levels[combo] = 0; + if (withSuffix) { + output = this.localeData().pastFuture(+this, output); + } - // if there is no action pick the best one for the first key - // in the sequence - if (!action) { - action = _pickBestAction(keys[0], []); - } + return this.localeData().postformat(output); + }, - /** - * callback to increase the sequence level for this sequence and reset - * all other sequences that were active - * - * @param {Event} e - * @returns void - */ - var _increaseSequence = function(e) { - _inside_sequence = action; - ++_sequence_levels[combo]; - _resetSequenceTimer(); - }, + add : function (input, val) { + // supports only 2.0-style add(1, 's') or add(moment) + var dur = moment.duration(input, val); - /** - * wraps the specified callback inside of another function in order - * to reset all sequence counters as soon as this sequence is done - * - * @param {Event} e - * @returns void - */ - _callbackAndReset = function(e) { - _fireCallback(callback, e); + this._milliseconds += dur._milliseconds; + this._days += dur._days; + this._months += dur._months; - // we should ignore the next key up if the action is key down - // or keypress. this is so if you finish a sequence and - // release the key the final key will not trigger a keyup - if (action !== 'keyup') { - _ignore_next_keyup = _characterFromEvent(e); - } + this._bubble(); - // weird race condition if a sequence ends with the key - // another sequence begins with - setTimeout(_resetSequences, 10); - }, - i; + return this; + }, - // loop through keys one at a time and bind the appropriate callback - // function. for any key leading up to the final one it should - // increase the sequence. after the final, it should reset all sequences - for (i = 0; i < keys.length; ++i) { - _bindSingle(keys[i], i < keys.length - 1 ? _increaseSequence : _callbackAndReset, action, combo, i); - } - } + subtract : function (input, val) { + var dur = moment.duration(input, val); - /** - * binds a single keyboard combination - * - * @param {string} combination - * @param {Function} callback - * @param {string=} action - * @param {string=} sequence_name - name of sequence if part of sequence - * @param {number=} level - what part of the sequence the command is - * @returns void - */ - function _bindSingle(combination, callback, action, sequence_name, level) { + this._milliseconds -= dur._milliseconds; + this._days -= dur._days; + this._months -= dur._months; - // make sure multiple spaces in a row become a single space - combination = combination.replace(/\s+/g, ' '); + this._bubble(); - var sequence = combination.split(' '), - i, - key, - keys, - modifiers = []; + return this; + }, - // if this pattern is a sequence of keys then run through this method - // to reprocess each pattern one key at a time - if (sequence.length > 1) { - return _bindSequence(combination, sequence, callback, action); - } + get : function (units) { + units = normalizeUnits(units); + return this[units.toLowerCase() + 's'](); + }, - // take the keys from this pattern and figure out what the actual - // pattern is all about - keys = combination === '+' ? ['+'] : combination.split('+'); + as : function (units) { + var days, months; + units = normalizeUnits(units); - for (i = 0; i < keys.length; ++i) { - key = keys[i]; + days = this._days + this._milliseconds / 864e5; + if (units === 'month' || units === 'year') { + months = this._months + daysToYears(days) * 12; + return units === 'month' ? months : months / 12; + } else { + days += yearsToDays(this._months / 12); + switch (units) { + case 'week': return days / 7; + case 'day': return days; + case 'hour': return days * 24; + case 'minute': return days * 24 * 60; + case 'second': return days * 24 * 60 * 60; + case 'millisecond': return days * 24 * 60 * 60 * 1000; + default: throw new Error('Unknown unit ' + units); + } + } + }, - // normalize key names - if (_SPECIAL_ALIASES[key]) { - key = _SPECIAL_ALIASES[key]; - } + lang : moment.fn.lang, + locale : moment.fn.locale, - // if this is not a keypress event then we should - // be smart about using shift keys - // this will only work for US keyboards however - if (action && action != 'keypress' && _SHIFT_MAP[key]) { - key = _SHIFT_MAP[key]; - modifiers.push('shift'); - } + toIsoString : deprecate( + "toIsoString() is deprecated. Please use toISOString() instead " + + "(notice the capitals)", + function () { + return this.toISOString(); + } + ), - // if this key is a modifier then add it to the list of modifiers - if (_isModifier(key)) { - modifiers.push(key); - } - } + toISOString : function () { + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var years = Math.abs(this.years()), + months = Math.abs(this.months()), + days = Math.abs(this.days()), + hours = Math.abs(this.hours()), + minutes = Math.abs(this.minutes()), + seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); - // depending on what the key combination is - // we will try to pick the best event for it - action = _pickBestAction(key, modifiers, action); + if (!this.asSeconds()) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } - // make sure to initialize array if this is the first time - // a callback is added for this key - if (!_callbacks[key]) { - _callbacks[key] = []; - } + return (this.asSeconds() < 0 ? '-' : '') + + 'P' + + (years ? years + 'Y' : '') + + (months ? months + 'M' : '') + + (days ? days + 'D' : '') + + ((hours || minutes || seconds) ? 'T' : '') + + (hours ? hours + 'H' : '') + + (minutes ? minutes + 'M' : '') + + (seconds ? seconds + 'S' : ''); + }, - // remove an existing match if there is one - _getMatches(key, modifiers, action, !sequence_name, combination); + localeData : function () { + return this._locale; + } + }); - // add this call back to the array - // if it is a sequence put it at the beginning - // if not put it at the end - // - // this is important because the way these are processed expects - // the sequence ones to come first - _callbacks[key][sequence_name ? 'unshift' : 'push']({ - callback: callback, - modifiers: modifiers, - action: action, - seq: sequence_name, - level: level, - combo: combination - }); - } + function makeDurationGetter(name) { + moment.duration.fn[name] = function () { + return this._data[name]; + }; + } - /** - * binds multiple combinations to the same callback - * - * @param {Array} combinations - * @param {Function} callback - * @param {string|undefined} action - * @returns void - */ - function _bindMultiple(combinations, callback, action) { - for (var i = 0; i < combinations.length; ++i) { - _bindSingle(combinations[i], callback, action); - } - } + for (i in unitMillisecondFactors) { + if (unitMillisecondFactors.hasOwnProperty(i)) { + makeDurationGetter(i.toLowerCase()); + } + } - // start! - _addEvent(document, 'keypress', _handleKey); - _addEvent(document, 'keydown', _handleKey); - _addEvent(document, 'keyup', _handleKey); + moment.duration.fn.asMilliseconds = function () { + return this.as('ms'); + }; + moment.duration.fn.asSeconds = function () { + return this.as('s'); + }; + moment.duration.fn.asMinutes = function () { + return this.as('m'); + }; + moment.duration.fn.asHours = function () { + return this.as('h'); + }; + moment.duration.fn.asDays = function () { + return this.as('d'); + }; + moment.duration.fn.asWeeks = function () { + return this.as('weeks'); + }; + moment.duration.fn.asMonths = function () { + return this.as('M'); + }; + moment.duration.fn.asYears = function () { + return this.as('y'); + }; - var mousetrap = { + /************************************ + Default Locale + ************************************/ - /** - * binds an event to mousetrap - * - * can be a single key, a combination of keys separated with +, - * a comma separated list of keys, an array of keys, or - * a sequence of keys separated by spaces - * - * be sure to list the modifier keys first to make sure that the - * correct key ends up getting bound (the last key in the pattern) - * - * @param {string|Array} keys - * @param {Function} callback - * @param {string=} action - 'keypress', 'keydown', or 'keyup' - * @returns void - */ - bind: function(keys, callback, action) { - _bindMultiple(keys instanceof Array ? keys : [keys], callback, action); - _direct_map[keys + ':' + action] = callback; - return this; - }, - /** - * unbinds an event to mousetrap - * - * the unbinding sets the callback function of the specified key combo - * to an empty function and deletes the corresponding key in the - * _direct_map dict. - * - * the keycombo+action has to be exactly the same as - * it was defined in the bind method - * - * TODO: actually remove this from the _callbacks dictionary instead - * of binding an empty function - * - * @param {string|Array} keys - * @param {string} action - * @returns void - */ - unbind: function(keys, action) { - if (_direct_map[keys + ':' + action]) { - delete _direct_map[keys + ':' + action]; - this.bind(keys, function() {}, action); - } - return this; - }, + // Set default locale, other locale will inherit from English. + moment.locale('en', { + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); - /** - * triggers an event that has already been bound - * - * @param {string} keys - * @param {string=} action - * @returns void - */ - trigger: function(keys, action) { - _direct_map[keys + ':' + action](); - return this; - }, + /* EMBED_LOCALES */ - /** - * resets the library back to its initial state. this is useful - * if you want to clear out the current keyboard shortcuts and bind - * new ones - for example if you switch to another page - * - * @returns void - */ - reset: function() { - _callbacks = {}; - _direct_map = {}; - return this; - } - }; + /************************************ + Exposing Moment + ************************************/ - module.exports = mousetrap; + function makeGlobal(shouldDeprecate) { + /*global ender:false */ + if (typeof ender !== 'undefined') { + return; + } + oldGlobalMoment = globalScope.moment; + if (shouldDeprecate) { + globalScope.moment = deprecate( + 'Accessing Moment through the global scope is ' + + 'deprecated, and will be removed in an upcoming ' + + 'release.', + moment); + } else { + globalScope.moment = moment; + } + } + // CommonJS module is defined + if (hasModule) { + module.exports = moment; + } else if (true) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, module) { + if (module.config && module.config() && module.config().noGlobal === true) { + // release the global variable + globalScope.moment = oldGlobalMoment; + } + return moment; + }.call(exports, __webpack_require__, exports, module)), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + makeGlobal(true); + } else { + makeGlobal(); + } + }).call(this); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(58)(module))) /***/ }, -/* 48 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v1.1.3 - 2014-05-20 @@ -26590,7 +26110,7 @@ return /******/ (function(modules) { // webpackBootstrap })(window); /***/ }, -/* 49 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { /** @@ -26962,9 +26482,9 @@ return /******/ (function(modules) { // webpackBootstrap this._validateEdges(parentNode); // undo the changes from the clustering operation on the parent node - parentNode.mass -= childNode.mass; + parentNode.options.mass -= childNode.options.mass; parentNode.clusterSize -= childNode.clusterSize; - parentNode.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); + parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); parentNode.dynamicEdgesLength = parentNode.dynamicEdges.length; // place the child node near the parent, not at the exact same location to avoid chaos in the system @@ -27066,7 +26586,7 @@ return /******/ (function(modules) { // webpackBootstrap // first check which node is larger var parentNode = edge.from; var childNode = edge.to; - if (edge.to.mass > edge.from.mass) { + if (edge.to.options.mass > edge.from.options.mass) { parentNode = edge.to; childNode = edge.from; } @@ -27103,7 +26623,7 @@ return /******/ (function(modules) { // webpackBootstrap // group to the largest node if (childNode.id != parentNode.id) { - if (parentNode.mass > childNode.mass) { + if (parentNode.options.mass > childNode.options.mass) { this._addToCluster(parentNode,childNode,true); } else { @@ -27272,11 +26792,11 @@ return /******/ (function(modules) { // webpackBootstrap delete this.nodes[childNode.id]; // update the properties of the child and parent - var massBefore = parentNode.mass; + var massBefore = parentNode.options.mass; childNode.clusterSession = this.clusterSession; - parentNode.mass += childNode.mass; + parentNode.options.mass += childNode.options.mass; parentNode.clusterSize += childNode.clusterSize; - parentNode.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); + parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); // keep track of the clustersessions so we can open the cluster up as it has been formed. if (parentNode.clusterSessions[parentNode.clusterSessions.length - 1] != this.clusterSession) { @@ -27638,7 +27158,7 @@ return /******/ (function(modules) { // webpackBootstrap for (var i = 0; i < this.nodeIndices.length; i++) { var node = this.nodes[this.nodeIndices[i]]; if ((node.xFixed == false || node.yFixed == false)) { - var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.mass); + var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.options.mass); var angle = 2 * Math.PI * Math.random(); if (node.xFixed == false) {node.x = radius * Math.cos(angle);} if (node.yFixed == false) {node.y = radius * Math.sin(angle);} @@ -27733,7 +27253,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 50 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); @@ -28287,7 +27807,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 51 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { var Node = __webpack_require__(36); @@ -28998,7 +28518,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 52 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); @@ -29507,14 +29027,14 @@ return /******/ (function(modules) { // webpackBootstrap var node = this._getSelectedNode(); var data = {id:node.id, label: node.label, - group: node.group, - shape: node.shape, + group: node.options.group, + shape: node.options.shape, color: { - background:node.color.background, - border:node.color.border, + background:node.options.color.background, + border:node.options.color.border, highlight: { - background:node.color.highlight.background, - border:node.color.highlight.border + background:node.options.color.highlight.background, + border:node.options.color.highlight.border } }}; if (this.triggerFunctions.edit.length == 2) { @@ -29580,10 +29100,11 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 53 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); + var Hammer = __webpack_require__(41); exports._cleanNavigation = function() { // clean up previous navigation items @@ -29616,15 +29137,17 @@ return /******/ (function(modules) { // webpackBootstrap this.navigationDivs['wrapper'].style.height = this.frame.canvas.clientHeight + "px"; this.containerElement.insertBefore(this.navigationDivs['wrapper'],this.frame); + var me = this; for (var i = 0; i < navigationDivs.length; i++) { this.navigationDivs[navigationDivs[i]] = document.createElement('div'); this.navigationDivs[navigationDivs[i]].id = "network-navigation_" + navigationDivs[i]; this.navigationDivs[navigationDivs[i]].className = "network-navigation " + navigationDivs[i]; this.navigationDivs['wrapper'].appendChild(this.navigationDivs[navigationDivs[i]]); - this.navigationDivs[navigationDivs[i]].onmousedown = this[navigationDivActions[i]].bind(this); + var hammer = Hammer(this.navigationDivs[navigationDivs[i]], {prevent_default: true}); + hammer.on("touch", me[navigationDivActions[i]].bind(me)); } - - document.onmouseup = this._stopMovement.bind(this); + var hammer = Hammer(document, {prevent_default: false}); + hammer.on("release", me._stopMovement.bind(me)); }; /** @@ -29650,10 +29173,6 @@ return /******/ (function(modules) { // webpackBootstrap exports._moveUp = function(event) { this.yIncrement = this.constants.keyboard.speed.y; this.start(); // if there is no node movement, the calculation wont be done - util.preventDefault(event); - if (this.navigationDivs) { - this.navigationDivs['up'].className += " active"; - } }; @@ -29664,10 +29183,6 @@ return /******/ (function(modules) { // webpackBootstrap exports._moveDown = function(event) { this.yIncrement = -this.constants.keyboard.speed.y; this.start(); // if there is no node movement, the calculation wont be done - util.preventDefault(event); - if (this.navigationDivs) { - this.navigationDivs['down'].className += " active"; - } }; @@ -29678,10 +29193,6 @@ return /******/ (function(modules) { // webpackBootstrap exports._moveLeft = function(event) { this.xIncrement = this.constants.keyboard.speed.x; this.start(); // if there is no node movement, the calculation wont be done - util.preventDefault(event); - if (this.navigationDivs) { - this.navigationDivs['left'].className += " active"; - } }; @@ -29692,10 +29203,6 @@ return /******/ (function(modules) { // webpackBootstrap exports._moveRight = function(event) { this.xIncrement = -this.constants.keyboard.speed.y; this.start(); // if there is no node movement, the calculation wont be done - util.preventDefault(event); - if (this.navigationDivs) { - this.navigationDivs['right'].className += " active"; - } }; @@ -29706,10 +29213,6 @@ return /******/ (function(modules) { // webpackBootstrap exports._zoomIn = function(event) { this.zoomIncrement = this.constants.keyboard.speed.zoom; this.start(); // if there is no node movement, the calculation wont be done - util.preventDefault(event); - if (this.navigationDivs) { - this.navigationDivs['zoomIn'].className += " active"; - } }; @@ -29721,9 +29224,6 @@ return /******/ (function(modules) { // webpackBootstrap this.zoomIncrement = -this.constants.keyboard.speed.zoom; this.start(); // if there is no node movement, the calculation wont be done util.preventDefault(event); - if (this.navigationDivs) { - this.navigationDivs['zoomOut'].className += " active"; - } }; @@ -29733,10 +29233,6 @@ return /******/ (function(modules) { // webpackBootstrap */ exports._stopZoom = function() { this.zoomIncrement = 0; - if (this.navigationDivs) { - this.navigationDivs['zoomIn'].className = this.navigationDivs['zoomIn'].className.replace(" active",""); - this.navigationDivs['zoomOut'].className = this.navigationDivs['zoomOut'].className.replace(" active",""); - } }; @@ -29746,10 +29242,6 @@ return /******/ (function(modules) { // webpackBootstrap */ exports._yStopMoving = function() { this.yIncrement = 0; - if (this.navigationDivs) { - this.navigationDivs['up'].className = this.navigationDivs['up'].className.replace(" active",""); - this.navigationDivs['down'].className = this.navigationDivs['down'].className.replace(" active",""); - } }; @@ -29759,15 +29251,11 @@ return /******/ (function(modules) { // webpackBootstrap */ exports._xStopMoving = function() { this.xIncrement = 0; - if (this.navigationDivs) { - this.navigationDivs['left'].className = this.navigationDivs['left'].className.replace(" active",""); - this.navigationDivs['right'].className = this.navigationDivs['right'].className.replace(" active",""); - } }; /***/ }, -/* 54 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { exports._resetLevels = function() { @@ -30095,13 +29583,13 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 55 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); - var RepulsionMixin = __webpack_require__(57); - var HierarchialRepulsionMixin = __webpack_require__(58); - var BarnesHutMixin = __webpack_require__(59); + var RepulsionMixin = __webpack_require__(59); + var HierarchialRepulsionMixin = __webpack_require__(60); + var BarnesHutMixin = __webpack_require__(61); /** * Toggling barnes Hut calculation on and off. @@ -30305,7 +29793,7 @@ return /******/ (function(modules) { // webpackBootstrap if (edge.connected) { // only calculate forces if nodes are in the same sector if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - edgeLength = edge.customLength ? edge.length : this.constants.physics.springLength; + edgeLength = edge.physics.springLength; // this implies that the edges between big clusters are longer edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; @@ -30357,7 +29845,7 @@ return /******/ (function(modules) { // webpackBootstrap var node2 = edge.via; var node3 = edge.from; - edgeLength = edge.customLength ? edge.length : this.constants.physics.springLength; + edgeLength = edge.physics.springLength; combinedClusterSize = node1.clusterSize + node3.clusterSize - 2; @@ -30809,25 +30297,35 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 56 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { - var map = {}; function webpackContext(req) { - return __webpack_require__(webpackContextResolve(req)); - }; - function webpackContextResolve(req) { - return map[req] || (function() { throw new Error("Cannot find module '" + req + "'.") }()); - }; - webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); - }; - webpackContext.resolve = webpackContextResolve; + throw new Error("Cannot find module '" + req + "'."); + } + webpackContext.resolve = webpackContext; + webpackContext.keys = function() { return []; }; module.exports = webpackContext; /***/ }, -/* 57 */ +/* 58 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } + + +/***/ }, +/* 59 */ /***/ function(module, exports, __webpack_require__) { /** @@ -30891,7 +30389,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 58 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { /** @@ -30980,7 +30478,7 @@ return /******/ (function(modules) { // webpackBootstrap if (edge.connected) { // only calculate forces if nodes are in the same sector if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - edgeLength = edge.customLength ? edge.length : this.constants.physics.springLength; + edgeLength = edge.physics.springLength; // this implies that the edges between big clusters are longer edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; @@ -31050,7 +30548,7 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 59 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { /** @@ -31073,11 +30571,13 @@ return /******/ (function(modules) { // webpackBootstrap // place the nodes one by one recursively for (var i = 0; i < nodeCount; i++) { node = nodes[nodeIndices[i]]; + if (node.options.mass > 0) { // starting with root is irrelevant, it never passes the BarnesHut condition - this._getForceContribution(barnesHutTree.root.children.NW,node); - this._getForceContribution(barnesHutTree.root.children.NE,node); - this._getForceContribution(barnesHutTree.root.children.SW,node); - this._getForceContribution(barnesHutTree.root.children.SE,node); + this._getForceContribution(barnesHutTree.root.children.NW,node); + this._getForceContribution(barnesHutTree.root.children.NE,node); + this._getForceContribution(barnesHutTree.root.children.SW,node); + this._getForceContribution(barnesHutTree.root.children.SE,node); + } } } }; @@ -31110,7 +30610,7 @@ return /******/ (function(modules) { // webpackBootstrap distance = 0.1*Math.random(); dx = distance; } - var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.mass / (distance * distance * distance); + var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); var fx = dx * gravityForce; var fy = dy * gravityForce; node.fx += fx; @@ -31131,7 +30631,7 @@ return /******/ (function(modules) { // webpackBootstrap distance = 0.5*Math.random(); dx = distance; } - var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.mass / (distance * distance * distance); + var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); var fx = dx * gravityForce; var fy = dy * gravityForce; node.fx += fx; @@ -31162,10 +30662,12 @@ return /******/ (function(modules) { // webpackBootstrap for (var i = 0; i < nodeCount; i++) { var x = nodes[nodeIndices[i]].x; var y = nodes[nodeIndices[i]].y; - if (x < minX) { minX = x; } - if (x > maxX) { maxX = x; } - if (y < minY) { minY = y; } - if (y > maxY) { maxY = y; } + if (nodes[nodeIndices[i]].options.mass > 0) { + if (x < minX) { minX = x; } + if (x > maxX) { maxX = x; } + if (y < minY) { minY = y; } + if (y > maxY) { maxY = y; } + } } // make the range a square var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y @@ -31200,7 +30702,9 @@ return /******/ (function(modules) { // webpackBootstrap // place the nodes one by one recursively for (i = 0; i < nodeCount; i++) { node = nodes[nodeIndices[i]]; - this._placeInTree(barnesHutTree.root,node); + if (node.options.mass > 0) { + this._placeInTree(barnesHutTree.root,node); + } } // make global @@ -31216,13 +30720,13 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ exports._updateBranchMass = function(parentBranch, node) { - var totalMass = parentBranch.mass + node.mass; + var totalMass = parentBranch.mass + node.options.mass; var totalMassInv = 1/totalMass; - parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.mass; + parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass; parentBranch.centerOfMass.x *= totalMassInv; - parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.mass; + parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass; parentBranch.centerOfMass.y *= totalMassInv; parentBranch.mass = totalMass; @@ -31448,22 +30952,6 @@ return /******/ (function(modules) { // webpackBootstrap }; -/***/ }, -/* 60 */ -/***/ function(module, exports, __webpack_require__) { - - module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - module.children = []; - module.webpackPolyfill = 1; - } - return module; - } - - /***/ } /******/ ]) -}) +}); diff --git a/dist/vis.map b/dist/vis.map index 29552240..defee668 100644 --- a/dist/vis.map +++ b/dist/vis.map @@ -1 +1 @@ -{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DataStep","Range","stack","TimeStep","components","items","Item","ItemBox","ItemPoint","ItemRange","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","indexOf","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearch","orderedItems","range","field","field2","maxIterations","iteration","found","low","high","newLow","newHigh","guess","isVisible","start","console","log","binarySearchGeneric","sidePreference","newGuess","prevValue","nextValue","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","createElement","drawPoint","x","y","group","point","drawPoints","style","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","prototype","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","item","col","cols","getValue","update","updatedIds","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","map","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","keys","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","setOptions","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","sortNumber","obj","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","end","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","getMouseX","startMouseY","getMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","delay","mouseX","mouseY","tooltipTimeout","clearTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","setTimeout","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","clientX","targetTouches","clientY","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","LN10","step1","pow","step2","step5","toPrecision","getStep","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setItems","Hammer","backgroundVertical","backgroundHorizontal","centerContainer","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_onTouch","_onPinch","_onDragStart","_onDrag","prevent_default","listeners","events","args","slice","scrollTop","scrollTopMin","touch","destroy","_stopAutoResize","component","_initAutoResize","setCustomTime","time","getCustomTime","newDataSet","initialLoad","fit","setWindow","getVisibleItems","setGroups","groups","what","dataRange","getItemRange","dataset","minItem","maxStartItem","maxEndItem","setSelection","getSelection","getWindow","getRange","resized","borderRootHeight","borderRootWidth","autoHeight","containerHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","visibility","repaint","conversion","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","allowDragging","initialScrollTop","gesture","deltaY","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","linegraph","backgroundHorizontalContainer","minimumStep","forcedStepSize","current","autoScale","stepIndex","marginStart","marginEnd","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","first","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","isMajor","now","hours","minutes","seconds","milliseconds","clone","direction","moveable","zoomable","zoomMin","zoomMax","_onDragEnd","_onHold","_onMouseWheel","validateDirection","getPointer","pageX","pageY","hammerUtil","changed","_applyRange","newStart","newEnd","deltaX","diffRange","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","initDate","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","date","year","getLabelMinor","format","getLabelMajor","_isResized","_previousWidth","_previousHeight","showCurrentTime","parent","title","currentTimeTimer","showCustomTime","eventParams","drag","dragging","stopPropagation","svg","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","lineOffset","master","svgElements","amountOfGroups","addGroup","graphOptions","updateGroup","removeGroup","hide","show","lineContainer","display","_redrawGroupIcons","iconHeight","iconOffset","groupId","drawIcon","changeCalled","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","amountOfSteps","stepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","characterHeight","largestWidth","majorCharWidth","minorCharWidth","convertValue","invertedValue","convertedValue","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","visibleItems","byStart","byEnd","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","offsetTop","offsetLeft","ii","repositionY","labelSet","setParent","_checkIfVisible","removeFromDataSet","removeItem","_constructByEndArray","endArray","initialPosByStart","newVisibleItems","initialPosByEnd","_checkIfInvisible","repositionX","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","box","_updateUngrouped","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","fn","Function","markDirty","unselect","select","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","getLabelSet","oldItemsData","getItems","_order","getGroups","itemData","_removeItem","groupData","groupOptions","oldGroupId","oldGroup","itemFromTarget","selected","dragLeftItem","dragRightItem","itemProps","groupFromTarget","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","itemSetFromTarget","side","iconSize","iconSpacing","textArea","drawLegendIcons","getComputedStyle","paddingTop","yAxisOrientation","defaultGroup","sampling","graphHeight","barChart","dataAxis","legend","lastStart","rangePerPixelInv","_updateGraph","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","preprocessedGroup","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_preprocessData","_updateYAxis","_convertYvalues","_drawLineGraph","_drawBarGraph","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","_toggleAxisVisiblity","drawIcons","axisUsed","coreDistance","_drawPoints","svgHeight","_catmullRom","_linear","dFill","datapoints","xValue","yValue","extractedData","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","majorLines","majorTexts","minorLines","minorTexts","lineTop","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","insertBefore","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","itemSetHeight","marginLeft","baseClassName","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","stabilize","initializing","triggerFunctions","edit","editEdge","connect","del","constants","nodes","radiusMin","radiusMax","shape","image","fixed","fontColor","fontSize","fontFace","level","highlightColor","edges","widthSelectionMultiplier","hoverWidth","fontFill","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","freezeForStabilization","smoothCurves","dynamic","roundness","dynamicSmoothCurves","maxVelocity","minVelocity","stabilizationIterations","link","editNode","back","addDescription","linkDescription","editEdgeDescription","addError","linkError","editError","editBoundError","deleteError","deleteClusterError","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","hoverObj","controlNodesActive","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","mousetrap","MixinLoader","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","_centerNetwork","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_stabilize","dragGraph","onEdit","onEditEdge","onConnect","onDelete","editMode","groupname","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","_createKeyBinds","pinch","_onTap","_onDoubleTap","_onRelease","_onMouseMoveTitle","reset","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","manipulationDiv","navigationDivs","oldNodesData","_updateSelection","angle","_resetLevels","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","draw","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","iterations","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","_doInAllActiveSectors","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","toggleFreeze","smooth","mass","internalMultiplier","parentEdgeId","positionBezierNode","mixin","storePosition","dataArray","allowedToMoveX","allowedToMoveY","focusOnNode","nodePosition","requiredScale","canvasCenter","distanceFromCenter","fromId","toId","widthSelected","customLength","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","img","Image","onload","imagelist","grouplist","dynamicEdges","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","borderWidthSelected","fx","fy","vx","vy","minForce","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","lineCount","yLine","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","maxWidth","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","convertEdge","dotEdge","graphEdge","graphData","dotNode","graphNode","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","attributes","gNode","eventType","getTouchList","collectEventData","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_RESULT__","global","dfl","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","deprecate","msg","printMsg","suppressDeprecationWarnings","warn","firstTime","padToken","func","leftZeroFill","ordinalizeToken","period","lang","ordinal","Language","Moment","config","checkOverflow","Duration","duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","month","weeks","week","days","day","hour","minute","second","millisecond","_milliseconds","_days","_months","_bubble","cloneMoment","momentProperties","absRound","number","targetLength","forceSign","output","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","_d","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","method","_lang","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","_pf","DATE","_overflowDayOfYear","isValid","_isValid","getTime","_strict","normalizeLanguage","makeAs","model","_isUTC","zone","_offset","local","loadLang","abbr","languages","unloadLang","getLangDefinition","k","hasModule","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_l","_meridiemParse","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","parseTokenOrdinal","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parts","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","_tzm","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dayOfYear","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","_i","getUTCFullYear","makeDateFromStringAndFormat","_f","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","language","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","relativeTimeThresholds","dd","dm","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","res","dayOfMonth","unit","makeAccessor","keepTime","makeDurationGetter","makeDurationAsGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","_isAMomentObject","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LT","L","LL","LLL","LLLL","val","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","_abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","inputString","dur","asFloat","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","isAfter","isBefore","isSame","getTimezoneOffset","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","dates","isoWeeks","toJSON","withSuffix","difference","toIsoString","asSeconds","asMonths","require","noGlobal","_addEvent","_characterFromEvent","fromCharCode","_MAP","_KEYCODE_MAP","_stop","tag_name","tagName","contentEditable","_modifiersMatch","modifiers1","modifiers2","_resetSequences","do_not_reset","active_sequences","_sequence_levels","_inside_sequence","_getMatches","character","modifiers","combination","matches","_isModifier","seq","combo","_eventModifiers","altKey","metaKey","_fireCallback","cancelBubble","_handleCharacter","processed_sequence_callback","_handleKey","keyCode","_ignore_next_keyup","_resetSequenceTimer","_reset_timer","_getReverseMap","_REVERSE_MAP","_pickBestAction","_bindSequence","_increaseSequence","_callbackAndReset","_bindSingle","sequence_name","sequence","_SPECIAL_ALIASES","_SHIFT_MAP","_bindMultiple","combinations",8,9,13,16,17,18,20,27,32,33,34,35,36,37,38,39,40,45,46,91,93,224,106,107,109,110,111,186,187,188,189,190,191,192,219,220,221,222,"~","!","@","#","$","%","^","&","*","(",")","_","+",":","\"","<",">","?","|","command","return","escape","_direct_map","unbind","trigger","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","context","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getScale","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocity","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Infinity","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","nodeIds","getSelectedNodes","edgeIds","getSelectedEdges","idArray","RangeError","selectNodes","selectEdges","_clearManipulatorBar","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","getElementById","boundFunction","edgeBeingEdited","selectedControlNode","addNodeButton","_createAddNodeToolbar","addEdgeButton","_createAddEdgeToolbar","editButton","_editNode","_createEditEdgeToolbar","editModeButton","backButton","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","wrapper","navigationDivActions","_stopMovement","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","amount","maxCount","_setLevel","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodes","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","nameArray","webpackContext","req","webpackContextResolve","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DataStep","Range","stack","TimeStep","components","items","Item","ItemBox","ItemPoint","ItemRange","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","selectiveNotDeepExtend","indexOf","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearch","orderedItems","range","field","field2","maxIterations","iteration","found","low","high","newLow","newHigh","guess","isVisible","start","console","log","binarySearchGeneric","sidePreference","newGuess","prevValue","nextValue","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","createElement","drawPoint","x","y","group","point","drawPoints","style","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","prototype","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","item","col","cols","getValue","update","updatedIds","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","map","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","keys","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","setOptions","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","sortNumber","obj","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","end","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","getMouseX","startMouseY","getMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","delay","mouseX","mouseY","tooltipTimeout","clearTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","setTimeout","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","clientX","targetTouches","clientY","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","LN10","step1","pow","step2","step5","toPrecision","getStep","coreProp","Core","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setItems","_initAutoResize","component","newDataSet","initialLoad","fit","setWindow","setGroups","groups","setSelection","getSelection","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","minimumStep","containerHeight","forcedStepSize","current","autoScale","stepIndex","marginStart","marginEnd","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","first","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","slice","isMajor","now","hours","minutes","seconds","milliseconds","clone","direction","moveable","zoomable","zoomMin","zoomMax","touch","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","changed","_applyRange","newStart","newEnd","getRange","conversion","allowDragging","gesture","deltaX","deltaY","diffRange","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","initDate","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","date","year","getLabelMinor","format","getLabelMajor","destroy","_isResized","resized","_previousWidth","_previousHeight","showCurrentTime","parent","backgroundVertical","title","currentTimeTimer","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","time","getCustomTime","dragging","stopPropagation","svg","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","lineOffset","master","svgElements","amountOfGroups","addGroup","graphOptions","updateGroup","removeGroup","hide","show","lineContainer","display","_redrawGroupIcons","iconHeight","iconOffset","drawIcon","backgroundHorizontal","changeCalled","activeGroups","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","amountOfSteps","stepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","characterHeight","largestWidth","majorCharWidth","minorCharWidth","convertValue","invertedValue","convertedValue","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","icon","yAxisOrientation","visibleItems","byStart","byEnd","inner","foreground","marker","visibility","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","offsetTop","offsetLeft","ii","repositionY","labelSet","setParent","_checkIfVisible","removeFromDataSet","removeItem","_constructByEndArray","endArray","initialPosByStart","newVisibleItems","initialPosByEnd","_checkIfInvisible","repositionX","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","box","_updateUngrouped","centerContainer","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","fn","Function","markDirty","unselect","select","getVisibleItems","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastWidth","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","getLabelSet","oldItemsData","getItems","_order","getGroups","itemData","_removeItem","groupData","groupOptions","oldGroupId","oldGroup","itemFromTarget","selected","dragLeftItem","dragRightItem","itemProps","groupFromTarget","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","itemSetFromTarget","side","iconSize","iconSpacing","textArea","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","dataAxis","legend","lastStart","rangePerPixelInv","_updateGraph","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","preprocessedGroup","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_preprocessData","_updateYAxis","_convertYvalues","_drawLineGraph","_drawBarGraph","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","_toggleAxisVisiblity","drawIcons","axisUsed","coreDistance","_drawPoints","svgHeight","_catmullRom","_linear","dFill","datapoints","xValue","yValue","extractedData","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","majorLines","majorTexts","minorLines","minorTexts","lineTop","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","insertBefore","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","itemSetHeight","anchor","deleteButton","marginLeft","baseClassName","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fixed","fontColor","fontSize","fontFace","level","highlightColor","edges","widthSelectionMultiplier","hoverWidth","fontFill","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","freezeForStabilization","smoothCurves","dynamic","roundness","dynamicSmoothCurves","maxVelocity","minVelocity","stabilize","stabilizationIterations","link","editNode","back","addDescription","linkDescription","editEdgeDescription","addError","linkError","editError","editBoundError","deleteError","deleteClusterError","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","hoverObj","controlNodesActive","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","mousetrap","MixinLoader","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","_centerNetwork","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","_createKeyBinds","pinch","_onTap","_onDoubleTap","_onRelease","_onMouseMoveTitle","reset","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","manipulationDiv","navigationDivs","oldNodesData","_updateSelection","angle","_resetLevels","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","draw","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","iterations","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","_doInAllActiveSectors","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","dataArray","allowedToMoveX","allowedToMoveY","focusOnNode","nodePosition","requiredScale","canvasCenter","distanceFromCenter","networkConstants","fromId","toId","widthSelected","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","img","Image","onload","imagelist","grouplist","dynamicEdges","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","borderWidthSelected","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","lineCount","yLine","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","maxWidth","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","convertEdge","dotEdge","graphEdge","graphData","dotNode","graphNode","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","attributes","gNode","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","listeners","events","args","scrollTop","scrollTopMin","_stopAutoResize","what","dataRange","getWindow","borderRootHeight","borderRootWidth","autoHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","repaint","_startAutoResize","_onResize","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","eventType","getTouchList","collectEventData","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","_addEvent","_characterFromEvent","fromCharCode","_MAP","_KEYCODE_MAP","_stop","tag_name","tagName","contentEditable","_modifiersMatch","modifiers1","modifiers2","_resetSequences","do_not_reset","active_sequences","_sequence_levels","_inside_sequence","_getMatches","character","modifiers","combination","matches","_isModifier","seq","combo","_eventModifiers","altKey","metaKey","_fireCallback","cancelBubble","_handleCharacter","processed_sequence_callback","_handleKey","keyCode","_ignore_next_keyup","_resetSequenceTimer","_reset_timer","_getReverseMap","_REVERSE_MAP","_pickBestAction","_bindSequence","_increaseSequence","_callbackAndReset","_bindSingle","sequence_name","sequence","_SPECIAL_ALIASES","_SHIFT_MAP","_bindMultiple","combinations",8,9,13,16,17,18,20,27,32,33,34,35,36,37,38,39,40,45,46,91,93,224,106,107,109,110,111,186,187,188,189,190,191,192,219,220,221,222,"~","!","@","#","$","%","^","&","*","(",")","_","+",":","\"","<",">","?","|","command","return","escape","_direct_map","unbind","trigger","__WEBPACK_AMD_DEFINE_RESULT__","global","dfl","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","printMsg","msg","suppressDeprecationWarnings","warn","deprecate","firstTime","deprecateSimple","deprecations","padToken","func","leftZeroFill","ordinalizeToken","period","localeData","ordinal","Locale","Moment","config","skipOverflow","checkOverflow","copyConfig","_d","Duration","duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","month","weeks","week","days","day","hour","minute","second","millisecond","_milliseconds","_days","_months","_locale","_bubble","val","_isAMomentObject","_i","_f","_l","_strict","_tzm","_isUTC","_offset","_pf","momentProperties","absRound","number","targetLength","forceSign","output","positiveMomentsDifference","base","res","isAfter","momentsDifference","makeAs","isBefore","createAdder","dur","tmp","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","method","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","DATE","_overflowDayOfYear","isValid","_isValid","getTime","normalizeLocale","chooseLocale","names","locale","loadLocale","oldLocale","locales","hasModule","code","model","zone","local","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_meridiemParse","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","parseTokenOrdinal","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parts","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dayOfYear","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","getUTCFullYear","makeDateFromStringAndFormat","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","posNegDuration","relativeTimeThresholds","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","dayOfMonth","unit","makeAccessor","keepTime","daysToYears","yearsToDays","makeDurationGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","dd","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LT","L","LL","LLL","LLLL","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","diffRes","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","lang","defineLocale","_abbr","abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","keepLocalTime","getTimezoneOffset","inputString","asFloat","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","isSame","localAdjust","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","dates","isoWeeks","toJSON","withSuffix","toIsoString","asSeconds","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","require","noGlobal","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","context","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getScale","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocity","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Infinity","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","k","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","nodeIds","getSelectedNodes","edgeIds","getSelectedEdges","idArray","RangeError","selectNodes","selectEdges","_clearManipulatorBar","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","getElementById","boundFunction","edgeBeingEdited","selectedControlNode","addNodeButton","_createAddNodeToolbar","addEdgeButton","_createAddEdgeToolbar","editButton","_editNode","_createEditEdgeToolbar","editModeButton","backButton","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","smooth","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","wrapper","navigationDivActions","_stopMovement","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","amount","maxCount","_setLevel","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodes","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","nameArray","webpackContext","req","resolve","webpackPolyfill","paths","children","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch"],"mappings":"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"} \ No newline at end of file diff --git a/dist/vis.min.css b/dist/vis.min.css index 519c4d10..54148cbe 100755 --- a/dist/vis.min.css +++ b/dist/vis.min.css @@ -1 +1 @@ -.vis.timeline.root{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}.vis.timeline .vispanel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis.timeline .vispanel.bottom,.vis.timeline .vispanel.center,.vis.timeline .vispanel.left,.vis.timeline .vispanel.right,.vis.timeline .vispanel.top{border:1px #bfbfbf}.vis.timeline .vispanel.center,.vis.timeline .vispanel.left,.vis.timeline .vispanel.right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis.timeline .vispanel.bottom,.vis.timeline .vispanel.center,.vis.timeline .vispanel.top{border-left-style:solid;border-right-style:solid}.vis.timeline .background{overflow:hidden}.vis.timeline .vispanel>.content{position:relative}.vis.timeline .vispanel .shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis.timeline .vispanel .shadow.top{top:-1px;left:0}.vis.timeline .vispanel .shadow.bottom{bottom:-1px;left:0}.vis.timeline .labelset{position:relative;width:100%;overflow:hidden;box-sizing:border-box}.vis.timeline .labelset .vlabel{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis.timeline .labelset .vlabel:last-child{border-bottom:none}.vis.timeline .labelset .vlabel .inner{display:inline-block;padding:5px}.vis.timeline .labelset .vlabel .inner.hidden{padding:0}.vis.timeline .itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis.timeline .itemset .background,.vis.timeline .itemset .foreground{position:absolute;width:100%;height:100%}.vis.timeline .axis{position:absolute;width:100%;height:0;left:1px;z-index:1}.vis.timeline .foreground .group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis.timeline .foreground .group:last-child{border-bottom:none}.vis.timeline .item{position:absolute;color:#1A1A1A;border-color:#97B0F8;border-width:1px;background-color:#D5DDF6;display:inline-block;padding:5px}.vis.timeline .item.selected{border-color:#FFC200;background-color:#FFF785;z-index:999}.vis.timeline .editable .item.selected{cursor:move}.vis.timeline .item.point.selected{background-color:#FFF785}.vis.timeline .item.box{text-align:center;border-style:solid;border-radius:2px}.vis.timeline .item.point{background:0 0}.vis.timeline .item.dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis.timeline .item.range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis.timeline .item.range .content{position:relative;display:inline-block;overflow:hidden;max-width:100%}.vis.timeline .item.line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis.timeline .item .content{white-space:nowrap;overflow:hidden}.vis.timeline .item .delete{background:url(img/timeline/delete.png) no-repeat top center;position:absolute;width:24px;height:24px;top:0;right:-24px;cursor:pointer}.vis.timeline .item.range .drag-left{position:absolute;width:24px;height:100%;top:0;left:-4px;cursor:w-resize;z-index:10000}.vis.timeline .item.range .drag-right{position:absolute;width:24px;height:100%;top:0;right:-4px;cursor:e-resize;z-index:10001}.vis.timeline .timeaxis{position:relative;overflow:hidden}.vis.timeline .timeaxis.foreground{top:0;left:0;width:100%}.vis.timeline .timeaxis.background{position:absolute;top:0;left:0;width:100%;height:100%}.vis.timeline .timeaxis .text{position:absolute;color:#4d4d4d;padding:3px;white-space:nowrap}.vis.timeline .timeaxis .text.measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis.timeline .timeaxis .grid.vertical{position:absolute;width:0;border-right:1px solid}.vis.timeline .timeaxis .grid.minor{border-color:#e5e5e5}.vis.timeline .timeaxis .grid.major{border-color:#bfbfbf}.vis.timeline .currenttime{background-color:#FF7F6E;width:2px;z-index:1}.vis.timeline .customtime{background-color:#6E94FF;width:2px;cursor:move;z-index:1}.vis.timeline .vispanel.background.horizontal .grid.horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis.timeline .vispanel.background.horizontal .grid.minor{border-color:#e5e5e5}.vis.timeline .vispanel.background.horizontal .grid.major{border-color:#bfbfbf}.vis.timeline .dataaxis .yAxis.major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis.timeline .dataaxis .yAxis.major.measure{padding:0;margin:0;visibility:hidden;width:auto}.vis.timeline .dataaxis .yAxis.minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis.timeline .dataaxis .yAxis.minor.measure{padding:0;margin:0;visibility:hidden;width:auto}.vis.timeline .legend{background-color:rgba(247,252,255,.65);padding:5px;border-color:#b3b3b3;border-style:solid;border-width:1px;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis.timeline .legendText{white-space:nowrap;display:inline-block}.vis.timeline .graphGroup0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis.timeline .graphGroup1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis.timeline .graphGroup2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis.timeline .graphGroup3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis.timeline .graphGroup4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis.timeline .graphGroup5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis.timeline .graphGroup6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis.timeline .graphGroup7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis.timeline .graphGroup8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis.timeline .graphGroup9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis.timeline .fill{fill-opacity:.1;stroke:none}.vis.timeline .bar{fill-opacity:.5;stroke-width:1px}.vis.timeline .point{stroke-width:2px;fill-opacity:1}.vis.timeline .legendBackground{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis.timeline .outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis.timeline .iconFill{fill-opacity:.3;stroke:none}div.network-manipulationDiv{border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#fcfcfc', GradientType=0);width:600px;height:30px;z-index:10;position:absolute}div.network-manipulation-editMode{height:30px;z-index:10;position:absolute;margin-top:20px}div.network-manipulation-closeDiv{height:30px;width:30px;z-index:11;position:absolute;margin-top:3px;margin-left:590px;background-position:0 0;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.network-manipulationUI{font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin:-14px 0 0 10px;vertical-align:middle;cursor:pointer;padding:0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.network-manipulationUI:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}span.network-manipulationUI:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}span.network-manipulationUI.back{background-image:url(img/network/backIcon.png)}span.network-manipulationUI.none:hover{box-shadow:1px 1px 8px transparent;cursor:default}span.network-manipulationUI.none:active{box-shadow:1px 1px 8px transparent}span.network-manipulationUI.none{padding:0}span.network-manipulationUI.notification{margin:2px;font-weight:700}span.network-manipulationUI.add{background-image:url(img/network/addNodeIcon.png)}span.network-manipulationUI.edit{background-image:url(img/network/editIcon.png)}span.network-manipulationUI.edit.editmode{background-color:#fcfcfc;border-style:solid;border-width:1px;border-color:#ccc}span.network-manipulationUI.connect{background-image:url(img/network/connectIcon.png)}span.network-manipulationUI.delete{background-image:url(img/network/deleteIcon.png)}span.network-manipulationLabel{margin:0 0 0 23px;line-height:25px}div.network-seperatorLine{display:inline-block;width:1px;height:20px;background-color:#bdbdbd;margin:5px 7px 0 15px}div.network-navigation{width:34px;height:34px;z-index:10;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.network-navigation:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.network-navigation.active,div.network-navigation:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.network-navigation.up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.network-navigation.down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.network-navigation.left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.network-navigation.right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.network-navigation.zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.network-navigation.zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.network-navigation.zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px} \ No newline at end of file +.vis.timeline.root{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}.vis.timeline .vispanel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis.timeline .vispanel.bottom,.vis.timeline .vispanel.center,.vis.timeline .vispanel.left,.vis.timeline .vispanel.right,.vis.timeline .vispanel.top{border:1px #bfbfbf}.vis.timeline .vispanel.center,.vis.timeline .vispanel.left,.vis.timeline .vispanel.right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis.timeline .vispanel.bottom,.vis.timeline .vispanel.center,.vis.timeline .vispanel.top{border-left-style:solid;border-right-style:solid}.vis.timeline .background{overflow:hidden}.vis.timeline .vispanel>.content{position:relative}.vis.timeline .vispanel .shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis.timeline .vispanel .shadow.top{top:-1px;left:0}.vis.timeline .vispanel .shadow.bottom{bottom:-1px;left:0}.vis.timeline .labelset{position:relative;width:100%;overflow:hidden;box-sizing:border-box}.vis.timeline .labelset .vlabel{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis.timeline .labelset .vlabel:last-child{border-bottom:none}.vis.timeline .labelset .vlabel .inner{display:inline-block;padding:5px}.vis.timeline .labelset .vlabel .inner.hidden{padding:0}.vis.timeline .itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis.timeline .itemset .background,.vis.timeline .itemset .foreground{position:absolute;width:100%;height:100%}.vis.timeline .axis{position:absolute;width:100%;height:0;left:1px;z-index:1}.vis.timeline .foreground .group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis.timeline .foreground .group:last-child{border-bottom:none}.vis.timeline .item{position:absolute;color:#1A1A1A;border-color:#97B0F8;border-width:1px;background-color:#D5DDF6;display:inline-block;padding:5px}.vis.timeline .item.selected{border-color:#FFC200;background-color:#FFF785;z-index:999}.vis.timeline .editable .item.selected{cursor:move}.vis.timeline .item.point.selected{background-color:#FFF785}.vis.timeline .item.box{text-align:center;border-style:solid;border-radius:2px}.vis.timeline .item.point{background:0 0}.vis.timeline .item.dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis.timeline .item.range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis.timeline .item.range .content{position:relative;display:inline-block;overflow:hidden;max-width:100%}.vis.timeline .item.line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis.timeline .item .content{white-space:nowrap;overflow:hidden}.vis.timeline .item .delete{background:url(img/timeline/delete.png) top center no-repeat;position:absolute;width:24px;height:24px;top:0;right:-24px;cursor:pointer}.vis.timeline .item.range .drag-left{position:absolute;width:24px;height:100%;top:0;left:-4px;cursor:w-resize;z-index:10000}.vis.timeline .item.range .drag-right{position:absolute;width:24px;height:100%;top:0;right:-4px;cursor:e-resize;z-index:10001}.vis.timeline .timeaxis{position:relative;overflow:hidden}.vis.timeline .timeaxis.foreground{top:0;left:0;width:100%}.vis.timeline .timeaxis.background{position:absolute;top:0;left:0;width:100%;height:100%}.vis.timeline .timeaxis .text{position:absolute;color:#4d4d4d;padding:3px;white-space:nowrap}.vis.timeline .timeaxis .text.measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis.timeline .timeaxis .grid.vertical{position:absolute;width:0;border-right:1px solid}.vis.timeline .timeaxis .grid.minor{border-color:#e5e5e5}.vis.timeline .timeaxis .grid.major{border-color:#bfbfbf}.vis.timeline .currenttime{background-color:#FF7F6E;width:2px;z-index:1}.vis.timeline .customtime{background-color:#6E94FF;width:2px;cursor:move;z-index:1}.vis.timeline .vispanel.background.horizontal .grid.horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis.timeline .vispanel.background.horizontal .grid.minor{border-color:#e5e5e5}.vis.timeline .vispanel.background.horizontal .grid.major{border-color:#bfbfbf}.vis.timeline .dataaxis .yAxis.major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis.timeline .dataaxis .yAxis.major.measure{padding:0;margin:0;visibility:hidden;width:auto}.vis.timeline .dataaxis .yAxis.minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis.timeline .dataaxis .yAxis.minor.measure{padding:0;margin:0;visibility:hidden;width:auto}.vis.timeline .legend{background-color:rgba(247,252,255,.65);padding:5px;border-color:#b3b3b3;border-style:solid;border-width:1px;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis.timeline .legendText{white-space:nowrap;display:inline-block}.vis.timeline .graphGroup0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis.timeline .graphGroup1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis.timeline .graphGroup2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis.timeline .graphGroup3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis.timeline .graphGroup4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis.timeline .graphGroup5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis.timeline .graphGroup6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis.timeline .graphGroup7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis.timeline .graphGroup8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis.timeline .graphGroup9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis.timeline .fill{fill-opacity:.1;stroke:none}.vis.timeline .bar{fill-opacity:.5;stroke-width:1px}.vis.timeline .point{stroke-width:2px;fill-opacity:1}.vis.timeline .legendBackground{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis.timeline .outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis.timeline .iconFill{fill-opacity:.3;stroke:none}div.network-manipulationDiv{border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#fcfcfc', GradientType=0);width:600px;height:30px;z-index:10;position:absolute}div.network-manipulation-editMode{height:30px;z-index:10;position:absolute;margin-top:20px}div.network-manipulation-closeDiv{height:30px;width:30px;z-index:11;position:absolute;margin-top:3px;margin-left:590px;background-position:0 0;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.network-manipulationUI{font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin:-14px 0 0 10px;vertical-align:middle;cursor:pointer;padding:0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.network-manipulationUI:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}span.network-manipulationUI:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}span.network-manipulationUI.back{background-image:url(img/network/backIcon.png)}span.network-manipulationUI.none:hover{box-shadow:1px 1px 8px transparent;cursor:default}span.network-manipulationUI.none:active{box-shadow:1px 1px 8px transparent}span.network-manipulationUI.none{padding:0}span.network-manipulationUI.notification{margin:2px;font-weight:700}span.network-manipulationUI.add{background-image:url(img/network/addNodeIcon.png)}span.network-manipulationUI.edit{background-image:url(img/network/editIcon.png)}span.network-manipulationUI.edit.editmode{background-color:#fcfcfc;border-style:solid;border-width:1px;border-color:#ccc}span.network-manipulationUI.connect{background-image:url(img/network/connectIcon.png)}span.network-manipulationUI.delete{background-image:url(img/network/deleteIcon.png)}span.network-manipulationLabel{margin:0 0 0 23px;line-height:25px}div.network-seperatorLine{display:inline-block;width:1px;height:20px;background-color:#bdbdbd;margin:5px 7px 0 15px}div.network-navigation{width:34px;height:34px;z-index:10;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.network-navigation:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.network-navigation:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.network-navigation.up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.network-navigation.down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.network-navigation.left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.network-navigation.right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.network-navigation.zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.network-navigation.zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.network-navigation.zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px} \ No newline at end of file diff --git a/dist/vis.min.js b/dist/vis.min.js index 9fa58bf7..c0fa7b2e 100644 --- a/dist/vis.min.js +++ b/dist/vis.min.js @@ -4,8 +4,8 @@ * * A dynamic, browser-based visualization library. * - * @version 3.1.0 - * @date 2014-07-22 + * @version 3.2.0 + * @date 2014-08-14 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -22,16 +22,16 @@ * License for the specific language governing permissions and limitations under * the License. */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(s){if(i[s])return i[s].exports;var o=i[s]={exports:{},id:s,loaded:!1};return t[s].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(2),e.DataSet=i(3),e.DataView=i(4),e.Graph3d=i(5),e.graph3d={Camera:i(6),Filter:i(7),Point2d:i(8),Point3d:i(9),Slider:i(10),StepNumber:i(11)},e.Timeline=i(12),e.Graph2d=i(13),e.timeline={DataStep:i(14),Range:i(15),stack:i(16),TimeStep:i(17),components:{items:{Item:i(28),ItemBox:i(29),ItemPoint:i(30),ItemRange:i(31)},Component:i(18),CurrentTime:i(19),CustomTime:i(20),DataAxis:i(21),GraphGroup:i(22),Group:i(23),ItemSet:i(24),Legend:i(25),LineGraph:i(26),TimeAxis:i(27)}},e.Network=i(32),e.network={Edge:i(33),Groups:i(34),Images:i(35),Node:i(36),Popup:i(37),dotparser:i(38),gephiParser:i(39)},e.Graph=function(){throw new Error("Graph is renamed to Network. Please create a graph as new vis.Network(...)")},e.moment=i(40),e.hammer=i(41)},function(module,exports,__webpack_require__){var moment=__webpack_require__(40);exports.isNumber=function(t){return t instanceof Number||"number"==typeof t},exports.isString=function(t){return t instanceof String||"string"==typeof t},exports.isDate=function(t){if(t instanceof Date)return!0;if(exports.isString(t)){var e=ASPDateRegex.exec(t);if(e)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},exports.isDataTable=function(t){return"undefined"!=typeof google&&google.visualization&&google.visualization.DataTable&&t instanceof google.visualization.DataTable},exports.randomUUID=function(){var t=function(){return Math.floor(65536*Math.random()).toString(16)};return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()},exports.extend=function(t){for(var e=1,i=arguments.length;i>e;e++){var s=arguments[e];for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o])}return t},exports.selectiveExtend=function(t,e){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var i=2;ii;i++)if(t[i]!=e[i])return!1;return!0},exports.convert=function(t,e){var i;if(void 0===t)return void 0;if(null===t)return null;if(!e)return t;if("string"!=typeof e&&!(e instanceof String))throw new Error("Type must be a string");switch(e){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(moment.isMoment(t))return new Date(t.valueOf());if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])):moment(t).toDate();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"Moment":if(exports.isNumber(t))return moment(t);if(t instanceof Date)return moment(t.valueOf());if(moment.isMoment(t))return moment(t);if(exports.isString(t))return i=ASPDateRegex.exec(t),moment(i?Number(i[1]):t);throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"ISODate":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(moment.isMoment(t))return t.toDate().toISOString();if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ISODate");case"ASPDate":if(exports.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(exports.isString(t)){i=ASPDateRegex.exec(t);var s;return s=i?new Date(Number(i[1])).valueOf():new Date(t).valueOf(),"/Date("+s+")/"}throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+e+'"')}};var ASPDateRegex=/^\/?Date\((\-?\d+)/i;exports.getType=function(t){var e=typeof t;return"object"==e?null==t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":t instanceof Array?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":e},exports.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left+window.pageXOffset},exports.getAbsoluteTop=function(t){return t.getBoundingClientRect().top+window.pageYOffset},exports.addClassName=function(t,e){var i=t.className.split(" ");-1==i.indexOf(e)&&(i.push(e),t.className=i.join(" "))},exports.removeClassName=function(t,e){var i=t.className.split(" "),s=i.indexOf(e);-1!=s&&(i.splice(s,1),t.className=i.join(" "))},exports.forEach=function(t,e){var i,s;if(t instanceof Array)for(i=0,s=t.length;s>i;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},exports.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},exports.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},exports.addEventListener=function(t,e,i,s){t.addEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,s)):t.attachEvent("on"+e,i)},exports.removeEventListener=function(t,e,i,s){t.removeEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,s)):t.detachEvent("on"+e,i)},exports.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},exports.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},exports.option={},exports.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},exports.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},exports.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},exports.option.asSize=function(t,e){return"function"==typeof t&&(t=t()),exports.isString(t)?t:exports.isNumber(t)?t+"px":e||null},exports.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},exports.GiveDec=function(Hex){var Value;return Value="A"==Hex?10:"B"==Hex?11:"C"==Hex?12:"D"==Hex?13:"E"==Hex?14:"F"==Hex?15:eval(Hex)},exports.GiveHex=function(t){var e;return e=10==t?"A":11==t?"B":12==t?"C":13==t?"D":14==t?"E":15==t?"F":""+t},exports.parseColor=function(t){var e;if(exports.isString(t)){if(exports.isValidRGB(t)){var i=t.substr(4).substr(0,t.length-5).split(",");t=exports.RGBToHex(i[0],i[1],i[2])}if(exports.isValidHex(t)){var s=exports.hexToHSV(t),o={h:s.h,s:.45*s.s,v:Math.min(1,1.05*s.v)},n={h:s.h,s:Math.min(1,1.25*s.v),v:.6*s.v},r=exports.HSVToHex(n.h,n.h,n.v),a=exports.HSVToHex(o.h,o.s,o.v);e={background:t,border:r,highlight:{background:a,border:r},hover:{background:a,border:r}}}else e={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else e={},e.background=t.background||"white",e.border=t.border||e.background,exports.isString(t.highlight)?e.highlight={border:t.highlight,background:t.highlight}:(e.highlight={},e.highlight.background=t.highlight&&t.highlight.background||e.background,e.highlight.border=t.highlight&&t.highlight.border||e.border),exports.isString(t.hover)?e.hover={border:t.hover,background:t.hover}:(e.hover={},e.hover.background=t.hover&&t.hover.background||e.background,e.hover.border=t.hover&&t.hover.border||e.border);return e},exports.hexToRGB=function(t){t=t.replace("#","").toUpperCase();var e=exports.GiveDec(t.substring(0,1)),i=exports.GiveDec(t.substring(1,2)),s=exports.GiveDec(t.substring(2,3)),o=exports.GiveDec(t.substring(3,4)),n=exports.GiveDec(t.substring(4,5)),r=exports.GiveDec(t.substring(5,6)),a=16*e+i,h=16*s+o,i=16*n+r;return{r:a,g:h,b:i}},exports.RGBToHex=function(t,e,i){var s=exports.GiveHex(Math.floor(t/16)),o=exports.GiveHex(t%16),n=exports.GiveHex(Math.floor(e/16)),r=exports.GiveHex(e%16),a=exports.GiveHex(Math.floor(i/16)),h=exports.GiveHex(i%16),d=s+o+n+r+a+h;return"#"+d},exports.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var s=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));if(s==o)return{h:0,s:0,v:s};var n=t==s?e-i:i==s?t-e:i-t,r=t==s?3:i==s?1:5,a=60*(r-n/(o-s))/360,h=(o-s)/o,d=o;return{h:a,s:h,v:d}},exports.HSVToRGB=function(t,e,i){var s,o,n,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:s=i,o=l,n=h;break;case 1:s=d,o=i,n=h;break;case 2:s=h,o=i,n=l;break;case 3:s=h,o=d,n=i;break;case 4:s=l,o=h,n=i;break;case 5:s=i,o=h,n=d}return{r:Math.floor(255*s),g:Math.floor(255*o),b:Math.floor(255*n)}},exports.HSVToHex=function(t,e,i){var s=exports.HSVToRGB(t,e,i);return exports.RGBToHex(s.r,s.g,s.b)},exports.hexToHSV=function(t){var e=exports.hexToRGB(t);return exports.RGBToHSV(e.r,e.g,e.b)},exports.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},exports.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},exports.selectiveBridgeObject=function(t,e){if("object"==typeof e){for(var i=Object.create(e),s=0;sa;)o=void 0===s?n[u][i]:n[u][i][s],n[u].isVisible(e)?h=!0:(o=r&&console.log("BinarySearch too many iterations. Aborting.")}return u},exports.binarySearchGeneric=function(t,e,i,s){var o,n,r,a,h=1e4,d=0,l=t,c=!1,p=0,u=l.length,m=p,g=u,f=Math.floor(.5*(u+p));if(0==u)f=-1;else if(1==u)r=l[f][i],f=r==e?0:-1;else{for(u-=1;0==c&&h>d;)n=l[Math.max(0,f-1)][i],r=l[f][i],a=l[Math.min(l.length-1,f+1)][i],r==e||e>n&&r>e||e>r&&a>e?(c=!0,r!=e&&("before"==s?e>n&&r>e&&(f=Math.max(0,f-1)):e>r&&a>e&&(f=Math.min(l.length-1,f+1)))):(e>r?m=Math.floor(.5*(u+p)):g=Math.floor(.5*(u+p)),o=Math.floor(.5*(u+p)),p==m&&u==g?(f=-1,c=!0):(u=g,p=m,f=Math.floor(.5*(u+p)))),d++;d>=h&&console.log("BinarySearch too many iterations. Aborting.")}return f}},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(s)):(s=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.getDOMElement=function(t,e,i){var s;return e.hasOwnProperty(t)?e[t].redundant.length>0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElement(t),i.appendChild(s)):(s=document.createElement(t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.drawPoint=function(t,i,s,o,n){var r;return"circle"==s.options.drawPoints.style?(r=e.getSVGElement("circle",o,n),r.setAttributeNS(null,"cx",t),r.setAttributeNS(null,"cy",i),r.setAttributeNS(null,"r",.5*s.options.drawPoints.size),r.setAttributeNS(null,"class",s.className+" point")):(r=e.getSVGElement("rect",o,n),r.setAttributeNS(null,"x",t-.5*s.options.drawPoints.size),r.setAttributeNS(null,"y",i-.5*s.options.drawPoints.size),r.setAttributeNS(null,"width",s.options.drawPoints.size),r.setAttributeNS(null,"height",s.options.drawPoints.size),r.setAttributeNS(null,"class",s.className+" point")),r},e.drawBar=function(t,i,s,o,n,r,a){var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*s),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",s),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",n)}},function(t,e,i){function s(t,e){if(!t||Array.isArray(t)||o.isDataTable(t)||(e=t,t=null),this._options=e||{},this._data={},this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i in this._options.type)if(this._options.type.hasOwnProperty(i)){var s=this._options.type[i];this._type[i]="Date"==s||"ISODate"==s||"ASPDate"==s?"Date":s}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t)}var o=i(1);s.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},s.prototype.subscribe=s.prototype.on,s.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},s.prototype.unsubscribe=s.prototype.off,s.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var s=[];t in this._subscribers&&(s=s.concat(this._subscribers[t])),"*"in this._subscribers&&(s=s.concat(this._subscribers["*"]));for(var o=0;or;r++)i=n._addItem(t[r]),s.push(i);else if(o.isDataTable(t))for(var h=this._getColumnNames(t),d=0,l=t.getNumberOfRows();l>d;d++){for(var c={},p=0,u=h.length;u>p;p++){var m=h[p];c[m]=t.getValue(d,p)}i=n._addItem(c),s.push(i)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),s.push(i)}return s.length&&this._trigger("add",{items:s},e),s},s.prototype.update=function(t,e){var i=[],s=[],n=this,r=n._fieldId,a=function(t){var e=t[r];n._data[e]?(e=n._updateItem(t),s.push(e)):(e=n._addItem(t),i.push(e))};if(Array.isArray(t))for(var h=0,d=t.length;d>h;h++)a(t[h]);else if(o.isDataTable(t))for(var l=this._getColumnNames(t),c=0,p=t.getNumberOfRows();p>c;c++){for(var u={},m=0,g=l.length;g>m;m++){var f=l[m];u[f]=t.getValue(c,m)}a(u)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");a(t)}return i.length&&this._trigger("add",{items:i},e),s.length&&this._trigger("update",{items:s},e),i.concat(s)},s.prototype.get=function(){var t,e,i,s,n=this,r=o.getType(arguments[0]);"String"==r||"Number"==r?(t=arguments[0],i=arguments[1],s=arguments[2]):"Array"==r?(e=arguments[0],i=arguments[1],s=arguments[2]):(i=arguments[0],s=arguments[1]);var a;if(i&&i.returnType){var h=["DataTable","Array","Object"];if(a=-1==h.indexOf(i.returnType)?"Array":i.returnType,s&&a!=o.getType(s))throw new Error('Type of parameter "data" ('+o.getType(s)+") does not correspond with specified options.type ("+i.type+")");if("DataTable"==a&&!o.isDataTable(s))throw new Error('Parameter "data" must be a DataTable when options.type is "DataTable"')}else a=s&&"DataTable"==o.getType(s)?"DataTable":"Array";var d,l,c,p,u=i&&i.type||this._options.type,m=i&&i.filter,g=[];if(void 0!=t)d=n._getItem(t,u),m&&!m(d)&&(d=null);else if(void 0!=e)for(c=0,p=e.length;p>c;c++)d=n._getItem(e[c],u),(!m||m(d))&&g.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=n._getItem(l,u),(!m||m(d))&&g.push(d));if(i&&i.order&&void 0==t&&this._sort(g,i.order),i&&i.fields){var f=i.fields;if(void 0!=t)d=this._filterFields(d,f);else for(c=0,p=g.length;p>c;c++)g[c]=this._filterFields(g[c],f)}if("DataTable"==a){var v=this._getColumnNames(s);if(void 0!=t)n._appendRow(s,v,d);else for(c=0;cc;c++)s.push(g[c]);return s}return g},s.prototype.getIds=function(t){var e,i,s,o,n,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=[];if(a)if(h){n=[];for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&n.push(o));for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&l.push(o[this._fieldId]));else if(h){n=[];for(s in r)r.hasOwnProperty(s)&&n.push(r[s]);for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=r[s],l.push(o[this._fieldId]));return l},s.prototype.getDataSet=function(){return this},s.prototype.forEach=function(t,e){var i,s,o=e&&e.filter,n=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],s=i[this._fieldId],t(i,s);else for(s in r)r.hasOwnProperty(s)&&(i=this._getItem(s,n),(!o||o(i))&&t(i,s))},s.prototype.map=function(t,e){var i,s=e&&e.filter,o=e&&e.type||this._options.type,n=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,o),(!s||s(i))&&n.push(t(i,a)));return e&&e.order&&this._sort(n,e.order),n},s.prototype._filterFields=function(t,e){var i={};for(var s in t)t.hasOwnProperty(s)&&-1!=e.indexOf(s)&&(i[s]=t[s]);return i},s.prototype._sort=function(t,e){if(o.isString(e)){var i=e;t.sort(function(t,e){var s=t[i],o=e[i];return s>o?1:o>s?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},s.prototype.remove=function(t,e){var i,s,o,n=[];if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)o=this._remove(t[i]),null!=o&&n.push(o);else o=this._remove(t),null!=o&&n.push(o);return n.length&&this._trigger("remove",{items:n},e),n},s.prototype._remove=function(t){if(o.isNumber(t)||o.isString(t)){if(this._data[t])return delete this._data[t],t}else if(t instanceof Object){var e=t[this._fieldId];if(e&&this._data[e])return delete this._data[e],e}return null},s.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this._trigger("remove",{items:e},t),e},s.prototype.max=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||r>s)&&(i=n,s=r)}return i},s.prototype.min=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||s>r)&&(i=n,s=r)}return i},s.prototype.distinct=function(t){var e,i=this._data,s=[],n=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(s[e]==d){l=!0;break}l||void 0===d||(s[r]=d,r++)}if(n)for(e=0;ei;i++)e[i]=t.getColumnId(i)||t.getColumnLabel(i);return e},s.prototype._appendRow=function(t,e,i){for(var s=t.addRow(),o=0,n=e.length;n>o;o++){var r=e[o];t.setValue(s,o,i[r])}},t.exports=s},function(t,e,i){function s(t,e){this._data=null,this._ids={},this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var o=i(1),n=i(3);s.prototype.setData=function(t){var e,i,s;if(this._data){this._data.unsubscribe&&this._data.unsubscribe("*",this.listener),e=[];for(var o in this._ids)this._ids.hasOwnProperty(o)&&e.push(o);this._ids={},this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,s=e.length;s>i;i++)o=e[i],this._ids[o]=!0;this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},s.prototype.get=function(){var t,e,i,s=this,n=o.getType(arguments[0]);"String"==n||"Number"==n||"Array"==n?(t=arguments[0],e=arguments[1],i=arguments[2]):(e=arguments[0],i=arguments[1]);var r=o.extend({},this._options,e);this._options.filter&&e&&e.filter&&(r.filter=function(t){return s._options.filter(t)&&e.filter(t)});var a=[];return void 0!=t&&a.push(t),a.push(r),a.push(i),this._data&&this._data.get.apply(this._data,a)},s.prototype.getIds=function(t){var e;if(this._data){var i,s=this._options.filter;i=t&&t.filter?s?function(e){return s(e)&&t.filter(e)}:t.filter:s,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},s.prototype.getDataSet=function(){for(var t=this;t instanceof s;)t=t._data;return t||null},s.prototype._onEvent=function(t,e,i){var s,o,n,r,a=e&&e.items,h=this._data,d=[],l=[],c=[];if(a&&h){switch(t){case"add":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r&&(this._ids[n]=!0,d.push(n));break;case"update":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r?this._ids[n]?l.push(n):(this._ids[n]=!0,d.push(n)):this._ids[n]&&(delete this._ids[n],c.push(n));break;case"remove":for(s=0,o=a.length;o>s;s++)n=a[s],this._ids[n]&&(delete this._ids[n],c.push(n))}d.length&&this._trigger("add",{items:d},i),l.length&&this._trigger("update",{items:l},i),c.length&&this._trigger("remove",{items:c},i)}},s.prototype.on=n.prototype.on,s.prototype.off=n.prototype.off,s.prototype._trigger=n.prototype._trigger,s.prototype.subscribe=s.prototype.on,s.prototype.unsubscribe=s.prototype.off,t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.width="400px",this.height="400px",this.margin=10,this.defaultXCenter="55%",this.defaultYCenter="50%",this.xLabel="x",this.yLabel="y",this.zLabel="z",this.filterLabel="time",this.legendLabel="value",this.style=s.STYLE.DOT,this.showPerspective=!0,this.showGrid=!0,this.keepAspectRatio=!0,this.showShadow=!1,this.showGrayBottom=!1,this.showTooltip=!1,this.verticalRatio=.5,this.animationInterval=1e3,this.animationPreload=!1,this.camera=new l,this.eye=new h(0,0,-1),this.dataTable=null,this.dataPoints=null,this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.colFilter=void 0,this.xMin=0,this.xStep=void 0,this.xMax=1,this.yMin=0,this.yStep=void 0,this.yMax=1,this.zMin=0,this.zStep=void 0,this.zMax=1,this.valueMin=0,this.valueMax=1,this.xBarWidth=1,this.yBarWidth=1,this.colorAxis="#4D4D4D",this.colorGrid="#D3D3D3",this.colorDot="#7DC1FF",this.colorDotBorder="#3267D2",this.create(),this.setOptions(i),e&&this.setData(e)}var o=i(45),n=i(3),r=i(4),a=i(1),h=i(9),d=i(8),l=i(6),c=i(7),p=i(10),u=i(11);o(s.prototype),s.prototype._setScale=function(){this.scale=new h(1/(this.xMax-this.xMin),1/(this.yMax-this.yMin),1/(this.zMax-this.zMin)),this.keepAspectRatio&&(this.scale.x3&&(this.colFilter=3);else{if(this.style!==s.STYLE.DOTCOLOR&&this.style!==s.STYLE.DOTSIZE&&this.style!==s.STYLE.BARCOLOR&&this.style!==s.STYLE.BARSIZE)throw'Unknown style "'+this.style+'"';this.colX=0,this.colY=1,this.colZ=2,this.colValue=3,t.getNumberOfColumns()>4&&(this.colFilter=4)}},s.prototype.getNumberOfRows=function(t){return t.length},s.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},s.prototype.getDistinctValues=function(t,e){for(var i=[],s=0;st[s][e]&&(i.min=t[s][e]),i.maxt;t++){var g=(t-p)/(m-p),f=240*g,v=this._hsv2rgb(f,1,1);c.strokeStyle=v,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.colorAxis,c.strokeRect(h,r,i,n)}if(this.style===s.STYLE.DOTSIZE&&(c.strokeStyle=this.colorAxis,c.fillStyle=this.colorDot,c.beginPath(),c.moveTo(h,r),c.lineTo(a,r),c.lineTo(a-i+e,d),c.lineTo(h,d),c.closePath(),c.fill(),c.stroke()),this.style===s.STYLE.DOTCOLOR||this.style===s.STYLE.DOTSIZE){var y=5,b=new u(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,o=this._convert3Dto2D(new h(x,r,this.zMin)),Math.cos(2*_)>0?(f.textAlign="center",f.textBaseline="top",o.y+=b):Math.sin(2*_)<0?(f.textAlign="right",f.textBaseline="middle"):(f.textAlign="left",f.textBaseline="middle"),f.fillStyle=this.colorAxis,f.fillText(" "+i.getCurrent()+" ",o.x,o.y),i.next()}for(f.lineWidth=1,s=void 0===this.defaultYStep,i=new u(this.yMin,this.yMax,this.yStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,o=this._convert3Dto2D(new h(n,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(f.textAlign="center",f.textBaseline="top",o.y+=b):Math.sin(2*_)>0?(f.textAlign="right",f.textBaseline="middle"):(f.textAlign="left",f.textBaseline="middle"),f.fillStyle=this.colorAxis,f.fillText(" "+i.getCurrent()+" ",o.x,o.y),i.next();for(f.lineWidth=1,s=void 0===this.defaultZStep,i=new u(this.zMin,this.zMax,this.zStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new h(n,r,i.getCurrent())),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(t.x,t.y),f.lineTo(t.x-b,t.y),f.stroke(),f.textAlign="right",f.textBaseline="middle",f.fillStyle=this.colorAxis,f.fillText(i.getCurrent()+" ",t.x-5,t.y),i.next();f.lineWidth=1,t=this._convert3Dto2D(new h(n,r,this.zMin)),e=this._convert3Dto2D(new h(n,r,this.zMax)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(t.x,t.y),f.lineTo(e.x,e.y),f.stroke(),f.lineWidth=1,p=this._convert3Dto2D(new h(this.xMin,this.yMin,this.zMin)),m=this._convert3Dto2D(new h(this.xMax,this.yMin,this.zMin)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(p.x,p.y),f.lineTo(m.x,m.y),f.stroke(),p=this._convert3Dto2D(new h(this.xMin,this.yMax,this.zMin)),m=this._convert3Dto2D(new h(this.xMax,this.yMax,this.zMin)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(p.x,p.y),f.lineTo(m.x,m.y),f.stroke(),f.lineWidth=1,t=this._convert3Dto2D(new h(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new h(this.xMin,this.yMax,this.zMin)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(t.x,t.y),f.lineTo(e.x,e.y),f.stroke(),t=this._convert3Dto2D(new h(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new h(this.xMax,this.yMax,this.zMin)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(t.x,t.y),f.lineTo(e.x,e.y),f.stroke();var w=this.xLabel;w.length>0&&(c=.1/this.scale.y,n=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-c:this.yMax+c,o=this._convert3Dto2D(new h(n,r,this.zMin)),Math.cos(2*_)>0?(f.textAlign="center",f.textBaseline="top"):Math.sin(2*_)<0?(f.textAlign="right",f.textBaseline="middle"):(f.textAlign="left",f.textBaseline="middle"),f.fillStyle=this.colorAxis,f.fillText(w,o.x,o.y));var S=this.yLabel;S.length>0&&(l=.1/this.scale.x,n=Math.sin(_)>0?this.xMin-l:this.xMax+l,r=(this.yMin+this.yMax)/2,o=this._convert3Dto2D(new h(n,r,this.zMin)),Math.cos(2*_)<0?(f.textAlign="center",f.textBaseline="top"):Math.sin(2*_)>0?(f.textAlign="right",f.textBaseline="middle"):(f.textAlign="left",f.textBaseline="middle"),f.fillStyle=this.colorAxis,f.fillText(S,o.x,o.y));var M=this.zLabel;M.length>0&&(d=30,n=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,o=this._convert3Dto2D(new h(n,r,a)),f.textAlign="right",f.textBaseline="middle",f.fillStyle=this.colorAxis,f.fillText(M,o.x-d,o.y))},s.prototype._hsv2rgb=function(t,e,i){var s,o,n,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:s=r,o=h,n=0;break;case 1:s=h,o=r,n=0;break;case 2:s=0,o=r,n=h;break;case 3:s=0,o=h,n=r;break;case 4:s=h,o=0,n=r;break;case 5:s=r,o=0,n=h;break;default:s=0,o=0,n=0}return"RGB("+parseInt(255*s)+","+parseInt(255*o)+","+parseInt(255*n)+")"},s.prototype._redrawDataGrid=function(){var t,e,i,o,n,r,a,d,l,c,p,u,m,g=this.frame.canvas,f=g.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(n=0;n0}else r=!0;r?(m=(t.point.z+e.point.z+i.point.z+o.point.z)/4,c=240*(1-(m-this.zMin)*this.scale.z/this.verticalRatio),p=1,this.showShadow?(u=Math.min(1+S.x/M/2,1),a=this._hsv2rgb(c,p,u),d=a):(u=1,a=this._hsv2rgb(c,p,u),d=this.colorAxis)):(a="gray",d=this.colorAxis),l=.5,f.lineWidth=l,f.fillStyle=a,f.strokeStyle=d,f.beginPath(),f.moveTo(t.screen.x,t.screen.y),f.lineTo(e.screen.x,e.screen.y),f.lineTo(o.screen.x,o.screen.y),f.lineTo(i.screen.x,i.screen.y),f.closePath(),f.fill(),f.stroke()}}else for(n=0;np&&(p=0);var u,m,g;this.style===s.STYLE.DOTCOLOR?(u=240*(1-(d.point.value-this.valueMin)*this.scale.value),m=this._hsv2rgb(u,1,1),g=this._hsv2rgb(u,1,.8)):this.style===s.STYLE.DOTSIZE?(m=this.colorDot,g=this.colorDotBorder):(u=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),m=this._hsv2rgb(u,1,1),g=this._hsv2rgb(u,1,.8)),i.lineWidth=1,i.strokeStyle=g,i.fillStyle=m,i.beginPath(),i.arc(d.screen.x,d.screen.y,p,0,2*Math.PI,!0),i.fill(),i.stroke()}}},s.prototype._redrawDataBar=function(){var t,e,i,o,n=this.frame.canvas,r=n.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0&&(t=this.dataPoints[0],s.lineWidth=1,s.strokeStyle="blue",s.beginPath(),s.moveTo(t.screen.x,t.screen.y)),e=1;e0&&s.stroke()}},s.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this.startMouseX=getMouseX(t),this.startMouseY=getMouseY(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},a.addEventListener(document,"mousemove",e.onmousemove),a.addEventListener(document,"mouseup",e.onmouseup),a.preventDefault(t)}},s.prototype._onMouseMove=function(t){t=t||window.event;var e=parseFloat(getMouseX(t))-this.startMouseX,i=parseFloat(getMouseY(t))-this.startMouseY,s=this.startArmRotation.horizontal+e/200,o=this.startArmRotation.vertical+i/200,n=4,r=Math.sin(n/360*2*Math.PI);Math.abs(Math.sin(s))0?1:0>t?-1:0}var s=e[0],o=e[1],n=e[2],r=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x)),a=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),h=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},s.prototype._dataPointFromXY=function(t,e){var i,o=100,n=null,r=null,a=null,h=new d(t,e);if(this.style===s.STYLE.BAR||this.style===s.STYLE.BARCOLOR||this.style===s.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var l=n.surfaces;if(l)for(var c=l.length-1;c>=0;c--){var p=l[c],u=p.corners,m=[u[0].screen,u[1].screen,u[2].screen],g=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(h,m)||this._insideTriangle(h,g))return n}}else for(i=0;ib)&&o>b&&(a=b,r=n)}}return r},s.prototype._showTooltip=function(t){var e,i,s;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,s=this.tooltip.dom.dot):(e=document.createElement("div"),e.style.position="absolute",e.style.padding="10px",e.style.border="1px solid #4d4d4d",e.style.color="#1a1a1a",e.style.background="rgba(255,255,255,0.7)",e.style.borderRadius="2px",e.style.boxShadow="5px 5px 10px rgba(128,128,128,0.5)",i=document.createElement("div"),i.style.position="absolute",i.style.height="40px",i.style.width="0",i.style.borderLeft="1px solid #4d4d4d",s=document.createElement("div"),s.style.position="absolute",s.style.height="0",s.style.width="0",s.style.border="5px solid #4d4d4d",s.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:s}}),this._hideTooltip(),this.tooltip.dataPoint=t,e.innerHTML="function"==typeof this.showTooltip?this.showTooltip(t.point):"
x:"+t.point.x+"
y:"+t.point.y+"
z:"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(s);var o=e.offsetWidth,n=e.offsetHeight,r=i.offsetHeight,a=s.offsetWidth,h=s.offsetHeight,d=t.screen.x-o/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-o),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=d+"px",e.style.top=t.screen.y-r-n+"px",s.style.left=t.screen.x-a/2+"px",s.style.top=t.screen.y-h/2+"px"},s.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},getMouseX=function(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0},getMouseY=function(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0},t.exports=s},function(t,e,i){var s=i(9);Camera=function(){this.armLocation=new s,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new s,this.cameraRotation=new s(.5*Math.PI,0,0),this.calculateCameraOrientation()},Camera.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},Camera.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),(void 0!==t||void 0!==e)&&this.calculateCameraOrientation()},Camera.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},Camera.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},Camera.prototype.getArmLength=function(){return this.armLength},Camera.prototype.getCameraLocation=function(){return this.cameraLocation},Camera.prototype.getCameraRotation=function(){return this.cameraRotation},Camera.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal},t.exports=Camera},function(t,e,i){function s(t,e,i){this.data=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=i.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:e>t?-1:0}),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var o=i(4);s.prototype.isLoaded=function(){return this.loaded},s.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},s.prototype.getLabel=function(){return this.graph.filterLabel},s.prototype.getColumn=function(){return this.column},s.prototype.getSelectedValue=function(){return void 0===this.index?void 0:this.values[this.index]},s.prototype.getValues=function(){return this.values},s.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t]},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");var o=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=r.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},util:{snap:null,toScreen:o._toScreen.bind(o),toGlobalScreen:o._toGlobalScreen.bind(o),toTime:o._toTime.bind(o),toGlobalTime:o._toGlobalTime.bind(o)}},this.range=new d(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new l(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new c(this.body),this.components.push(this.currentTime),this.customTime=new p(this.body),this.components.push(this.customTime),this.itemSet=new u(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,i&&this.setOptions(i),e?this.setItems(e):this.redraw()}var o=i(45),n=i(41),r=i(1),a=i(3),h=i(4),d=i(15),l=i(27),c=i(19),p=i(20),u=i(24);o(s.prototype),s.prototype._create=function(t){this.dom={},this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.background.className="vispanel background",this.dom.backgroundVertical.className="vispanel background vertical",this.dom.backgroundHorizontal.className="vispanel background horizontal",this.dom.centerContainer.className="vispanel center",this.dom.leftContainer.className="vispanel left",this.dom.rightContainer.className="vispanel right",this.dom.top.className="vispanel top",this.dom.bottom.className="vispanel bottom",this.dom.left.className="content",this.dom.center.className="content",this.dom.right.className="content",this.dom.shadowTop.className="shadow top",this.dom.shadowBottom.className="shadow bottom",this.dom.shadowTopLeft.className="shadow top",this.dom.shadowBottomLeft.className="shadow bottom",this.dom.shadowTopRight.className="shadow top",this.dom.shadowBottomRight.className="shadow bottom",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.on("rangechange",this.redraw.bind(this)),this.on("change",this.redraw.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("pinch",this._onPinch.bind(this)),this.on("dragstart",this._onDragStart.bind(this)),this.on("drag",this._onDrag.bind(this)),this.hammer=n(this.dom.root,{prevent_default:!0}),this.listeners={};var e=this,i=["touch","pinch","tap","doubletap","hold","dragstart","drag","dragend","mousewheel","DOMMouseScroll"];if(i.forEach(function(t){var i=function(){var i=[t].concat(Array.prototype.slice.call(arguments,0));e.emit.apply(e,i)};e.hammer.on(t,i),e.listeners[t]=i}),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.touch={},!t)throw new Error("No container provided");t.appendChild(this.dom.root)},s.prototype.destroy=function(){this.clear(),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null;for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){t.destroy()}),this.body=null},s.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","orientation"];r.selectiveExtend(e,this.options,t),this._initAutoResize()}if(this.components.forEach(function(e){e.setOptions(t)}),t&&t.order)throw new Error("Option order is deprecated. There is no replacement for this feature.");this.redraw()},s.prototype.setCustomTime=function(t){if(!this.customTime)throw new Error("Cannot get custom time: Custom time bar is not enabled");this.customTime.setCustomTime(t)},s.prototype.getCustomTime=function(){if(!this.customTime)throw new Error("Cannot get custom time: Custom time bar is not enabled");return this.customTime.getCustomTime()},s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof a||t instanceof h?t:new a(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i&&("start"in this.options||"end"in this.options)){this.fit();var s="start"in this.options?r.convert(this.options.start,"Date"):null,o="end"in this.options?r.convert(this.options.end,"Date"):null;this.setWindow(s,o)}},s.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},s.prototype.setGroups=function(t){var e;e=t?t instanceof a||t instanceof h?t:new a(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.clear=function(t){(!t||t.items)&&this.setItems(null),(!t||t.groups)&&this.setGroups(null),(!t||t.options)&&(this.components.forEach(function(t){t.setOptions(t.defaultOptions)}),this.setOptions(this.defaultOptions))},s.prototype.fit=function(){var t=this.getItemRange(),e=t.min,i=t.max;if(null!=e&&null!=i){var s=i.valueOf()-e.valueOf();0>=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}(null!==e||null!==i)&&this.range.setRange(e,i)},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?r.convert(s.start,"Date").valueOf():null;var o=t.max("start");o&&(i=r.convert(o.start,"Date").valueOf());var n=t.max("end");n&&(i=null==i?r.convert(n.end,"Date").valueOf():Math.max(i,r.convert(n.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},s.prototype.setSelection=function(t){this.itemSet&&this.itemSet.setSelection(t)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.setWindow=function(t,e){if(1==arguments.length){var i=arguments[0];this.range.setRange(i.start,i.end)}else this.range.setRange(t,e)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){s.root.className="vis timeline root "+e.orientation,s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),h=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,h+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var d=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=d,i.leftContainer.height=d,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var l=i.root.width-i.left.width-i.right.width-n;i.center.width=l,i.centerContainer.width=l,i.top.width=l,i.bottom.width=l,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontal.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var c=this.props.scrollTop;"bottom"==e.orientation&&(c+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=c+"px",s.left.style.left="0",s.left.style.top=c+"px",s.right.style.left="0",s.right.style.top=c+"px";var p=0==this.props.scrollTop?"hidden":"",u=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";s.shadowTop.style.visibility=p,s.shadowBottom.style.visibility=u,s.shadowTopLeft.style.visibility=p,s.shadowBottomLeft.style.visibility=u,s.shadowTopRight.style.visibility=p,s.shadowBottomRight.style.visibility=u,this.components.forEach(function(e){t=e.redraw()||t}),t&&this.redraw()}},s.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},s.prototype._toTime=function(t){var e=this.range.conversion(this.props.center.width);return new Date(t/e.scale+e.offset)},s.prototype._toGlobalTime=function(t){var e=this.range.conversion(this.props.root.width);return new Date(t/e.scale+e.offset)},s.prototype._toScreen=function(t){var e=this.range.conversion(this.props.center.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._toGlobalScreen=function(t){var e=this.range.conversion(this.props.root.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},s.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){return 1!=t.options.autoResize?void t._stopAutoResize():void(t.dom.root&&(t.dom.root.clientWidth!=t.props.lastWidth||t.dom.root.clientHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.clientWidth,t.props.lastHeight=t.dom.root.clientHeight,t.emit("change")))},r.addEventListener(window,"resize",this._onResize),this.watchTimer=setInterval(this._onResize,1e3)},s.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),r.removeEventListener(window,"resize",this._onResize),this._onResize=null},s.prototype._onTouch=function(){this.touch.allowDragging=!0},s.prototype._onPinch=function(){this.touch.allowDragging=!1},s.prototype._onDragStart=function(){this.touch.initialScrollTop=this.props.scrollTop},s.prototype._onDrag=function(t){if(this.touch.allowDragging){var e=t.gesture.deltaY,i=this._getScrollTop(),s=this._setScrollTop(this.touch.initialScrollTop+e);s!=i&&this.redraw()}},s.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},s.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("bottom"==this.options.orientation&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTop=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}(null!==e||null!==i)&&this.range.setRange(e,i)},s.prototype.getItemRange=function(){var t=this.itemsData,e=null,i=null;if(t){var s=t.min("start");e=s?r.convert(s.start,"Date").valueOf():null;var o=t.max("start");o&&(i=r.convert(o.start,"Date").valueOf());var n=t.max("end");n&&(i=null==i?r.convert(n.end,"Date").valueOf():Math.max(i,r.convert(n.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},s.prototype.setWindow=function(t,e){if(1==arguments.length){var i=arguments[0];this.range.setRange(i.start,i.end)}else this.range.setRange(t,e)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){s.root.className="vis timeline root "+e.orientation,s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),h=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,h+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var d=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=d,i.leftContainer.height=d,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var l=i.root.width-i.left.width-i.right.width-n;i.center.width=l,i.centerContainer.width=l,i.top.width=l,i.bottom.width=l,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontalContainer.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontalContainer.style.width=i.background.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontalContainer.style.left="0",s.backgroundHorizontalContainer.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var c=this.props.scrollTop;"bottom"==e.orientation&&(c+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=c+"px",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=c+"px",s.left.style.left="0",s.left.style.top=c+"px",s.right.style.left="0",s.right.style.top=c+"px";var p=0==this.props.scrollTop?"hidden":"",u=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";s.shadowTop.style.visibility=p,s.shadowBottom.style.visibility=u,s.shadowTopLeft.style.visibility=p,s.shadowBottomLeft.style.visibility=u,s.shadowTopRight.style.visibility=p,s.shadowBottomRight.style.visibility=u,this.components.forEach(function(e){t=e.redraw()||t}),t&&this.redraw()}},s.prototype._toTime=function(t){var e=this.range.conversion(this.props.center.width);return new Date(t/e.scale+e.offset)},s.prototype._toGlobalTime=function(t){var e=this.range.conversion(this.props.root.width);return new Date(t/e.scale+e.offset)},s.prototype._toScreen=function(t){var e=this.range.conversion(this.props.center.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._toGlobalScreen=function(t){var e=this.range.conversion(this.props.root.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},s.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){return 1!=t.options.autoResize?void t._stopAutoResize():void(t.dom.root&&(t.dom.root.clientWidth!=t.props.lastWidth||t.dom.root.clientHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.clientWidth,t.props.lastHeight=t.dom.root.clientHeight,t.emit("change")))},r.addEventListener(window,"resize",this._onResize),this.watchTimer=setInterval(this._onResize,1e3)},s.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),r.removeEventListener(window,"resize",this._onResize),this._onResize=null},s.prototype._onTouch=function(){this.touch.allowDragging=!0},s.prototype._onPinch=function(){this.touch.allowDragging=!1},s.prototype._onDragStart=function(){this.touch.initialScrollTop=this.props.scrollTop},s.prototype._onDrag=function(t){if(this.touch.allowDragging){var e=t.gesture.deltaY,i=this._getScrollTop(),s=this._setScrollTop(this.touch.initialScrollTop+e);s!=i&&this.redraw()}},s.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},s.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("bottom"==this.options.orientation&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTopn&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.first=function(){this.setFirst()},e.prototype.setFirst=function(){var t=this._start-this.scale*this.minorSteps[this.stepIndex],e=this._end+this.scale*this.minorSteps[this.stepIndex];this.marginEnd=this.roundToMinor(e),this.marginStart=this.roundToMinor(t),this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(){for(var t=""+Number(this.current).toPrecision(5),e=t.length-1;e>0;e--){if("0"!=t[e]){if("."==t[e]||","==t[e]){t=t.slice(0,e);break}break}t=t.slice(0,e)}return t},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add("days",-3).valueOf(),this.end=i.clone().add("days",4).valueOf(),this.body=t,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(42),h=i(40),d=i(18);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e){var i=this._applyRange(t,e);if(i){var s={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",s),this.body.emitter.emit("rangechanged",s)}},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t){return s.conversion(this.start,this.end,t)},s.conversion=function(t,e,i){return 0!=i&&e-t!=0?{offset:t,scale:i/(e-t)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable){var e=this.options.direction;if(o(e),this.props.touch.allowDragging){var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY,s=this.props.touch.end-this.props.touch.start,n="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,r=-i/n*s;this._applyRange(this.props.touch.start+r,this.props.touch.end+r),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/t.gesture.scale,i=this._pointerToDate(this.props.touch.center),s=parseInt(i+(this.props.touch.start-i)*e),o=parseInt(i+(this.props.touch.end-i)*e);this.setRange(s,o)}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i){var s=this.body.domProps.center.width;return e=this.conversion(s),t.x/e.scale+e.offset}var n=this.body.domProps.center.height;return e=this.conversion(n),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e){null==e&&(e=(this.start+this.end)/2);var i=e+(this.start-e)*t,s=e+(this.end-e)*t;this.setRange(i,s)},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e){var i,s;for(i=0,s=t.length;s>i;i++)t[i].top=e.axis},e.collision=function(t,e,s){return t.left-s.horizontal+ie.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale=s.SCALE.DAY,this.step=1,this.setRange(t,e,i)}var o=i(40);s.SCALE={MILLISECOND:1,SECOND:2,MINUTE:3,HOUR:4,DAY:5,WEEKDAY:6,MONTH:7,YEAR:8},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case s.SCALE.YEAR:this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case s.SCALE.MONTH:this.current.setDate(1);case s.SCALE.DAY:case s.SCALE.WEEKDAY:this.current.setHours(0);case s.SCALE.HOUR:this.current.setMinutes(0);case s.SCALE.MINUTE:this.current.setSeconds(0);case s.SCALE.SECOND:this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()-this.current.getMonth()%this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()-this.current.getFullYear()%this.step)}},s.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},s.prototype.next=function(){var t=this.current.valueOf();if(this.current.getMonth()<6)switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current=new Date(this.current.valueOf()+1e3*this.step);break;case s.SCALE.MINUTE:this.current=new Date(this.current.valueOf()+1e3*this.step*60);break;case s.SCALE.HOUR:this.current=new Date(this.current.valueOf()+1e3*this.step*60*60);var e=this.current.getHours();this.current.setHours(e-e%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}else switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()+this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()+this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()+this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.getMilliseconds()0&&(this.step=e),this.autoScale=!1},s.prototype.setAutoScale=function(t){this.autoScale=t},s.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,r=6e4,a=1e3,h=1;1e3*e>t&&(this.scale=s.SCALE.YEAR,this.step=1e3),500*e>t&&(this.scale=s.SCALE.YEAR,this.step=500),100*e>t&&(this.scale=s.SCALE.YEAR,this.step=100),50*e>t&&(this.scale=s.SCALE.YEAR,this.step=50),10*e>t&&(this.scale=s.SCALE.YEAR,this.step=10),5*e>t&&(this.scale=s.SCALE.YEAR,this.step=5),e>t&&(this.scale=s.SCALE.YEAR,this.step=1),3*i>t&&(this.scale=s.SCALE.MONTH,this.step=3),i>t&&(this.scale=s.SCALE.MONTH,this.step=1),5*o>t&&(this.scale=s.SCALE.DAY,this.step=5),2*o>t&&(this.scale=s.SCALE.DAY,this.step=2),o>t&&(this.scale=s.SCALE.DAY,this.step=1),o/2>t&&(this.scale=s.SCALE.WEEKDAY,this.step=1),4*n>t&&(this.scale=s.SCALE.HOUR,this.step=4),n>t&&(this.scale=s.SCALE.HOUR,this.step=1),15*r>t&&(this.scale=s.SCALE.MINUTE,this.step=15),10*r>t&&(this.scale=s.SCALE.MINUTE,this.step=10),5*r>t&&(this.scale=s.SCALE.MINUTE,this.step=5),r>t&&(this.scale=s.SCALE.MINUTE,this.step=1),15*a>t&&(this.scale=s.SCALE.SECOND,this.step=15),10*a>t&&(this.scale=s.SCALE.SECOND,this.step=10),5*a>t&&(this.scale=s.SCALE.SECOND,this.step=5),a>t&&(this.scale=s.SCALE.SECOND,this.step=1),200*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=200),100*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=100),50*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=50),10*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=10),5*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=5),h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=1)}},s.prototype.snap=function(t){var e=new Date(t.valueOf());if(this.scale==s.SCALE.YEAR){var i=e.getFullYear()+Math.round(e.getMonth()/12);e.setFullYear(Math.round(i/this.step)*this.step),e.setMonth(0),e.setDate(0),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MONTH)e.getDate()>15?(e.setDate(1),e.setMonth(e.getMonth()+1)):e.setDate(1),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0);else if(this.scale==s.SCALE.DAY){switch(this.step){case 5:case 2:e.setHours(24*Math.round(e.getHours()/24));break;default:e.setHours(12*Math.round(e.getHours()/12))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.WEEKDAY){switch(this.step){case 5:case 2:e.setHours(12*Math.round(e.getHours()/12));break;default:e.setHours(6*Math.round(e.getHours()/6))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.HOUR){switch(this.step){case 4:e.setMinutes(60*Math.round(e.getMinutes()/60));break;default:e.setMinutes(30*Math.round(e.getMinutes()/30))}e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MINUTE){switch(this.step){case 15:case 10:e.setMinutes(5*Math.round(e.getMinutes()/5)),e.setSeconds(0);break;case 5:e.setSeconds(60*Math.round(e.getSeconds()/60));break;default:e.setSeconds(30*Math.round(e.getSeconds()/30))}e.setMilliseconds(0)}else if(this.scale==s.SCALE.SECOND)switch(this.step){case 15:case 10:e.setSeconds(5*Math.round(e.getSeconds()/5)),e.setMilliseconds(0);break;case 5:e.setMilliseconds(1e3*Math.round(e.getMilliseconds()/1e3));break;default:e.setMilliseconds(500*Math.round(e.getMilliseconds()/500))}else if(this.scale==s.SCALE.MILLISECOND){var o=this.step>5?this.step/2:1;e.setMilliseconds(Math.round(e.getMilliseconds()/o)*o)}return e},s.prototype.isMajor=function(){switch(this.scale){case s.SCALE.MILLISECOND:return 0==this.current.getMilliseconds();case s.SCALE.SECOND:return 0==this.current.getSeconds();case s.SCALE.MINUTE:return 0==this.current.getHours()&&0==this.current.getMinutes();case s.SCALE.HOUR:return 0==this.current.getHours();case s.SCALE.WEEKDAY:case s.SCALE.DAY:return 1==this.current.getDate();case s.SCALE.MONTH:return 0==this.current.getMonth();case s.SCALE.YEAR:return!1;default:return!1}},s.prototype.getLabelMinor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("SSS");case s.SCALE.SECOND:return o(t).format("s");case s.SCALE.MINUTE:return o(t).format("HH:mm");case s.SCALE.HOUR:return o(t).format("HH:mm");case s.SCALE.WEEKDAY:return o(t).format("ddd D");case s.SCALE.DAY:return o(t).format("D");case s.SCALE.MONTH:return o(t).format("MMM");case s.SCALE.YEAR:return o(t).format("YYYY");default:return""}},s.prototype.getLabelMajor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("HH:mm:ss");case s.SCALE.SECOND:return o(t).format("D MMMM HH:mm");case s.SCALE.MINUTE:case s.SCALE.HOUR:return o(t).format("ddd D MMMM");case s.SCALE.WEEKDAY:case s.SCALE.DAY:return o(t).format("MMMM YYYY");case s.SCALE.MONTH:return o(t).format("YYYY");case s.SCALE.YEAR:return"";default:return""}},t.exports=s},function(t){function e(){this.options=null,this.props=null}e.prototype.setOptions=function(t){t&&util.extend(this.options,t)},e.prototype.redraw=function(){return!1},e.prototype.destroy=function(){},e.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=e},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCurrentTime:!0},this.options=o.extend({},this.defaultOptions),this._create(),this.setOptions(e)}var o=i(1),n=i(18);s.prototype=new n,s.prototype._create=function(){var t=document.createElement("div");t.className="currenttime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},s.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},s.prototype.setOptions=function(t){t&&o.selectiveExtend(["showCurrentTime"],this.options,t)},s.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=new Date,i=this.body.util.toScreen(e);this.bar.style.left=i+"px",this.bar.title="Current time: "+e}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},s.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,s=1/i/10;30>s&&(s=30),s>1e3&&(s=1e3),e.redraw(),e.currentTimeTimer=setTimeout(t,s)}var e=this;t()},s.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1},this.options=n.extend({},this.defaultOptions),this.customTime=new Date,this.eventParams={},this._create(),this.setOptions(e)}var o=i(41),n=i(1),r=i(18);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime"],this.options,t)},s.prototype._create=function(){var t=document.createElement("div");t.className="customtime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t;var e=document.createElement("div");e.style.position="relative",e.style.top="0px",e.style.left="-10px",e.style.height="100%",e.style.width="20px",t.appendChild(e),this.hammer=o(t,{prevent_default:!0}),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this))},s.prototype.destroy=function(){this.options.showCustomTime=!1,this.redraw(),this.hammer.enable(!1),this.hammer=null,this.body=null},s.prototype.redraw=function(){if(this.options.showCustomTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime);this.bar.style.left=e+"px",this.bar.title="Time: "+this.customTime}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=new Date(t.valueOf()),this.redraw()},s.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},s.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation(),t.preventDefault()},s.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=t.gesture.deltaX,i=this.body.util.toScreen(this.eventParams.customTime)+e,s=this.body.util.toTime(i);this.setCustomTime(s),this.body.emitter.emit("timechange",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault()}},s.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault())},t.exports=s},function(t,e,i){function s(t,e,i){this.id=o.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!0,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0},this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{}},this.dom={},this.range={start:0,end:0},this.options=o.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.offsetHeight,this.stepPixels=25,this.stepPixelsForced=25,this.lineOffset=0,this.master=!0,this.svgElements={},this.groups={},this.amountOfGroups=0,this._create()}var o=i(1),n=i(2),r=i(18),a=i(14);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible"];o.selectiveExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),1==e&&this.dom.frame&&(this.hide(),this.show())}},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},s.prototype._redrawGroupIcons=function(){n.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=15,s=4,o=s+.5*i;t="left"==this.options.orientation?s:this.width-e-s;for(var r in this.groups)this.groups.hasOwnProperty(r)&&(this.groups[r].drawIcon(t,o,this.svgElements,this.svg,e,i),o+=i+s);n.cleanupElements(this.svgElements)},s.prototype.show=function(){this.dom.frame.parentNode||("left"==this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},s.prototype.setRange=function(t,e){this.range.start=t,this.range.end=e},s.prototype.redraw=function(){var t=!1;if(0==this.amountOfGroups)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=1==this.options.visible?Number((""+this.options.width).replace("px","")):0;var e=this.props,i=this.dom.frame;i.className="dataaxis",this._calculateCharSize();var s=this.options.orientation,o=this.options.showMinorLabels,n=this.options.showMajorLabels;e.minorLabelHeight=o?e.minorCharHeight:0,e.majorLabelHeight=n?e.majorCharHeight:0,e.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,e.minorLineHeight=1,e.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,e.majorLineHeight=1,"left"==s?(i.style.top="0",i.style.left="0",i.style.bottom="",i.style.width=this.width+"px",i.style.height=this.height+"px"):(i.style.top="",i.style.bottom="0",i.style.left="0",i.style.width=this.width+"px",i.style.height=this.height+"px"),t=this._redrawLabels(),1==this.options.icons&&this._redrawGroupIcons()}return t},s.prototype._redrawLabels=function(){n.prepareElements(this.DOMelements);var t=this.options.orientation,e=this.master?this.props.majorCharHeight||10:this.stepPixelsForced,i=new a(this.range.start,this.range.end,e,this.dom.frame.offsetHeight);this.step=i,i.first();var s=this.dom.frame.offsetHeight/(i.marginRange/i.step+1);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.height/s-o);for(var h=0;.5*r>h;h++)i.previous();o=this.height/s}this.valueAtZero=i.marginEnd;var d=0,l=1;i.next(),this.maxLabelSize=0;for(var c=0;l=0&&this._redrawLabel(c-2,i.getCurrent(),t,"yAxis major",this.props.majorCharHeight),this._redrawLine(c,t,"grid horizontal major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(c,t,"grid horizontal minor",this.options.minorLinesOffset,this.props.minorLineWidth),i.next(),l++}this.conversionFactor=d/((o-1)*i.step);var u=1==this.options.icons?this.options.iconWidth+this.options.labelOffsetX+15:this.options.labelOffsetX+15;return this.maxLabelSize>this.width-u&&1==this.options.visible?(this.width=this.maxLabelSize+u,this.options.width=this.width+"px",n.cleanupElements(this.DOMelements),this.redraw(),!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+u),this.options.width=this.width+"px",n.cleanupElements(this.DOMelements),this.redraw(),!0):(n.cleanupElements(this.DOMelements),!1)},s.prototype._redrawLabel=function(t,e,i,s,o){var r=n.getDOMElement("div",this.DOMelements,this.dom.frame);r.className=s,r.innerHTML=e,"left"==i?(r.style.left="-"+this.options.labelOffsetX+"px",r.style.textAlign="right"):(r.style.right="-"+this.options.labelOffsetX+"px",r.style.textAlign="left"),r.style.top=t-.5*o+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSizee.axis){var c=d-e.axis;l-=c,o.forEach(h,function(t){t.top-=c})}a=l+e.item.vertical/2}else a=e.axis+e.item.vertical;a=Math.max(a,this.props.label.height);var p=this.dom.foreground;this.top=p.offsetTop,this.left=p.offsetLeft,this.width=p.offsetWidth,s=o.updateProperty(this,"height",a)||s,s=o.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||s,s=o.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||s,this.dom.background.style.height=a+"px",this.dom.foreground.style.height=a+"px",this.dom.label.style.height=a+"px";for(var u=0,m=this.visibleItems.length;m>u;u++){var g=this.visibleItems[u];g.repositionY()}return s},s.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},s.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var s=this.dom.axis;s.parentNode&&s.parentNode.removeChild(s)},s.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),t instanceof r&&-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},s.prototype.remove=function(t){delete this.items[t.id],t.setParent(this.itemSet);var e=this.visibleItems.indexOf(t);-1!=e&&this.visibleItems.splice(e,1)},s.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},s.prototype.order=function(){var t=o.toArray(this.items);this.orderedItems.byStart=t,this.orderedItems.byEnd=this._constructByEndArray(t),n.orderByStart(this.orderedItems.byStart),n.orderByEnd(this.orderedItems.byEnd)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0)for(n=0;n=0&&!this._checkIfInvisible(t.byStart[n],r,i);n--);for(n=s+1;n=0&&!this._checkIfInvisible(t.byEnd[n],r,i);n--);for(n=a+1;ne;e++)s=this.selection[e],o=this.items[s],o&&o.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)s=t[e],o=this.items[s],o&&(this.selection.push(s),o.select())}},s.prototype.getSelection=function(){return this.selection.concat([])},s.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),s=[];for(var o in this.groups)if(this.groups.hasOwnProperty(o))for(var n=this.groups[o],r=n.visibleItems,a=0;ae&&s.push(h.id)}return s},s.prototype._deselect=function(t){for(var e=this.selection,i=0,s=e.length;s>i;i++)if(e[i]==t){e.splice(i,1);break}},s.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=n.option.asSize,s=this.options,o=s.orientation,r=!1,a=this.dom.frame,h=s.editable.updateTime||s.editable.updateGroup;a.className="itemset"+(h?" editable":""),r=this._orderGroups()||r;var d=e.end-e.start,l=d!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;l&&(this.stackDirty=!0),this.lastVisibleInterval=d,this.props.lastWidth=this.props.width;var c=this.stackDirty,p=this._firstGroup(),u={item:t.item,axis:t.axis},m={item:t.item,axis:t.item.vertical/2},g=0,f=t.axis+t.item.vertical;return n.forEach(this.groups,function(t){var i=t==p?u:m,s=t.redraw(e,i,c);r=s||r,g+=t.height}),g=Math.max(g,f),this.stackDirty=!1,a.style.height=i(g),this.props.top=a.offsetTop,this.props.left=a.offsetLeft,this.props.width=a.offsetWidth,this.props.height=g,this.dom.axis.style.top=i("top"==o?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.dom.axis.style.left=this.body.domProps.border.left+"px",r=this._isResized()||r},s.prototype._firstGroup=function(){var t="top"==this.options.orientation?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[u];return i||null},s.prototype._updateUngrouped=function(){var t=this.groups[u];if(this.groupsData)t&&(t.hide(),delete this.groups[u]);else if(!t){var e=null,i=null;t=new d(e,i,this),this.groups[u]=t;for(var s in this.items)this.items.hasOwnProperty(s)&&t.add(this.items[s]);t.show()}},s.prototype.getLabelSet=function(){return this.dom.labelSet},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(n.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var o=this.id;n.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,o)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}},s.prototype.getItems=function(){return this.itemsData},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(n.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;n.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("change")},s.prototype.getGroups=function(){return this.groupsData},s.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},s.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i=e.itemsData.get(t,e.itemOptions),o=e.items[t],n=i.type||e.options.type||(i.end?"range":"box"),r=s.types[n];if(o&&(r&&o instanceof r?e._updateItem(o,i):(e._removeItem(o),o=null)),!o){if(!r)throw new TypeError("rangeoverflow"==n?'Item type "rangeoverflow" is deprecated. Use css styling instead: .vis.timeline .item.range .content {overflow: visible;}':'Unknown item type "'+n+'"');o=new r(i,e.conversion,e.options),o.id=t,e._addItem(o)}}),this._order(),this.stackDirty=!0,this.body.emitter.emit("change")},s.prototype._onAdd=s.prototype._onUpdate,s.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var s=i.items[t];s&&(e++,i._removeItem(s))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("change"))},s.prototype._order=function(){n.forEach(this.groups,function(t){t.order()})},s.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},s.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),s=e.groups[t];if(s)s.setData(i);else{if(t==u)throw new Error("Illegal group id. "+t+" is a reserved id.");var o=Object.create(e.options);n.extend(o,{height:null}),s=new d(t,i,e),e.groups[t]=s;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&s.add(a)}s.order(),s.show()}}),this.body.emitter.emit("change")},s.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("change")},s.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!n.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},s.prototype._addItem=function(t){this.items[t.id]=t;var e=this.groupsData?t.data.group:u,i=this.groups[e];i&&i.add(t)},s.prototype._updateItem=function(t,e){var i=t.data.group;if(t.data=e,t.displayed&&t.redraw(),i!=t.data.group){var s=this.groups[i];s&&s.remove(t);var o=this.groupsData?t.data.group:u,n=this.groups[o];n&&n.add(t)}},s.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1);var i=this.groupsData?t.data.group:u,s=this.groups[i];s&&s.remove(t)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0||o.length>0)&&this.body.emitter.emit("select",{items:this.getSelection()}),t.stopPropagation()}},s.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.body.util.snap||null,o=s.itemFromTarget(t);if(o){var r=e.itemsData.get(o.id);this.options.onUpdate(r,function(t){t&&e.itemsData.update(t)})}else{var a=n.getAbsoluteLeft(this.dom.frame),h=t.gesture.center.pageX-a,d=this.body.util.toTime(h),l={start:i?i(d):d,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(h+this.props.width/5);l.end=i?i(c):c}l[this.itemsData.fieldId]=n.randomUUID();var p=s.groupFromTarget(t);p&&(l.group=p.groupId),this.options.onAdd(l,function(t){t&&e.itemsData.add(l)})}}},s.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e,i=s.itemFromTarget(t);if(i){e=this.getSelection();var o=e.indexOf(i.id);-1==o?e.push(i.id):e.splice(o,1),this.setSelection(e),this.body.emitter.emit("select",{items:this.getSelection()}),t.stopPropagation()}}},s.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},s.groupFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-group"))return e["timeline-group"];e=e.parentNode}return null},s.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},t.exports=s},function(t,e,i){function s(t,e,i){this.body=t,this.defaultOptions={enabled:!0,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-left"}},this.side=i,this.options=o.extend({},this.defaultOptions),this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.setOptions(e)}var o=i(1),n=i(2),r=i(18);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="legendText",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];o.selectiveDeepExtend(e,this.options,t)},s.prototype.redraw=function(){if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled)this.hide();else{this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position?(this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom=""):(this.dom.frame.style.bottom=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""),0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var t="";for(var e in this.groups)this.groups.hasOwnProperty(e)&&(t+=this.groups[e].content+"
");this.dom.textArea.innerHTML=t,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},s.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){n.prepareElements(this.svgElements);var t=window.getComputedStyle(this.dom.frame).paddingTop,e=Number(t.replace("px","")),i=e,s=this.options.iconSize,o=.75*this.options.iconSize,r=e+.5*o+3;this.svg.style.width=s+5+e+"px";for(var a in this.groups)this.groups.hasOwnProperty(a)&&(this.groups[a].drawIcon(i,r,this.svgElements,this.svg,s,o),r+=o+this.options.iconSpacing);n.cleanupElements(this.svgElements)}},t.exports=s},function(t,e,i){function s(t,e){this.id=o.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,align:"center"},catmullRom:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={};var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechange",function(){if(0!=i.lastStart){var t=i.body.range.start-i.lastStart,e=i.body.range.end-i.body.range.start;if(0!=i.width){var s=i.width/e,o=t*s;i.svg.style.left=-i.width-o+"px"}}}),this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=o.option.asSize(-i.width),i._updateGraph.apply(i)}),this._create(),this.body.emitter.emit("change")}var o=i(1),n=i(2),r=i(3),a=i(4),h=i(18),d=i(21),l=i(22),c=i(25),p="__ungrouped__";s.prototype=new h,s.prototype._create=function(){var t=document.createElement("div");t.className="LineGraph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new d(this.body,this.options.dataAxis,this.svg),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left"),this.legendRight=new c(this.body,this.options.legend,"right"),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort"];o.selectiveDeepExtend(e,this.options,t),o.mergeOptions(this.options,t,"catmullRom"),o.mergeOptions(this.options,t,"drawPoints"),o.mergeOptions(this.options,t,"shaded"),o.mergeOptions(this.options,t,"legend"),t.catmullRom&&"object"==typeof t.catmullRom&&t.catmullRom.parametrization&&("uniform"==t.catmullRom.parametrization?this.options.catmullRom.alpha=0:"chordal"==t.catmullRom.parametrization?this.options.catmullRom.alpha=1:(this.options.catmullRom.parametrization="centripetal",this.options.catmullRom.alpha=.5)),this.yAxisLeft&&void 0!==t.dataAxis&&(this.yAxisLeft.setOptions(this.options.dataAxis),this.yAxisRight.setOptions(this.options.dataAxis)),this.legendLeft&&void 0!==t.legend&&(this.legendLeft.setOptions(this.options.legend),this.legendRight.setOptions(this.options.legend)),this.groups.hasOwnProperty(p)&&this.groups[p].setOptions(t)}this.dom.frame&&this._updateGraph()},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(o.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;o.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e)}this._updateUngrouped(),this._updateGraph(),this.redraw()},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(o.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;o.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._onUpdate()},s.prototype._onUpdate=function(){this._updateUngrouped(),this._updateAllGroupData(),this._updateGraph(),this.redraw()},s.prototype._onAdd=function(t){this._onUpdate(t)},s.prototype._onRemove=function(t){this._onUpdate(t)},s.prototype._onUpdateGroups=function(t){for(var e=0;e0){for(s=0;su){e.push(f);break}e.push(f)}}else for(var g=0;gp&&f.x0){for(var p=0;pi?i:a,d=s>d?s:d):(r=!0,h=h>i?i:h,l=s>l?s:l)}1==n&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}return o=this._toggleAxisVisiblity(n,this.yAxisLeft)||o,o=this._toggleAxisVisiblity(r,this.yAxisRight)||o,1==r&&1==n?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!n,0==this.yAxisRight.master?(1==r&&(this.yAxisLeft.lineOffset=this.yAxisRight.width),o=this.yAxisLeft.redraw()||o,this.yAxisRight.stepPixelsForced=this.yAxisLeft.stepPixels,o=this.yAxisRight.redraw()||o):o=this.yAxisRight.redraw()||o,o},s.prototype._toggleAxisVisiblity=function(t,e){var i=!1; -return 0==t?e.dom.frame.parentNode&&(e.hide(),i=!0):e.dom.frame.parentNode||(e.show(),i=!0),i},s.prototype._drawBarGraph=function(t,e){if(null!=t&&t.length>0){var i,s=.1*e.options.barChart.width,o=0,r=e.options.barChart.width;"left"==e.options.barChart.align?o-=.5*r:"right"==e.options.barChart.align&&(o+=.5*r);for(var a=0;a0&&(i=Math.min(i,Math.abs(t[a-1].x-t[a].x))),r>i&&(r=s>i?s:i),n.drawBar(t[a].x+o,t[a].y,r,e.zeroPosition-t[a].y,e.className+" bar",this.svgElements,this.svg);1==e.options.drawPoints.enabled&&this._drawPoints(t,e,this.svgElements,this.svg,o)}},s.prototype._drawLineGraph=function(t,e){if(null!=t&&t.length>0){var i,s,o=Number(this.svg.style.height.replace("px",""));if(i=n.getSVGElement("path",this.svgElements,this.svg),i.setAttributeNS(null,"class",e.className),s=1==e.options.catmullRom.enabled?this._catmullRom(t,e):this._linear(t),1==e.options.shaded.enabled){var r,a=n.getSVGElement("path",this.svgElements,this.svg);r="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+s+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+o+" "+s+"L"+t[t.length-1].x+","+o,a.setAttributeNS(null,"class",e.className+" fill"),a.setAttributeNS(null,"d",r)}i.setAttributeNS(null,"d","M"+s),1==e.options.drawPoints.enabled&&this._drawPoints(t,e,this.svgElements,this.svg)}},s.prototype._drawPoints=function(t,e,i,s,o){void 0===o&&(o=0);for(var r=0;rp;p+=r)i=n(t[p].x)+this.width-1,s=t[p].y,o.push({x:i,y:s}),h=h>s?s:h,d=s>d?s:d;return{min:h,max:d,data:o}},s.prototype._convertYvalues=function(t,e){var i,s,o=[],n=this.yAxisLeft,r=Number(this.svg.style.height.replace("px",""));"right"==e.options.yAxisOrientation&&(n=this.yAxisRight);for(var a=0;al;l++)e=0==l?t[0]:t[l-1],i=t[l],s=t[l+1],o=d>l+2?t[l+2]:s,n={x:(-e.x+6*i.x+s.x)*h,y:(-e.y+6*i.y+s.y)*h},r={x:(i.x+6*s.x-o.x)*h,y:(i.y+6*s.y-o.y)*h},a+="C"+n.x+","+n.y+" "+r.x+","+r.y+" "+s.x+","+s.y+" ";return a},s.prototype._catmullRom=function(t,e){var i=e.options.catmullRom.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var s,o,n,r,a,h,d,l,c,p,u,m,g,f,v,y,b,_,x,w=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",S=t.length,M=0;S-1>M;M++)s=0==M?t[0]:t[M-1],o=t[M],n=t[M+1],r=S>M+2?t[M+2]:n,d=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2)),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2)),c=Math.sqrt(Math.pow(n.x-r.x,2)+Math.pow(n.y-r.y,2)),f=Math.pow(c,i),y=Math.pow(c,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),x=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*x*v+b,u=2*y+3*f*v+b,m=3*x*(x+v),m>0&&(m=1/m),g=3*f*(f+v),g>0&&(g=1/g),a={x:(-b*s.x+p*o.x+_*n.x)*m,y:(-b*s.y+p*o.y+_*n.y)*m},h={x:(y*o.x+u*n.x-b*r.x)*g,y:(y*o.y+u*n.y-b*r.y)*g},0==a.x&&0==a.y&&(a=o),0==h.x&&0==h.y&&(h=n),w+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+n.x+","+n.y+" ";return w},s.prototype._linear=function(t){for(var e="",i=0;id;){d++;var l=n.getCurrent(),c=this.body.util.toScreen(l),p=n.isMajor();this.options.showMinorLabels&&this._repaintMinorText(c,n.getLabelMinor(),t),p&&this.options.showMajorLabels?(c>0&&(void 0==h&&(h=c),this._repaintMajorText(c,n.getLabelMajor(),t)),this._repaintMajorLine(c,t)):this._repaintMinorLine(c,t),n.next()}if(this.options.showMajorLabels){var u=this.body.util.toTime(0),m=n.getLabelMajor(u),g=m.length*(this.props.majorCharWidth||10)+10;(void 0==h||h>g)&&this._repaintMajorText(0,m,t)}o.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},s.prototype._repaintMinorText=function(t,e,i){var s=this.dom.redundant.minorTexts.shift();if(!s){var o=document.createTextNode("");s=document.createElement("div"),s.appendChild(o),s.className="text minor",this.dom.foreground.appendChild(s)}this.dom.minorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?this.props.majorLabelHeight+"px":"0",s.style.left=t+"px"},s.prototype._repaintMajorText=function(t,e,i){var s=this.dom.redundant.majorTexts.shift();if(!s){var o=document.createTextNode(e);s=document.createElement("div"),s.className="text major",s.appendChild(o),this.dom.foreground.appendChild(s)}this.dom.majorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?"0":this.props.minorLabelHeight+"px",s.style.left=t+"px"},s.prototype._repaintMinorLine=function(t,e){var i=this.dom.redundant.minorLines.shift();i||(i=document.createElement("div"),i.className="grid vertical minor",this.dom.background.appendChild(i)),this.dom.minorLines.push(i);var s=this.props;i.style.top="top"==e?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",i.style.height=s.minorLineHeight+"px",i.style.left=t-s.minorLineWidth/2+"px"},s.prototype._repaintMajorLine=function(t,e){var i=this.dom.redundant.majorLines.shift();i||(i=document.createElement("DIV"),i.className="grid vertical major",this.dom.background.appendChild(i)),this.dom.majorLines.push(i);var s=this.props;i.style.top="top"==e?"0":this.body.domProps.top.height+"px",i.style.left=t-s.majorLineWidth/2+"px",i.style.height=s.majorLineHeight+"px"},s.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="text minor measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="text minor measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth},s.prototype.snap=function(t){return this.step.snap(t)},t.exports=s},function(t,e,i){function s(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.dirty=!0,this.top=null,this.left=null,this.width=null,this.height=null}var o=i(41);s.prototype.select=function(){this.selected=!0,this.displayed&&this.redraw()},s.prototype.unselect=function(){this.selected=!1,this.displayed&&this.redraw()},s.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},s.prototype.isVisible=function(){return!1},s.prototype.show=function(){return!1},s.prototype.hide=function(){return!1},s.prototype.redraw=function(){},s.prototype.repositionX=function(){},s.prototype.repositionY=function(){},s.prototype._repaintDeleteButton=function(t){if(this.selected&&this.options.editable.remove&&!this.dom.deleteButton){var e=this,i=document.createElement("div");i.className="delete",i.title="Delete this item",o(i,{preventDefault:!0}).on("tap",function(t){e.parent.removeFromDataSet(e),t.stopPropagation()}),t.appendChild(i),this.dom.deleteButton=i}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);o.call(this,t,e,i)}var o=i(28);s.prototype=new o(null,null,null),s.prototype.isVisible=function(t){var e=(t.end-t.start)/4;return this.data.start>t.start-e&&this.data.startt.start-e&&this.data.startt.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),t.box["timeline-item"]=this),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.foreground;if(!e)throw new Error("Cannot redraw time axis: parent has no foreground container element");e.appendChild(t.box)}if(this.displayed=!0,this.data.content!=this.content){if(this.content=this.data.content,this.content instanceof Element)t.content.innerHTML="",t.content.appendChild(this.content);else{if(void 0==this.data.content)throw new Error('Property "content" missing in item '+this.data.id);t.content.innerHTML=this.content}this.dirty=!0}this.data.title!=this.title&&(t.box.title=this.data.title,this.title=this.data.title);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");this.className!=i&&(this.className=i,t.box.className=this.baseClassName+i,this.dirty=!0),this.dirty&&(this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dirty=!1),this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},s.prototype.show=function(){this.displayed||this.redraw()},s.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.top=null,this.left=null,this.displayed=!1}},s.prototype.repositionX=function(){var t,e=this.props,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end),n=this.options.padding;-i>s&&(s=-i),o>2*i&&(o=2*i);var r=Math.max(o-s,1);this.overflow?(t=Math.max(-s,0),this.left=s,this.width=r+this.props.content.width):(t=0>s?Math.min(-s,o-s-e.content.width-2*n):0,this.left=s,this.width=r),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.dom.content.style.left=t+"px"},s.prototype.repositionY=function(){var t=this.options.orientation,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},s.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="drag-left",t.dragLeftItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragLeft=t}else!this.selected&&this.dom.dragLeft&&(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},s.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="drag-right",t.dragRightItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragRight=t}else!this.selected&&this.dom.dragRight&&(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this._initializeMixinLoaders(),this.containerElement=t,this.width="100%",this.height="100%",this.renderRefreshRate=60,this.renderTimestep=1e3/this.renderRefreshRate,this.renderTime=.5*this.renderTimestep,this.maxPhysicsTicksPerRender=3,this.physicsDiscreteStepsize=.5,this.stabilize=!0,this.selectable=!0,this.initializing=!0,this.triggerFunctions={add:null,edit:null,editEdge:null,connect:null,del:null},this.constants={nodes:{radiusMin:10,radiusMax:30,radius:10,shape:"ellipse",image:void 0,widthMin:16,widthMax:64,fixed:!1,fontColor:"black",fontSize:14,fontFace:"verdana",level:-1,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},borderColor:"#2B7CE9",backgroundColor:"#97C2FC",highlightColor:"#D2E5FF",group:void 0,borderWidth:1},edges:{widthMin:1,widthMax:15,width:1,widthSelectionMultiplier:2,hoverWidth:1.5,style:"line",color:{color:"#848484",highlight:"#848484",hover:"#848484"},fontColor:"#343434",fontSize:14,fontFace:"arial",fontFill:"white",arrowScaleFactor:1,dash:{length:10,gap:5,altLength:void 0},inheritColor:"from"},configurePhysics:!1,physics:{barnesHut:{enabled:!0,theta:1/.6,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09},repulsion:{centralGravity:0,springLength:200,springConstant:.05,nodeDistance:100,damping:.09},hierarchicalRepulsion:{enabled:!1,centralGravity:0,springLength:100,springConstant:.01,nodeDistance:150,damping:.09},damping:null,centralGravity:null,springLength:null,springConstant:null},clustering:{enabled:!1,initialMaxNodes:100,clusterThreshold:500,reduceToNodes:300,chainThreshold:.4,clusterEdgeThreshold:20,sectorThreshold:100,screenSizeThreshold:.2,fontSizeMultiplier:4,maxFontSize:1e3,forceAmplification:.1,distanceAmplification:.1,edgeGrowth:20,nodeScaling:{width:1,height:1,radius:1},maxNodeSizeIncrements:600,activeAreaBoxSize:80,clusterLevelDifference:2},navigation:{enabled:!1},keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02}},dataManipulation:{enabled:!1,initiallyVisible:!1},hierarchicalLayout:{enabled:!1,levelSeparation:150,nodeSpacing:100,direction:"UD"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},dynamicSmoothCurves:!0,maxVelocity:30,minVelocity:.1,stabilizationIterations:1e3,labels:{add:"Add Node",edit:"Edit",link:"Add Link",del:"Delete selected",editNode:"Edit Node",editEdge:"Edit Edge",back:"Back",addDescription:"Click in an empty space to place a new node.",linkDescription:"Click on a node and drag the edge to another node to connect them.",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",addError:"The function for add does not support two arguments (data,callback).",linkError:"The function for connect does not support two arguments (data,callback).",editError:"The function for edit does not support two arguments (data, callback).",editBoundError:"No edit function has been bound to this button.",deleteError:"The function for delete does not support two arguments (data, callback).",deleteClusterError:"Clusters cannot be deleted."},tooltip:{delay:300,fontColor:"black",fontSize:14,fontFace:"verdana",color:{border:"#666",background:"#FFFFC6"}},dragNetwork:!0,dragNodes:!0,zoomable:!0,hover:!1,hideEdgesOnDrag:!1,hideNodesOnDrag:!1},this.hoverObj={nodes:{},edges:{}},this.controlNodesActive=!1;var o=this;this.groups=new u,this.images=new m,this.images.setOnloadCallback(function(){o._redraw()}),this.xIncrement=0,this.yIncrement=0,this.zoomIncrement=0,this._loadPhysicsSystem(),this._create(),this._loadSectorSystem(),this._loadClusterSystem(),this._loadSelectionSystem(),this._loadHierarchySystem(),this._setTranslation(this.frame.clientWidth/2,this.frame.clientHeight/2),this._setScale(1),this.setOptions(i),this.freezeSimulation=!1,this.cachedFunctions={},this.calculationNodes={},this.calculationNodeIndices=[],this.nodeIndices=[],this.nodes={},this.edges={},this.canvasTopLeft={x:0,y:0},this.canvasBottomRight={x:0,y:0},this.pointerPosition={x:0,y:0},this.areaCenter={},this.scale=1,this.previousScale=this.scale,this.nodesData=null,this.edgesData=null,this.nodesListeners={add:function(t,e){o._addNodes(e.items),o.start()},update:function(t,e){o._updateNodes(e.items),o.start()},remove:function(t,e){o._removeNodes(e.items),o.start()}},this.edgesListeners={add:function(t,e){o._addEdges(e.items),o.start()},update:function(t,e){o._updateEdges(e.items),o.start()},remove:function(t,e){o._removeEdges(e.items),o.start()}},this.moving=!0,this.timer=void 0,this.setData(e,this.constants.clustering.enabled||this.constants.hierarchicalLayout.enabled),this.initializing=!1,1==this.constants.hierarchicalLayout.enabled?this._setupHierarchicalLayout():0==this.stabilize&&this.zoomExtent(!0,this.constants.clustering.enabled),this.constants.clustering.enabled&&this.startWithClustering()}var o=i(45),n=i(41),r=i(47),a=i(1),h=i(42),d=i(3),l=i(4),c=i(38),p=i(39),u=i(34),m=i(35),g=i(36),f=i(33),v=i(37),y=i(44);i(43),o(s.prototype),s.prototype._getScriptPath=function(){for(var t=document.getElementsByTagName("script"),e=0;et.x&&(s=t.x),ot.y&&(e=t.y),i=this.constants.clustering.initialMaxNodes?49.07548/(o+142.05338)+91444e-8:12.662/(o+7.4147)+.0964822:1==this.constants.clustering.enabled&&o>=this.constants.clustering.initialMaxNodes?77.5271985/(o+187.266146)+476710517e-13:30.5062972/(o+19.93597763)+.08413486;var n=Math.min(this.frame.canvas.clientWidth/600,this.frame.canvas.clientHeight/600);i*=n}else{var r=1.1*(Math.abs(s.minX)+Math.abs(s.maxX)),a=1.1*(Math.abs(s.minY)+Math.abs(s.maxY)),h=this.frame.canvas.clientWidth/r,d=this.frame.canvas.clientHeight/a;i=d>=h?h:d}i>1&&(i=1),this._setScale(i),this._centerNetwork(s),0==e&&(this.moving=!0,this.start())},s.prototype._updateNodeIndexList=function(){this._clearNodeIndexList();for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodeIndices.push(t)},s.prototype.setData=function(t,e){if(void 0===e&&(e=!1),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){if(t&&t.dot){var i=c.DOTToGraph(t.dot);return void this.setData(i)}}else if(t&&t.gephi){if(t&&t.gephi){var s=p.parseGephi(t.gephi);return void this.setData(s)}}else this._setNodes(t&&t.nodes),this._setEdges(t&&t.edges);if(this._putDataInSector(),!e)if(this.stabilize){var o=this;setTimeout(function(){o._stabilize(),o.start()},0)}else this.start()},s.prototype.setOptions=function(t){if(t){var e;if(void 0!==t.width&&(this.width=t.width),void 0!==t.height&&(this.height=t.height),void 0!==t.stabilize&&(this.stabilize=t.stabilize),void 0!==t.selectable&&(this.selectable=t.selectable),void 0!==t.freezeForStabilization&&(this.constants.freezeForStabilization=t.freezeForStabilization),void 0!==t.configurePhysics&&(this.constants.configurePhysics=t.configurePhysics),void 0!==t.stabilizationIterations&&(this.constants.stabilizationIterations=t.stabilizationIterations),void 0!==t.dragNetwork&&(this.constants.dragNetwork=t.dragNetwork),void 0!==t.dragNodes&&(this.constants.dragNodes=t.dragNodes),void 0!==t.zoomable&&(this.constants.zoomable=t.zoomable),void 0!==t.hover&&(this.constants.hover=t.hover),void 0!==t.hideEdgesOnDrag&&(this.constants.hideEdgesOnDrag=t.hideEdgesOnDrag),void 0!==t.hideNodesOnDrag&&(this.constants.hideNodesOnDrag=t.hideNodesOnDrag),void 0!==t.dragGraph)throw new Error("Option dragGraph is renamed to dragNetwork");if(void 0!==t.labels)for(e in t.labels)t.labels.hasOwnProperty(e)&&(this.constants.labels[e]=t.labels[e]);if(t.onAdd&&(this.triggerFunctions.add=t.onAdd),t.onEdit&&(this.triggerFunctions.edit=t.onEdit),t.onEditEdge&&(this.triggerFunctions.editEdge=t.onEditEdge),t.onConnect&&(this.triggerFunctions.connect=t.onConnect),t.onDelete&&(this.triggerFunctions.del=t.onDelete),t.physics){if(t.physics.barnesHut){this.constants.physics.barnesHut.enabled=!0;for(e in t.physics.barnesHut)t.physics.barnesHut.hasOwnProperty(e)&&(this.constants.physics.barnesHut[e]=t.physics.barnesHut[e])}if(t.physics.repulsion){this.constants.physics.barnesHut.enabled=!1;for(e in t.physics.repulsion)t.physics.repulsion.hasOwnProperty(e)&&(this.constants.physics.repulsion[e]=t.physics.repulsion[e])}if(t.physics.hierarchicalRepulsion){this.constants.hierarchicalLayout.enabled=!0,this.constants.physics.hierarchicalRepulsion.enabled=!0,this.constants.physics.barnesHut.enabled=!1;for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnProperty(e)&&(this.constants.physics.hierarchicalRepulsion[e]=t.physics.hierarchicalRepulsion[e])}}if(void 0!==t.smoothCurves)if("boolean"==typeof t.smoothCurves)this.constants.smoothCurves.enabled=t.smoothCurves;else{this.constants.smoothCurves.enabled=!0;for(e in t.smoothCurves)t.smoothCurves.hasOwnProperty(e)&&(this.constants.smoothCurves[e]=t.smoothCurves[e])}if(t.hierarchicalLayout){this.constants.hierarchicalLayout.enabled=!0;for(e in t.hierarchicalLayout)t.hierarchicalLayout.hasOwnProperty(e)&&(this.constants.hierarchicalLayout[e]=t.hierarchicalLayout[e])}else void 0!==t.hierarchicalLayout&&(this.constants.hierarchicalLayout.enabled=!1);if(t.clustering){this.constants.clustering.enabled=!0;for(e in t.clustering)t.clustering.hasOwnProperty(e)&&(this.constants.clustering[e]=t.clustering[e])}else void 0!==t.clustering&&(this.constants.clustering.enabled=!1);if(t.navigation){this.constants.navigation.enabled=!0;for(e in t.navigation)t.navigation.hasOwnProperty(e)&&(this.constants.navigation[e]=t.navigation[e])}else void 0!==t.navigation&&(this.constants.navigation.enabled=!1);if(t.keyboard){this.constants.keyboard.enabled=!0;for(e in t.keyboard)t.keyboard.hasOwnProperty(e)&&(this.constants.keyboard[e]=t.keyboard[e])}else void 0!==t.keyboard&&(this.constants.keyboard.enabled=!1);if(t.dataManipulation){this.constants.dataManipulation.enabled=!0;for(e in t.dataManipulation)t.dataManipulation.hasOwnProperty(e)&&(this.constants.dataManipulation[e]=t.dataManipulation[e]);this.editMode=this.constants.dataManipulation.initiallyVisible}else void 0!==t.dataManipulation&&(this.constants.dataManipulation.enabled=!1);if(t.edges){for(e in t.edges)t.edges.hasOwnProperty(e)&&"object"!=typeof t.edges[e]&&(this.constants.edges[e]=t.edges[e]);void 0!==t.edges.color&&(a.isString(t.edges.color)?(this.constants.edges.color={},this.constants.edges.color.color=t.edges.color,this.constants.edges.color.highlight=t.edges.color,this.constants.edges.color.hover=t.edges.color):(void 0!==t.edges.color.color&&(this.constants.edges.color.color=t.edges.color.color),void 0!==t.edges.color.highlight&&(this.constants.edges.color.highlight=t.edges.color.highlight),void 0!==t.edges.color.hover&&(this.constants.edges.color.hover=t.edges.color.hover))),t.edges.fontColor||void 0!==t.edges.color&&(a.isString(t.edges.color)?this.constants.edges.fontColor=t.edges.color:void 0!==t.edges.color.color&&(this.constants.edges.fontColor=t.edges.color.color)),t.edges.dash&&(void 0!==t.edges.dash.length&&(this.constants.edges.dash.length=t.edges.dash.length),void 0!==t.edges.dash.gap&&(this.constants.edges.dash.gap=t.edges.dash.gap),void 0!==t.edges.dash.altLength&&(this.constants.edges.dash.altLength=t.edges.dash.altLength)) -}if(t.nodes){for(e in t.nodes)t.nodes.hasOwnProperty(e)&&(this.constants.nodes[e]=t.nodes[e]);t.nodes.color&&(this.constants.nodes.color=a.parseColor(t.nodes.color))}if(t.groups)for(var i in t.groups)if(t.groups.hasOwnProperty(i)){var s=t.groups[i];this.groups.add(i,s)}if(t.tooltip){for(e in t.tooltip)t.tooltip.hasOwnProperty(e)&&(this.constants.tooltip[e]=t.tooltip[e]);t.tooltip.color&&(this.constants.tooltip.color=a.parseColor(t.tooltip.color))}}this._loadPhysicsSystem(),this._loadNavigationControls(),this._loadManipulationSystem(),this._configureSmoothCurves(),this._createKeyBinds(),this.setSize(this.width,this.height),this.moving=!0,this.start()},s.prototype._create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);if(this.frame=document.createElement("div"),this.frame.className="network-frame",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),!this.frame.canvas.getContext){var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}var e=this;this.drag={},this.pinch={},this.hammer=n(this.frame.canvas,{prevent_default:!0}),this.hammer.on("tap",e._onTap.bind(e)),this.hammer.on("doubletap",e._onDoubleTap.bind(e)),this.hammer.on("hold",e._onHold.bind(e)),this.hammer.on("pinch",e._onPinch.bind(e)),this.hammer.on("touch",e._onTouch.bind(e)),this.hammer.on("dragstart",e._onDragStart.bind(e)),this.hammer.on("drag",e._onDrag.bind(e)),this.hammer.on("dragend",e._onDragEnd.bind(e)),this.hammer.on("release",e._onRelease.bind(e)),this.hammer.on("mousewheel",e._onMouseWheel.bind(e)),this.hammer.on("DOMMouseScroll",e._onMouseWheel.bind(e)),this.hammer.on("mousemove",e._onMouseMoveTitle.bind(e)),this.containerElement.appendChild(this.frame)},s.prototype._createKeyBinds=function(){var t=this;this.mousetrap=r,this.mousetrap.reset(),1==this.constants.keyboard.enabled&&(this.mousetrap.bind("up",this._moveUp.bind(t),"keydown"),this.mousetrap.bind("up",this._yStopMoving.bind(t),"keyup"),this.mousetrap.bind("down",this._moveDown.bind(t),"keydown"),this.mousetrap.bind("down",this._yStopMoving.bind(t),"keyup"),this.mousetrap.bind("left",this._moveLeft.bind(t),"keydown"),this.mousetrap.bind("left",this._xStopMoving.bind(t),"keyup"),this.mousetrap.bind("right",this._moveRight.bind(t),"keydown"),this.mousetrap.bind("right",this._xStopMoving.bind(t),"keyup"),this.mousetrap.bind("=",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("=",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("-",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("-",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("[",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("[",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("]",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("]",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("pageup",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("pageup",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("pagedown",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("pagedown",this._stopZoom.bind(t),"keyup")),1==this.constants.dataManipulation.enabled&&(this.mousetrap.bind("escape",this._createManipulatorBar.bind(t)),this.mousetrap.bind("del",this._deleteSelected.bind(t)))},s.prototype._getPointer=function(t){return{x:t.pageX-a.getAbsoluteLeft(this.frame.canvas),y:t.pageY-a.getAbsoluteTop(this.frame.canvas)}},s.prototype._onTouch=function(t){this.drag.pointer=this._getPointer(t.gesture.center),this.drag.pinched=!1,this.pinch.scale=this._getScale(),this._handleTouch(this.drag.pointer)},s.prototype._onDragStart=function(){this._handleDragStart()},s.prototype._handleDragStart=function(){var t=this.drag,e=this._getNodeAt(t.pointer);if(t.dragging=!0,t.selection=[],t.translation=this._getTranslation(),t.nodeId=null,null!=e){t.nodeId=e.id,e.isSelected()||this._selectObject(e,!1);for(var i in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(i)){var s=this.selectionObj.nodes[i],o={id:s.id,node:s,x:s.x,y:s.y,xFixed:s.xFixed,yFixed:s.yFixed};s.xFixed=!0,s.yFixed=!0,t.selection.push(o)}}},s.prototype._onDrag=function(t){this._handleOnDrag(t)},s.prototype._handleOnDrag=function(t){if(!this.drag.pinched){var e=this._getPointer(t.gesture.center),i=this,s=this.drag,o=s.selection;if(o&&o.length&&1==this.constants.dragNodes){var n=e.x-s.pointer.x,r=e.y-s.pointer.y;o.forEach(function(t){var e=t.node;t.xFixed||(e.x=i._XconvertDOMtoCanvas(i._XconvertCanvasToDOM(t.x)+n)),t.yFixed||(e.y=i._YconvertDOMtoCanvas(i._YconvertCanvasToDOM(t.y)+r))}),this.moving||(this.moving=!0,this.start())}else if(1==this.constants.dragNetwork){var a=e.x-this.drag.pointer.x,h=e.y-this.drag.pointer.y;this._setTranslation(this.drag.translation.x+a,this.drag.translation.y+h),this._redraw()}}},s.prototype._onDragEnd=function(){this.drag.dragging=!1;var t=this.drag.selection;t&&t.length?(t.forEach(function(t){t.node.xFixed=t.xFixed,t.node.yFixed=t.yFixed}),this.moving=!0,this.start()):this._redraw()},s.prototype._onTap=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleTap(e)},s.prototype._onDoubleTap=function(t){var e=this._getPointer(t.gesture.center);this._handleDoubleTap(e)},s.prototype._onHold=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleOnHold(e)},s.prototype._onRelease=function(t){var e=this._getPointer(t.gesture.center);this._handleOnRelease(e)},s.prototype._onPinch=function(t){var e=this._getPointer(t.gesture.center);this.drag.pinched=!0,"scale"in this.pinch||(this.pinch.scale=1);var i=this.pinch.scale*t.gesture.scale;this._zoom(i,e)},s.prototype._zoom=function(t,e){if(1==this.constants.zoomable){var i=this._getScale();1e-5>t&&(t=1e-5),t>10&&(t=10);var s=null;void 0!==this.drag&&1==this.drag.dragging&&(s=this.DOMtoCanvas(this.drag.pointer));var o=this._getTranslation(),n=t/i,r=(1-n)*e.x+o.x*n,a=(1-n)*e.y+o.y*n;if(this.areaCenter={x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)},this._setScale(t),this._setTranslation(r,a),this.updateClustersDefault(),null!=s){var h=this.canvasToDOM(s);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}return this._redraw(),t>i?this.emit("zoom",{direction:"+"}):this.emit("zoom",{direction:"-"}),t}},s.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this._getScale(),s=e/10;0>e&&(s/=1-s),i*=1+s;var o=h.fakeGesture(this,t),n=this._getPointer(o.center);this._zoom(i,n)}t.preventDefault()},s.prototype._onMouseMoveTitle=function(t){var e=h.fakeGesture(this,t),i=this._getPointer(e.center);this.popupObj&&this._checkHidePopup(i);var s=this,o=function(){s._checkShowPopup(i)};if(this.popupTimer&&clearInterval(this.popupTimer),this.drag.dragging||(this.popupTimer=setTimeout(o,this.constants.tooltip.delay)),1==this.constants.hover){for(var n in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(n)&&(this.hoverObj.edges[n].hover=!1,delete this.hoverObj.edges[n]);var r=this._getNodeAt(i);null==r&&(r=this._getEdgeAt(i)),null!=r&&this._hoverObject(r);for(var a in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(a)&&(r instanceof g&&r.id!=a||r instanceof f||null==r)&&(this._blurObject(this.hoverObj.nodes[a]),delete this.hoverObj.nodes[a]);this.redraw()}},s.prototype._checkShowPopup=function(t){var e,i={left:this._XconvertDOMtoCanvas(t.x),top:this._YconvertDOMtoCanvas(t.y),right:this._XconvertDOMtoCanvas(t.x),bottom:this._YconvertDOMtoCanvas(t.y)},s=this.popupObj;if(void 0==this.popupObj){var o=this.nodes;for(e in o)if(o.hasOwnProperty(e)){var n=o[e];if(void 0!==n.getTitle()&&n.isOverlappingWith(i)){this.popupObj=n;break}}}if(void 0===this.popupObj){var r=this.edges;for(e in r)if(r.hasOwnProperty(e)){var a=r[e];if(a.connected&&void 0!==a.getTitle()&&a.isOverlappingWith(i)){this.popupObj=a;break}}}if(this.popupObj){if(this.popupObj!=s){var h=this;h.popup||(h.popup=new v(h.frame,h.constants.tooltip)),h.popup.setPosition(t.x-3,t.y-3),h.popup.setText(h.popupObj.getTitle()),h.popup.show()}}else this.popup&&this.popup.hide()},s.prototype._checkHidePopup=function(t){this.popupObj&&this._getNodeAt(t)||(this.popupObj=void 0,this.popup&&this.popup.hide())},s.prototype.setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,void 0!==this.manipulationDiv&&(this.manipulationDiv.style.width=this.frame.canvas.clientWidth+"px"),void 0!==this.navigationDivs&&void 0!==this.navigationDivs.wrapper&&(this.navigationDivs.wrapper.style.width=this.frame.canvas.clientWidth+"px",this.navigationDivs.wrapper.style.height=this.frame.canvas.clientHeight+"px"),this.emit("resize",{width:this.frame.canvas.width,height:this.frame.canvas.height})},s.prototype._setNodes=function(t){var e=this.nodesData;if(t instanceof d||t instanceof l)this.nodesData=t;else if(t instanceof Array)this.nodesData=new d,this.nodesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.nodesData=new d}if(e&&a.forEach(this.nodesListeners,function(t,i){e.off(i,t)}),this.nodes={},this.nodesData){var i=this;a.forEach(this.nodesListeners,function(t,e){i.nodesData.on(e,t)});var s=this.nodesData.getIds();this._addNodes(s)}this._updateSelection()},s.prototype._addNodes=function(t){for(var e,i=0,s=t.length;s>i;i++){e=t[i];var o=this.nodesData.get(e),n=new g(o,this.images,this.groups,this.constants);if(this.nodes[e]=n,!(0!=n.xFixed&&0!=n.yFixed||null!==n.x&&null!==n.y)){var r=1*t.length,a=2*Math.PI*Math.random();0==n.xFixed&&(n.x=r*Math.cos(a)),0==n.yFixed&&(n.y=r*Math.sin(a))}this.moving=!0}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateValueRange(this.nodes),this.updateLabels()},s.prototype._updateNodes=function(t){for(var e=this.nodes,i=this.nodesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n],a=i.get(n);r?r.setProperties(a,this.constants):(r=new g(properties,this.images,this.groups,this.constants),e[n]=r)}this.moving=!0,1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateNodeIndexList(),this._reconnectEdges(),this._updateValueRange(e)},s.prototype._removeNodes=function(t){for(var e=this.nodes,i=0,s=t.length;s>i;i++){var o=t[i];delete e[o]}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateSelection(),this._updateValueRange(e)},s.prototype._setEdges=function(t){var e=this.edgesData;if(t instanceof d||t instanceof l)this.edgesData=t;else if(t instanceof Array)this.edgesData=new d,this.edgesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.edgesData=new d}if(e&&a.forEach(this.edgesListeners,function(t,i){e.off(i,t)}),this.edges={},this.edgesData){var i=this;a.forEach(this.edgesListeners,function(t,e){i.edgesData.on(e,t)});var s=this.edgesData.getIds();this._addEdges(s)}this._reconnectEdges()},s.prototype._addEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n];r&&r.disconnect();var a=i.get(n,{showInternalIds:!0});e[n]=new f(a,this,this.constants)}this.moving=!0,this._updateValueRange(e),this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._updateEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=i.get(n),a=e[n];a?(a.disconnect(),a.setProperties(r,this.constants),a.connect()):(a=new f(r,this,this.constants),this.edges[n]=a)}this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this.moving=!0,this._updateValueRange(e)},s.prototype._removeEdges=function(t){for(var e=this.edges,i=0,s=t.length;s>i;i++){var o=t[i],n=e[o];n&&(null!=n.via&&delete this.sectors.support.nodes[n.via.id],n.disconnect(),delete e[o])}this.moving=!0,this._updateValueRange(e),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._reconnectEdges=function(){var t,e=this.nodes,i=this.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[]);for(t in i)if(i.hasOwnProperty(t)){var s=i[t];s.from=null,s.to=null,s.connect()}},s.prototype._updateValueRange=function(t){var e,i=void 0,s=void 0;for(e in t)if(t.hasOwnProperty(e)){var o=t[e].getValue();void 0!==o&&(i=void 0===i?o:Math.min(o,i),s=void 0===s?o:Math.max(o,s))}if(void 0!==i&&void 0!==s)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,s)},s.prototype.redraw=function(){this.setSize(this.width,this.height),this._redraw()},s.prototype._redraw=function(){var t=this.frame.canvas.getContext("2d"),e=this.frame.canvas.width,i=this.frame.canvas.height;t.clearRect(0,0,e,i),t.save(),t.translate(this.translation.x,this.translation.y),t.scale(this.scale,this.scale),this.canvasTopLeft={x:this._XconvertDOMtoCanvas(0),y:this._YconvertDOMtoCanvas(0)},this.canvasBottomRight={x:this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth),y:this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight)},this._doInAllSectors("_drawAllSectorNodes",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideEdgesOnDrag)&&this._doInAllSectors("_drawEdges",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideNodesOnDrag)&&this._doInAllSectors("_drawNodes",t,!1),1==this.controlNodesActive&&this._doInAllSectors("_drawControlNodes",t),t.restore()},s.prototype._setTranslation=function(t,e){void 0===this.translation&&(this.translation={x:0,y:0}),void 0!==t&&(this.translation.x=t),void 0!==e&&(this.translation.y=e),this.emit("viewChanged")},s.prototype._getTranslation=function(){return{x:this.translation.x,y:this.translation.y}},s.prototype._setScale=function(t){this.scale=t},s.prototype._getScale=function(){return this.scale},s.prototype._XconvertDOMtoCanvas=function(t){return(t-this.translation.x)/this.scale},s.prototype._XconvertCanvasToDOM=function(t){return t*this.scale+this.translation.x},s.prototype._YconvertDOMtoCanvas=function(t){return(t-this.translation.y)/this.scale},s.prototype._YconvertCanvasToDOM=function(t){return t*this.scale+this.translation.y},s.prototype.canvasToDOM=function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}},s.prototype.DOMtoCanvas=function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}},s.prototype._drawNodes=function(t,e){void 0===e&&(e=!1);var i=this.nodes,s=[];for(var o in i)i.hasOwnProperty(o)&&(i[o].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight),i[o].isSelected()?s.push(o):(i[o].inArea()||e)&&i[o].draw(t));for(var n=0,r=s.length;r>n;n++)(i[s[n]].inArea()||e)&&i[s[n]].draw(t)},s.prototype._drawEdges=function(t){var e=this.edges;for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];s.setScale(this.scale),s.connected&&e[i].draw(t)}},s.prototype._drawControlNodes=function(t){var e=this.edges;for(var i in e)e.hasOwnProperty(i)&&e[i]._drawControlNodes(t)},s.prototype._stabilize=function(){1==this.constants.freezeForStabilization&&this._freezeDefinedNodes();for(var t=0;this.moving&&t0)for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStepLimited(e,this.constants.maxVelocity),s=!0);else for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStep(e),s=!0);if(1==s){var o=this.constants.minVelocity/Math.max(this.scale,.05);o>.5*this.constants.maxVelocity?this.moving=!0:(this.moving=this._isMoving(o),0==this.moving&&this.emit("stabilized",{iterations:null}),this.moving=this.moving||this.configurePhysics)}},s.prototype._physicsTick=function(){this.freezeSimulation||1==this.moving&&(this._doInAllActiveSectors("_initializeForceCalculation"),this._doInAllActiveSectors("_discreteStepNodes"),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&this._doInSupportSector("_discreteStepNodes"),this._findCenter(this._getRange()))},s.prototype._animationStep=function(){this.timer=void 0,this._handleNavigation(),this.start();var t=Date.now(),e=1;this._physicsTick();for(var i=Date.now()-t;i<.9*(this.renderTimestep-this.renderTime)&&eh}return!1},s.prototype._getColor=function(){var t=this.color;return"to"==this.inheritColor?t={highlight:this.to.color.highlight.border,hover:this.to.color.hover.border,color:this.to.color.border}:("from"==this.inheritColor||1==this.inheritColor)&&(t={highlight:this.from.color.highlight.border,hover:this.from.color.hover.border,color:this.from.color.border}),1==this.selected?t.highlight:1==this.hover?t.hover:t.color},s.prototype._drawLine=function(t){if(t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth(),this.from!=this.to){var e,i=this._line(t);if(this.label){if(1==this.smoothCurves.enabled&&null!=i){var s=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),o=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:s,y:o}}else e=this._pointOnLine(.5);this._label(t,this.label,e.x,e.y)}}else{var n,r,a=this.length/4,h=this.from;h.width||h.resize(t),h.width>h.height?(n=h.x+h.width/2,r=h.y-a):(n=h.x+a,r=h.y-h.height/2),this._circle(t,n,r,a),e=this._pointOnCircle(n,r,a,.5),this._label(t,this.label,e.x,e.y)}},s.prototype._getLineWidth=function(){return 1==this.selected?Math.min(this.widthSelected,this.widthMax)*this.networkScaleInv:1==this.hover?Math.min(this.hoverWidth,this.widthMax)*this.networkScaleInv:this.width*this.networkScaleInv},s.prototype._getViaCoordinates=function(){var t=null,e=null,i=this.smoothCurves.roundness,s=this.smoothCurves.type,o=Math.abs(this.from.x-this.to.x),n=Math.abs(this.from.y-this.to.y);return"discrete"==s||"diagonalCross"==s?Math.abs(this.from.x-this.to.x)this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n)),"discrete"==s&&(t=i*n>o?this.from.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o)),"discrete"==s&&(e=i*o>n?this.from.y:e)):"straightCross"==s?Math.abs(this.from.x-this.to.x)Math.abs(this.from.y-this.to.y)&&(t=this.from.xthis.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,t=this.to.x>t?this.to.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xe?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o,e=this.to.yl.height?(a=l.x+.5*l.width,h=l.y-d):(a=l.x+d,h=l.y-.5*l.height),this._circle(t,a,h,d);var s=.2*Math.PI,o=(10+5*this.width)*this.arrowScaleFactor;e=this._pointOnCircle(a,h,d,.5),t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&(e=this._pointOnCircle(a,h,d,.5),this._label(t,this.label,e.x,e.y)) -}},s.prototype._drawArrow=function(t){1==this.selected?(t.strokeStyle=this.color.highlight,t.fillStyle=this.color.highlight):1==this.hover?(t.strokeStyle=this.color.hover,t.fillStyle=this.color.hover):(t.strokeStyle=this.color.color,t.fillStyle=this.color.color),t.lineWidth=this._getLineWidth();var e,i;if(this.from!=this.to){e=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x);var s,o=this.to.x-this.from.x,n=this.to.y-this.from.y,r=Math.sqrt(o*o+n*n),a=this.from.distanceToBorder(t,e+Math.PI),h=(r-a)/r,d=h*this.from.x+(1-h)*this.to.x,l=h*this.from.y+(1-h)*this.to.y;1==this.smoothCurves.dynamic&&1==this.smoothCurves.enabled?s=this.via:1==this.smoothCurves.enabled&&(s=this._getViaCoordinates()),1==this.smoothCurves.enabled&&null!=s.x&&(e=Math.atan2(this.to.y-s.y,this.to.x-s.x),o=this.to.x-s.x,n=this.to.y-s.y,r=Math.sqrt(o*o+n*n));var c,p,u=this.to.distanceToBorder(t,e),m=(r-u)/r;if(1==this.smoothCurves.enabled&&null!=s.x?(c=(1-m)*s.x+m*this.to.x,p=(1-m)*s.y+m*this.to.y):(c=(1-m)*this.from.x+m*this.to.x,p=(1-m)*this.from.y+m*this.to.y),t.beginPath(),t.moveTo(d,l),1==this.smoothCurves.enabled&&null!=s.x?t.quadraticCurveTo(s.x,s.y,c,p):t.lineTo(c,p),t.stroke(),i=(10+5*this.width)*this.arrowScaleFactor,t.arrow(c,p,e,i),t.fill(),t.stroke(),this.label){var g;if(1==this.smoothCurves.enabled&&null!=s){var f=.5*(.5*(this.from.x+s.x)+.5*(this.to.x+s.x)),v=.5*(.5*(this.from.y+s.y)+.5*(this.to.y+s.y));g={x:f,y:v}}else g=this._pointOnLine(.5);this._label(t,this.label,g.x,g.y)}}else{var y,b,_,x=this.from,w=.25*Math.max(100,this.length);x.width||x.resize(t),x.width>x.height?(y=x.x+.5*x.width,b=x.y-w,_={x:y,y:x.y,angle:.9*Math.PI}):(y=x.x+w,b=x.y-.5*x.height,_={x:x.x,y:b,angle:.6*Math.PI}),t.beginPath(),t.arc(y,b,w,0,2*Math.PI,!1),t.stroke();var i=(10+5*this.width)*this.arrowScaleFactor;t.arrow(_.x,_.y,_.angle,i),t.fill(),t.stroke(),this.label&&(g=this._pointOnCircle(y,b,w,.5),this._label(t,this.label,g.x,g.y))}},s.prototype._getDistanceToEdge=function(t,e,i,s,o,n){if(this.from!=this.to){if(1==this.smoothCurves.enabled){var r,a;if(1==this.smoothCurves.enabled&&1==this.smoothCurves.dynamic)r=this.via.x,a=this.via.y;else{var h=this._getViaCoordinates();r=h.x,a=h.y}var d,l,c,p,u,m,g,f=1e9;for(l=0;10>l;l++)c=.1*l,p=Math.pow(1-c,2)*t+2*c*(1-c)*r+Math.pow(c,2)*i,u=Math.pow(1-c,2)*e+2*c*(1-c)*a+Math.pow(c,2)*s,l>0&&(d=this._getDistanceToLine(m,g,p,u,o,n),f=f>d?d:f),m=p,g=u;return f}return this._getDistanceToLine(t,e,i,s,o,n)}var p,u,v,y,b=this.length/4,_=this.from;return _.width||_.resize(ctx),_.width>_.height?(p=_.x+_.width/2,u=_.y-b):(p=_.x+b,u=_.y-_.height/2),v=p-o,y=u-n,Math.abs(Math.sqrt(v*v+y*y)-b)},s.prototype._getDistanceToLine=function(t,e,i,s,o,n){var r=i-t,a=s-e,h=r*r+a*a,d=((o-t)*r+(n-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,p=l-o,u=c-n;return Math.sqrt(p*p+u*u)},s.prototype.setScale=function(t){this.networkScaleInv=1/t},s.prototype.select=function(){this.selected=!0},s.prototype.unselect=function(){this.selected=!1},s.prototype.positionBezierNode=function(){null!==this.via&&(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y))},s.prototype._drawControlNodes=function(t){if(1==this.controlNodesEnabled){if(null===this.controlNodes.from&&null===this.controlNodes.to){var e="edgeIdFrom:".concat(this.id),i="edgeIdTo:".concat(this.id),s={nodes:{group:"",radius:8},physics:{damping:0},clustering:{maxNodeSizeIncrements:0,nodeScaling:{width:0,height:0,radius:0}}};this.controlNodes.from=new n({id:e,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s),this.controlNodes.to=new n({id:i,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s)}0==this.controlNodes.from.selected&&0==this.controlNodes.to.selected&&(this.controlNodes.positions=this.getControlNodePositions(t),this.controlNodes.from.x=this.controlNodes.positions.from.x,this.controlNodes.from.y=this.controlNodes.positions.from.y,this.controlNodes.to.x=this.controlNodes.positions.to.x,this.controlNodes.to.y=this.controlNodes.positions.to.y),this.controlNodes.from.draw(t),this.controlNodes.to.draw(t)}else this.controlNodes={from:null,to:null,positions:{}}},s.prototype._enableControlNodes=function(){this.controlNodesEnabled=!0},s.prototype._disableControlNodes=function(){this.controlNodesEnabled=!1},s.prototype._getSelectedControlNode=function(t,e){var i=this.controlNodes.positions,s=Math.sqrt(Math.pow(t-i.from.x,2)+Math.pow(e-i.from.y,2)),o=Math.sqrt(Math.pow(t-i.to.x,2)+Math.pow(e-i.to.y,2));return 15>s?(this.connectedNode=this.from,this.from=this.controlNodes.from,this.controlNodes.from):15>o?(this.connectedNode=this.to,this.to=this.controlNodes.to,this.controlNodes.to):null},s.prototype._restoreControlNodes=function(){1==this.controlNodes.from.selected&&(this.from=this.connectedNode,this.connectedNode=null,this.controlNodes.from.unselect()),1==this.controlNodes.to.selected&&(this.to=this.connectedNode,this.connectedNode=null,this.controlNodes.to.unselect())},s.prototype.getControlNodePositions=function(t){var e,i=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),s=this.to.x-this.from.x,o=this.to.y-this.from.y,n=Math.sqrt(s*s+o*o),r=this.from.distanceToBorder(t,i+Math.PI),a=(n-r)/n,h=a*this.from.x+(1-a)*this.to.x,d=a*this.from.y+(1-a)*this.to.y;1==this.smoothCurves.dynamic&&1==this.smoothCurves.enabled?e=this.via:1==this.smoothCurves.enabled&&(e=this._getViaCoordinates()),1==this.smoothCurves.enabled&&null!=e.x&&(i=Math.atan2(this.to.y-e.y,this.to.x-e.x),s=this.to.x-e.x,o=this.to.y-e.y,n=Math.sqrt(s*s+o*o));var l,c,p=this.to.distanceToBorder(t,i),u=(n-p)/n;return 1==this.smoothCurves.enabled&&null!=e.x?(l=(1-u)*e.x+u*this.to.x,c=(1-u)*e.y+u*this.to.y):(l=(1-u)*this.from.x+u*this.to.x,c=(1-u)*this.from.y+u*this.to.y),{from:{x:h,y:d},to:{x:l,y:c}}},t.exports=s},function(t,e,i){function s(){this.clear(),this.defaultIndex=0}var o=i(1);s.DEFAULT=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}}],s.prototype.clear=function(){this.groups={},this.groups.length=function(){var t=0;for(var e in this)this.hasOwnProperty(e)&&t++;return t}},s.prototype.get=function(t){var e=this.groups[t];if(void 0==e){var i=this.defaultIndex%s.DEFAULT.length;this.defaultIndex++,e={},e.color=s.DEFAULT[i],this.groups[t]=e}return e},s.prototype.add=function(t,e){return this.groups[t]=e,e.color&&(e.color=o.parseColor(e.color)),e},t.exports=s},function(t){function e(){this.images={},this.callback=void 0}e.prototype.setOnloadCallback=function(t){this.callback=t},e.prototype.load=function(t){var e=this.images[t];if(void 0==e){var i=this;e=new Image,this.images[t]=e,e.onload=function(){i.callback&&i.callback(this)},e.src=t}return e},t.exports=e},function(t,e,i){function s(t,e,i,s){this.selected=!1,this.hover=!1,this.edges=[],this.dynamicEdges=[],this.reroutedEdges={},this.group=s.nodes.group,this.fontSize=Number(s.nodes.fontSize),this.fontFace=s.nodes.fontFace,this.fontColor=s.nodes.fontColor,this.fontDrawThreshold=3,this.color=s.nodes.color,this.id=void 0,this.shape=s.nodes.shape,this.image=s.nodes.image,this.x=null,this.y=null,this.xFixed=!1,this.yFixed=!1,this.horizontalAlignLeft=!0,this.verticalAlignTop=!0,this.radius=s.nodes.radius,this.baseRadiusValue=s.nodes.radius,this.radiusFixed=!1,this.radiusMin=s.nodes.radiusMin,this.radiusMax=s.nodes.radiusMax,this.level=-1,this.preassignedLevel=!1,this.borderWidth=s.nodes.borderWidth,this.borderWidthSelected=s.nodes.borderWidthSelected,this.imagelist=e,this.grouplist=i,this.fx=0,this.fy=0,this.vx=0,this.vy=0,this.minForce=s.minForce,this.damping=s.physics.damping,this.mass=1,this.fixedData={x:null,y:null},this.setProperties(t,s),this.resetCluster(),this.dynamicEdgesLength=0,this.clusterSession=0,this.clusterSizeWidthFactor=s.clustering.nodeScaling.width,this.clusterSizeHeightFactor=s.clustering.nodeScaling.height,this.clusterSizeRadiusFactor=s.clustering.nodeScaling.radius,this.maxNodeSizeIncrements=s.clustering.maxNodeSizeIncrements,this.growthIndicator=0,this.networkScaleInv=1,this.networkScale=1,this.canvasTopLeft={x:-300,y:-300},this.canvasBottomRight={x:300,y:300},this.parentEdgeId=null}var o=i(1);s.prototype.resetCluster=function(){this.formationScale=void 0,this.clusterSize=1,this.containedNodes={},this.containedEdges={},this.clusterSessions=[]},s.prototype.attachEdge=function(t){-1==this.edges.indexOf(t)&&this.edges.push(t),-1==this.dynamicEdges.indexOf(t)&&this.dynamicEdges.push(t),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.detachEdge=function(t){var e=this.edges.indexOf(t);-1!=e&&(this.edges.splice(e,1),this.dynamicEdges.splice(e,1)),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.setProperties=function(t,e){if(t){if(this.originalLabel=void 0,void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.originalLabel=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.group&&(this.group=t.group),void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y),void 0!==t.value&&(this.value=t.value),void 0!==t.level&&(this.level=t.level,this.preassignedLevel=!0),void 0!==t.borderWidth&&(this.borderWidth=t.borderWidth),void 0!==t.borderWidthSelected&&(this.borderWidthSelected=t.borderWidthSelected),void 0!==t.mass&&(this.mass=t.mass),void 0!==t.horizontalAlignLeft&&(this.horizontalAlignLeft=t.horizontalAlignLeft),void 0!==t.verticalAlignTop&&(this.verticalAlignTop=t.verticalAlignTop),void 0!==t.triggerFunction&&(this.triggerFunction=t.triggerFunction),void 0===this.id)throw"Node must have an id";if(void 0!==this.group&&""!=this.group){var i=this.grouplist.get(this.group);for(var s in i)i.hasOwnProperty(s)&&(this[s]=i[s])}if(void 0!==t.shape&&(this.shape=t.shape),void 0!==t.image&&(this.image=t.image),void 0!==t.radius&&(this.radius=t.radius,this.baseRadiusValue=this.radius),void 0!==t.color&&(this.color=o.parseColor(t.color)),void 0!==t.fontColor&&(this.fontColor=t.fontColor),void 0!==t.fontSize&&(this.fontSize=t.fontSize),void 0!==t.fontFace&&(this.fontFace=t.fontFace),void 0!==this.image&&""!=this.image){if(!this.imagelist)throw"No imagelist provided";this.imageObj=this.imagelist.load(this.image)}switch(this.xFixed=this.xFixed||void 0!==t.x&&!t.allowedToMoveX,this.yFixed=this.yFixed||void 0!==t.y&&!t.allowedToMoveY,this.radiusFixed=this.radiusFixed||void 0!==t.radius,"image"==this.shape&&(this.radiusMin=e.nodes.widthMin,this.radiusMax=e.nodes.widthMax),this.shape){case"database":this.draw=this._drawDatabase,this.resize=this._resizeDatabase;break;case"box":this.draw=this._drawBox,this.resize=this._resizeBox;break;case"circle":this.draw=this._drawCircle,this.resize=this._resizeCircle;break;case"ellipse":this.draw=this._drawEllipse,this.resize=this._resizeEllipse;break;case"image":this.draw=this._drawImage,this.resize=this._resizeImage;break;case"text":this.draw=this._drawText,this.resize=this._resizeText;break;case"dot":this.draw=this._drawDot,this.resize=this._resizeShape;break;case"square":this.draw=this._drawSquare,this.resize=this._resizeShape;break;case"triangle":this.draw=this._drawTriangle,this.resize=this._resizeShape;break;case"triangleDown":this.draw=this._drawTriangleDown,this.resize=this._resizeShape;break;case"star":this.draw=this._drawStar,this.resize=this._resizeShape;break;default:this.draw=this._drawEllipse,this.resize=this._resizeEllipse}this._reset()}},s.prototype.select=function(){this.selected=!0,this._reset()},s.prototype.unselect=function(){this.selected=!1,this._reset()},s.prototype.clearSizeCache=function(){this._reset()},s.prototype._reset=function(){this.width=void 0,this.height=void 0},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.distanceToBorder=function(t,e){var i=1;switch(this.width||this.resize(t),this.shape){case"circle":case"dot":return this.radius+i;case"ellipse":var s=this.width/2,o=this.height/2,n=Math.sin(e)*s,r=Math.cos(e)*o;return s*o/Math.sqrt(n*n+r*r);case"box":case"image":case"text":default:return this.width?Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i:0}},s.prototype._setForce=function(t,e){this.fx=t,this.fy=e},s.prototype._addForce=function(t,e){this.fx+=t,this.fy+=e},s.prototype.discreteStep=function(t){if(!this.xFixed){var e=this.damping*this.vx,i=(this.fx-e)/this.mass;this.vx+=i*t,this.x+=this.vx*t}if(!this.yFixed){var s=this.damping*this.vy,o=(this.fy-s)/this.mass;this.vy+=o*t,this.y+=this.vy*t}},s.prototype.discreteStepLimited=function(t,e){if(this.xFixed)this.fx=0;else{var i=this.damping*this.vx,s=(this.fx-i)/this.mass;this.vx+=s*t,this.vx=Math.abs(this.vx)>e?this.vx>0?e:-e:this.vx,this.x+=this.vx*t}if(this.yFixed)this.fy=0;else{var o=this.damping*this.vy,n=(this.fy-o)/this.mass;this.vy+=n*t,this.vy=Math.abs(this.vy)>e?this.vy>0?e:-e:this.vy,this.y+=this.vy*t}},s.prototype.isFixed=function(){return this.xFixed&&this.yFixed},s.prototype.isMoving=function(t){return Math.abs(this.vx)>t||Math.abs(this.vy)>t},s.prototype.isSelected=function(){return this.selected},s.prototype.getValue=function(){return this.value},s.prototype.getDistance=function(t,e){var i=this.x-t,s=this.y-e;return Math.sqrt(i*i+s*s)},s.prototype.setValueRange=function(t,e){if(!this.radiusFixed&&void 0!==this.value)if(e==t)this.radius=(this.radiusMin+this.radiusMax)/2;else{var i=(this.radiusMax-this.radiusMin)/(e-t);this.radius=(this.value-t)*i+this.radiusMin}this.baseRadiusValue=this.radius},s.prototype.draw=function(){throw"Draw method not initialized for node"},s.prototype.resize=function(){throw"Resize method not initialized for node"},s.prototype.isOverlappingWith=function(t){return this.leftt.left&&this.topt.top},s.prototype._resizeImage=function(){if(!this.width||!this.height){var t,e;if(this.value){this.radius=this.baseRadiusValue;var i=this.imageObj.height/this.imageObj.width;void 0!==i?(t=this.radius||this.imageObj.width,e=this.radius*i||this.imageObj.height):(t=0,e=0)}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.growthIndicator=0,this.width>0&&this.height>0&&(this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t)}},s.prototype._drawImage=function(t){this._resizeImage(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e;if(0!=this.imageObj.width){if(this.clusterSize>1){var i=this.clusterSize>1?10:0;i*=this.networkScaleInv,i=Math.min(.2*this.width,i),t.globalAlpha=.5,t.drawImage(this.imageObj,this.left-i,this.top-i,this.width+2*i,this.height+2*i)}t.globalAlpha=1,t.drawImage(this.imageObj,this.left,this.top,this.width,this.height),e=this.y+this.height/2}else e=this.y;this._label(t,this.label,this.x,e,void 0,"top")},s.prototype._resizeBox=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawBox=function(t){this._resizeBox(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.roundRect(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth,this.radius),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.color.background,t.roundRect(this.left,this.top,this.width,this.height,this.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeDatabase=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=i.width+2*e;this.width=s,this.height=s,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-s}},s.prototype._drawDatabase=function(t){this._resizeDatabase(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.database(this.x-this.width/2-2*t.lineWidth,this.y-.5*this.height-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.database(this.x-this.width/2,this.y-.5*this.height,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeCircle=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=Math.max(i.width,i.height)+2*e;this.radius=s/2,this.width=s,this.height=s,this.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.radius-.5*s}},s.prototype._drawCircle=function(t){this._resizeCircle(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.circle(this.x,this.y,this.radius+2*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.circle(this.x,this.y,this.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeEllipse=function(t){if(!this.width){var e=this.getTextSize(t);this.width=1.5*e.width,this.height=2*e.height,this.width1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.ellipse(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.ellipse(this.left,this.top,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._drawDot=function(t){this._drawShape(t,"circle")},s.prototype._drawTriangle=function(t){this._drawShape(t,"triangle")},s.prototype._drawTriangleDown=function(t){this._drawShape(t,"triangleDown")},s.prototype._drawSquare=function(t){this._drawShape(t,"square")},s.prototype._drawStar=function(t){this._drawShape(t,"star")},s.prototype._resizeShape=function(){if(!this.width){this.radius=this.baseRadiusValue;var t=2*this.radius;this.width=t,this.height=t,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t}},s.prototype._drawShape=function(t,e){this._resizeShape(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var i=2.5,s=this.borderWidth,o=this.borderWidthSelected||2*this.borderWidth,n=2;switch(e){case"dot":n=2;break;case"square":n=2;break;case"triangle":n=3;break;case"triangleDown":n=3;break;case"star":n=4}t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t[e](this.x,this.y,this.radius+n*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t[e](this.x,this.y,this.radius),t.fill(),t.stroke(),this.label&&this._label(t,this.label,this.x,this.y+this.height/2,void 0,"top",!0)},s.prototype._resizeText=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawText=function(t){this._resizeText(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2,this._label(t,this.label,this.x,this.y)},s.prototype._label=function(t,e,i,s,o,n,r){if(e&&this.fontSize*this.networkScale>this.fontDrawThreshold){t.font=(this.selected?"bold ":"")+this.fontSize+"px "+this.fontFace,t.fillStyle=this.fontColor||"black",t.textAlign=o||"center",t.textBaseline=n||"middle";var a=e.split("\n"),h=a.length,d=this.fontSize+4,l=s+(1-h)/2*d;1==r&&(l=s+(1-h)/(2*d));for(var c=0;h>c;c++)t.fillText(a[c],i,l),l+=d}},s.prototype.getTextSize=function(t){if(void 0!==this.label){t.font=(this.selected?"bold ":"")+this.fontSize+"px "+this.fontFace;for(var e=this.label.split("\n"),i=(this.fontSize+4)*e.length,s=0,o=0,n=e.length;n>o;o++)s=Math.max(s,t.measureText(e[o]).width);return{width:s,height:i}}return{width:0,height:0}},s.prototype.inArea=function(){return void 0!==this.width?this.x+this.width*this.networkScaleInv>=this.canvasTopLeft.x&&this.x-this.width*this.networkScaleInv=this.canvasTopLeft.y&&this.y-this.height*this.networkScaleInv=this.canvasTopLeft.x&&this.x=this.canvasTopLeft.y&&this.ys&&(n=s-e-this.padding),no&&(r=o-i-this.padding),ri;i++)if(e.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=a(o.attr,t.node))),i=n.length-1;i>=0;i--){var h=n[i];h.nodes||(h.nodes=[]),-1==h.nodes.indexOf(o)&&h.nodes.push(o)}e.attr&&(o.attr=a(o.attr,e.attr))}function l(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=a({},t.edge);e.attr=a(i,e.attr)}}function c(t,e,i,s,o){var n={from:e,to:i,type:s};return t.edge&&(n.attr=a({},t.edge)),n.attr=a(n.attr||{},o),n}function p(){for(k=C.NULL,O="";" "==L||" "==L||"\n"==L||"\r"==L;)o();do{var t=!1;if("#"==L){for(var e=T-1;" "==D.charAt(e)||" "==D.charAt(e);)e--;if("\n"==D.charAt(e)||""==D.charAt(e)){for(;""!=L&&"\n"!=L;)o();t=!0}}if("/"==L&&"/"==n()){for(;""!=L&&"\n"!=L;)o();t=!0}if("/"==L&&"*"==n()){for(;""!=L;){if("*"==L&&"/"==n()){o(),o();break}o()}t=!0}for(;" "==L||" "==L||"\n"==L||"\r"==L;)o()}while(t);if(""==L)return void(k=C.DELIMITER);var i=L+n();if(E[i])return k=C.DELIMITER,O=i,o(),void o();if(E[L])return k=C.DELIMITER,O=L,void o();if(r(L)||"-"==L){for(O+=L,o();r(L);)O+=L,o();return"false"==O?O=!1:"true"==O?O=!0:isNaN(Number(O))||(O=Number(O)),void(k=C.IDENTIFIER)}if('"'==L){for(o();""!=L&&('"'!=L||'"'==L&&'"'==n());)O+=L,'"'==L&&o(),o();if('"'!=L)throw x('End of string " expected');return o(),void(k=C.IDENTIFIER)}for(k=C.UNKNOWN;""!=L;)O+=L,o();throw new SyntaxError('Syntax error in part "'+w(O,30)+'"')}function u(){var t={};if(s(),p(),"strict"==O&&(t.strict=!0,p()),("graph"==O||"digraph"==O)&&(t.type=O,p()),k==C.IDENTIFIER&&(t.id=O,p()),"{"!=O)throw x("Angle bracket { expected");if(p(),m(t),"}"!=O)throw x("Angle bracket } expected");if(p(),""!==O)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==O&&"}"!=O;)g(t),";"==O&&p()}function g(t){var e=f(t);if(e)return void b(t,e);var i=v(t);if(!i){if(k!=C.IDENTIFIER)throw x("Identifier expected");var s=O;if(p(),"="==O){if(p(),k!=C.IDENTIFIER)throw x("Identifier expected");t[s]=O,p()}else y(t,s)}}function f(t){var e=null;if("subgraph"==O&&(e={},e.type="subgraph",p(),k==C.IDENTIFIER&&(e.id=O,p())),"{"==O){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=O)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function v(t){return"node"==O?(p(),t.node=_(),"node"):"edge"==O?(p(),t.edge=_(),"edge"):"graph"==O?(p(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},s=_();s&&(i.attr=s),d(t,i),b(t,e)}function b(t,e){for(;"->"==O||"--"==O;){var i,s=O;p();var o=f(t);if(o)i=o;else{if(k!=C.IDENTIFIER)throw x("Identifier or subgraph expected");i=O,d(t,{id:i}),p()}var n=_(),r=c(t,e,i,s,n);l(t,r),e=i}}function _(){for(var t=null;"["==O;){for(p(),t={};""!==O&&"]"!=O;){if(k!=C.IDENTIFIER)throw x("Attribute name expected");var e=O;if(p(),"="!=O)throw x("Equal sign = expected");if(p(),k!=C.IDENTIFIER)throw x("Attribute value expected");var i=O;h(t,e,i),p(),","==O&&p()}if("]"!=O)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+w(O,30)+'" (char '+T+")")}function w(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){t instanceof Array?t.forEach(function(t){e instanceof Array?e.forEach(function(e){i(t,e)}):i(t,e)}):e instanceof Array?e.forEach(function(e){i(t,e)}):i(t,e)}function M(t){function e(t){var e={from:t.from,to:t.to};return a(e,t.attr),e.style="->"==t.type?"arrow":"line",e}var s=i(t),o={nodes:[],edges:[],options:{}};return s.nodes&&s.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};a(e,t.attr),e.image&&(e.shape="image"),o.nodes.push(e)}),s.edges&&s.edges.forEach(function(t){var i,s;i=t.from instanceof Object?t.from.nodes:{id:t.from},s=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var i=e(t);o.edges.push(i)}),S(i,s,function(i,s){var n=c(o,i.id,s.id,t.type,t.attr),r=e(n);o.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var i=e(t);o.edges.push(i)})}),s.attr&&(o.options=s.attr),o}var C={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},E={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},D="",T=0,L="",O="",k=C.NULL,N=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=M},function(t,e){function i(t,e){var i=[],s=[]; -this.options={edges:{inheritColor:!0},nodes:{allowedToMove:!1,parseColor:!1}},void 0!==e&&(this.options.nodes.allowedToMove=e.allowedToMove|!1,this.options.nodes.parseColor=e.parseColor|!1,this.options.edges.inheritColor=e.inheritColor|!0);for(var o=t.edges,n=t.nodes,r=0;rs;s++){var o=s%2===0?1.3*i:.5*i;this.lineTo(t+o*Math.sin(2*s*Math.PI/10),e-o*Math.cos(2*s*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,s,o){var n=Math.PI/180;0>i-2*o&&(o=i/2),0>s-2*o&&(o=s/2),this.beginPath(),this.moveTo(t+o,e),this.lineTo(t+i-o,e),this.arc(t+i-o,e+o,o,270*n,360*n,!1),this.lineTo(t+i,e+s-o),this.arc(t+i-o,e+s-o,o,0,90*n,!1),this.lineTo(t+o,e+s),this.arc(t+o,e+s-o,o,90*n,180*n,!1),this.lineTo(t,e+o),this.arc(t+o,e+o,o,180*n,270*n,!1)},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,s){var o=.5522848,n=i/2*o,r=s/2*o,a=t+i,h=e+s,d=t+i/2,l=e+s/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-n,e,d,e),this.bezierCurveTo(d+n,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+n,h,d,h),this.bezierCurveTo(d-n,h,t,l+r,t,l)},CanvasRenderingContext2D.prototype.database=function(t,e,i,s){var o=1/3,n=i,r=s*o,a=.5522848,h=n/2*a,d=r/2*a,l=t+n,c=e+r,p=t+n/2,u=e+r/2,m=e+(s-r/2),g=e+s;this.beginPath(),this.moveTo(l,u),this.bezierCurveTo(l,u+d,p+h,c,p,c),this.bezierCurveTo(p-h,c,t,u+d,t,u),this.bezierCurveTo(t,u-d,p-h,e,p,e),this.bezierCurveTo(p+h,e,l,u-d,l,u),this.lineTo(l,m),this.bezierCurveTo(l,m+d,p+h,g,p,g),this.bezierCurveTo(p-h,g,t,m+d,t,m),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,s){var o=t-s*Math.cos(i),n=e-s*Math.sin(i),r=t-.9*s*Math.cos(i),a=e-.9*s*Math.sin(i),h=o+s/3*Math.cos(i+.5*Math.PI),d=n+s/3*Math.sin(i+.5*Math.PI),l=o+s/3*Math.cos(i-.5*Math.PI),c=n+s/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,c),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,s,o){o||(o=[10,5]),0==p&&(p=.001);var n=o.length;this.moveTo(t,e);for(var r=i-t,a=s-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0;d>=.1;){var p=o[l++%n];p>d&&(p=d);var u=Math.sqrt(p*p/(1+h*h));0>r&&(u=-u),t+=u,e+=h*u,this[c?"lineTo":"moveTo"](t,e),d-=p,c=!c}})},function(t,e,i){var s=i(55),o=i(49),n=i(50),r=i(51),a=i(52),h=i(53),d=i(54);e._loadMixin=function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e])},e._clearMixin=function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=void 0)},e._loadPhysicsSystem=function(){this._loadMixin(s),this._loadSelectedForceSolver(),1==this.constants.configurePhysics&&this._loadPhysicsConfiguration()},e._loadClusterSystem=function(){this.clusterSession=0,this.hubThreshold=5,this._loadMixin(o)},e._loadSectorSystem=function(){this.sectors={},this.activeSector=["default"],this.sectors.active={},this.sectors.active["default"]={nodes:{},edges:{},nodeIndices:[],formationScale:1,drawingNode:void 0},this.sectors.frozen={},this.sectors.support={nodes:{},edges:{},nodeIndices:[],formationScale:1,drawingNode:void 0},this.nodeIndices=this.sectors.active["default"].nodeIndices,this._loadMixin(n)},e._loadSelectionSystem=function(){this.selectionObj={nodes:{},edges:{}},this._loadMixin(r)},e._loadManipulationSystem=function(){this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,1==this.constants.dataManipulation.enabled?(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="network-manipulationDiv",this.manipulationDiv.id="network-manipulationDiv",this.manipulationDiv.style.display=1==this.editMode?"block":"none",this.containerElement.insertBefore(this.manipulationDiv,this.frame)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="network-manipulation-editMode",this.editModeDiv.id="network-manipulation-editMode",this.editModeDiv.style.display=1==this.editMode?"none":"block",this.containerElement.insertBefore(this.editModeDiv,this.frame)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="network-manipulation-closeDiv",this.closeDiv.id="network-manipulation-closeDiv",this.closeDiv.style.display=this.manipulationDiv.style.display,this.containerElement.insertBefore(this.closeDiv,this.frame)),this._loadMixin(a),this._createManipulatorBar()):void 0!==this.manipulationDiv&&(this._createManipulatorBar(),this.containerElement.removeChild(this.manipulationDiv),this.containerElement.removeChild(this.editModeDiv),this.containerElement.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._clearMixin(a))},e._loadNavigationControls=function(){this._loadMixin(h),this._cleanNavigation(),1==this.constants.navigation.enabled&&this._loadNavigationElements()},e._loadHierarchySystem=function(){this._loadMixin(d)}},function(t){function e(t){return t?i(t):void 0}function i(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){s.off(t,i),e.apply(this,arguments)}var s=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[t];if(!i)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var s,o=0;os;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,i){var s;(function(t,o){(function(n){function r(t,e,i){switch(arguments.length){case 2:return null!=t?t:e;case 3:return null!=t?t:null!=e?e:i;default:throw new Error("Implement me")}}function a(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function h(t,e){function i(){ve.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}var s=!0;return m(function(){return s&&(i(),s=!1),e.apply(this,arguments)},e)}function d(t,e){return function(i){return v(t.call(this,i),e)}}function l(t,e){return function(i){return this.lang().ordinal(t.call(this,i),e)}}function c(){}function p(t){O(t),m(this,t)}function u(t){var e=S(t),i=e.year||0,s=e.quarter||0,o=e.month||0,n=e.week||0,r=e.day||0,a=e.hour||0,h=e.minute||0,d=e.second||0,l=e.millisecond||0;this._milliseconds=+l+1e3*d+6e4*h+36e5*a,this._days=+r+7*n,this._months=+o+3*s+12*i,this._data={},this._bubble()}function m(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return e.hasOwnProperty("toString")&&(t.toString=e.toString),e.hasOwnProperty("valueOf")&&(t.valueOf=e.valueOf),t}function g(t){var e,i={};for(e in t)t.hasOwnProperty(e)&&ke.hasOwnProperty(e)&&(i[e]=t[e]);return i}function f(t){return 0>t?Math.ceil(t):Math.floor(t)}function v(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&C(t[s])!==C(e[s]))&&r++;return r+n}function w(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=ri[t]||ai[e]||e}return t}function S(t){var e,i,s={};for(i in t)t.hasOwnProperty(i)&&(e=w(i),e&&(s[e]=t[i]));return s}function M(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}ve[t]=function(s,o){var r,a,h=ve.fn._lang[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=ve().utc().set(i,t);return h.call(ve.fn._lang,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function C(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function E(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function D(t,e,i){return re(ve([t,11,31+e-i]),e,i).week}function T(t){return L(t)?366:365}function L(t){return t%4===0&&t%100!==0||t%400===0}function O(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Me]<0||t._a[Me]>11?Me:t._a[Ce]<1||t._a[Ce]>E(t._a[Se],t._a[Me])?Ce:t._a[Ee]<0||t._a[Ee]>23?Ee:t._a[De]<0||t._a[De]>59?De:t._a[Te]<0||t._a[Te]>59?Te:t._a[Le]<0||t._a[Le]>999?Le:-1,t._pf._overflowDayOfYear&&(Se>e||e>Ce)&&(e=Ce),t._pf.overflow=e)}function k(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length)),t._isValid}function N(t){return t?t.toLowerCase().replace("_","-"):t}function I(t,e){return e._isUTC?ve(t).zone(e._offset||0):ve(t).local()}function A(t,e){return e.abbr=t,Oe[t]||(Oe[t]=new c),Oe[t].set(e),Oe[t]}function z(t){delete Oe[t]}function P(t){var e,s,o,n,r=0,a=function(t){if(!Oe[t]&&Ne)try{i(56)("./"+t)}catch(e){}return Oe[t]};if(!t)return ve.fn._lang;if(!b(t)){if(s=a(t))return s;t=[t]}for(;r0;){if(s=a(n.slice(0,e).join("-")))return s;if(o&&o.length>=e&&x(n,o,!0)>=e-1)break;e--}r++}return ve.fn._lang}function R(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function F(t){var e,i,s=t.match(Pe);for(e=0,i=s.length;i>e;e++)s[e]=pi[s[e]]?pi[s[e]]:R(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function H(t,e){return t.isValid()?(e=Y(e,t.lang()),hi[e]||(hi[e]=F(e)),hi[e](t)):t.lang().invalidDate()}function Y(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Re.lastIndex=0;s>=0&&Re.test(t);)t=t.replace(Re,i),Re.lastIndex=0,s-=1;return t}function B(t,e){var i,s=e._strict;switch(t){case"Q":return Ze;case"DDDD":return Ke;case"YYYY":case"GGGG":case"gggg":return s?$e:Ye;case"Y":case"G":case"g":return Qe;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?Je:Be;case"S":if(s)return Ze;case"SS":if(s)return qe;case"SSS":if(s)return Ke;case"DDD":return He;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ge;case"a":case"A":return P(e._l)._meridiemParse;case"X":return Ue;case"Z":case"ZZ":return je;case"T":return Ve;case"SSSS":return We;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?qe:Fe;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Fe;case"Do":return Xe;default:return i=new RegExp(K(q(t.replace("\\","")),"i"))}}function W(t){t=t||"";var e=t.match(je)||[],i=e[e.length-1]||[],s=(i+"").match(oi)||["-",0,0],o=+(60*s[1])+C(s[2]);return"+"===s[0]?-o:o}function G(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Me]=3*(C(e)-1));break;case"M":case"MM":null!=e&&(o[Me]=C(e)-1);break;case"MMM":case"MMMM":s=P(i._l).monthsParse(e),null!=s?o[Me]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ce]=C(e));break;case"Do":null!=e&&(o[Ce]=C(parseInt(e,10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=C(e));break;case"YY":o[Se]=ve.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[Se]=C(e);break;case"a":case"A":i._isPm=P(i._l).isPM(e);break;case"H":case"HH":case"h":case"hh":o[Ee]=C(e);break;case"m":case"mm":o[De]=C(e);break;case"s":case"ss":o[Te]=C(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Le]=C(1e3*("0."+e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=W(e);break;case"dd":case"ddd":case"dddd":s=P(i._l).weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=C(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=ve.parseTwoDigitYear(e)}}function j(t){var e,i,s,o,n,a,h,d;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[Se],re(ve(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(d=P(t._l),n=d._week.dow,a=d._week.doy,i=r(e.gg,t._a[Se],re(ve(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ae(i,s,o,a,n),t._a[Se]=h.year,t._dayOfYear=h.dayOfYear}function V(t){var e,i,s,o,n=[];if(!t._d){for(s=X(t),t._w&&null==t._a[Ce]&&null==t._a[Me]&&j(t),t._dayOfYear&&(o=r(t._a[Se],s[Se]),t._dayOfYear>T(o)&&(t._pf._overflowDayOfYear=!0),i=ie(o,0,t._dayOfYear),t._a[Me]=i.getUTCMonth(),t._a[Ce]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];t._d=(t._useUTC?ie:ee).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm)}}function U(t){var e;t._d||(e=S(t._i),t._a=[e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond],V(t))}function X(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function Z(t){if(t._f===ve.ISO_8601)return void J(t);t._a=[],t._pf.empty=!0;var e,i,s,o,n,r=P(t._l),a=""+t._i,h=a.length,d=0;for(s=Y(t._f,r).match(Pe)||[],e=0;e0&&t._pf.unusedInput.push(n),a=a.slice(a.indexOf(i)+i.length),d+=i.length),pi[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),G(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._isPm&&t._a[Ee]<12&&(t._a[Ee]+=12),t._isPm===!1&&12===t._a[Ee]&&(t._a[Ee]=0),V(t),O(t)}function q(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function K(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function $(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));m(t,i||e)}function J(t){var e,i,s=t._i,o=ti.exec(s);if(o){for(t._pf.iso=!0,e=0,i=ii.length;i>e;e++)if(ii[e][1].exec(s)){t._f=ii[e][0]+(o[6]||" ");break}for(e=0,i=si.length;i>e;e++)if(si[e][1].exec(s)){t._f+=si[e][0];break}s.match(je)&&(t._f+="Z"),Z(t)}else t._isValid=!1}function Q(t){J(t),t._isValid===!1&&(delete t._isValid,ve.createFromInputFallback(t))}function te(t){var e=t._i,i=Ie.exec(e);e===n?t._d=new Date:i?t._d=new Date(+i[1]):"string"==typeof e?Q(t):b(e)?(t._a=e.slice(0),V(t)):_(e)?t._d=new Date(+e):"object"==typeof e?U(t):"number"==typeof e?t._d=new Date(e):ve.createFromInputFallback(t)}function ee(t,e,i,s,o,n,r){var a=new Date(t,e,i,s,o,n,r);return 1970>t&&a.setFullYear(t),a}function ie(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function se(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function oe(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ne(t,e,i){var s=we(Math.abs(t)/1e3),o=we(s/60),n=we(o/60),r=we(n/24),a=we(r/365),h=s0,h[4]=i,oe.apply({},h)}function re(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=ve(t).add("d",n),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ae(t,e,i,s,o){var n,r,a=ie(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:T(t-1)+r}}function he(t){var e=t._i,i=t._f;return null===e||i===n&&""===e?ve.invalid({nullInput:!0}):("string"==typeof e&&(t._i=e=P().preparse(e)),ve.isMoment(e)?(t=g(e),t._d=new Date(+e._d)):i?b(i)?$(t):Z(t):te(t),new p(t))}function de(t,e){var i,s;if(1===e.length&&b(e[0])&&(e=e[0]),!e.length)return ve();for(i=e[0],s=1;s=0?"+":"-";return e+v(Math.abs(t),6)},gg:function(){return v(this.weekYear()%100,2)},gggg:function(){return v(this.weekYear(),4)},ggggg:function(){return v(this.weekYear(),5)},GG:function(){return v(this.isoWeekYear()%100,2)},GGGG:function(){return v(this.isoWeekYear(),4)},GGGGG:function(){return v(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return C(this.milliseconds()/100)},SS:function(){return v(C(this.milliseconds()/10),2)},SSS:function(){return v(this.milliseconds(),3)},SSSS:function(){return v(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+v(C(t/60),2)+":"+v(C(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+v(C(t/60),2)+v(C(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},ui=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];li.length;)be=li.pop(),pi[be+"o"]=l(pi[be],be);for(;ci.length;)be=ci.pop(),pi[be+be]=d(pi[be],2);for(pi.DDDD=d(pi.DDD,3),m(c.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,i,s;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(i=ve.utc([2e3,e]),s="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[e]=new RegExp(s.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=ve([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var i=this._calendar[t];return"function"==typeof i?i.apply(e):i},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return re(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),ve=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=a(),he(o)},ve.suppressDeprecationWarnings=!1,ve.createFromInputFallback=h("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i)}),ve.min=function(){var t=[].slice.call(arguments,0);return de("isBefore",t)},ve.max=function(){var t=[].slice.call(arguments,0);return de("isAfter",t)},ve.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=a(),he(o).utc()},ve.unix=function(t){return ve(1e3*t)},ve.duration=function(t,e){var i,s,o,n=t,r=null;return ve.isDuration(t)?n={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(n={},e?n[e]=t:n.milliseconds=t):(r=Ae.exec(t))?(i="-"===r[1]?-1:1,n={y:0,d:C(r[Ce])*i,h:C(r[Ee])*i,m:C(r[De])*i,s:C(r[Te])*i,ms:C(r[Le])*i}):(r=ze.exec(t))&&(i="-"===r[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},n={y:o(r[2]),M:o(r[3]),d:o(r[4]),h:o(r[5]),m:o(r[6]),s:o(r[7]),w:o(r[8])}),s=new u(n),ve.isDuration(t)&&t.hasOwnProperty("_lang")&&(s._lang=t._lang),s},ve.version=_e,ve.defaultFormat=ei,ve.ISO_8601=function(){},ve.momentProperties=ke,ve.updateOffset=function(){},ve.relativeTimeThreshold=function(t,e){return di[t]===n?!1:(di[t]=e,!0)},ve.lang=function(t,e){var i;return t?(e?A(N(t),e):null===e?(z(t),t="en"):Oe[t]||P(t),i=ve.duration.fn._lang=ve.fn._lang=P(t),i._abbr):ve.fn._lang._abbr},ve.langData=function(t){return t&&t._lang&&t._lang._abbr&&(t=t._lang._abbr),P(t)},ve.isMoment=function(t){return t instanceof p||null!=t&&t.hasOwnProperty("_isAMomentObject")},ve.isDuration=function(t){return t instanceof u},be=ui.length-1;be>=0;--be)M(ui[be]);ve.normalizeUnits=function(t){return w(t)},ve.invalid=function(t){var e=ve.utc(0/0);return null!=t?m(e._pf,t):e._pf.userInvalidated=!0,e},ve.parseZone=function(){return ve.apply(null,arguments).parseZone()},ve.parseTwoDigitYear=function(t){return C(t)+(C(t)>68?1900:2e3)},m(ve.fn=p.prototype,{clone:function(){return ve(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=ve(this).utc();return 00:!1},parsingFlags:function(){return m({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(t){var e=H(this,t||ve.defaultFormat);return this.lang().postformat(e)},add:function(t,e){var i;return i="string"==typeof t&&"string"==typeof e?ve.duration(isNaN(+e)?+t:+e,isNaN(+e)?e:t):"string"==typeof t?ve.duration(+e,t):ve.duration(t,e),y(this,i,1),this},subtract:function(t,e){var i;return i="string"==typeof t&&"string"==typeof e?ve.duration(isNaN(+e)?+t:+e,isNaN(+e)?e:t):"string"==typeof t?ve.duration(+e,t):ve.duration(t,e),y(this,i,-1),this},diff:function(t,e,i){var s,o,n=I(t,this),r=6e4*(this.zone()-n.zone());return e=w(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+n.daysInMonth()),o=12*(this.year()-n.year())+(this.month()-n.month()),o+=(this-ve(this).startOf("month")-(n-ve(n).startOf("month")))/s,o-=6e4*(this.zone()-ve(this).startOf("month").zone()-(n.zone()-ve(n).startOf("month").zone()))/s,"year"===e&&(o/=12)):(s=this-n,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-r)/864e5:"week"===e?(s-r)/6048e5:s),i?o:f(o)},from:function(t,e){return ve.duration(this.diff(t)).lang(this.lang()._abbr).humanize(!e)},fromNow:function(t){return this.from(ve(),t)},calendar:function(t){var e=t||ve(),i=I(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.lang().calendar(o,this))},isLeapYear:function(){return L(this.year())},isDST:function(){return this.zone()+ve(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+ve(t).startOf(e)},isSame:function(t,e){return e=e||"ms",+this.clone().startOf(e)===+I(t,this).startOf(e)},min:h("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(t){return t=ve.apply(null,arguments),this>t?this:t -}),max:h("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=ve.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i=this._offset||0;return null==t?this._isUTC?i:this._d.getTimezoneOffset():("string"==typeof t&&(t=W(t)),Math.abs(t)<16&&(t=60*t),this._offset=t,this._isUTC=!0,i!==t&&(!e||this._changeInProgress?y(this,ve.duration(i-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,ve.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?ve(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return E(this.year(),this.month())},dayOfYear:function(t){var e=we((ve(this).startOf("day")-ve(this).startOf("year"))/864e5)+1;return null==t?e:this.add("d",t-e)},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=re(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==t?e:this.add("y",t-e)},isoWeekYear:function(t){var e=re(this,1,4).year;return null==t?e:this.add("y",t-e)},week:function(t){var e=this.lang().week(this);return null==t?e:this.add("d",7*(t-e))},isoWeek:function(t){var e=re(this,1,4).week;return null==t?e:this.add("d",7*(t-e))},weekday:function(t){var e=(this.day()+7-this.lang()._week.dow)%7;return null==t?e:this.add("d",t-e)},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return D(this.year(),1,4)},weeksInYear:function(){var t=this._lang._week;return D(this.year(),t.dow,t.doy)},get:function(t){return t=w(t),this[t]()},set:function(t,e){return t=w(t),"function"==typeof this[t]&&this[t](e),this},lang:function(t){return t===n?this._lang:(this._lang=P(t),this)}}),ve.fn.millisecond=ve.fn.milliseconds=ue("Milliseconds",!1),ve.fn.second=ve.fn.seconds=ue("Seconds",!1),ve.fn.minute=ve.fn.minutes=ue("Minutes",!1),ve.fn.hour=ve.fn.hours=ue("Hours",!0),ve.fn.date=ue("Date",!0),ve.fn.dates=h("dates accessor is deprecated. Use date instead.",ue("Date",!0)),ve.fn.year=ue("FullYear",!0),ve.fn.years=h("years accessor is deprecated. Use year instead.",ue("FullYear",!0)),ve.fn.days=ve.fn.day,ve.fn.months=ve.fn.month,ve.fn.weeks=ve.fn.week,ve.fn.isoWeeks=ve.fn.isoWeek,ve.fn.quarters=ve.fn.quarter,ve.fn.toJSON=ve.fn.toISOString,m(ve.duration.fn=u.prototype,{_bubble:function(){var t,e,i,s,o=this._milliseconds,n=this._days,r=this._months,a=this._data;a.milliseconds=o%1e3,t=f(o/1e3),a.seconds=t%60,e=f(t/60),a.minutes=e%60,i=f(e/60),a.hours=i%24,n+=f(i/24),a.days=n%30,r+=f(n/30),a.months=r%12,s=f(r/12),a.years=s},weeks:function(){return f(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*C(this._months/12)},humanize:function(t){var e=+this,i=ne(e,!t,this.lang());return t&&(i=this.lang().pastFuture(e,i)),this.lang().postformat(i)},add:function(t,e){var i=ve.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=ve.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=w(t),this[t.toLowerCase()+"s"]()},as:function(t){return t=w(t),this["as"+t.charAt(0).toUpperCase()+t.slice(1)+"s"]()},lang:ve.fn.lang,toIsoString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"}});for(be in ni)ni.hasOwnProperty(be)&&(ge(be,ni[be]),me(be.toLowerCase()));ge("Weeks",6048e5),ve.duration.fn.asMonths=function(){return(+this-31536e6*this.years())/2592e6+12*this.years()},ve.lang("en",{ordinal:function(t){var e=t%10,i=1===C(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ne?o.exports=ve:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(xe.moment=ye),ve}.call(e,i,e,o),!(s!==n&&(o.exports=s)),fe(!0))}).call(this)}).call(e,function(){return this}(),i(60)(t))},function(t){function e(t,e,i){return t.addEventListener?t.addEventListener(e,i,!1):void t.attachEvent("on"+e,i)}function i(t){return"keypress"==t.type?String.fromCharCode(t.which):_[t.which]?_[t.which]:x[t.which]?x[t.which]:String.fromCharCode(t.which).toLowerCase()}function s(t){var e=t.target||t.srcElement,i=e.tagName;return(" "+e.className+" ").indexOf(" mousetrap ")>-1?!1:"INPUT"==i||"SELECT"==i||"TEXTAREA"==i||e.contentEditable&&"true"==e.contentEditable}function o(t,e){return t.sort().join(",")===e.sort().join(",")}function n(t){t=t||{};var e,i=!1;for(e in E)t[e]?i=!0:E[e]=0;i||(T=!1)}function r(t,e,i,s,n){var r,a,h=[];if(!M[t])return[];for("keyup"==i&&c(t)&&(e=[t]),r=0;r95&&112>t||_.hasOwnProperty(t)&&(y[_[t]]=t)}return y}function m(t,e,i){return i||(i=u()[t]?"keydown":"keypress"),"keypress"==i&&e.length&&(i="keydown"),i}function g(t,e,s,o){E[t]=0,o||(o=m(e[0],[]));var r,a=function(){T=o,++E[t],p()},d=function(t){h(s,t),"keyup"!==o&&(D=i(t)),setTimeout(n,10)};for(r=0;r1)return g(t,d,e,i);for(h="+"===t?["+"]:t.split("+"),n=0;n":".","?":"/","|":"\\"},S={option:"alt",command:"meta","return":"enter",escape:"esc"},M={},C={},E={},D=!1,T=!1,L=1;20>L;++L)_[111+L]="f"+L;for(L=0;9>=L;++L)_[L+96]=L;e(document,"keypress",l),e(document,"keydown",l),e(document,"keyup",l);var O={bind:function(t,e,i){return v(t instanceof Array?t:[t],e,i),C[t+":"+i]=e,this},unbind:function(t,e){return C[t+":"+e]&&(delete C[t+":"+e],this.bind(t,function(){},e)),this},trigger:function(t,e){return C[t+":"+e](),this},reset:function(){return M={},C={},this}};t.exports=O},function(t,e,i){var s;!function(o,n){"use strict";function r(){a.READY||(w.determineEventTypes(),x.each(a.gestures,function(t){M.register(t)}),w.onTouch(a.DOCUMENT,v,M.detect),w.onTouch(a.DOCUMENT,y,M.detect),a.READY=!0)}var a=function C(t,e){return new C.Instance(t,e||{})};a.VERSION="1.1.3",a.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},a.DOCUMENT=document,a.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,a.HAS_TOUCHEVENTS="ontouchstart"in o,a.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),a.NO_MOUSEEVENTS=a.HAS_TOUCHEVENTS&&a.IS_MOBILE||a.HAS_POINTEREVENTS,a.CALCULATE_INTERVAL=25;var h={},d=a.DIRECTION_DOWN="down",l=a.DIRECTION_LEFT="left",c=a.DIRECTION_UP="up",p=a.DIRECTION_RIGHT="right",u=a.POINTER_MOUSE="mouse",m=a.POINTER_TOUCH="touch",g=a.POINTER_PEN="pen",f=a.EVENT_START="start",v=a.EVENT_MOVE="move",y=a.EVENT_END="end",b=a.EVENT_RELEASE="release",_=a.EVENT_TOUCH="touch";a.READY=!1,a.plugins=a.plugins||{},a.gestures=a.gestures||{};var x=a.utils={extend:function(t,e,i){for(var s in e)!e.hasOwnProperty(s)||t[s]!==n&&i||(t[s]=e[s]);return t},on:function(t,e,i){t.addEventListener(e,i,!1)},off:function(t,e,i){t.removeEventListener(e,i,!1)},each:function(t,e,i){var s,o;if("forEach"in t)t.forEach(e,i);else if(t.length!==n){for(s=0,o=t.length;o>s;s++)if(e.call(i,t[s],s,t)===!1)return}else for(s in t)if(t.hasOwnProperty(s)&&e.call(i,t[s],s,t)===!1)return},inStr:function(t,e){return t.indexOf(e)>-1},inArray:function(t,e){if(t.indexOf){var i=t.indexOf(e);return-1===i?!1:i}for(var s=0,o=t.length;o>s;s++)if(t[s]===e)return s;return!1},toArray:function(t){return Array.prototype.slice.call(t,0)},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){var e=[],i=[],s=[],o=[],n=Math.min,r=Math.max;return 1===t.length?{pageX:t[0].pageX,pageY:t[0].pageY,clientX:t[0].clientX,clientY:t[0].clientY}:(x.each(t,function(t){e.push(t.pageX),i.push(t.pageY),s.push(t.clientX),o.push(t.clientY)}),{pageX:(n.apply(Math,e)+r.apply(Math,e))/2,pageY:(n.apply(Math,i)+r.apply(Math,i))/2,clientX:(n.apply(Math,s)+r.apply(Math,s))/2,clientY:(n.apply(Math,o)+r.apply(Math,o))/2})},getVelocity:function(t,e,i){return{x:Math.abs(e/t)||0,y:Math.abs(i/t)||0}},getAngle:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return 180*Math.atan2(s,i)/Math.PI},getDirection:function(t,e){var i=Math.abs(t.clientX-e.clientX),s=Math.abs(t.clientY-e.clientY);return i>=s?t.clientX-e.clientX>0?l:p:t.clientY-e.clientY>0?c:d},getDistance:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return Math.sqrt(i*i+s*s)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==c||t==d},setPrefixedCss:function(t,e,i,s){var o=["","Webkit","Moz","O","ms"];e=x.toCamelCase(e);for(var n=0;n0&&this.started&&(r=v),this.started=!0;var d=this.collectEventData(i,r,o,t);return e!=y&&s.call(M,d),a&&(d.changedLength=h,d.eventType=a,s.call(M,d),d.eventType=r,delete d.changedLength),r==y&&(s.call(M,d),this.started=!1),r},determineEventTypes:function(){var t;return t=a.HAS_POINTEREVENTS?o.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:a.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],h[f]=t[0],h[v]=t[1],h[y]=t[2],h},getTouchList:function(t,e){if(a.HAS_POINTEREVENTS)return S.getTouchList();if(t.touches){if(e==v)return t.touches;var i=[],s=[].concat(x.toArray(t.touches),x.toArray(t.changedTouches)),o=[];return x.each(s,function(t){x.inArray(i,t.identifier)===!1&&o.push(t),i.push(t.identifier)}),o}return t.identifier=1,[t]},collectEventData:function(t,e,i,s){var o=m;return x.inStr(s.type,"mouse")||S.matchType(u,s)?o=u:S.matchType(g,s)&&(o=g),{center:x.getCenter(i),timeStamp:Date.now(),target:s.target,touches:i,eventType:e,pointerType:o,srcEvent:s,preventDefault:function(){var t=this.srcEvent;t.preventManipulation&&t.preventManipulation(),t.preventDefault&&t.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return M.stopDetect()}}}},S=a.PointerEvent={pointers:{},getTouchList:function(){var t=[];return x.each(this.pointers,function(e){t.push(e)}),t},updatePointer:function(t,e){t==y||t!=y&&1!==e.buttons?delete this.pointers[e.pointerId]:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e)},matchType:function(t,e){if(!e.pointerType)return!1;var i=e.pointerType,s={};return s[u]=i===(e.MSPOINTER_TYPE_MOUSE||u),s[m]=i===(e.MSPOINTER_TYPE_TOUCH||m),s[g]=i===(e.MSPOINTER_TYPE_PEN||g),s[t]},reset:function(){this.pointers={}}},M=a.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:x.extend({},e),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);var e=this.current.inst,i=e.options;return x.each(this.gestures,function(s){!this.stopped&&e.enabled&&i[s.name]&&s.handler.call(s,t,e)},this),this.current&&(this.current.lastEvent=t),t.eventType==y&&this.stopDetect(),t}},stopDetect:function(){this.previous=x.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(t,e,i,s,o){var n=this.current,r=!1,h=n.lastCalcEvent,d=n.lastCalcData;h&&t.timeStamp-h.timeStamp>a.CALCULATE_INTERVAL&&(e=h.center,i=t.timeStamp-h.timeStamp,s=t.center.clientX-h.center.clientX,o=t.center.clientY-h.center.clientY,r=!0),(t.eventType==_||t.eventType==b)&&(n.futureCalcEvent=t),(!n.lastCalcEvent||r)&&(d.velocity=x.getVelocity(i,s,o),d.angle=x.getAngle(e,t.center),d.direction=x.getDirection(e,t.center),n.lastCalcEvent=n.futureCalcEvent||t,n.futureCalcEvent=t),t.velocityX=d.velocity.x,t.velocityY=d.velocity.y,t.interimAngle=d.angle,t.interimDirection=d.direction},extendEventData:function(t){var e=this.current,i=e.startEvent,s=e.lastEvent||i;(t.eventType==_||t.eventType==b)&&(i.touches=[],x.each(t.touches,function(t){i.touches.push({clientX:t.clientX,clientY:t.clientY})}));var o=t.timeStamp-i.timeStamp,n=t.center.clientX-i.center.clientX,r=t.center.clientY-i.center.clientY;return this.getCalculatedData(t,s.center,o,n,r),x.extend(t,{startEvent:i,deltaTime:o,deltaX:n,deltaY:r,distance:x.getDistance(i.center,t.center),angle:x.getAngle(i.center,t.center),direction:x.getDirection(i.center,t.center),scale:x.getScale(i.touches,t.touches),rotation:x.getRotation(i.touches,t.touches)}),t},register:function(t){var e=t.defaults||{};return e[t.name]===n&&(e[t.name]=!0),x.extend(a.defaults,e,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}};a.Instance=function(t,e){var i=this;r(),this.element=t,this.enabled=!0,x.each(e,function(t,i){delete e[i],e[x.toCamelCase(i)]=t}),this.options=x.extend(x.extend({},a.defaults),e||{}),this.options.behavior&&x.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=w.onTouch(t,f,function(t){i.enabled&&t.eventType==f?M.startDetect(i,t):t.eventType==_&&M.detect(t)}),this.eventHandlers=[]},a.Instance.prototype={on:function(t,e){var i=this;return w.on(i.element,t,e,function(t){i.eventHandlers.push({gesture:t,handler:e})}),i},off:function(t,e){var i=this;return w.off(i.element,t,e,function(t){var s=x.inArray({gesture:t,handler:e});s!==!1&&i.eventHandlers.splice(s,1)}),i},trigger:function(t,e){e||(e={});var i=a.DOCUMENT.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e;var s=this.element;return x.hasParent(e.target,s)&&(s=e.target),s.dispatchEvent(i),this},enable:function(t){return this.enabled=t,this},dispose:function(){var t,e;for(x.toggleBehavior(this.element,this.options.behavior,!1),t=-1;e=this.eventHandlers[++t];)x.off(this.element,e.gesture,e.handler);return this.eventHandlers=[],w.off(this.element,h[f],this.eventStartHandler),null}},function(t){function e(e,s){var o=M.current;if(!(s.options.dragMaxTouches>0&&e.touches.length>s.options.dragMaxTouches))switch(e.eventType){case f:i=!1;break;case v:if(e.distance0)){var r=Math.abs(s.options.dragMinDistance/e.distance);n.pageX+=e.deltaX*r,n.pageY+=e.deltaY*r,n.clientX+=e.deltaX*r,n.clientY+=e.deltaY*r,e=M.extendEventData(e)}(o.lastEvent.dragLockToAxis||s.options.dragLockToAxis&&s.options.dragLockMinDistance<=e.distance)&&(e.dragLockToAxis=!0);var a=o.lastEvent.direction;e.dragLockToAxis&&a!==e.direction&&(e.direction=x.isVertical(a)?e.deltaY<0?c:d:e.deltaX<0?l:p),i||(s.trigger(t+"start",e),i=!0),s.trigger(t,e),s.trigger(t+e.direction,e);var h=x.isVertical(e.direction);(s.options.dragBlockVertical&&h||s.options.dragBlockHorizontal&&!h)&&e.preventDefault();break;case b:i&&e.changedLength<=s.options.dragMaxTouches&&(s.trigger(t+"end",e),i=!1);break;case y:i=!1}}var i=!1;a.gestures.Drag={name:t,index:50,handler:e,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),a.gestures.Gesture={name:"gesture",index:1337,handler:function(t,e){e.trigger(this.name,t)}},function(t){function e(e,s){var o=s.options,n=M.current;switch(e.eventType){case f:clearTimeout(i),n.name=t,i=setTimeout(function(){n&&n.name==t&&s.trigger(t,e)},o.holdTimeout);break;case v:e.distance>o.holdThreshold&&clearTimeout(i);break;case b:clearTimeout(i)}}var i;a.gestures.Hold={name:t,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:e}}("hold"),a.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==b&&e.trigger(this.name,t)}},a.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(t,e){if(t.eventType==b){var i=t.touches.length,s=e.options;if(is.swipeMaxTouches)return;(t.velocityX>s.swipeVelocityX||t.velocityY>s.swipeVelocityY)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},function(t){function e(e,s){var o,n,r=s.options,a=M.current,h=M.previous;switch(e.eventType){case f:i=!1;break;case v:i=i||e.distance>r.tapMaxDistance;break;case y:!x.inStr(e.srcEvent.type,"cancel")&&e.deltaTimes.options.transformMinRotation&&s.trigger("rotate",e),o>s.options.transformMinScale&&(s.trigger("pinch",e),s.trigger("pinch"+(e.scale<1?"in":"out"),e));break;case b:i&&e.changedLength<2&&(s.trigger(t+"end",e),i=!1)}}var i=!1;a.gestures.Transform={name:t,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:e}}("transform"),s=function(){return a}.call(e,i,e,t),!(s!==n&&(t.exports=s))}(window)},function(t,e){e.startWithClustering=function(){this.clusterToFit(this.constants.clustering.initialMaxNodes,!0),this.updateLabels(),this.stabilize&&this._stabilize(),this.start()},e.clusterToFit=function(t,e){for(var i=this.nodeIndices.length,s=50,o=0;i>t&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.mass>n.from.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.mass>e.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new Node({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInSupportSector=function(t,e){if(void 0===e)this._switchToSupportSector(),this[t]();else{this._switchToSupportSector();var i=Array.prototype.splice.call(arguments,1);i.length>1?this[t](i[0],i[1]):this[t](e)}this._loadLatestSector()},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ee;e++){s=t[e];var o=this.nodes[s];if(!o)throw new RangeError('Node with id "'+s+'" not found');this._selectObject(o,!0,!0)}console.log("setSelection is deprecated. Please use selectNodes instead."),this.redraw()},e.selectNodes=function(t,e){var i,s,o;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),i=0,s=t.length;s>i;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,highlightEdges)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(36),n=i(33);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild)},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=document.getElementById("network-manipulationDiv"),e=document.getElementById("network-manipulation-closeDiv"),i=document.getElementById("network-manipulation-editMode");1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){if(this.boundFunction&&this.off("select",this.boundFunction),void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDiv.innerHTML=""+this.constants.labels.add+"
"+this.constants.labels.link+"",1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDiv.innerHTML+="
"+this.constants.labels.editNode+"":1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDiv.innerHTML+="
"+this.constants.labels.editEdge+""),0==this._selectionIsEmpty()&&(this.manipulationDiv.innerHTML+="
"+this.constants.labels.del+"");var t=document.getElementById("network-manipulate-addNode");t.onclick=this._createAddNodeToolbar.bind(this);var e=document.getElementById("network-manipulate-connectNode");if(e.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit){var i=document.getElementById("network-manipulate-editNode");i.onclick=this._editNode.bind(this)}else if(1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()){var i=document.getElementById("network-manipulate-editEdge");i.onclick=this._createEditEdgeToolbar.bind(this)}if(0==this._selectionIsEmpty()){var s=document.getElementById("network-manipulate-delete");s.onclick=this._deleteSelected.bind(this)}var o=document.getElementById("network-manipulation-closeDiv");o.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{this.editModeDiv.innerHTML=""+this.constants.labels.edit+"";var n=document.getElementById("network-manipulate-editModeButton");n.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction),this.manipulationDiv.innerHTML=""+this.constants.labels.back+"
"+this.constants.labels.addDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0,this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDiv.innerHTML=""+this.constants.labels.back+"
"+this.constants.labels.linkDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._handleOnRelease=this._handleOnRelease,this._handleTouch=this._handleConnect,this._handleOnRelease=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes(),this.manipulationDiv.innerHTML=""+this.constants.labels.back+"
"+this.constants.labels.editEdgeDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._handleOnRelease=this._handleOnRelease,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._handleOnRelease=this._releaseControlNode,this._redraw()},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!=e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);null!=e&&(e.clusterSize>1?alert("Cannot create edges to a cluster."):(this._selectObject(e,!1),this.sectors.support.nodes.targetNode=new o({id:"targetNode"},{},{},this.constants),this.sectors.support.nodes.targetNode.x=e.x,this.sectors.support.nodes.targetNode.y=e.y,this.sectors.support.nodes.targetViaNode=new o({id:"targetViaNode"},{},{},this.constants),this.sectors.support.nodes.targetViaNode.x=e.x,this.sectors.support.nodes.targetViaNode.y=e.y,this.sectors.support.nodes.targetViaNode.parentEdgeId="connectionEdge",this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:this.sectors.support.nodes.targetNode.id},this,this.constants),this.edges.connectionEdge.from=e,this.edges.connectionEdge.connected=!0,this.edges.connectionEdge.smooth=!0,this.edges.connectionEdge.selected=!0,this.edges.connectionEdge.to=this.sectors.support.nodes.targetNode,this.edges.connectionEdge.via=this.sectors.support.nodes.targetViaNode,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center);this.sectors.support.nodes.targetNode.x=this._XconvertDOMtoCanvas(e.x),this.sectors.support.nodes.targetNode.y=this._YconvertDOMtoCanvas(e.y),this.sectors.support.nodes.targetViaNode.x=.5*(this._XconvertDOMtoCanvas(e.x)+this.edges.connectionEdge.from.x),this.sectors.support.nodes.targetViaNode.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()))}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var e=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var i=this._getNodeAt(t);null!=i&&(i.clusterSize>1?alert("Cannot create edges to a cluster."):(this._createEdge(e,i.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add)if(2==this.triggerFunctions.add.length){var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else alert(this.constants.labels.addError),this._createManipulatorBar(),this.moving=!0,this.start();else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect)if(2==this.triggerFunctions.connect.length){var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else alert(this.constants.labels.linkError),this.moving=!0,this.start();else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge)if(2==this.triggerFunctions.editEdge.length){var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else alert(this.constants.labels.linkError),this.moving=!0,this.start();else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(this.triggerFunctions.edit&&1==this.editMode){var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.group,shape:t.shape,color:{background:t.color.background,border:t.color.border,highlight:{background:t.color.highlight.background,border:t.color.highlight.border}}};if(2==this.triggerFunctions.edit.length){var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else alert(this.constants.labels.editError)}else alert(this.constants.labels.editBoundError)},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.labels.deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};(this.triggerFunctions.del.length=2)?this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()}):alert(this.constants.labels.deleteError)}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=i(1);e._cleanNavigation=function(){var t=document.getElementById("network-navigation_wrapper");null!=t&&this.containerElement.removeChild(t),document.onmouseup=null},e._loadNavigationElements=function(){this._cleanNavigation(),this.navigationDivs={};var t=["up","down","left","right","zoomIn","zoomOut","zoomExtends"],e=["_moveUp","_moveDown","_moveLeft","_moveRight","_zoomIn","_zoomOut","zoomExtent"];this.navigationDivs.wrapper=document.createElement("div"),this.navigationDivs.wrapper.id="network-navigation_wrapper",this.navigationDivs.wrapper.style.position="absolute",this.navigationDivs.wrapper.style.width=this.frame.canvas.clientWidth+"px",this.navigationDivs.wrapper.style.height=this.frame.canvas.clientHeight+"px",this.containerElement.insertBefore(this.navigationDivs.wrapper,this.frame);for(var i=0;i0){"RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation*=-1:this.constants.hierarchicalLayout.levelSeparation=Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level)) -}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,e.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t,e,i){function s(t){return i(o(t))}function o(t){return n[t]||function(){throw new Error("Cannot find module '"+t+"'.")}()}var n={};s.keys=function(){return Object.keys(n)},s.resolve=o,t.exports=s},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,g=this.constants.physics.repulsion.nodeDistance,f=g;for(d=0;di&&(r=.5*f>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t)}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l)}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,g=.5*(o+r),f=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:g-m,maxX:g+m,minY:f-m,maxY:f+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])}); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(s){if(i[s])return i[s].exports;var o=i[s]={exports:{},id:s,loaded:!1};return t[s].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(2),e.DataSet=i(3),e.DataView=i(4),e.Graph3d=i(5),e.graph3d={Camera:i(6),Filter:i(7),Point2d:i(8),Point3d:i(9),Slider:i(10),StepNumber:i(11)},e.Timeline=i(12),e.Graph2d=i(13),e.timeline={DataStep:i(14),Range:i(15),stack:i(16),TimeStep:i(17),components:{items:{Item:i(29),ItemBox:i(28),ItemPoint:i(30),ItemRange:i(31)},Component:i(18),CurrentTime:i(19),CustomTime:i(20),DataAxis:i(21),GraphGroup:i(22),Group:i(23),ItemSet:i(24),Legend:i(25),LineGraph:i(26),TimeAxis:i(27)}},e.Network=i(32),e.network={Edge:i(33),Groups:i(34),Images:i(35),Node:i(36),Popup:i(37),dotparser:i(38),gephiParser:i(39)},e.Graph=function(){throw new Error("Graph is renamed to Network. Please create a graph as new vis.Network(...)")},e.moment=i(40),e.hammer=i(41)},function(module,exports,__webpack_require__){var moment=__webpack_require__(40);exports.isNumber=function(t){return t instanceof Number||"number"==typeof t},exports.isString=function(t){return t instanceof String||"string"==typeof t},exports.isDate=function(t){if(t instanceof Date)return!0;if(exports.isString(t)){var e=ASPDateRegex.exec(t);if(e)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},exports.isDataTable=function(t){return"undefined"!=typeof google&&google.visualization&&google.visualization.DataTable&&t instanceof google.visualization.DataTable},exports.randomUUID=function(){var t=function(){return Math.floor(65536*Math.random()).toString(16)};return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()},exports.extend=function(t){for(var e=1,i=arguments.length;i>e;e++){var s=arguments[e];for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o])}return t},exports.selectiveExtend=function(t,e){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var i=2;ii;i++)if(t[i]!=e[i])return!1;return!0},exports.convert=function(t,e){var i;if(void 0===t)return void 0;if(null===t)return null;if(!e)return t;if("string"!=typeof e&&!(e instanceof String))throw new Error("Type must be a string");switch(e){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(moment.isMoment(t))return new Date(t.valueOf());if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])):moment(t).toDate();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"Moment":if(exports.isNumber(t))return moment(t);if(t instanceof Date)return moment(t.valueOf());if(moment.isMoment(t))return moment(t);if(exports.isString(t))return i=ASPDateRegex.exec(t),moment(i?Number(i[1]):t);throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"ISODate":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(moment.isMoment(t))return t.toDate().toISOString();if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ISODate");case"ASPDate":if(exports.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(exports.isString(t)){i=ASPDateRegex.exec(t);var s;return s=i?new Date(Number(i[1])).valueOf():new Date(t).valueOf(),"/Date("+s+")/"}throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+e+'"')}};var ASPDateRegex=/^\/?Date\((\-?\d+)/i;exports.getType=function(t){var e=typeof t;return"object"==e?null==t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":t instanceof Array?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":e},exports.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left+window.pageXOffset},exports.getAbsoluteTop=function(t){return t.getBoundingClientRect().top+window.pageYOffset},exports.addClassName=function(t,e){var i=t.className.split(" ");-1==i.indexOf(e)&&(i.push(e),t.className=i.join(" "))},exports.removeClassName=function(t,e){var i=t.className.split(" "),s=i.indexOf(e);-1!=s&&(i.splice(s,1),t.className=i.join(" "))},exports.forEach=function(t,e){var i,s;if(t instanceof Array)for(i=0,s=t.length;s>i;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},exports.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},exports.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},exports.addEventListener=function(t,e,i,s){t.addEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,s)):t.attachEvent("on"+e,i)},exports.removeEventListener=function(t,e,i,s){t.removeEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,s)):t.detachEvent("on"+e,i)},exports.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},exports.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},exports.option={},exports.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},exports.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},exports.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},exports.option.asSize=function(t,e){return"function"==typeof t&&(t=t()),exports.isString(t)?t:exports.isNumber(t)?t+"px":e||null},exports.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},exports.GiveDec=function(Hex){var Value;return Value="A"==Hex?10:"B"==Hex?11:"C"==Hex?12:"D"==Hex?13:"E"==Hex?14:"F"==Hex?15:eval(Hex)},exports.GiveHex=function(t){var e;return e=10==t?"A":11==t?"B":12==t?"C":13==t?"D":14==t?"E":15==t?"F":""+t},exports.parseColor=function(t){var e;if(exports.isString(t)){if(exports.isValidRGB(t)){var i=t.substr(4).substr(0,t.length-5).split(",");t=exports.RGBToHex(i[0],i[1],i[2])}if(exports.isValidHex(t)){var s=exports.hexToHSV(t),o={h:s.h,s:.45*s.s,v:Math.min(1,1.05*s.v)},n={h:s.h,s:Math.min(1,1.25*s.v),v:.6*s.v},r=exports.HSVToHex(n.h,n.h,n.v),a=exports.HSVToHex(o.h,o.s,o.v);e={background:t,border:r,highlight:{background:a,border:r},hover:{background:a,border:r}}}else e={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else e={},e.background=t.background||"white",e.border=t.border||e.background,exports.isString(t.highlight)?e.highlight={border:t.highlight,background:t.highlight}:(e.highlight={},e.highlight.background=t.highlight&&t.highlight.background||e.background,e.highlight.border=t.highlight&&t.highlight.border||e.border),exports.isString(t.hover)?e.hover={border:t.hover,background:t.hover}:(e.hover={},e.hover.background=t.hover&&t.hover.background||e.background,e.hover.border=t.hover&&t.hover.border||e.border);return e},exports.hexToRGB=function(t){t=t.replace("#","").toUpperCase();var e=exports.GiveDec(t.substring(0,1)),i=exports.GiveDec(t.substring(1,2)),s=exports.GiveDec(t.substring(2,3)),o=exports.GiveDec(t.substring(3,4)),n=exports.GiveDec(t.substring(4,5)),r=exports.GiveDec(t.substring(5,6)),a=16*e+i,h=16*s+o,i=16*n+r;return{r:a,g:h,b:i}},exports.RGBToHex=function(t,e,i){var s=exports.GiveHex(Math.floor(t/16)),o=exports.GiveHex(t%16),n=exports.GiveHex(Math.floor(e/16)),r=exports.GiveHex(e%16),a=exports.GiveHex(Math.floor(i/16)),h=exports.GiveHex(i%16),d=s+o+n+r+a+h;return"#"+d},exports.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var s=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));if(s==o)return{h:0,s:0,v:s};var n=t==s?e-i:i==s?t-e:i-t,r=t==s?3:i==s?1:5,a=60*(r-n/(o-s))/360,h=(o-s)/o,d=o;return{h:a,s:h,v:d}},exports.HSVToRGB=function(t,e,i){var s,o,n,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:s=i,o=l,n=h;break;case 1:s=d,o=i,n=h;break;case 2:s=h,o=i,n=l;break;case 3:s=h,o=d,n=i;break;case 4:s=l,o=h,n=i;break;case 5:s=i,o=h,n=d}return{r:Math.floor(255*s),g:Math.floor(255*o),b:Math.floor(255*n)}},exports.HSVToHex=function(t,e,i){var s=exports.HSVToRGB(t,e,i);return exports.RGBToHex(s.r,s.g,s.b)},exports.hexToHSV=function(t){var e=exports.hexToRGB(t);return exports.RGBToHSV(e.r,e.g,e.b)},exports.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},exports.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},exports.selectiveBridgeObject=function(t,e){if("object"==typeof e){for(var i=Object.create(e),s=0;sa;)o=void 0===s?n[u][i]:n[u][i][s],n[u].isVisible(e)?h=!0:(o=r&&console.log("BinarySearch too many iterations. Aborting.")}return u},exports.binarySearchGeneric=function(t,e,i,s){var o,n,r,a,h=1e4,d=0,l=t,c=!1,p=0,u=l.length,f=p,m=u,g=Math.floor(.5*(u+p));if(0==u)g=-1;else if(1==u)r=l[g][i],g=r==e?0:-1;else{for(u-=1;0==c&&h>d;)n=l[Math.max(0,g-1)][i],r=l[g][i],a=l[Math.min(l.length-1,g+1)][i],r==e||e>n&&r>e||e>r&&a>e?(c=!0,r!=e&&("before"==s?e>n&&r>e&&(g=Math.max(0,g-1)):e>r&&a>e&&(g=Math.min(l.length-1,g+1)))):(e>r?f=Math.floor(.5*(u+p)):m=Math.floor(.5*(u+p)),o=Math.floor(.5*(u+p)),p==f&&u==m?(g=-1,c=!0):(u=m,p=f,g=Math.floor(.5*(u+p)))),d++;d>=h&&console.log("BinarySearch too many iterations. Aborting.")}return g}},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(s)):(s=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.getDOMElement=function(t,e,i){var s;return e.hasOwnProperty(t)?e[t].redundant.length>0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElement(t),i.appendChild(s)):(s=document.createElement(t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.drawPoint=function(t,i,s,o,n){var r;return"circle"==s.options.drawPoints.style?(r=e.getSVGElement("circle",o,n),r.setAttributeNS(null,"cx",t),r.setAttributeNS(null,"cy",i),r.setAttributeNS(null,"r",.5*s.options.drawPoints.size),r.setAttributeNS(null,"class",s.className+" point")):(r=e.getSVGElement("rect",o,n),r.setAttributeNS(null,"x",t-.5*s.options.drawPoints.size),r.setAttributeNS(null,"y",i-.5*s.options.drawPoints.size),r.setAttributeNS(null,"width",s.options.drawPoints.size),r.setAttributeNS(null,"height",s.options.drawPoints.size),r.setAttributeNS(null,"class",s.className+" point")),r},e.drawBar=function(t,i,s,o,n,r,a){var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*s),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",s),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",n)}},function(t,e,i){function s(t,e){if(!t||Array.isArray(t)||o.isDataTable(t)||(e=t,t=null),this._options=e||{},this._data={},this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i in this._options.type)if(this._options.type.hasOwnProperty(i)){var s=this._options.type[i];this._type[i]="Date"==s||"ISODate"==s||"ASPDate"==s?"Date":s}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t)}var o=i(1);s.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},s.prototype.subscribe=s.prototype.on,s.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},s.prototype.unsubscribe=s.prototype.off,s.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var s=[];t in this._subscribers&&(s=s.concat(this._subscribers[t])),"*"in this._subscribers&&(s=s.concat(this._subscribers["*"]));for(var o=0;or;r++)i=n._addItem(t[r]),s.push(i);else if(o.isDataTable(t))for(var h=this._getColumnNames(t),d=0,l=t.getNumberOfRows();l>d;d++){for(var c={},p=0,u=h.length;u>p;p++){var f=h[p];c[f]=t.getValue(d,p)}i=n._addItem(c),s.push(i)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),s.push(i)}return s.length&&this._trigger("add",{items:s},e),s},s.prototype.update=function(t,e){var i=[],s=[],n=this,r=n._fieldId,a=function(t){var e=t[r];n._data[e]?(e=n._updateItem(t),s.push(e)):(e=n._addItem(t),i.push(e))};if(Array.isArray(t))for(var h=0,d=t.length;d>h;h++)a(t[h]);else if(o.isDataTable(t))for(var l=this._getColumnNames(t),c=0,p=t.getNumberOfRows();p>c;c++){for(var u={},f=0,m=l.length;m>f;f++){var g=l[f];u[g]=t.getValue(c,f)}a(u)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");a(t)}return i.length&&this._trigger("add",{items:i},e),s.length&&this._trigger("update",{items:s},e),i.concat(s)},s.prototype.get=function(){var t,e,i,s,n=this,r=o.getType(arguments[0]);"String"==r||"Number"==r?(t=arguments[0],i=arguments[1],s=arguments[2]):"Array"==r?(e=arguments[0],i=arguments[1],s=arguments[2]):(i=arguments[0],s=arguments[1]);var a;if(i&&i.returnType){var h=["DataTable","Array","Object"];if(a=-1==h.indexOf(i.returnType)?"Array":i.returnType,s&&a!=o.getType(s))throw new Error('Type of parameter "data" ('+o.getType(s)+") does not correspond with specified options.type ("+i.type+")");if("DataTable"==a&&!o.isDataTable(s))throw new Error('Parameter "data" must be a DataTable when options.type is "DataTable"')}else a=s&&"DataTable"==o.getType(s)?"DataTable":"Array";var d,l,c,p,u=i&&i.type||this._options.type,f=i&&i.filter,m=[];if(void 0!=t)d=n._getItem(t,u),f&&!f(d)&&(d=null);else if(void 0!=e)for(c=0,p=e.length;p>c;c++)d=n._getItem(e[c],u),(!f||f(d))&&m.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=n._getItem(l,u),(!f||f(d))&&m.push(d));if(i&&i.order&&void 0==t&&this._sort(m,i.order),i&&i.fields){var g=i.fields;if(void 0!=t)d=this._filterFields(d,g);else for(c=0,p=m.length;p>c;c++)m[c]=this._filterFields(m[c],g)}if("DataTable"==a){var v=this._getColumnNames(s);if(void 0!=t)n._appendRow(s,v,d);else for(c=0;cc;c++)s.push(m[c]);return s}return m},s.prototype.getIds=function(t){var e,i,s,o,n,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=[];if(a)if(h){n=[];for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&n.push(o));for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&l.push(o[this._fieldId]));else if(h){n=[];for(s in r)r.hasOwnProperty(s)&&n.push(r[s]);for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=r[s],l.push(o[this._fieldId]));return l},s.prototype.getDataSet=function(){return this},s.prototype.forEach=function(t,e){var i,s,o=e&&e.filter,n=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],s=i[this._fieldId],t(i,s);else for(s in r)r.hasOwnProperty(s)&&(i=this._getItem(s,n),(!o||o(i))&&t(i,s))},s.prototype.map=function(t,e){var i,s=e&&e.filter,o=e&&e.type||this._options.type,n=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,o),(!s||s(i))&&n.push(t(i,a)));return e&&e.order&&this._sort(n,e.order),n},s.prototype._filterFields=function(t,e){var i={};for(var s in t)t.hasOwnProperty(s)&&-1!=e.indexOf(s)&&(i[s]=t[s]);return i},s.prototype._sort=function(t,e){if(o.isString(e)){var i=e;t.sort(function(t,e){var s=t[i],o=e[i];return s>o?1:o>s?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},s.prototype.remove=function(t,e){var i,s,o,n=[];if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)o=this._remove(t[i]),null!=o&&n.push(o);else o=this._remove(t),null!=o&&n.push(o);return n.length&&this._trigger("remove",{items:n},e),n},s.prototype._remove=function(t){if(o.isNumber(t)||o.isString(t)){if(this._data[t])return delete this._data[t],t}else if(t instanceof Object){var e=t[this._fieldId];if(e&&this._data[e])return delete this._data[e],e}return null},s.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this._trigger("remove",{items:e},t),e},s.prototype.max=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||r>s)&&(i=n,s=r)}return i},s.prototype.min=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||s>r)&&(i=n,s=r)}return i},s.prototype.distinct=function(t){var e,i=this._data,s=[],n=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(s[e]==d){l=!0;break}l||void 0===d||(s[r]=d,r++)}if(n)for(e=0;ei;i++)e[i]=t.getColumnId(i)||t.getColumnLabel(i);return e},s.prototype._appendRow=function(t,e,i){for(var s=t.addRow(),o=0,n=e.length;n>o;o++){var r=e[o];t.setValue(s,o,i[r])}},t.exports=s},function(t,e,i){function s(t,e){this._data=null,this._ids={},this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var o=i(1),n=i(3);s.prototype.setData=function(t){var e,i,s;if(this._data){this._data.unsubscribe&&this._data.unsubscribe("*",this.listener),e=[];for(var o in this._ids)this._ids.hasOwnProperty(o)&&e.push(o);this._ids={},this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,s=e.length;s>i;i++)o=e[i],this._ids[o]=!0;this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},s.prototype.get=function(){var t,e,i,s=this,n=o.getType(arguments[0]);"String"==n||"Number"==n||"Array"==n?(t=arguments[0],e=arguments[1],i=arguments[2]):(e=arguments[0],i=arguments[1]);var r=o.extend({},this._options,e);this._options.filter&&e&&e.filter&&(r.filter=function(t){return s._options.filter(t)&&e.filter(t)});var a=[];return void 0!=t&&a.push(t),a.push(r),a.push(i),this._data&&this._data.get.apply(this._data,a)},s.prototype.getIds=function(t){var e;if(this._data){var i,s=this._options.filter;i=t&&t.filter?s?function(e){return s(e)&&t.filter(e)}:t.filter:s,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},s.prototype.getDataSet=function(){for(var t=this;t instanceof s;)t=t._data;return t||null},s.prototype._onEvent=function(t,e,i){var s,o,n,r,a=e&&e.items,h=this._data,d=[],l=[],c=[];if(a&&h){switch(t){case"add":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r&&(this._ids[n]=!0,d.push(n));break;case"update":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r?this._ids[n]?l.push(n):(this._ids[n]=!0,d.push(n)):this._ids[n]&&(delete this._ids[n],c.push(n));break;case"remove":for(s=0,o=a.length;o>s;s++)n=a[s],this._ids[n]&&(delete this._ids[n],c.push(n))}d.length&&this._trigger("add",{items:d},i),l.length&&this._trigger("update",{items:l},i),c.length&&this._trigger("remove",{items:c},i)}},s.prototype.on=n.prototype.on,s.prototype.off=n.prototype.off,s.prototype._trigger=n.prototype._trigger,s.prototype.subscribe=s.prototype.on,s.prototype.unsubscribe=s.prototype.off,t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.width="400px",this.height="400px",this.margin=10,this.defaultXCenter="55%",this.defaultYCenter="50%",this.xLabel="x",this.yLabel="y",this.zLabel="z",this.filterLabel="time",this.legendLabel="value",this.style=s.STYLE.DOT,this.showPerspective=!0,this.showGrid=!0,this.keepAspectRatio=!0,this.showShadow=!1,this.showGrayBottom=!1,this.showTooltip=!1,this.verticalRatio=.5,this.animationInterval=1e3,this.animationPreload=!1,this.camera=new l,this.eye=new h(0,0,-1),this.dataTable=null,this.dataPoints=null,this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.colFilter=void 0,this.xMin=0,this.xStep=void 0,this.xMax=1,this.yMin=0,this.yStep=void 0,this.yMax=1,this.zMin=0,this.zStep=void 0,this.zMax=1,this.valueMin=0,this.valueMax=1,this.xBarWidth=1,this.yBarWidth=1,this.colorAxis="#4D4D4D",this.colorGrid="#D3D3D3",this.colorDot="#7DC1FF",this.colorDotBorder="#3267D2",this.create(),this.setOptions(i),e&&this.setData(e)}var o=i(46),n=i(3),r=i(4),a=i(1),h=i(9),d=i(8),l=i(6),c=i(7),p=i(10),u=i(11);o(s.prototype),s.prototype._setScale=function(){this.scale=new h(1/(this.xMax-this.xMin),1/(this.yMax-this.yMin),1/(this.zMax-this.zMin)),this.keepAspectRatio&&(this.scale.x3&&(this.colFilter=3);else{if(this.style!==s.STYLE.DOTCOLOR&&this.style!==s.STYLE.DOTSIZE&&this.style!==s.STYLE.BARCOLOR&&this.style!==s.STYLE.BARSIZE)throw'Unknown style "'+this.style+'"';this.colX=0,this.colY=1,this.colZ=2,this.colValue=3,t.getNumberOfColumns()>4&&(this.colFilter=4)}},s.prototype.getNumberOfRows=function(t){return t.length},s.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},s.prototype.getDistinctValues=function(t,e){for(var i=[],s=0;st[s][e]&&(i.min=t[s][e]),i.maxt;t++){var m=(t-p)/(f-p),g=240*m,v=this._hsv2rgb(g,1,1);c.strokeStyle=v,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.colorAxis,c.strokeRect(h,r,i,n)}if(this.style===s.STYLE.DOTSIZE&&(c.strokeStyle=this.colorAxis,c.fillStyle=this.colorDot,c.beginPath(),c.moveTo(h,r),c.lineTo(a,r),c.lineTo(a-i+e,d),c.lineTo(h,d),c.closePath(),c.fill(),c.stroke()),this.style===s.STYLE.DOTCOLOR||this.style===s.STYLE.DOTSIZE){var y=5,b=new u(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,o=this._convert3Dto2D(new h(x,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+i.getCurrent()+" ",o.x,o.y),i.next()}for(g.lineWidth=1,s=void 0===this.defaultYStep,i=new u(this.yMin,this.yMax,this.yStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,o=this._convert3Dto2D(new h(n,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+i.getCurrent()+" ",o.x,o.y),i.next();for(g.lineWidth=1,s=void 0===this.defaultZStep,i=new u(this.zMin,this.zMax,this.zStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new h(n,r,i.getCurrent())),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(t.x-b,t.y),g.stroke(),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(i.getCurrent()+" ",t.x-5,t.y),i.next();g.lineWidth=1,t=this._convert3Dto2D(new h(n,r,this.zMin)),e=this._convert3Dto2D(new h(n,r,this.zMax)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),g.lineWidth=1,p=this._convert3Dto2D(new h(this.xMin,this.yMin,this.zMin)),f=this._convert3Dto2D(new h(this.xMax,this.yMin,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(f.x,f.y),g.stroke(),p=this._convert3Dto2D(new h(this.xMin,this.yMax,this.zMin)),f=this._convert3Dto2D(new h(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(f.x,f.y),g.stroke(),g.lineWidth=1,t=this._convert3Dto2D(new h(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new h(this.xMin,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),t=this._convert3Dto2D(new h(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new h(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke();var w=this.xLabel;w.length>0&&(c=.1/this.scale.y,n=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-c:this.yMax+c,o=this._convert3Dto2D(new h(n,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(w,o.x,o.y));var S=this.yLabel;S.length>0&&(l=.1/this.scale.x,n=Math.sin(_)>0?this.xMin-l:this.xMax+l,r=(this.yMin+this.yMax)/2,o=this._convert3Dto2D(new h(n,r,this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(S,o.x,o.y));var M=this.zLabel;M.length>0&&(d=30,n=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,o=this._convert3Dto2D(new h(n,r,a)),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(M,o.x-d,o.y))},s.prototype._hsv2rgb=function(t,e,i){var s,o,n,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:s=r,o=h,n=0;break;case 1:s=h,o=r,n=0;break;case 2:s=0,o=r,n=h;break;case 3:s=0,o=h,n=r;break;case 4:s=h,o=0,n=r;break;case 5:s=r,o=0,n=h;break;default:s=0,o=0,n=0}return"RGB("+parseInt(255*s)+","+parseInt(255*o)+","+parseInt(255*n)+")"},s.prototype._redrawDataGrid=function(){var t,e,i,o,n,r,a,d,l,c,p,u,f,m=this.frame.canvas,g=m.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(n=0;n0}else r=!0;r?(f=(t.point.z+e.point.z+i.point.z+o.point.z)/4,c=240*(1-(f-this.zMin)*this.scale.z/this.verticalRatio),p=1,this.showShadow?(u=Math.min(1+S.x/M/2,1),a=this._hsv2rgb(c,p,u),d=a):(u=1,a=this._hsv2rgb(c,p,u),d=this.colorAxis)):(a="gray",d=this.colorAxis),l=.5,g.lineWidth=l,g.fillStyle=a,g.strokeStyle=d,g.beginPath(),g.moveTo(t.screen.x,t.screen.y),g.lineTo(e.screen.x,e.screen.y),g.lineTo(o.screen.x,o.screen.y),g.lineTo(i.screen.x,i.screen.y),g.closePath(),g.fill(),g.stroke()}}else for(n=0;np&&(p=0);var u,f,m;this.style===s.STYLE.DOTCOLOR?(u=240*(1-(d.point.value-this.valueMin)*this.scale.value),f=this._hsv2rgb(u,1,1),m=this._hsv2rgb(u,1,.8)):this.style===s.STYLE.DOTSIZE?(f=this.colorDot,m=this.colorDotBorder):(u=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),f=this._hsv2rgb(u,1,1),m=this._hsv2rgb(u,1,.8)),i.lineWidth=1,i.strokeStyle=m,i.fillStyle=f,i.beginPath(),i.arc(d.screen.x,d.screen.y,p,0,2*Math.PI,!0),i.fill(),i.stroke()}}},s.prototype._redrawDataBar=function(){var t,e,i,o,n=this.frame.canvas,r=n.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0&&(t=this.dataPoints[0],s.lineWidth=1,s.strokeStyle="blue",s.beginPath(),s.moveTo(t.screen.x,t.screen.y)),e=1;e0&&s.stroke()}},s.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this.startMouseX=getMouseX(t),this.startMouseY=getMouseY(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},a.addEventListener(document,"mousemove",e.onmousemove),a.addEventListener(document,"mouseup",e.onmouseup),a.preventDefault(t)}},s.prototype._onMouseMove=function(t){t=t||window.event;var e=parseFloat(getMouseX(t))-this.startMouseX,i=parseFloat(getMouseY(t))-this.startMouseY,s=this.startArmRotation.horizontal+e/200,o=this.startArmRotation.vertical+i/200,n=4,r=Math.sin(n/360*2*Math.PI);Math.abs(Math.sin(s))0?1:0>t?-1:0}var s=e[0],o=e[1],n=e[2],r=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x)),a=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),h=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},s.prototype._dataPointFromXY=function(t,e){var i,o=100,n=null,r=null,a=null,h=new d(t,e);if(this.style===s.STYLE.BAR||this.style===s.STYLE.BARCOLOR||this.style===s.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var l=n.surfaces;if(l)for(var c=l.length-1;c>=0;c--){var p=l[c],u=p.corners,f=[u[0].screen,u[1].screen,u[2].screen],m=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(h,f)||this._insideTriangle(h,m))return n}}else for(i=0;ib)&&o>b&&(a=b,r=n)}}return r},s.prototype._showTooltip=function(t){var e,i,s;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,s=this.tooltip.dom.dot):(e=document.createElement("div"),e.style.position="absolute",e.style.padding="10px",e.style.border="1px solid #4d4d4d",e.style.color="#1a1a1a",e.style.background="rgba(255,255,255,0.7)",e.style.borderRadius="2px",e.style.boxShadow="5px 5px 10px rgba(128,128,128,0.5)",i=document.createElement("div"),i.style.position="absolute",i.style.height="40px",i.style.width="0",i.style.borderLeft="1px solid #4d4d4d",s=document.createElement("div"),s.style.position="absolute",s.style.height="0",s.style.width="0",s.style.border="5px solid #4d4d4d",s.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:s}}),this._hideTooltip(),this.tooltip.dataPoint=t,e.innerHTML="function"==typeof this.showTooltip?this.showTooltip(t.point):"
x:"+t.point.x+"
y:"+t.point.y+"
z:"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(s);var o=e.offsetWidth,n=e.offsetHeight,r=i.offsetHeight,a=s.offsetWidth,h=s.offsetHeight,d=t.screen.x-o/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-o),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=d+"px",e.style.top=t.screen.y-r-n+"px",s.style.left=t.screen.x-a/2+"px",s.style.top=t.screen.y-h/2+"px"},s.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},getMouseX=function(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0},getMouseY=function(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0},t.exports=s},function(t,e,i){var s=i(9);Camera=function(){this.armLocation=new s,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new s,this.cameraRotation=new s(.5*Math.PI,0,0),this.calculateCameraOrientation()},Camera.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},Camera.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),(void 0!==t||void 0!==e)&&this.calculateCameraOrientation()},Camera.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},Camera.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},Camera.prototype.getArmLength=function(){return this.armLength},Camera.prototype.getCameraLocation=function(){return this.cameraLocation},Camera.prototype.getCameraRotation=function(){return this.cameraRotation},Camera.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal},t.exports=Camera},function(t,e,i){function s(t,e,i){this.data=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=i.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:e>t?-1:0}),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var o=i(4);s.prototype.isLoaded=function(){return this.loaded},s.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},s.prototype.getLabel=function(){return this.graph.filterLabel},s.prototype.getColumn=function(){return this.column},s.prototype.getSelectedValue=function(){return void 0===this.index?void 0:this.values[this.index]},s.prototype.getValues=function(){return this.values},s.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t]},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i){for(var n in h.prototype)h.prototype.hasOwnProperty(n)&&!s.prototype.hasOwnProperty(n)&&(s.prototype[n]=h.prototype[n]);if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");var r=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},util:{snap:null,toScreen:r._toScreen.bind(r),toGlobalScreen:r._toGlobalScreen.bind(r),toTime:r._toTime.bind(r),toGlobalTime:r._toGlobalTime.bind(r)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.itemSet=new p(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,i&&this.setOptions(i),e?this.setItems(e):this.redraw()}var o=(i(46),i(41),i(1)),n=i(3),r=i(4),a=i(15),h=i(42),d=i(27),l=i(19),c=i(20),p=i(24);s.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","orientation"];o.selectiveExtend(e,this.options,t),this._initAutoResize()}if(this.components.forEach(function(e){e.setOptions(t)}),t&&t.order)throw new Error("Option order is deprecated. There is no replacement for this feature.");this.redraw()},s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i&&("start"in this.options||"end"in this.options)){this.fit();var s="start"in this.options?o.convert(this.options.start,"Date"):null,a="end"in this.options?o.convert(this.options.end,"Date"):null;this.setWindow(s,a)}},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.setSelection=function(t){this.itemSet&&this.itemSet.setSelection(t)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?o.convert(s.start,"Date").valueOf():null;var n=t.max("start");n&&(i=o.convert(n.start,"Date").valueOf());var r=t.max("end");r&&(i=null==i?o.convert(r.end,"Date").valueOf():Math.max(i,o.convert(r.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},t.exports=s},function(t,e,i){function s(t,e,i,n){for(var r in h.prototype)h.prototype.hasOwnProperty(r)&&!s.prototype.hasOwnProperty(r)&&(s.prototype[r]=h.prototype[r]);var u=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},util:{snap:null,toScreen:u._toScreen.bind(u),toGlobalScreen:u._toGlobalScreen.bind(u),toTime:u._toTime.bind(u),toGlobalTime:u._toGlobalTime.bind(u)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.linegraph=new p(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,i&&this.setOptions(i),n&&this.setGroups(n),e?this.setItems(e):this.redraw()}var o=(i(46),i(41),i(1)),n=i(3),r=i(4),a=i(15),h=i(42),d=i(27),l=i(19),c=i(20),p=i(26);s.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","orientation"];o.selectiveExtend(e,this.options,t),this._initAutoResize()}if(this.components.forEach(function(e){e.setOptions(t)}),t&&t.order)throw new Error("Option order is deprecated. There is no replacement for this feature.");this.redraw()},s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i&&("start"in this.options||"end"in this.options)){this.fit();var s="start"in this.options?o.convert(this.options.start,"Date"):null,a="end"in this.options?o.convert(this.options.end,"Date"):null;this.setWindow(s,a)}},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.linegraph.setGroups(e)},s.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:"+t},s.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].visible:!1},s.prototype.getItemRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var s=0;sr?r:t,e=null==e?r:r>e?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},t.exports=s},function(t){function e(t,e,i,s,o){this.current=0,this.autoScale=!0,this.stepIndex=0,this.step=1,this.scale=1,this.marginStart,this.marginEnd,this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.setRange(t,e,i,s,o)}e.prototype.setRange=function(t,e,i,s,o){this._start=t,this._end=e,t==e&&(this._start=t-.75,this._end=e+1),this.autoScale&&this.setMinimumStep(i,s,o),this.setFirst()},e.prototype.setMinimumStep=function(t,e){var i=this._end-this._start,s=1.1*i,o=t*(s/e),n=Math.round(Math.log(s)/Math.LN10),r=-1,a=Math.pow(10,n),h=0;0>n&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.first=function(){this.setFirst()},e.prototype.setFirst=function(){var t=this._start-this.scale*this.minorSteps[this.stepIndex],e=this._end+this.scale*this.minorSteps[this.stepIndex];this.marginEnd=this.roundToMinor(e),this.marginStart=this.roundToMinor(t),this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(){for(var t=""+Number(this.current).toPrecision(5),e=t.length-1;e>0;e--){if("0"!=t[e]){if("."==t[e]||","==t[e]){t=t.slice(0,e);break}break}t=t.slice(0,e)}return t},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add("days",-3).valueOf(),this.end=i.clone().add("days",4).valueOf(),this.body=t,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(43),h=i(40),d=i(18);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e){var i=this._applyRange(t,e);if(i){var s={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",s),this.body.emitter.emit("rangechanged",s)}},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t){return s.conversion(this.start,this.end,t)},s.conversion=function(t,e,i){return 0!=i&&e-t!=0?{offset:t,scale:i/(e-t)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable){var e=this.options.direction;if(o(e),this.props.touch.allowDragging){var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY,s=this.props.touch.end-this.props.touch.start,n="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,r=-i/n*s;this._applyRange(this.props.touch.start+r,this.props.touch.end+r),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/t.gesture.scale,i=this._pointerToDate(this.props.touch.center),s=parseInt(i+(this.props.touch.start-i)*e),o=parseInt(i+(this.props.touch.end-i)*e);this.setRange(s,o)}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i){var s=this.body.domProps.center.width;return e=this.conversion(s),t.x/e.scale+e.offset}var n=this.body.domProps.center.height;return e=this.conversion(n),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e){null==e&&(e=(this.start+this.end)/2);var i=e+(this.start-e)*t,s=e+(this.end-e)*t;this.setRange(i,s)},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e){var i,s;for(i=0,s=t.length;s>i;i++)t[i].top=e.axis},e.collision=function(t,e,s){return t.left-s.horizontal+ie.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale=s.SCALE.DAY,this.step=1,this.setRange(t,e,i)}var o=i(40);s.SCALE={MILLISECOND:1,SECOND:2,MINUTE:3,HOUR:4,DAY:5,WEEKDAY:6,MONTH:7,YEAR:8},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case s.SCALE.YEAR:this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case s.SCALE.MONTH:this.current.setDate(1);case s.SCALE.DAY:case s.SCALE.WEEKDAY:this.current.setHours(0);case s.SCALE.HOUR:this.current.setMinutes(0);case s.SCALE.MINUTE:this.current.setSeconds(0);case s.SCALE.SECOND:this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()-this.current.getMonth()%this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()-this.current.getFullYear()%this.step)}},s.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},s.prototype.next=function(){var t=this.current.valueOf();if(this.current.getMonth()<6)switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current=new Date(this.current.valueOf()+1e3*this.step);break;case s.SCALE.MINUTE:this.current=new Date(this.current.valueOf()+1e3*this.step*60);break;case s.SCALE.HOUR:this.current=new Date(this.current.valueOf()+1e3*this.step*60*60);var e=this.current.getHours();this.current.setHours(e-e%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}else switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()+this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()+this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()+this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.getMilliseconds()0&&(this.step=e),this.autoScale=!1},s.prototype.setAutoScale=function(t){this.autoScale=t},s.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,r=6e4,a=1e3,h=1;1e3*e>t&&(this.scale=s.SCALE.YEAR,this.step=1e3),500*e>t&&(this.scale=s.SCALE.YEAR,this.step=500),100*e>t&&(this.scale=s.SCALE.YEAR,this.step=100),50*e>t&&(this.scale=s.SCALE.YEAR,this.step=50),10*e>t&&(this.scale=s.SCALE.YEAR,this.step=10),5*e>t&&(this.scale=s.SCALE.YEAR,this.step=5),e>t&&(this.scale=s.SCALE.YEAR,this.step=1),3*i>t&&(this.scale=s.SCALE.MONTH,this.step=3),i>t&&(this.scale=s.SCALE.MONTH,this.step=1),5*o>t&&(this.scale=s.SCALE.DAY,this.step=5),2*o>t&&(this.scale=s.SCALE.DAY,this.step=2),o>t&&(this.scale=s.SCALE.DAY,this.step=1),o/2>t&&(this.scale=s.SCALE.WEEKDAY,this.step=1),4*n>t&&(this.scale=s.SCALE.HOUR,this.step=4),n>t&&(this.scale=s.SCALE.HOUR,this.step=1),15*r>t&&(this.scale=s.SCALE.MINUTE,this.step=15),10*r>t&&(this.scale=s.SCALE.MINUTE,this.step=10),5*r>t&&(this.scale=s.SCALE.MINUTE,this.step=5),r>t&&(this.scale=s.SCALE.MINUTE,this.step=1),15*a>t&&(this.scale=s.SCALE.SECOND,this.step=15),10*a>t&&(this.scale=s.SCALE.SECOND,this.step=10),5*a>t&&(this.scale=s.SCALE.SECOND,this.step=5),a>t&&(this.scale=s.SCALE.SECOND,this.step=1),200*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=200),100*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=100),50*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=50),10*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=10),5*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=5),h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=1)}},s.prototype.snap=function(t){var e=new Date(t.valueOf());if(this.scale==s.SCALE.YEAR){var i=e.getFullYear()+Math.round(e.getMonth()/12);e.setFullYear(Math.round(i/this.step)*this.step),e.setMonth(0),e.setDate(0),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MONTH)e.getDate()>15?(e.setDate(1),e.setMonth(e.getMonth()+1)):e.setDate(1),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0);else if(this.scale==s.SCALE.DAY){switch(this.step){case 5:case 2:e.setHours(24*Math.round(e.getHours()/24));break;default:e.setHours(12*Math.round(e.getHours()/12))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.WEEKDAY){switch(this.step){case 5:case 2:e.setHours(12*Math.round(e.getHours()/12));break;default:e.setHours(6*Math.round(e.getHours()/6))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.HOUR){switch(this.step){case 4:e.setMinutes(60*Math.round(e.getMinutes()/60));break;default:e.setMinutes(30*Math.round(e.getMinutes()/30))}e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MINUTE){switch(this.step){case 15:case 10:e.setMinutes(5*Math.round(e.getMinutes()/5)),e.setSeconds(0);break;case 5:e.setSeconds(60*Math.round(e.getSeconds()/60));break;default:e.setSeconds(30*Math.round(e.getSeconds()/30))}e.setMilliseconds(0)}else if(this.scale==s.SCALE.SECOND)switch(this.step){case 15:case 10:e.setSeconds(5*Math.round(e.getSeconds()/5)),e.setMilliseconds(0);break;case 5:e.setMilliseconds(1e3*Math.round(e.getMilliseconds()/1e3));break;default:e.setMilliseconds(500*Math.round(e.getMilliseconds()/500))}else if(this.scale==s.SCALE.MILLISECOND){var o=this.step>5?this.step/2:1;e.setMilliseconds(Math.round(e.getMilliseconds()/o)*o)}return e},s.prototype.isMajor=function(){switch(this.scale){case s.SCALE.MILLISECOND:return 0==this.current.getMilliseconds();case s.SCALE.SECOND:return 0==this.current.getSeconds();case s.SCALE.MINUTE:return 0==this.current.getHours()&&0==this.current.getMinutes();case s.SCALE.HOUR:return 0==this.current.getHours();case s.SCALE.WEEKDAY:case s.SCALE.DAY:return 1==this.current.getDate();case s.SCALE.MONTH:return 0==this.current.getMonth();case s.SCALE.YEAR:return!1;default:return!1}},s.prototype.getLabelMinor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("SSS");case s.SCALE.SECOND:return o(t).format("s");case s.SCALE.MINUTE:return o(t).format("HH:mm");case s.SCALE.HOUR:return o(t).format("HH:mm");case s.SCALE.WEEKDAY:return o(t).format("ddd D");case s.SCALE.DAY:return o(t).format("D");case s.SCALE.MONTH:return o(t).format("MMM");case s.SCALE.YEAR:return o(t).format("YYYY");default:return""}},s.prototype.getLabelMajor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("HH:mm:ss");case s.SCALE.SECOND:return o(t).format("D MMMM HH:mm");case s.SCALE.MINUTE:case s.SCALE.HOUR:return o(t).format("ddd D MMMM");case s.SCALE.WEEKDAY:case s.SCALE.DAY:return o(t).format("MMMM YYYY");case s.SCALE.MONTH:return o(t).format("YYYY");case s.SCALE.YEAR:return"";default:return""}},t.exports=s},function(t){function e(){this.options=null,this.props=null}e.prototype.setOptions=function(t){t&&util.extend(this.options,t)},e.prototype.redraw=function(){return!1},e.prototype.destroy=function(){},e.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=e},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCurrentTime:!0},this.options=o.extend({},this.defaultOptions),this._create(),this.setOptions(e)}var o=i(1),n=i(18);s.prototype=new n,s.prototype._create=function(){var t=document.createElement("div");t.className="currenttime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},s.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},s.prototype.setOptions=function(t){t&&o.selectiveExtend(["showCurrentTime"],this.options,t)},s.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=new Date,i=this.body.util.toScreen(e);this.bar.style.left=i+"px",this.bar.title="Current time: "+e}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},s.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,s=1/i/10;30>s&&(s=30),s>1e3&&(s=1e3),e.redraw(),e.currentTimeTimer=setTimeout(t,s)}var e=this;t()},s.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1},this.options=n.extend({},this.defaultOptions),this.customTime=new Date,this.eventParams={},this._create(),this.setOptions(e)}var o=i(41),n=i(1),r=i(18);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime"],this.options,t)},s.prototype._create=function(){var t=document.createElement("div");t.className="customtime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t;var e=document.createElement("div");e.style.position="relative",e.style.top="0px",e.style.left="-10px",e.style.height="100%",e.style.width="20px",t.appendChild(e),this.hammer=o(t,{prevent_default:!0}),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this))},s.prototype.destroy=function(){this.options.showCustomTime=!1,this.redraw(),this.hammer.enable(!1),this.hammer=null,this.body=null},s.prototype.redraw=function(){if(this.options.showCustomTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime);this.bar.style.left=e+"px",this.bar.title="Time: "+this.customTime}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=new Date(t.valueOf()),this.redraw()},s.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},s.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation(),t.preventDefault()},s.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=t.gesture.deltaX,i=this.body.util.toScreen(this.eventParams.customTime)+e,s=this.body.util.toTime(i);this.setCustomTime(s),this.body.emitter.emit("timechange",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault()}},s.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault())},t.exports=s},function(t,e,i){function s(t,e,i){this.id=o.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!0,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0},this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{}},this.dom={},this.range={start:0,end:0},this.options=o.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.offsetHeight,this.stepPixels=25,this.stepPixelsForced=25,this.lineOffset=0,this.master=!0,this.svgElements={},this.groups={},this.amountOfGroups=0,this._create() +}var o=i(1),n=i(2),r=i(18),a=i(14);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible"];o.selectiveExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),1==e&&this.dom.frame&&(this.hide(),this.show())}},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},s.prototype._redrawGroupIcons=function(){n.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=15,s=4,o=s+.5*i;t="left"==this.options.orientation?s:this.width-e-s;for(var r in this.groups)this.groups.hasOwnProperty(r)&&1==this.groups[r].visible&&(this.groups[r].drawIcon(t,o,this.svgElements,this.svg,e,i),o+=i+s);n.cleanupElements(this.svgElements)},s.prototype.show=function(){this.dom.frame.parentNode||("left"==this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},s.prototype.setRange=function(t,e){this.range.start=t,this.range.end=e},s.prototype.redraw=function(){var t=!1,e=0;for(var i in this.groups)this.groups.hasOwnProperty(i)&&1==this.groups[i].visible&&e++;if(0==this.amountOfGroups||0==e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=1==this.options.visible?Number((""+this.options.width).replace("px","")):0;var s=this.props,o=this.dom.frame;o.className="dataaxis",this._calculateCharSize();var n=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;s.minorLabelHeight=r?s.minorCharHeight:0,s.majorLabelHeight=a?s.majorCharHeight:0,s.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,s.minorLineHeight=1,s.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,s.majorLineHeight=1,"left"==n?(o.style.top="0",o.style.left="0",o.style.bottom="",o.style.width=this.width+"px",o.style.height=this.height+"px"):(o.style.top="",o.style.bottom="0",o.style.left="0",o.style.width=this.width+"px",o.style.height=this.height+"px"),t=this._redrawLabels(),1==this.options.icons&&this._redrawGroupIcons()}return t},s.prototype._redrawLabels=function(){n.prepareElements(this.DOMelements.lines),n.prepareElements(this.DOMelements.labels);var t=this.options.orientation,e=this.master?this.props.majorCharHeight||10:this.stepPixelsForced,i=new a(this.range.start,this.range.end,e,this.dom.frame.offsetHeight);this.step=i,i.first();var s=this.dom.frame.offsetHeight/(i.marginRange/i.step+1);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.height/s-o);for(var h=0;.5*r>h;h++)i.previous();o=this.height/s}this.valueAtZero=i.marginEnd;var d=0,l=1;i.next(),this.maxLabelSize=0;for(var c=0;l=0&&this._redrawLabel(c-2,i.getCurrent(),t,"yAxis major",this.props.majorCharHeight),this._redrawLine(c,t,"grid horizontal major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(c,t,"grid horizontal minor",this.options.minorLinesOffset,this.props.minorLineWidth),i.next(),l++}this.conversionFactor=d/((o-1)*i.step);var u=1==this.options.icons?this.options.iconWidth+this.options.labelOffsetX+15:this.options.labelOffsetX+15;return this.maxLabelSize>this.width-u&&1==this.options.visible?(this.width=this.maxLabelSize+u,this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+u),this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):(n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),!1)},s.prototype._redrawLabel=function(t,e,i,s,o){var r=n.getDOMElement("div",this.DOMelements.labels,this.dom.frame);r.className=s,r.innerHTML=e,"left"==i?(r.style.left="-"+this.options.labelOffsetX+"px",r.style.textAlign="right"):(r.style.right="-"+this.options.labelOffsetX+"px",r.style.textAlign="left"),r.style.top=t-.5*o+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSizee.axis){var c=d-e.axis;l-=c,o.forEach(h,function(t){t.top-=c})}a=l+e.item.vertical/2}else a=e.axis+e.item.vertical;a=Math.max(a,this.props.label.height);var p=this.dom.foreground;this.top=p.offsetTop,this.left=p.offsetLeft,this.width=p.offsetWidth,s=o.updateProperty(this,"height",a)||s,s=o.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||s,s=o.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||s,this.dom.background.style.height=a+"px",this.dom.foreground.style.height=a+"px",this.dom.label.style.height=a+"px";for(var u=0,f=this.visibleItems.length;f>u;u++){var m=this.visibleItems[u];m.repositionY()}return s},s.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},s.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var s=this.dom.axis;s.parentNode&&s.parentNode.removeChild(s)},s.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},s.prototype.remove=function(t){delete this.items[t.id],t.setParent(this.itemSet);var e=this.visibleItems.indexOf(t);-1!=e&&this.visibleItems.splice(e,1)},s.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},s.prototype.order=function(){var t=o.toArray(this.items);this.orderedItems.byStart=t,this.orderedItems.byEnd=this._constructByEndArray(t),n.orderByStart(this.orderedItems.byStart),n.orderByEnd(this.orderedItems.byEnd)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0)for(n=0;n=0&&!this._checkIfInvisible(t.byStart[n],r,i);n--);for(n=s+1;n=0&&!this._checkIfInvisible(t.byEnd[n],r,i);n--);for(n=a+1;ne;e++)s=this.selection[e],o=this.items[s],o&&o.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)s=t[e],o=this.items[s],o&&(this.selection.push(s),o.select())}},s.prototype.getSelection=function(){return this.selection.concat([])},s.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),s=[];for(var o in this.groups)if(this.groups.hasOwnProperty(o))for(var n=this.groups[o],r=n.visibleItems,a=0;ae&&s.push(h.id)}return s},s.prototype._deselect=function(t){for(var e=this.selection,i=0,s=e.length;s>i;i++)if(e[i]==t){e.splice(i,1);break}},s.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=n.option.asSize,s=this.options,o=s.orientation,r=!1,a=this.dom.frame,h=s.editable.updateTime||s.editable.updateGroup;a.className="itemset"+(h?" editable":""),r=this._orderGroups()||r;var d=e.end-e.start,l=d!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;l&&(this.stackDirty=!0),this.lastVisibleInterval=d,this.props.lastWidth=this.props.width;var c=this.stackDirty,p=this._firstGroup(),u={item:t.item,axis:t.axis},f={item:t.item,axis:t.item.vertical/2},m=0,g=t.axis+t.item.vertical;return n.forEach(this.groups,function(t){var i=t==p?u:f,s=t.redraw(e,i,c);r=s||r,m+=t.height}),m=Math.max(m,g),this.stackDirty=!1,a.style.height=i(m),this.props.top=a.offsetTop,this.props.left=a.offsetLeft,this.props.width=a.offsetWidth,this.props.height=m,this.dom.axis.style.top=i("top"==o?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.dom.axis.style.left=this.body.domProps.border.left+"px",r=this._isResized()||r},s.prototype._firstGroup=function(){var t="top"==this.options.orientation?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[u];return i||null},s.prototype._updateUngrouped=function(){var t=this.groups[u];if(this.groupsData)t&&(t.hide(),delete this.groups[u]);else if(!t){var e=null,i=null;t=new d(e,i,this),this.groups[u]=t;for(var s in this.items)this.items.hasOwnProperty(s)&&t.add(this.items[s]);t.show()}},s.prototype.getLabelSet=function(){return this.dom.labelSet},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(n.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var o=this.id;n.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,o)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}},s.prototype.getItems=function(){return this.itemsData},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(n.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;n.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("change")},s.prototype.getGroups=function(){return this.groupsData},s.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},s.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i=e.itemsData.get(t,e.itemOptions),o=e.items[t],n=i.type||e.options.type||(i.end?"range":"box"),r=s.types[n];if(o&&(r&&o instanceof r?e._updateItem(o,i):(e._removeItem(o),o=null)),!o){if(!r)throw new TypeError("rangeoverflow"==n?'Item type "rangeoverflow" is deprecated. Use css styling instead: .vis.timeline .item.range .content {overflow: visible;}':'Unknown item type "'+n+'"');o=new r(i,e.conversion,e.options),o.id=t,e._addItem(o)}}),this._order(),this.stackDirty=!0,this.body.emitter.emit("change")},s.prototype._onAdd=s.prototype._onUpdate,s.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var s=i.items[t];s&&(e++,i._removeItem(s))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("change"))},s.prototype._order=function(){n.forEach(this.groups,function(t){t.order()})},s.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},s.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),s=e.groups[t];if(s)s.setData(i);else{if(t==u)throw new Error("Illegal group id. "+t+" is a reserved id.");var o=Object.create(e.options);n.extend(o,{height:null}),s=new d(t,i,e),e.groups[t]=s;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&s.add(a)}s.order(),s.show()}}),this.body.emitter.emit("change")},s.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("change")},s.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!n.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},s.prototype._addItem=function(t){this.items[t.id]=t;var e=this.groupsData?t.data.group:u,i=this.groups[e];i&&i.add(t)},s.prototype._updateItem=function(t,e){var i=t.data.group;if(t.data=e,t.displayed&&t.redraw(),i!=t.data.group){var s=this.groups[i];s&&s.remove(t);var o=this.groupsData?t.data.group:u,n=this.groups[o];n&&n.add(t)}},s.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1);var i=this.groupsData?t.data.group:u,s=this.groups[i];s&&s.remove(t)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0||o.length>0)&&this.body.emitter.emit("select",{items:this.getSelection()}),t.stopPropagation()}},s.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.body.util.snap||null,o=s.itemFromTarget(t);if(o){var r=e.itemsData.get(o.id);this.options.onUpdate(r,function(t){t&&e.itemsData.update(t)})}else{var a=n.getAbsoluteLeft(this.dom.frame),h=t.gesture.center.pageX-a,d=this.body.util.toTime(h),l={start:i?i(d):d,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(h+this.props.width/5);l.end=i?i(c):c}l[this.itemsData.fieldId]=n.randomUUID();var p=s.groupFromTarget(t);p&&(l.group=p.groupId),this.options.onAdd(l,function(t){t&&e.itemsData.add(l)})}}},s.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e,i=s.itemFromTarget(t);if(i){e=this.getSelection();var o=e.indexOf(i.id);-1==o?e.push(i.id):e.splice(o,1),this.setSelection(e),this.body.emitter.emit("select",{items:this.getSelection()}),t.stopPropagation()}}},s.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},s.groupFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-group"))return e["timeline-group"];e=e.parentNode}return null},s.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},t.exports=s},function(t,e,i){function s(t,e,i){this.body=t,this.defaultOptions={enabled:!0,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-left"}},this.side=i,this.options=o.extend({},this.defaultOptions),this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.setOptions(e)}var o=i(1),n=i(2),r=i(18);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="legendText",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];o.selectiveDeepExtend(e,this.options,t)},s.prototype.redraw=function(){var t=0;for(var e in this.groups)this.groups.hasOwnProperty(e)&&1==this.groups[e].visible&&t++;if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled||0==t)this.hide();else{this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position?(this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom=""):(this.dom.frame.style.bottom=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""),0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons()); +var i="";for(var e in this.groups)this.groups.hasOwnProperty(e)&&1==this.groups[e].visible&&(i+=this.groups[e].content+"
");this.dom.textArea.innerHTML=i,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},s.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){n.prepareElements(this.svgElements);var t=window.getComputedStyle(this.dom.frame).paddingTop,e=Number(t.replace("px","")),i=e,s=this.options.iconSize,o=.75*this.options.iconSize,r=e+.5*o+3;this.svg.style.width=s+5+e+"px";for(var a in this.groups)this.groups.hasOwnProperty(a)&&1==this.groups[a].visible&&(this.groups[a].drawIcon(i,r,this.svgElements,this.svg,s,o),r+=o+this.options.iconSpacing);n.cleanupElements(this.svgElements)}},t.exports=s},function(t,e,i){function s(t,e){this.id=o.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,align:"center"},catmullRom:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={};var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechange",function(){if(0!=i.lastStart){var t=i.body.range.start-i.lastStart,e=i.body.range.end-i.body.range.start;if(0!=i.width){var s=i.width/e,o=t*s;i.svg.style.left=-i.width-o+"px"}}}),this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=o.option.asSize(-i.width),i._updateGraph.apply(i)}),this._create(),this.body.emitter.emit("change")}var o=i(1),n=i(2),r=i(3),a=i(4),h=i(18),d=i(21),l=i(22),c=i(25),p="__ungrouped__";s.prototype=new h,s.prototype._create=function(){var t=document.createElement("div");t.className="LineGraph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new d(this.body,this.options.dataAxis,this.svg),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left"),this.legendRight=new c(this.body,this.options.legend,"right"),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort"];o.selectiveDeepExtend(e,this.options,t),o.mergeOptions(this.options,t,"catmullRom"),o.mergeOptions(this.options,t,"drawPoints"),o.mergeOptions(this.options,t,"shaded"),o.mergeOptions(this.options,t,"legend"),t.catmullRom&&"object"==typeof t.catmullRom&&t.catmullRom.parametrization&&("uniform"==t.catmullRom.parametrization?this.options.catmullRom.alpha=0:"chordal"==t.catmullRom.parametrization?this.options.catmullRom.alpha=1:(this.options.catmullRom.parametrization="centripetal",this.options.catmullRom.alpha=.5)),this.yAxisLeft&&void 0!==t.dataAxis&&(this.yAxisLeft.setOptions(this.options.dataAxis),this.yAxisRight.setOptions(this.options.dataAxis)),this.legendLeft&&void 0!==t.legend&&(this.legendLeft.setOptions(this.options.legend),this.legendRight.setOptions(this.options.legend)),this.groups.hasOwnProperty(p)&&this.groups[p].setOptions(t)}this.dom.frame&&this._updateGraph()},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(o.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;o.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e)}this._updateUngrouped(),this._updateGraph(),this.redraw()},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(o.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;o.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._onUpdate()},s.prototype._onUpdate=function(){this._updateUngrouped(),this._updateAllGroupData(),this._updateGraph(),this.redraw()},s.prototype._onAdd=function(t){this._onUpdate(t)},s.prototype._onRemove=function(t){this._onUpdate(t)},s.prototype._onUpdateGroups=function(t){for(var e=0;e0){for(s=0;su){e.push(g);break}e.push(g)}}else for(var m=0;mp&&g.x0?(i=this._preprocessData(e,t),h.push({min:i.min,max:i.max}),r.push(i.data)):(h.push({}),r.push([]))}else h.push({}),r.push([]);if(d=this._updateYAxis(l,h),1==d)return n.cleanupElements(this.svgElements),void this.body.emitter.emit("change");for(s=0;s0){for(var p=0;pi?i:a,d=s>d?s:d):(r=!0,h=h>i?i:h,l=s>l?s:l))}1==n&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}return o=this._toggleAxisVisiblity(n,this.yAxisLeft)||o,o=this._toggleAxisVisiblity(r,this.yAxisRight)||o,1==r&&1==n?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!n,0==this.yAxisRight.master?(this.yAxisLeft.lineOffset=1==r?this.yAxisRight.width:0,o=this.yAxisLeft.redraw()||o,this.yAxisRight.stepPixelsForced=this.yAxisLeft.stepPixels,o=this.yAxisRight.redraw()||o):o=this.yAxisRight.redraw()||o,o},s.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&(e.hide(),i=!0):e.dom.frame.parentNode||(e.show(),i=!0),i},s.prototype._drawBarGraph=function(t,e){if(null!=t&&t.length>0){var i,s=.1*e.options.barChart.width,o=0,r=e.options.barChart.width;"left"==e.options.barChart.align?o-=.5*r:"right"==e.options.barChart.align&&(o+=.5*r);for(var a=0;a0&&(i=Math.min(i,Math.abs(t[a-1].x-t[a].x))),r>i&&(r=s>i?s:i),n.drawBar(t[a].x+o,t[a].y,r,e.zeroPosition-t[a].y,e.className+" bar",this.svgElements,this.svg);1==e.options.drawPoints.enabled&&this._drawPoints(t,e,this.svgElements,this.svg,o)}},s.prototype._drawLineGraph=function(t,e){if(null!=t&&t.length>0){var i,s,o=Number(this.svg.style.height.replace("px",""));if(i=n.getSVGElement("path",this.svgElements,this.svg),i.setAttributeNS(null,"class",e.className),s=1==e.options.catmullRom.enabled?this._catmullRom(t,e):this._linear(t),1==e.options.shaded.enabled){var r,a=n.getSVGElement("path",this.svgElements,this.svg);r="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+s+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+o+" "+s+"L"+t[t.length-1].x+","+o,a.setAttributeNS(null,"class",e.className+" fill"),a.setAttributeNS(null,"d",r)}i.setAttributeNS(null,"d","M"+s),1==e.options.drawPoints.enabled&&this._drawPoints(t,e,this.svgElements,this.svg)}},s.prototype._drawPoints=function(t,e,i,s,o){void 0===o&&(o=0);for(var r=0;rp;p+=r)i=n(t[p].x)+this.width-1,s=t[p].y,o.push({x:i,y:s}),h=h>s?s:h,d=s>d?s:d;return{min:h,max:d,data:o}},s.prototype._convertYvalues=function(t,e){var i,s,o=[],n=this.yAxisLeft,r=Number(this.svg.style.height.replace("px",""));"right"==e.options.yAxisOrientation&&(n=this.yAxisRight);for(var a=0;al;l++)e=0==l?t[0]:t[l-1],i=t[l],s=t[l+1],o=d>l+2?t[l+2]:s,n={x:(-e.x+6*i.x+s.x)*h,y:(-e.y+6*i.y+s.y)*h},r={x:(i.x+6*s.x-o.x)*h,y:(i.y+6*s.y-o.y)*h},a+="C"+n.x+","+n.y+" "+r.x+","+r.y+" "+s.x+","+s.y+" ";return a},s.prototype._catmullRom=function(t,e){var i=e.options.catmullRom.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var s,o,n,r,a,h,d,l,c,p,u,f,m,g,v,y,b,_,x,w=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",S=t.length,M=0;S-1>M;M++)s=0==M?t[0]:t[M-1],o=t[M],n=t[M+1],r=S>M+2?t[M+2]:n,d=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2)),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2)),c=Math.sqrt(Math.pow(n.x-r.x,2)+Math.pow(n.y-r.y,2)),g=Math.pow(c,i),y=Math.pow(c,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),x=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*x*v+b,u=2*y+3*g*v+b,f=3*x*(x+v),f>0&&(f=1/f),m=3*g*(g+v),m>0&&(m=1/m),a={x:(-b*s.x+p*o.x+_*n.x)*f,y:(-b*s.y+p*o.y+_*n.y)*f},h={x:(y*o.x+u*n.x-b*r.x)*m,y:(y*o.y+u*n.y-b*r.y)*m},0==a.x&&0==a.y&&(a=o),0==h.x&&0==h.y&&(h=n),w+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+n.x+","+n.y+" ";return w},s.prototype._linear=function(t){for(var e="",i=0;id;){d++;var l=n.getCurrent(),c=this.body.util.toScreen(l),p=n.isMajor();this.options.showMinorLabels&&this._repaintMinorText(c,n.getLabelMinor(),t),p&&this.options.showMajorLabels?(c>0&&(void 0==h&&(h=c),this._repaintMajorText(c,n.getLabelMajor(),t)),this._repaintMajorLine(c,t)):this._repaintMinorLine(c,t),n.next()}if(this.options.showMajorLabels){var u=this.body.util.toTime(0),f=n.getLabelMajor(u),m=f.length*(this.props.majorCharWidth||10)+10;(void 0==h||h>m)&&this._repaintMajorText(0,f,t)}o.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},s.prototype._repaintMinorText=function(t,e,i){var s=this.dom.redundant.minorTexts.shift();if(!s){var o=document.createTextNode("");s=document.createElement("div"),s.appendChild(o),s.className="text minor",this.dom.foreground.appendChild(s)}this.dom.minorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?this.props.majorLabelHeight+"px":"0",s.style.left=t+"px"},s.prototype._repaintMajorText=function(t,e,i){var s=this.dom.redundant.majorTexts.shift();if(!s){var o=document.createTextNode(e);s=document.createElement("div"),s.className="text major",s.appendChild(o),this.dom.foreground.appendChild(s)}this.dom.majorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?"0":this.props.minorLabelHeight+"px",s.style.left=t+"px"},s.prototype._repaintMinorLine=function(t,e){var i=this.dom.redundant.minorLines.shift();i||(i=document.createElement("div"),i.className="grid vertical minor",this.dom.background.appendChild(i)),this.dom.minorLines.push(i);var s=this.props;i.style.top="top"==e?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",i.style.height=s.minorLineHeight+"px",i.style.left=t-s.minorLineWidth/2+"px"},s.prototype._repaintMajorLine=function(t,e){var i=this.dom.redundant.majorLines.shift();i||(i=document.createElement("DIV"),i.className="grid vertical major",this.dom.background.appendChild(i)),this.dom.majorLines.push(i);var s=this.props;i.style.top="top"==e?"0":this.body.domProps.top.height+"px",i.style.left=t-s.majorLineWidth/2+"px",i.style.height=s.majorLineHeight+"px"},s.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="text minor measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="text minor measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth},s.prototype.snap=function(t){return this.step.snap(t)},t.exports=s},function(t,e,i){function s(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);o.call(this,t,e,i)}var o=i(29);s.prototype=new o(null,null,null),s.prototype.isVisible=function(t){var e=(t.end-t.start)/4;return this.data.start>t.start-e&&this.data.startt.start-e&&this.data.startt.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),t.box["timeline-item"]=this),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.foreground;if(!e)throw new Error("Cannot redraw time axis: parent has no foreground container element");e.appendChild(t.box)}if(this.displayed=!0,this.data.content!=this.content){if(this.content=this.data.content,this.content instanceof Element)t.content.innerHTML="",t.content.appendChild(this.content);else{if(void 0==this.data.content)throw new Error('Property "content" missing in item '+this.data.id);t.content.innerHTML=this.content}this.dirty=!0}this.data.title!=this.title&&(t.box.title=this.data.title,this.title=this.data.title);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");this.className!=i&&(this.className=i,t.box.className=this.baseClassName+i,this.dirty=!0),this.dirty&&(this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dirty=!1),this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},s.prototype.show=function(){this.displayed||this.redraw()},s.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.top=null,this.left=null,this.displayed=!1}},s.prototype.repositionX=function(){var t,e=this.props,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end),n=this.options.padding;-i>s&&(s=-i),o>2*i&&(o=2*i);var r=Math.max(o-s,1);this.overflow?(t=Math.max(-s,0),this.left=s,this.width=r+this.props.content.width):(t=0>s?Math.min(-s,o-s-e.content.width-2*n):0,this.left=s,this.width=r),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.dom.content.style.left=t+"px"},s.prototype.repositionY=function(){var t=this.options.orientation,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},s.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="drag-left",t.dragLeftItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragLeft=t}else!this.selected&&this.dom.dragLeft&&(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},s.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="drag-right",t.dragRightItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragRight=t}else!this.selected&&this.dom.dragRight&&(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this._initializeMixinLoaders(),this.containerElement=t,this.renderRefreshRate=60,this.renderTimestep=1e3/this.renderRefreshRate,this.renderTime=.5*this.renderTimestep,this.maxPhysicsTicksPerRender=3,this.physicsDiscreteStepsize=.5,this.initializing=!0,this.triggerFunctions={add:null,edit:null,editEdge:null,connect:null,del:null},this.defaultOptions={nodes:{mass:1,radiusMin:10,radiusMax:30,radius:10,shape:"ellipse",image:void 0,widthMin:16,widthMax:64,fixed:!1,fontColor:"black",fontSize:14,fontFace:"verdana",level:-1,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},borderColor:"#2B7CE9",backgroundColor:"#97C2FC",highlightColor:"#D2E5FF",group:void 0,borderWidth:1},edges:{widthMin:1,widthMax:15,width:1,widthSelectionMultiplier:2,hoverWidth:1.5,style:"line",color:{color:"#848484",highlight:"#848484",hover:"#848484"},fontColor:"#343434",fontSize:14,fontFace:"arial",fontFill:"white",arrowScaleFactor:1,dash:{length:10,gap:5,altLength:void 0},inheritColor:"from"},configurePhysics:!1,physics:{barnesHut:{enabled:!0,theta:1/.6,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09},repulsion:{centralGravity:0,springLength:200,springConstant:.05,nodeDistance:100,damping:.09},hierarchicalRepulsion:{enabled:!1,centralGravity:0,springLength:100,springConstant:.01,nodeDistance:150,damping:.09},damping:null,centralGravity:null,springLength:null,springConstant:null},clustering:{enabled:!1,initialMaxNodes:100,clusterThreshold:500,reduceToNodes:300,chainThreshold:.4,clusterEdgeThreshold:20,sectorThreshold:100,screenSizeThreshold:.2,fontSizeMultiplier:4,maxFontSize:1e3,forceAmplification:.1,distanceAmplification:.1,edgeGrowth:20,nodeScaling:{width:1,height:1,radius:1},maxNodeSizeIncrements:600,activeAreaBoxSize:80,clusterLevelDifference:2},navigation:{enabled:!1},keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02}},dataManipulation:{enabled:!1,initiallyVisible:!1},hierarchicalLayout:{enabled:!1,levelSeparation:150,nodeSpacing:100,direction:"UD"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},dynamicSmoothCurves:!0,maxVelocity:30,minVelocity:.1,stabilize:!0,stabilizationIterations:1e3,labels:{add:"Add Node",edit:"Edit",link:"Add Link",del:"Delete selected",editNode:"Edit Node",editEdge:"Edit Edge",back:"Back",addDescription:"Click in an empty space to place a new node.",linkDescription:"Click on a node and drag the edge to another node to connect them.",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",addError:"The function for add does not support two arguments (data,callback).",linkError:"The function for connect does not support two arguments (data,callback).",editError:"The function for edit does not support two arguments (data, callback).",editBoundError:"No edit function has been bound to this button.",deleteError:"The function for delete does not support two arguments (data, callback).",deleteClusterError:"Clusters cannot be deleted."},tooltip:{delay:300,fontColor:"black",fontSize:14,fontFace:"verdana",color:{border:"#666",background:"#FFFFC6"}},dragNetwork:!0,dragNodes:!0,zoomable:!0,hover:!1,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,width:"100%",height:"100%",selectable:!0},this.constants=a.extend({},this.defaultOptions),this.hoverObj={nodes:{},edges:{}},this.controlNodesActive=!1; +var o=this;this.groups=new u,this.images=new f,this.images.setOnloadCallback(function(){o._redraw()}),this.xIncrement=0,this.yIncrement=0,this.zoomIncrement=0,this._loadPhysicsSystem(),this._create(),this._loadSectorSystem(),this._loadClusterSystem(),this._loadSelectionSystem(),this._loadHierarchySystem(),this._setTranslation(this.frame.clientWidth/2,this.frame.clientHeight/2),this._setScale(1),this.setOptions(i),this.freezeSimulation=!1,this.cachedFunctions={},this.calculationNodes={},this.calculationNodeIndices=[],this.nodeIndices=[],this.nodes={},this.edges={},this.canvasTopLeft={x:0,y:0},this.canvasBottomRight={x:0,y:0},this.pointerPosition={x:0,y:0},this.areaCenter={},this.scale=1,this.previousScale=this.scale,this.nodesData=null,this.edgesData=null,this.nodesListeners={add:function(t,e){o._addNodes(e.items),o.start()},update:function(t,e){o._updateNodes(e.items),o.start()},remove:function(t,e){o._removeNodes(e.items),o.start()}},this.edgesListeners={add:function(t,e){o._addEdges(e.items),o.start()},update:function(t,e){o._updateEdges(e.items),o.start()},remove:function(t,e){o._removeEdges(e.items),o.start()}},this.moving=!0,this.timer=void 0,this.setData(e,this.constants.clustering.enabled||this.constants.hierarchicalLayout.enabled),this.initializing=!1,1==this.constants.hierarchicalLayout.enabled?this._setupHierarchicalLayout():0==this.constants.stabilize&&this.zoomExtent(!0,this.constants.clustering.enabled),this.constants.clustering.enabled&&this.startWithClustering()}var o=i(46),n=i(41),r=i(47),a=i(1),h=i(43),d=i(3),l=i(4),c=i(38),p=i(39),u=i(34),f=i(35),m=i(36),g=i(33),v=i(37),y=i(45);i(44),o(s.prototype),s.prototype._getScriptPath=function(){for(var t=document.getElementsByTagName("script"),e=0;et.x&&(s=t.x),ot.y&&(e=t.y),i=this.constants.clustering.initialMaxNodes?49.07548/(o+142.05338)+91444e-8:12.662/(o+7.4147)+.0964822:1==this.constants.clustering.enabled&&o>=this.constants.clustering.initialMaxNodes?77.5271985/(o+187.266146)+476710517e-13:30.5062972/(o+19.93597763)+.08413486;var n=Math.min(this.frame.canvas.clientWidth/600,this.frame.canvas.clientHeight/600);i*=n}else{var r=1.1*(Math.abs(s.minX)+Math.abs(s.maxX)),a=1.1*(Math.abs(s.minY)+Math.abs(s.maxY)),h=this.frame.canvas.clientWidth/r,d=this.frame.canvas.clientHeight/a;i=d>=h?h:d}i>1&&(i=1),this._setScale(i),this._centerNetwork(s),0==e&&(this.moving=!0,this.start())},s.prototype._updateNodeIndexList=function(){this._clearNodeIndexList();for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodeIndices.push(t)},s.prototype.setData=function(t,e){if(void 0===e&&(e=!1),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){if(t&&t.dot){var i=c.DOTToGraph(t.dot);return void this.setData(i)}}else if(t&&t.gephi){if(t&&t.gephi){var s=p.parseGephi(t.gephi);return void this.setData(s)}}else this._setNodes(t&&t.nodes),this._setEdges(t&&t.edges);if(this._putDataInSector(),!e)if(this.constants.stabilize){var o=this;setTimeout(function(){o._stabilize(),o.start()},0)}else this.start()},s.prototype.setOptions=function(t){if(t){var e,i=["nodes","edges","smoothCurves","hierarchicalLayout","clustering","navigation","keyboard","dataManipulation","onAdd","onEdit","onEditEdge","onConnect","onDelete"];if(a.selectiveNotDeepExtend(i,this.constants,t),a.selectiveNotDeepExtend(["color"],this.constants.nodes,t.nodes),a.selectiveNotDeepExtend(["color","length"],this.constants.edges,t.edges),t.physics&&(a.mergeOptions(this.constants.physics,t.physics,"barnesHut"),a.mergeOptions(this.constants.physics,t.physics,"repulsion"),t.physics.hierarchicalRepulsion)){this.constants.hierarchicalLayout.enabled=!0,this.constants.physics.hierarchicalRepulsion.enabled=!0,this.constants.physics.barnesHut.enabled=!1;for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnProperty(e)&&(this.constants.physics.hierarchicalRepulsion[e]=t.physics.hierarchicalRepulsion[e])}if(t.onAdd&&(this.triggerFunctions.add=t.onAdd),t.onEdit&&(this.triggerFunctions.edit=t.onEdit),t.onEditEdge&&(this.triggerFunctions.editEdge=t.onEditEdge),t.onConnect&&(this.triggerFunctions.connect=t.onConnect),t.onDelete&&(this.triggerFunctions.del=t.onDelete),a.mergeOptions(this.constants,t,"smoothCurves"),a.mergeOptions(this.constants,t,"hierarchicalLayout"),a.mergeOptions(this.constants,t,"clustering"),a.mergeOptions(this.constants,t,"navigation"),a.mergeOptions(this.constants,t,"keyboard"),a.mergeOptions(this.constants,t,"dataManipulation"),t.dataManipulation&&(this.editMode=this.constants.dataManipulation.initiallyVisible),t.edges&&(void 0!==t.edges.color&&(a.isString(t.edges.color)?(this.constants.edges.color={},this.constants.edges.color.color=t.edges.color,this.constants.edges.color.highlight=t.edges.color,this.constants.edges.color.hover=t.edges.color):(void 0!==t.edges.color.color&&(this.constants.edges.color.color=t.edges.color.color),void 0!==t.edges.color.highlight&&(this.constants.edges.color.highlight=t.edges.color.highlight),void 0!==t.edges.color.hover&&(this.constants.edges.color.hover=t.edges.color.hover))),t.edges.fontColor||void 0!==t.edges.color&&(a.isString(t.edges.color)?this.constants.edges.fontColor=t.edges.color:void 0!==t.edges.color.color&&(this.constants.edges.fontColor=t.edges.color.color))),t.nodes&&t.nodes.color){var s=a.parseColor(t.nodes.color);this.constants.nodes.color.background=s.background,this.constants.nodes.color.border=s.border,this.constants.nodes.color.highlight.background=s.highlight.background,this.constants.nodes.color.highlight.border=s.highlight.border,this.constants.nodes.color.hover.background=s.hover.background,this.constants.nodes.color.hover.border=s.hover.border}if(t.groups)for(var o in t.groups)if(t.groups.hasOwnProperty(o)){var n=t.groups[o];this.groups.add(o,n)}if(t.tooltip){for(e in t.tooltip)t.tooltip.hasOwnProperty(e)&&(this.constants.tooltip[e]=t.tooltip[e]);t.tooltip.color&&(this.constants.tooltip.color=a.parseColor(t.tooltip.color))}}this._loadPhysicsSystem(),this._loadNavigationControls(),this._loadManipulationSystem(),this._configureSmoothCurves(),this._createKeyBinds(),this.setSize(this.constants.width,this.constants.height),this.moving=!0,this.start()},s.prototype._create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);if(this.frame=document.createElement("div"),this.frame.className="network-frame",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),!this.frame.canvas.getContext){var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}var e=this;this.drag={},this.pinch={},this.hammer=n(this.frame.canvas,{prevent_default:!0}),this.hammer.on("tap",e._onTap.bind(e)),this.hammer.on("doubletap",e._onDoubleTap.bind(e)),this.hammer.on("hold",e._onHold.bind(e)),this.hammer.on("pinch",e._onPinch.bind(e)),this.hammer.on("touch",e._onTouch.bind(e)),this.hammer.on("dragstart",e._onDragStart.bind(e)),this.hammer.on("drag",e._onDrag.bind(e)),this.hammer.on("dragend",e._onDragEnd.bind(e)),this.hammer.on("release",e._onRelease.bind(e)),this.hammer.on("mousewheel",e._onMouseWheel.bind(e)),this.hammer.on("DOMMouseScroll",e._onMouseWheel.bind(e)),this.hammer.on("mousemove",e._onMouseMoveTitle.bind(e)),this.containerElement.appendChild(this.frame)},s.prototype._createKeyBinds=function(){var t=this;this.mousetrap=r,this.mousetrap.reset(),1==this.constants.keyboard.enabled&&(this.mousetrap.bind("up",this._moveUp.bind(t),"keydown"),this.mousetrap.bind("up",this._yStopMoving.bind(t),"keyup"),this.mousetrap.bind("down",this._moveDown.bind(t),"keydown"),this.mousetrap.bind("down",this._yStopMoving.bind(t),"keyup"),this.mousetrap.bind("left",this._moveLeft.bind(t),"keydown"),this.mousetrap.bind("left",this._xStopMoving.bind(t),"keyup"),this.mousetrap.bind("right",this._moveRight.bind(t),"keydown"),this.mousetrap.bind("right",this._xStopMoving.bind(t),"keyup"),this.mousetrap.bind("=",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("=",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("-",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("-",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("[",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("[",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("]",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("]",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("pageup",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("pageup",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("pagedown",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("pagedown",this._stopZoom.bind(t),"keyup")),1==this.constants.dataManipulation.enabled&&(this.mousetrap.bind("escape",this._createManipulatorBar.bind(t)),this.mousetrap.bind("del",this._deleteSelected.bind(t)))},s.prototype._getPointer=function(t){return{x:t.pageX-a.getAbsoluteLeft(this.frame.canvas),y:t.pageY-a.getAbsoluteTop(this.frame.canvas)}},s.prototype._onTouch=function(t){this.drag.pointer=this._getPointer(t.gesture.center),this.drag.pinched=!1,this.pinch.scale=this._getScale(),this._handleTouch(this.drag.pointer)},s.prototype._onDragStart=function(){this._handleDragStart()},s.prototype._handleDragStart=function(){var t=this.drag,e=this._getNodeAt(t.pointer);if(t.dragging=!0,t.selection=[],t.translation=this._getTranslation(),t.nodeId=null,null!=e){t.nodeId=e.id,e.isSelected()||this._selectObject(e,!1);for(var i in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(i)){var s=this.selectionObj.nodes[i],o={id:s.id,node:s,x:s.x,y:s.y,xFixed:s.xFixed,yFixed:s.yFixed};s.xFixed=!0,s.yFixed=!0,t.selection.push(o)}}},s.prototype._onDrag=function(t){this._handleOnDrag(t)},s.prototype._handleOnDrag=function(t){if(!this.drag.pinched){var e=this._getPointer(t.gesture.center),i=this,s=this.drag,o=s.selection;if(o&&o.length&&1==this.constants.dragNodes){var n=e.x-s.pointer.x,r=e.y-s.pointer.y;o.forEach(function(t){var e=t.node;t.xFixed||(e.x=i._XconvertDOMtoCanvas(i._XconvertCanvasToDOM(t.x)+n)),t.yFixed||(e.y=i._YconvertDOMtoCanvas(i._YconvertCanvasToDOM(t.y)+r))}),this.moving||(this.moving=!0,this.start())}else if(1==this.constants.dragNetwork){var a=e.x-this.drag.pointer.x,h=e.y-this.drag.pointer.y;this._setTranslation(this.drag.translation.x+a,this.drag.translation.y+h),this._redraw()}}},s.prototype._onDragEnd=function(){this.drag.dragging=!1;var t=this.drag.selection;t&&t.length?(t.forEach(function(t){t.node.xFixed=t.xFixed,t.node.yFixed=t.yFixed}),this.moving=!0,this.start()):this._redraw()},s.prototype._onTap=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleTap(e)},s.prototype._onDoubleTap=function(t){var e=this._getPointer(t.gesture.center);this._handleDoubleTap(e)},s.prototype._onHold=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleOnHold(e)},s.prototype._onRelease=function(t){var e=this._getPointer(t.gesture.center);this._handleOnRelease(e)},s.prototype._onPinch=function(t){var e=this._getPointer(t.gesture.center);this.drag.pinched=!0,"scale"in this.pinch||(this.pinch.scale=1);var i=this.pinch.scale*t.gesture.scale;this._zoom(i,e)},s.prototype._zoom=function(t,e){if(1==this.constants.zoomable){var i=this._getScale();1e-5>t&&(t=1e-5),t>10&&(t=10);var s=null;void 0!==this.drag&&1==this.drag.dragging&&(s=this.DOMtoCanvas(this.drag.pointer));var o=this._getTranslation(),n=t/i,r=(1-n)*e.x+o.x*n,a=(1-n)*e.y+o.y*n;if(this.areaCenter={x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)},this._setScale(t),this._setTranslation(r,a),this.updateClustersDefault(),null!=s){var h=this.canvasToDOM(s);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}return this._redraw(),t>i?this.emit("zoom",{direction:"+"}):this.emit("zoom",{direction:"-"}),t}},s.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this._getScale(),s=e/10;0>e&&(s/=1-s),i*=1+s;var o=h.fakeGesture(this,t),n=this._getPointer(o.center);this._zoom(i,n)}t.preventDefault()},s.prototype._onMouseMoveTitle=function(t){var e=h.fakeGesture(this,t),i=this._getPointer(e.center);this.popupObj&&this._checkHidePopup(i);var s=this,o=function(){s._checkShowPopup(i)};if(this.popupTimer&&clearInterval(this.popupTimer),this.drag.dragging||(this.popupTimer=setTimeout(o,this.constants.tooltip.delay)),1==this.constants.hover){for(var n in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(n)&&(this.hoverObj.edges[n].hover=!1,delete this.hoverObj.edges[n]);var r=this._getNodeAt(i);null==r&&(r=this._getEdgeAt(i)),null!=r&&this._hoverObject(r);for(var a in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(a)&&(r instanceof m&&r.id!=a||r instanceof g||null==r)&&(this._blurObject(this.hoverObj.nodes[a]),delete this.hoverObj.nodes[a]);this.redraw()}},s.prototype._checkShowPopup=function(t){var e,i={left:this._XconvertDOMtoCanvas(t.x),top:this._YconvertDOMtoCanvas(t.y),right:this._XconvertDOMtoCanvas(t.x),bottom:this._YconvertDOMtoCanvas(t.y)},s=this.popupObj;if(void 0==this.popupObj){var o=this.nodes;for(e in o)if(o.hasOwnProperty(e)){var n=o[e];if(void 0!==n.getTitle()&&n.isOverlappingWith(i)){this.popupObj=n;break}}}if(void 0===this.popupObj){var r=this.edges;for(e in r)if(r.hasOwnProperty(e)){var a=r[e];if(a.connected&&void 0!==a.getTitle()&&a.isOverlappingWith(i)){this.popupObj=a;break}}}if(this.popupObj){if(this.popupObj!=s){var h=this;h.popup||(h.popup=new v(h.frame,h.constants.tooltip)),h.popup.setPosition(t.x-3,t.y-3),h.popup.setText(h.popupObj.getTitle()),h.popup.show()}}else this.popup&&this.popup.hide()},s.prototype._checkHidePopup=function(t){this.popupObj&&this._getNodeAt(t)||(this.popupObj=void 0,this.popup&&this.popup.hide())},s.prototype.setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,void 0!==this.manipulationDiv&&(this.manipulationDiv.style.width=this.frame.canvas.clientWidth+"px"),void 0!==this.navigationDivs&&void 0!==this.navigationDivs.wrapper&&(this.navigationDivs.wrapper.style.width=this.frame.canvas.clientWidth+"px",this.navigationDivs.wrapper.style.height=this.frame.canvas.clientHeight+"px"),this.emit("resize",{width:this.frame.canvas.width,height:this.frame.canvas.height})},s.prototype._setNodes=function(t){var e=this.nodesData;if(t instanceof d||t instanceof l)this.nodesData=t;else if(t instanceof Array)this.nodesData=new d,this.nodesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.nodesData=new d}if(e&&a.forEach(this.nodesListeners,function(t,i){e.off(i,t)}),this.nodes={},this.nodesData){var i=this;a.forEach(this.nodesListeners,function(t,e){i.nodesData.on(e,t)});var s=this.nodesData.getIds();this._addNodes(s)}this._updateSelection()},s.prototype._addNodes=function(t){for(var e,i=0,s=t.length;s>i;i++){e=t[i];var o=this.nodesData.get(e),n=new m(o,this.images,this.groups,this.constants);if(this.nodes[e]=n,!(0!=n.xFixed&&0!=n.yFixed||null!==n.x&&null!==n.y)){var r=1*t.length,a=2*Math.PI*Math.random();0==n.xFixed&&(n.x=r*Math.cos(a)),0==n.yFixed&&(n.y=r*Math.sin(a))}this.moving=!0}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateValueRange(this.nodes),this.updateLabels()},s.prototype._updateNodes=function(t){for(var e=this.nodes,i=this.nodesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n],a=i.get(n);r?r.setProperties(a,this.constants):(r=new m(properties,this.images,this.groups,this.constants),e[n]=r)}this.moving=!0,1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateNodeIndexList(),this._reconnectEdges(),this._updateValueRange(e)},s.prototype._removeNodes=function(t){for(var e=this.nodes,i=0,s=t.length;s>i;i++){var o=t[i];delete e[o]}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateSelection(),this._updateValueRange(e)},s.prototype._setEdges=function(t){var e=this.edgesData;if(t instanceof d||t instanceof l)this.edgesData=t;else if(t instanceof Array)this.edgesData=new d,this.edgesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.edgesData=new d}if(e&&a.forEach(this.edgesListeners,function(t,i){e.off(i,t)}),this.edges={},this.edgesData){var i=this;a.forEach(this.edgesListeners,function(t,e){i.edgesData.on(e,t)});var s=this.edgesData.getIds();this._addEdges(s)}this._reconnectEdges()},s.prototype._addEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n];r&&r.disconnect();var a=i.get(n,{showInternalIds:!0});e[n]=new g(a,this,this.constants)}this.moving=!0,this._updateValueRange(e),this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._updateEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=i.get(n),a=e[n];a?(a.disconnect(),a.setProperties(r,this.constants),a.connect()):(a=new g(r,this,this.constants),this.edges[n]=a)}this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this.moving=!0,this._updateValueRange(e)},s.prototype._removeEdges=function(t){for(var e=this.edges,i=0,s=t.length;s>i;i++){var o=t[i],n=e[o];n&&(null!=n.via&&delete this.sectors.support.nodes[n.via.id],n.disconnect(),delete e[o])}this.moving=!0,this._updateValueRange(e),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._reconnectEdges=function(){var t,e=this.nodes,i=this.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[]);for(t in i)if(i.hasOwnProperty(t)){var s=i[t];s.from=null,s.to=null,s.connect()}},s.prototype._updateValueRange=function(t){var e,i=void 0,s=void 0;for(e in t)if(t.hasOwnProperty(e)){var o=t[e].getValue();void 0!==o&&(i=void 0===i?o:Math.min(o,i),s=void 0===s?o:Math.max(o,s))}if(void 0!==i&&void 0!==s)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,s)},s.prototype.redraw=function(){this.setSize(this.constants.width,this.constants.height),this._redraw()},s.prototype._redraw=function(){var t=this.frame.canvas.getContext("2d"),e=this.frame.canvas.width,i=this.frame.canvas.height;t.clearRect(0,0,e,i),t.save(),t.translate(this.translation.x,this.translation.y),t.scale(this.scale,this.scale),this.canvasTopLeft={x:this._XconvertDOMtoCanvas(0),y:this._YconvertDOMtoCanvas(0)},this.canvasBottomRight={x:this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth),y:this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight)},this._doInAllSectors("_drawAllSectorNodes",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideEdgesOnDrag)&&this._doInAllSectors("_drawEdges",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideNodesOnDrag)&&this._doInAllSectors("_drawNodes",t,!1),1==this.controlNodesActive&&this._doInAllSectors("_drawControlNodes",t),t.restore()},s.prototype._setTranslation=function(t,e){void 0===this.translation&&(this.translation={x:0,y:0}),void 0!==t&&(this.translation.x=t),void 0!==e&&(this.translation.y=e),this.emit("viewChanged")},s.prototype._getTranslation=function(){return{x:this.translation.x,y:this.translation.y}},s.prototype._setScale=function(t){this.scale=t},s.prototype._getScale=function(){return this.scale},s.prototype._XconvertDOMtoCanvas=function(t){return(t-this.translation.x)/this.scale},s.prototype._XconvertCanvasToDOM=function(t){return t*this.scale+this.translation.x},s.prototype._YconvertDOMtoCanvas=function(t){return(t-this.translation.y)/this.scale},s.prototype._YconvertCanvasToDOM=function(t){return t*this.scale+this.translation.y},s.prototype.canvasToDOM=function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}},s.prototype.DOMtoCanvas=function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}},s.prototype._drawNodes=function(t,e){void 0===e&&(e=!1);var i=this.nodes,s=[];for(var o in i)i.hasOwnProperty(o)&&(i[o].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight),i[o].isSelected()?s.push(o):(i[o].inArea()||e)&&i[o].draw(t));for(var n=0,r=s.length;r>n;n++)(i[s[n]].inArea()||e)&&i[s[n]].draw(t)},s.prototype._drawEdges=function(t){var e=this.edges;for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];s.setScale(this.scale),s.connected&&e[i].draw(t)}},s.prototype._drawControlNodes=function(t){var e=this.edges;for(var i in e)e.hasOwnProperty(i)&&e[i]._drawControlNodes(t)},s.prototype._stabilize=function(){1==this.constants.freezeForStabilization&&this._freezeDefinedNodes();for(var t=0;this.moving&&t0)for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStepLimited(e,this.constants.maxVelocity),s=!0);else for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStep(e),s=!0);if(1==s){var o=this.constants.minVelocity/Math.max(this.scale,.05);o>.5*this.constants.maxVelocity?this.moving=!0:(this.moving=this._isMoving(o),0==this.moving&&this.emit("stabilized",{iterations:null}),this.moving=this.moving||this.configurePhysics)}},s.prototype._physicsTick=function(){this.freezeSimulation||1==this.moving&&(this._doInAllActiveSectors("_initializeForceCalculation"),this._doInAllActiveSectors("_discreteStepNodes"),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&this._doInSupportSector("_discreteStepNodes"),this._findCenter(this._getRange()))},s.prototype._animationStep=function(){this.timer=void 0,this._handleNavigation(),this.start();var t=Date.now(),e=1;this._physicsTick();for(var i=Date.now()-t;i<.9*(this.renderTimestep-this.renderTime)&&eh}return!1},s.prototype._getColor=function(){var t=this.options.color;return"to"==this.options.inheritColor?t={highlight:this.to.options.color.highlight.border,hover:this.to.options.color.hover.border,color:this.to.options.color.border}:("from"==this.options.inheritColor||1==this.options.inheritColor)&&(t={highlight:this.from.options.color.highlight.border,hover:this.from.options.color.hover.border,color:this.from.options.color.border}),1==this.selected?t.highlight:1==this.hover?t.hover:t.color},s.prototype._drawLine=function(t){if(t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth(),this.from!=this.to){var e,i=this._line(t);if(this.label){if(1==this.options.smoothCurves.enabled&&null!=i){var s=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),o=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:s,y:o}}else e=this._pointOnLine(.5);this._label(t,this.label,e.x,e.y)}}else{var n,r,a=this.physics.springLength/4,h=this.from;h.width||h.resize(t),h.width>h.height?(n=h.x+h.width/2,r=h.y-a):(n=h.x+a,r=h.y-h.height/2),this._circle(t,n,r,a),e=this._pointOnCircle(n,r,a,.5),this._label(t,this.label,e.x,e.y)}},s.prototype._getLineWidth=function(){return 1==this.selected?Math.min(this.widthSelected,this.options.widthMax)*this.networkScaleInv:1==this.hover?Math.min(this.options.hoverWidth,this.options.widthMax)*this.networkScaleInv:this.options.width*this.networkScaleInv +},s.prototype._getViaCoordinates=function(){var t=null,e=null,i=this.options.smoothCurves.roundness,s=this.options.smoothCurves.type,o=Math.abs(this.from.x-this.to.x),n=Math.abs(this.from.y-this.to.y);return"discrete"==s||"diagonalCross"==s?Math.abs(this.from.x-this.to.x)this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n)),"discrete"==s&&(t=i*n>o?this.from.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o)),"discrete"==s&&(e=i*o>n?this.from.y:e)):"straightCross"==s?Math.abs(this.from.x-this.to.x)Math.abs(this.from.y-this.to.y)&&(t=this.from.xthis.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,t=this.to.x>t?this.to.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xe?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o,e=this.to.yl.height?(a=l.x+.5*l.width,h=l.y-d):(a=l.x+d,h=l.y-.5*l.height),this._circle(t,a,h,d);var s=.2*Math.PI,o=(10+5*this.options.width)*this.options.arrowScaleFactor;e=this._pointOnCircle(a,h,d,.5),t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&(e=this._pointOnCircle(a,h,d,.5),this._label(t,this.label,e.x,e.y))}},s.prototype._drawArrow=function(t){1==this.selected?(t.strokeStyle=this.options.color.highlight,t.fillStyle=this.options.color.highlight):1==this.hover?(t.strokeStyle=this.options.color.hover,t.fillStyle=this.options.color.hover):(t.strokeStyle=this.options.color.color,t.fillStyle=this.options.color.color),t.lineWidth=this._getLineWidth();var e,i;if(this.from!=this.to){e=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x);var s,o=this.to.x-this.from.x,n=this.to.y-this.from.y,r=Math.sqrt(o*o+n*n),a=this.from.distanceToBorder(t,e+Math.PI),h=(r-a)/r,d=h*this.from.x+(1-h)*this.to.x,l=h*this.from.y+(1-h)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?s=this.via:1==this.options.smoothCurves.enabled&&(s=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=s.x&&(e=Math.atan2(this.to.y-s.y,this.to.x-s.x),o=this.to.x-s.x,n=this.to.y-s.y,r=Math.sqrt(o*o+n*n));var c,p,u=this.to.distanceToBorder(t,e),f=(r-u)/r;if(1==this.options.smoothCurves.enabled&&null!=s.x?(c=(1-f)*s.x+f*this.to.x,p=(1-f)*s.y+f*this.to.y):(c=(1-f)*this.from.x+f*this.to.x,p=(1-f)*this.from.y+f*this.to.y),t.beginPath(),t.moveTo(d,l),1==this.options.smoothCurves.enabled&&null!=s.x?t.quadraticCurveTo(s.x,s.y,c,p):t.lineTo(c,p),t.stroke(),i=(10+5*this.options.width)*this.options.arrowScaleFactor,t.arrow(c,p,e,i),t.fill(),t.stroke(),this.label){var m;if(1==this.options.smoothCurves.enabled&&null!=s){var g=.5*(.5*(this.from.x+s.x)+.5*(this.to.x+s.x)),v=.5*(.5*(this.from.y+s.y)+.5*(this.to.y+s.y));m={x:g,y:v}}else m=this._pointOnLine(.5);this._label(t,this.label,m.x,m.y)}}else{var y,b,_,x=this.from,w=.25*Math.max(100,this.physics.springLength);x.width||x.resize(t),x.width>x.height?(y=x.x+.5*x.width,b=x.y-w,_={x:y,y:x.y,angle:.9*Math.PI}):(y=x.x+w,b=x.y-.5*x.height,_={x:x.x,y:b,angle:.6*Math.PI}),t.beginPath(),t.arc(y,b,w,0,2*Math.PI,!1),t.stroke();var i=(10+5*this.options.width)*this.options.arrowScaleFactor;t.arrow(_.x,_.y,_.angle,i),t.fill(),t.stroke(),this.label&&(m=this._pointOnCircle(y,b,w,.5),this._label(t,this.label,m.x,m.y))}},s.prototype._getDistanceToEdge=function(t,e,i,s,o,n){if(this.from!=this.to){if(1==this.options.smoothCurves.enabled){var r,a;if(1==this.options.smoothCurves.enabled&&1==this.options.smoothCurves.dynamic)r=this.via.x,a=this.via.y;else{var h=this._getViaCoordinates();r=h.x,a=h.y}var d,l,c,p,u,f,m,g=1e9;for(l=0;10>l;l++)c=.1*l,p=Math.pow(1-c,2)*t+2*c*(1-c)*r+Math.pow(c,2)*i,u=Math.pow(1-c,2)*e+2*c*(1-c)*a+Math.pow(c,2)*s,l>0&&(d=this._getDistanceToLine(f,m,p,u,o,n),g=g>d?d:g),f=p,m=u;return g}return this._getDistanceToLine(t,e,i,s,o,n)}var p,u,v,y,b=this.physics.springLength/4,_=this.from;return _.width||_.resize(ctx),_.width>_.height?(p=_.x+_.width/2,u=_.y-b):(p=_.x+b,u=_.y-_.height/2),v=p-o,y=u-n,Math.abs(Math.sqrt(v*v+y*y)-b)},s.prototype._getDistanceToLine=function(t,e,i,s,o,n){var r=i-t,a=s-e,h=r*r+a*a,d=((o-t)*r+(n-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,p=l-o,u=c-n;return Math.sqrt(p*p+u*u)},s.prototype.setScale=function(t){this.networkScaleInv=1/t},s.prototype.select=function(){this.selected=!0},s.prototype.unselect=function(){this.selected=!1},s.prototype.positionBezierNode=function(){null!==this.via&&null!==this.from&&null!==this.to&&(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y))},s.prototype._drawControlNodes=function(t){if(1==this.controlNodesEnabled){if(null===this.controlNodes.from&&null===this.controlNodes.to){var e="edgeIdFrom:".concat(this.id),i="edgeIdTo:".concat(this.id),s={nodes:{group:"",radius:8},physics:{damping:0},clustering:{maxNodeSizeIncrements:0,nodeScaling:{width:0,height:0,radius:0}}};this.controlNodes.from=new n({id:e,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s),this.controlNodes.to=new n({id:i,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s)}0==this.controlNodes.from.selected&&0==this.controlNodes.to.selected&&(this.controlNodes.positions=this.getControlNodePositions(t),this.controlNodes.from.x=this.controlNodes.positions.from.x,this.controlNodes.from.y=this.controlNodes.positions.from.y,this.controlNodes.to.x=this.controlNodes.positions.to.x,this.controlNodes.to.y=this.controlNodes.positions.to.y),this.controlNodes.from.draw(t),this.controlNodes.to.draw(t)}else this.controlNodes={from:null,to:null,positions:{}}},s.prototype._enableControlNodes=function(){this.controlNodesEnabled=!0},s.prototype._disableControlNodes=function(){this.controlNodesEnabled=!1},s.prototype._getSelectedControlNode=function(t,e){var i=this.controlNodes.positions,s=Math.sqrt(Math.pow(t-i.from.x,2)+Math.pow(e-i.from.y,2)),o=Math.sqrt(Math.pow(t-i.to.x,2)+Math.pow(e-i.to.y,2));return 15>s?(this.connectedNode=this.from,this.from=this.controlNodes.from,this.controlNodes.from):15>o?(this.connectedNode=this.to,this.to=this.controlNodes.to,this.controlNodes.to):null},s.prototype._restoreControlNodes=function(){1==this.controlNodes.from.selected&&(this.from=this.connectedNode,this.connectedNode=null,this.controlNodes.from.unselect()),1==this.controlNodes.to.selected&&(this.to=this.connectedNode,this.connectedNode=null,this.controlNodes.to.unselect())},s.prototype.getControlNodePositions=function(t){var e,i=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),s=this.to.x-this.from.x,o=this.to.y-this.from.y,n=Math.sqrt(s*s+o*o),r=this.from.distanceToBorder(t,i+Math.PI),a=(n-r)/n,h=a*this.from.x+(1-a)*this.to.x,d=a*this.from.y+(1-a)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?e=this.via:1==this.options.smoothCurves.enabled&&(e=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=e.x&&(i=Math.atan2(this.to.y-e.y,this.to.x-e.x),s=this.to.x-e.x,o=this.to.y-e.y,n=Math.sqrt(s*s+o*o));var l,c,p=this.to.distanceToBorder(t,i),u=(n-p)/n;return 1==this.options.smoothCurves.enabled&&null!=e.x?(l=(1-u)*e.x+u*this.to.x,c=(1-u)*e.y+u*this.to.y):(l=(1-u)*this.from.x+u*this.to.x,c=(1-u)*this.from.y+u*this.to.y),{from:{x:h,y:d},to:{x:l,y:c}}},t.exports=s},function(t,e,i){function s(){this.clear(),this.defaultIndex=0}var o=i(1);s.DEFAULT=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}}],s.prototype.clear=function(){this.groups={},this.groups.length=function(){var t=0;for(var e in this)this.hasOwnProperty(e)&&t++;return t}},s.prototype.get=function(t){var e=this.groups[t];if(void 0==e){var i=this.defaultIndex%s.DEFAULT.length;this.defaultIndex++,e={},e.color=s.DEFAULT[i],this.groups[t]=e}return e},s.prototype.add=function(t,e){return this.groups[t]=e,e.color&&(e.color=o.parseColor(e.color)),e},t.exports=s},function(t){function e(){this.images={},this.callback=void 0}e.prototype.setOnloadCallback=function(t){this.callback=t},e.prototype.load=function(t){var e=this.images[t];if(void 0==e){var i=this;e=new Image,this.images[t]=e,e.onload=function(){i.callback&&i.callback(this)},e.src=t}return e},t.exports=e},function(t,e,i){function s(t,e,i,s){var n=o.selectiveBridgeObject(["nodes"],s);this.options=n.nodes,this.selected=!1,this.hover=!1,this.edges=[],this.dynamicEdges=[],this.reroutedEdges={},this.fontDrawThreshold=3,this.id=void 0,this.x=null,this.y=null,this.xFixed=!1,this.yFixed=!1,this.horizontalAlignLeft=!0,this.verticalAlignTop=!0,this.baseRadiusValue=s.nodes.radius,this.radiusFixed=!1,this.level=-1,this.preassignedLevel=!1,this.imagelist=e,this.grouplist=i,this.fx=0,this.fy=0,this.vx=0,this.vy=0,this.damping=s.physics.damping,this.fixedData={x:null,y:null},this.setProperties(t,n),this.resetCluster(),this.dynamicEdgesLength=0,this.clusterSession=0,this.clusterSizeWidthFactor=s.clustering.nodeScaling.width,this.clusterSizeHeightFactor=s.clustering.nodeScaling.height,this.clusterSizeRadiusFactor=s.clustering.nodeScaling.radius,this.maxNodeSizeIncrements=s.clustering.maxNodeSizeIncrements,this.growthIndicator=0,this.networkScaleInv=1,this.networkScale=1,this.canvasTopLeft={x:-300,y:-300},this.canvasBottomRight={x:300,y:300},this.parentEdgeId=null}var o=i(1);s.prototype.resetCluster=function(){this.formationScale=void 0,this.clusterSize=1,this.containedNodes={},this.containedEdges={},this.clusterSessions=[]},s.prototype.attachEdge=function(t){-1==this.edges.indexOf(t)&&this.edges.push(t),-1==this.dynamicEdges.indexOf(t)&&this.dynamicEdges.push(t),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.detachEdge=function(t){var e=this.edges.indexOf(t);-1!=e&&(this.edges.splice(e,1),this.dynamicEdges.splice(e,1)),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.setProperties=function(t,e){if(t){var i=["borderWidth","borderWidthSelected","shape","image","radius","fontColor","fontSize","fontFace","group","mass"];if(o.selectiveDeepExtend(i,this.options,t),this.originalLabel=void 0,void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.originalLabel=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y),void 0!==t.value&&(this.value=t.value),void 0!==t.level&&(this.level=t.level,this.preassignedLevel=!0),void 0!==t.horizontalAlignLeft&&(this.horizontalAlignLeft=t.horizontalAlignLeft),void 0!==t.verticalAlignTop&&(this.verticalAlignTop=t.verticalAlignTop),void 0!==t.triggerFunction&&(this.triggerFunction=t.triggerFunction),void 0===this.id)throw"Node must have an id";if(void 0!==this.options.group&&""!=this.options.group){var s=this.grouplist.get(this.options.group);for(var n in s)s.hasOwnProperty(n)&&(this.options[n]=s[n])}if(void 0!==t.radius&&(this.baseRadiusValue=this.options.radius),void 0!==t.color&&(this.options.color=o.parseColor(t.color)),void 0!==this.options.image&&""!=this.options.image){if(!this.imagelist)throw"No imagelist provided";this.imageObj=this.imagelist.load(this.options.image)}switch(this.xFixed=this.xFixed||void 0!==t.x&&!t.allowedToMoveX,this.yFixed=this.yFixed||void 0!==t.y&&!t.allowedToMoveY,this.radiusFixed=this.radiusFixed||void 0!==t.radius,"image"==this.options.shape&&(this.options.radiusMin=e.nodes.widthMin,this.options.radiusMax=e.nodes.widthMax),this.options.shape){case"database":this.draw=this._drawDatabase,this.resize=this._resizeDatabase;break;case"box":this.draw=this._drawBox,this.resize=this._resizeBox;break;case"circle":this.draw=this._drawCircle,this.resize=this._resizeCircle;break;case"ellipse":this.draw=this._drawEllipse,this.resize=this._resizeEllipse;break;case"image":this.draw=this._drawImage,this.resize=this._resizeImage;break;case"text":this.draw=this._drawText,this.resize=this._resizeText;break;case"dot":this.draw=this._drawDot,this.resize=this._resizeShape;break;case"square":this.draw=this._drawSquare,this.resize=this._resizeShape;break;case"triangle":this.draw=this._drawTriangle,this.resize=this._resizeShape;break;case"triangleDown":this.draw=this._drawTriangleDown,this.resize=this._resizeShape;break;case"star":this.draw=this._drawStar,this.resize=this._resizeShape;break;default:this.draw=this._drawEllipse,this.resize=this._resizeEllipse}this._reset()}},s.prototype.select=function(){this.selected=!0,this._reset()},s.prototype.unselect=function(){this.selected=!1,this._reset()},s.prototype.clearSizeCache=function(){this._reset()},s.prototype._reset=function(){this.width=void 0,this.height=void 0},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.distanceToBorder=function(t,e){var i=1;switch(this.width||this.resize(t),this.options.shape){case"circle":case"dot":return this.options.radius+i;case"ellipse":var s=this.width/2,o=this.height/2,n=Math.sin(e)*s,r=Math.cos(e)*o;return s*o/Math.sqrt(n*n+r*r);case"box":case"image":case"text":default:return this.width?Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i:0}},s.prototype._setForce=function(t,e){this.fx=t,this.fy=e},s.prototype._addForce=function(t,e){this.fx+=t,this.fy+=e},s.prototype.discreteStep=function(t){if(!this.xFixed){var e=this.damping*this.vx,i=(this.fx-e)/this.options.mass;this.vx+=i*t,this.x+=this.vx*t}if(!this.yFixed){var s=this.damping*this.vy,o=(this.fy-s)/this.options.mass;this.vy+=o*t,this.y+=this.vy*t}},s.prototype.discreteStepLimited=function(t,e){if(this.xFixed)this.fx=0;else{var i=this.damping*this.vx,s=(this.fx-i)/this.options.mass;this.vx+=s*t,this.vx=Math.abs(this.vx)>e?this.vx>0?e:-e:this.vx,this.x+=this.vx*t}if(this.yFixed)this.fy=0;else{var o=this.damping*this.vy,n=(this.fy-o)/this.options.mass;this.vy+=n*t,this.vy=Math.abs(this.vy)>e?this.vy>0?e:-e:this.vy,this.y+=this.vy*t}},s.prototype.isFixed=function(){return this.xFixed&&this.yFixed},s.prototype.isMoving=function(t){return Math.abs(this.vx)>t||Math.abs(this.vy)>t},s.prototype.isSelected=function(){return this.selected},s.prototype.getValue=function(){return this.value},s.prototype.getDistance=function(t,e){var i=this.x-t,s=this.y-e;return Math.sqrt(i*i+s*s)},s.prototype.setValueRange=function(t,e){if(!this.radiusFixed&&void 0!==this.value)if(e==t)this.options.radius=(this.options.radiusMin+this.options.radiusMax)/2;else{var i=(this.options.radiusMax-this.options.radiusMin)/(e-t);this.options.radius=(this.value-t)*i+this.options.radiusMin}this.baseRadiusValue=this.options.radius},s.prototype.draw=function(){throw"Draw method not initialized for node"},s.prototype.resize=function(){throw"Resize method not initialized for node"},s.prototype.isOverlappingWith=function(t){return this.leftt.left&&this.topt.top},s.prototype._resizeImage=function(){if(!this.width||!this.height){var t,e;if(this.value){this.options.radius=this.baseRadiusValue;var i=this.imageObj.height/this.imageObj.width;void 0!==i?(t=this.options.radius||this.imageObj.width,e=this.options.radius*i||this.imageObj.height):(t=0,e=0)}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.growthIndicator=0,this.width>0&&this.height>0&&(this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t)}},s.prototype._drawImage=function(t){this._resizeImage(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e;if(0!=this.imageObj.width){if(this.clusterSize>1){var i=this.clusterSize>1?10:0;i*=this.networkScaleInv,i=Math.min(.2*this.width,i),t.globalAlpha=.5,t.drawImage(this.imageObj,this.left-i,this.top-i,this.width+2*i,this.height+2*i)}t.globalAlpha=1,t.drawImage(this.imageObj,this.left,this.top,this.width,this.height),e=this.y+this.height/2}else e=this.y;this._label(t,this.label,this.x,e,void 0,"top")},s.prototype._resizeBox=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawBox=function(t){this._resizeBox(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.roundRect(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth,this.options.radius),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.options.color.background,t.roundRect(this.left,this.top,this.width,this.height,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeDatabase=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=i.width+2*e;this.width=s,this.height=s,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-s}},s.prototype._drawDatabase=function(t){this._resizeDatabase(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.database(this.x-this.width/2-2*t.lineWidth,this.y-.5*this.height-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.database(this.x-this.width/2,this.y-.5*this.height,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeCircle=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=Math.max(i.width,i.height)+2*e;this.options.radius=s/2,this.width=s,this.height=s,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.options.radius-.5*s}},s.prototype._drawCircle=function(t){this._resizeCircle(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.circle(this.x,this.y,this.options.radius+2*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.circle(this.x,this.y,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeEllipse=function(t){if(!this.width){var e=this.getTextSize(t);this.width=1.5*e.width,this.height=2*e.height,this.width1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.ellipse(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.ellipse(this.left,this.top,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._drawDot=function(t){this._drawShape(t,"circle")},s.prototype._drawTriangle=function(t){this._drawShape(t,"triangle")},s.prototype._drawTriangleDown=function(t){this._drawShape(t,"triangleDown")},s.prototype._drawSquare=function(t){this._drawShape(t,"square")},s.prototype._drawStar=function(t){this._drawShape(t,"star")},s.prototype._resizeShape=function(){if(!this.width){this.options.radius=this.baseRadiusValue;var t=2*this.options.radius;this.width=t,this.height=t,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t}},s.prototype._drawShape=function(t,e){this._resizeShape(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var i=2.5,s=this.options.borderWidth,o=this.options.borderWidthSelected||2*this.options.borderWidth,n=2;switch(e){case"dot":n=2;break;case"square":n=2;break;case"triangle":n=3;break;case"triangleDown":n=3;break;case"star":n=4}t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t[e](this.x,this.y,this.options.radius+n*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t[e](this.x,this.y,this.options.radius),t.fill(),t.stroke(),this.label&&this._label(t,this.label,this.x,this.y+this.height/2,void 0,"top",!0)},s.prototype._resizeText=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawText=function(t){this._resizeText(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2,this._label(t,this.label,this.x,this.y)},s.prototype._label=function(t,e,i,s,o,n,r){if(e&&Number(this.options.fontSize)*this.networkScale>this.fontDrawThreshold){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace,t.fillStyle=this.options.fontColor||"black",t.textAlign=o||"center",t.textBaseline=n||"middle";var a=e.split("\n"),h=a.length,d=Number(this.options.fontSize)+4,l=s+(1-h)/2*d;1==r&&(l=s+(1-h)/(2*d));for(var c=0;h>c;c++)t.fillText(a[c],i,l),l+=d}},s.prototype.getTextSize=function(t){if(void 0!==this.label){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;for(var e=this.label.split("\n"),i=(Number(this.options.fontSize)+4)*e.length,s=0,o=0,n=e.length;n>o;o++)s=Math.max(s,t.measureText(e[o]).width);return{width:s,height:i}}return{width:0,height:0}},s.prototype.inArea=function(){return void 0!==this.width?this.x+this.width*this.networkScaleInv>=this.canvasTopLeft.x&&this.x-this.width*this.networkScaleInv=this.canvasTopLeft.y&&this.y-this.height*this.networkScaleInv=this.canvasTopLeft.x&&this.x=this.canvasTopLeft.y&&this.ys&&(n=s-e-this.padding),no&&(r=o-i-this.padding),ri;i++)if(e.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=a(o.attr,t.node))),i=n.length-1;i>=0;i--){var h=n[i];h.nodes||(h.nodes=[]),-1==h.nodes.indexOf(o)&&h.nodes.push(o)}e.attr&&(o.attr=a(o.attr,e.attr))}function l(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=a({},t.edge);e.attr=a(i,e.attr)}}function c(t,e,i,s,o){var n={from:e,to:i,type:s};return t.edge&&(n.attr=a({},t.edge)),n.attr=a(n.attr||{},o),n}function p(){for(k=C.NULL,L="";" "==O||" "==O||"\n"==O||"\r"==O;)o();do{var t=!1;if("#"==O){for(var e=T-1;" "==D.charAt(e)||" "==D.charAt(e);)e--;if("\n"==D.charAt(e)||""==D.charAt(e)){for(;""!=O&&"\n"!=O;)o();t=!0}}if("/"==O&&"/"==n()){for(;""!=O&&"\n"!=O;)o();t=!0}if("/"==O&&"*"==n()){for(;""!=O;){if("*"==O&&"/"==n()){o(),o();break}o()}t=!0}for(;" "==O||" "==O||"\n"==O||"\r"==O;)o()}while(t);if(""==O)return void(k=C.DELIMITER);var i=O+n();if(E[i])return k=C.DELIMITER,L=i,o(),void o();if(E[O])return k=C.DELIMITER,L=O,void o();if(r(O)||"-"==O){for(L+=O,o();r(O);)L+=O,o();return"false"==L?L=!1:"true"==L?L=!0:isNaN(Number(L))||(L=Number(L)),void(k=C.IDENTIFIER)}if('"'==O){for(o();""!=O&&('"'!=O||'"'==O&&'"'==n());)L+=O,'"'==O&&o(),o();if('"'!=O)throw x('End of string " expected');return o(),void(k=C.IDENTIFIER)}for(k=C.UNKNOWN;""!=O;)L+=O,o();throw new SyntaxError('Syntax error in part "'+w(L,30)+'"')}function u(){var t={};if(s(),p(),"strict"==L&&(t.strict=!0,p()),("graph"==L||"digraph"==L)&&(t.type=L,p()),k==C.IDENTIFIER&&(t.id=L,p()),"{"!=L)throw x("Angle bracket { expected");if(p(),f(t),"}"!=L)throw x("Angle bracket } expected");if(p(),""!==L)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function f(t){for(;""!==L&&"}"!=L;)m(t),";"==L&&p()}function m(t){var e=g(t);if(e)return void b(t,e);var i=v(t);if(!i){if(k!=C.IDENTIFIER)throw x("Identifier expected");var s=L;if(p(),"="==L){if(p(),k!=C.IDENTIFIER)throw x("Identifier expected");t[s]=L,p()}else y(t,s)}}function g(t){var e=null;if("subgraph"==L&&(e={},e.type="subgraph",p(),k==C.IDENTIFIER&&(e.id=L,p())),"{"==L){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,f(e),"}"!=L)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function v(t){return"node"==L?(p(),t.node=_(),"node"):"edge"==L?(p(),t.edge=_(),"edge"):"graph"==L?(p(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},s=_();s&&(i.attr=s),d(t,i),b(t,e)}function b(t,e){for(;"->"==L||"--"==L;){var i,s=L;p();var o=g(t);if(o)i=o;else{if(k!=C.IDENTIFIER)throw x("Identifier or subgraph expected");i=L,d(t,{id:i}),p()}var n=_(),r=c(t,e,i,s,n);l(t,r),e=i}}function _(){for(var t=null;"["==L;){for(p(),t={};""!==L&&"]"!=L;){if(k!=C.IDENTIFIER)throw x("Attribute name expected");var e=L;if(p(),"="!=L)throw x("Equal sign = expected");if(p(),k!=C.IDENTIFIER)throw x("Attribute value expected");var i=L;h(t,e,i),p(),","==L&&p()}if("]"!=L)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+w(L,30)+'" (char '+T+")")}function w(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){t instanceof Array?t.forEach(function(t){e instanceof Array?e.forEach(function(e){i(t,e)}):i(t,e)}):e instanceof Array?e.forEach(function(e){i(t,e)}):i(t,e)}function M(t){function e(t){var e={from:t.from,to:t.to};return a(e,t.attr),e.style="->"==t.type?"arrow":"line",e}var s=i(t),o={nodes:[],edges:[],options:{}};return s.nodes&&s.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};a(e,t.attr),e.image&&(e.shape="image"),o.nodes.push(e)}),s.edges&&s.edges.forEach(function(t){var i,s;i=t.from instanceof Object?t.from.nodes:{id:t.from},s=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var i=e(t);o.edges.push(i)}),S(i,s,function(i,s){var n=c(o,i.id,s.id,t.type,t.attr),r=e(n);o.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var i=e(t);o.edges.push(i)})}),s.attr&&(o.options=s.attr),o}var C={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},E={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},D="",T=0,O="",L="",k=C.NULL,N=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=M},function(t,e){function i(t,e){var i=[],s=[];this.options={edges:{inheritColor:!0},nodes:{allowedToMove:!1,parseColor:!1}},void 0!==e&&(this.options.nodes.allowedToMove=e.allowedToMove|!1,this.options.nodes.parseColor=e.parseColor|!1,this.options.edges.inheritColor=e.inheritColor|!0);for(var o=t.edges,n=t.nodes,r=0;r=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}(null!==e||null!==i)&&this.range.setRange(e,i)},s.prototype.setWindow=function(t,e){if(1==arguments.length){var i=arguments[0];this.range.setRange(i.start,i.end)}else this.range.setRange(t,e)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){s.root.className="vis timeline root "+e.orientation,s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),h=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,h+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var d=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=d,i.leftContainer.height=d,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var l=i.root.width-i.left.width-i.right.width-n;i.center.width=l,i.centerContainer.width=l,i.top.width=l,i.bottom.width=l,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontal.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var c=this.props.scrollTop;"bottom"==e.orientation&&(c+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=c+"px",s.left.style.left="0",s.left.style.top=c+"px",s.right.style.left="0",s.right.style.top=c+"px";var p=0==this.props.scrollTop?"hidden":"",u=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";s.shadowTop.style.visibility=p,s.shadowBottom.style.visibility=u,s.shadowTopLeft.style.visibility=p,s.shadowBottomLeft.style.visibility=u,s.shadowTopRight.style.visibility=p,s.shadowBottomRight.style.visibility=u,this.components.forEach(function(e){t=e.redraw()||t}),t&&this.redraw()}},s.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},s.prototype._toTime=function(t){var e=this.range.conversion(this.props.center.width);return new Date(t/e.scale+e.offset)},s.prototype._toGlobalTime=function(t){var e=this.range.conversion(this.props.root.width);return new Date(t/e.scale+e.offset)},s.prototype._toScreen=function(t){var e=this.range.conversion(this.props.center.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._toGlobalScreen=function(t){var e=this.range.conversion(this.props.root.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},s.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){return 1!=t.options.autoResize?void t._stopAutoResize():void(t.dom.root&&(t.dom.root.clientWidth!=t.props.lastWidth||t.dom.root.clientHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.clientWidth,t.props.lastHeight=t.dom.root.clientHeight,t.emit("change")))},r.addEventListener(window,"resize",this._onResize),this.watchTimer=setInterval(this._onResize,1e3)},s.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),r.removeEventListener(window,"resize",this._onResize),this._onResize=null},s.prototype._onTouch=function(){this.touch.allowDragging=!0},s.prototype._onPinch=function(){this.touch.allowDragging=!1},s.prototype._onDragStart=function(){this.touch.initialScrollTop=this.props.scrollTop},s.prototype._onDrag=function(t){if(this.touch.allowDragging){var e=t.gesture.deltaY,i=this._getScrollTop(),s=this._setScrollTop(this.touch.initialScrollTop+e);s!=i&&this.redraw()}},s.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},s.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("bottom"==this.options.orientation&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTops;s++){var o=s%2===0?1.3*i:.5*i;this.lineTo(t+o*Math.sin(2*s*Math.PI/10),e-o*Math.cos(2*s*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,s,o){var n=Math.PI/180;0>i-2*o&&(o=i/2),0>s-2*o&&(o=s/2),this.beginPath(),this.moveTo(t+o,e),this.lineTo(t+i-o,e),this.arc(t+i-o,e+o,o,270*n,360*n,!1),this.lineTo(t+i,e+s-o),this.arc(t+i-o,e+s-o,o,0,90*n,!1),this.lineTo(t+o,e+s),this.arc(t+o,e+s-o,o,90*n,180*n,!1),this.lineTo(t,e+o),this.arc(t+o,e+o,o,180*n,270*n,!1)},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,s){var o=.5522848,n=i/2*o,r=s/2*o,a=t+i,h=e+s,d=t+i/2,l=e+s/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-n,e,d,e),this.bezierCurveTo(d+n,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+n,h,d,h),this.bezierCurveTo(d-n,h,t,l+r,t,l)},CanvasRenderingContext2D.prototype.database=function(t,e,i,s){var o=1/3,n=i,r=s*o,a=.5522848,h=n/2*a,d=r/2*a,l=t+n,c=e+r,p=t+n/2,u=e+r/2,f=e+(s-r/2),m=e+s;this.beginPath(),this.moveTo(l,u),this.bezierCurveTo(l,u+d,p+h,c,p,c),this.bezierCurveTo(p-h,c,t,u+d,t,u),this.bezierCurveTo(t,u-d,p-h,e,p,e),this.bezierCurveTo(p+h,e,l,u-d,l,u),this.lineTo(l,f),this.bezierCurveTo(l,f+d,p+h,m,p,m),this.bezierCurveTo(p-h,m,t,f+d,t,f),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,s){var o=t-s*Math.cos(i),n=e-s*Math.sin(i),r=t-.9*s*Math.cos(i),a=e-.9*s*Math.sin(i),h=o+s/3*Math.cos(i+.5*Math.PI),d=n+s/3*Math.sin(i+.5*Math.PI),l=o+s/3*Math.cos(i-.5*Math.PI),c=n+s/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,c),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,s,o){o||(o=[10,5]),0==p&&(p=.001);var n=o.length;this.moveTo(t,e);for(var r=i-t,a=s-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0;d>=.1;){var p=o[l++%n];p>d&&(p=d);var u=Math.sqrt(p*p/(1+h*h));0>r&&(u=-u),t+=u,e+=h*u,this[c?"lineTo":"moveTo"](t,e),d-=p,c=!c}})},function(t,e,i){var s=i(56),o=i(50),n=i(51),r=i(52),a=i(53),h=i(54),d=i(55);e._loadMixin=function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e])},e._clearMixin=function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=void 0)},e._loadPhysicsSystem=function(){this._loadMixin(s),this._loadSelectedForceSolver(),1==this.constants.configurePhysics&&this._loadPhysicsConfiguration()},e._loadClusterSystem=function(){this.clusterSession=0,this.hubThreshold=5,this._loadMixin(o)},e._loadSectorSystem=function(){this.sectors={},this.activeSector=["default"],this.sectors.active={},this.sectors.active["default"]={nodes:{},edges:{},nodeIndices:[],formationScale:1,drawingNode:void 0},this.sectors.frozen={},this.sectors.support={nodes:{},edges:{},nodeIndices:[],formationScale:1,drawingNode:void 0},this.nodeIndices=this.sectors.active["default"].nodeIndices,this._loadMixin(n)},e._loadSelectionSystem=function(){this.selectionObj={nodes:{},edges:{}},this._loadMixin(r)},e._loadManipulationSystem=function(){this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,1==this.constants.dataManipulation.enabled?(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="network-manipulationDiv",this.manipulationDiv.id="network-manipulationDiv",this.manipulationDiv.style.display=1==this.editMode?"block":"none",this.containerElement.insertBefore(this.manipulationDiv,this.frame)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="network-manipulation-editMode",this.editModeDiv.id="network-manipulation-editMode",this.editModeDiv.style.display=1==this.editMode?"none":"block",this.containerElement.insertBefore(this.editModeDiv,this.frame)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="network-manipulation-closeDiv",this.closeDiv.id="network-manipulation-closeDiv",this.closeDiv.style.display=this.manipulationDiv.style.display,this.containerElement.insertBefore(this.closeDiv,this.frame)),this._loadMixin(a),this._createManipulatorBar()):void 0!==this.manipulationDiv&&(this._createManipulatorBar(),this.containerElement.removeChild(this.manipulationDiv),this.containerElement.removeChild(this.editModeDiv),this.containerElement.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._clearMixin(a))},e._loadNavigationControls=function(){this._loadMixin(h),this._cleanNavigation(),1==this.constants.navigation.enabled&&this._loadNavigationElements()},e._loadHierarchySystem=function(){this._loadMixin(d)}},function(t){function e(t){return t?i(t):void 0}function i(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){s.off(t,i),e.apply(this,arguments)}var s=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[t];if(!i)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var s,o=0;os;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t){function e(t,e,i){return t.addEventListener?t.addEventListener(e,i,!1):void t.attachEvent("on"+e,i)}function i(t){return"keypress"==t.type?String.fromCharCode(t.which):_[t.which]?_[t.which]:x[t.which]?x[t.which]:String.fromCharCode(t.which).toLowerCase()}function s(t){var e=t.target||t.srcElement,i=e.tagName;return(" "+e.className+" ").indexOf(" mousetrap ")>-1?!1:"INPUT"==i||"SELECT"==i||"TEXTAREA"==i||e.contentEditable&&"true"==e.contentEditable}function o(t,e){return t.sort().join(",")===e.sort().join(",")}function n(t){t=t||{};var e,i=!1;for(e in E)t[e]?i=!0:E[e]=0;i||(T=!1)}function r(t,e,i,s,n){var r,a,h=[];if(!M[t])return[];for("keyup"==i&&c(t)&&(e=[t]),r=0;r95&&112>t||_.hasOwnProperty(t)&&(y[_[t]]=t)}return y}function f(t,e,i){return i||(i=u()[t]?"keydown":"keypress"),"keypress"==i&&e.length&&(i="keydown"),i}function m(t,e,s,o){E[t]=0,o||(o=f(e[0],[]));var r,a=function(){T=o,++E[t],p()},d=function(t){h(s,t),"keyup"!==o&&(D=i(t)),setTimeout(n,10)};for(r=0;r1)return m(t,d,e,i);for(h="+"===t?["+"]:t.split("+"),n=0;n":".","?":"/","|":"\\"},S={option:"alt",command:"meta","return":"enter",escape:"esc"},M={},C={},E={},D=!1,T=!1,O=1;20>O;++O)_[111+O]="f"+O;for(O=0;9>=O;++O)_[O+96]=O;e(document,"keypress",l),e(document,"keydown",l),e(document,"keyup",l);var L={bind:function(t,e,i){return v(t instanceof Array?t:[t],e,i),C[t+":"+i]=e,this},unbind:function(t,e){return C[t+":"+e]&&(delete C[t+":"+e],this.bind(t,function(){},e)),this},trigger:function(t,e){return C[t+":"+e](),this},reset:function(){return M={},C={},this}};t.exports=L},function(t,e,i){var s;(function(t,o){(function(n){function r(t,e,i){switch(arguments.length){case 2:return null!=t?t:e;case 3:return null!=t?t:null!=e?e:i;default:throw new Error("Implement me")}}function a(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function h(t){we.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function d(t,e){var i=!0;return g(function(){return i&&(h(t),i=!1),e.apply(this,arguments)},e)}function l(t,e){yi[t]||(h(e),yi[t]=!0)}function c(t,e){return function(i){return b(t.call(this,i),e)}}function p(t,e){return function(i){return this.localeData().ordinal(t.call(this,i),e)}}function u(){}function f(t,e){e!==!1&&z(t),v(this,t),this._d=new Date(+t._d)}function m(t){var e=T(t),i=e.year||0,s=e.quarter||0,o=e.month||0,n=e.week||0,r=e.day||0,a=e.hour||0,h=e.minute||0,d=e.second||0,l=e.millisecond||0;this._milliseconds=+l+1e3*d+6e4*h+36e5*a,this._days=+r+7*n,this._months=+o+3*s+12*i,this._data={},this._locale=we.localeData(),this._bubble()}function g(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return e.hasOwnProperty("toString")&&(t.toString=e.toString),e.hasOwnProperty("valueOf")&&(t.valueOf=e.valueOf),t}function v(t,e){var i,s,o;if("undefined"!=typeof e._isAMomentObject&&(t._isAMomentObject=e._isAMomentObject),"undefined"!=typeof e._i&&(t._i=e._i),"undefined"!=typeof e._f&&(t._f=e._f),"undefined"!=typeof e._l&&(t._l=e._l),"undefined"!=typeof e._strict&&(t._strict=e._strict),"undefined"!=typeof e._tzm&&(t._tzm=e._tzm),"undefined"!=typeof e._isUTC&&(t._isUTC=e._isUTC),"undefined"!=typeof e._offset&&(t._offset=e._offset),"undefined"!=typeof e._pf&&(t._pf=e._pf),"undefined"!=typeof e._locale&&(t._locale=e._locale),Pe.length>0)for(i in Pe)s=Pe[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function y(t){return 0>t?Math.ceil(t):Math.floor(t)}function b(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&L(t[s])!==L(e[s]))&&r++;return r+n}function D(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=ci[t]||pi[e]||e}return t}function T(t){var e,i,s={};for(i in t)t.hasOwnProperty(i)&&(e=D(i),e&&(s[e]=t[i]));return s}function O(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}we[t]=function(s,o){var r,a,h=we._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=we().utc().set(i,t);return h.call(we._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function L(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function k(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function N(t,e,i){return le(we([t,11,31+e-i]),e,i).week}function I(t){return A(t)?366:365}function A(t){return t%4===0&&t%100!==0||t%400===0}function z(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Oe]<0||t._a[Oe]>11?Oe:t._a[Le]<1||t._a[Le]>k(t._a[Te],t._a[Oe])?Le:t._a[ke]<0||t._a[ke]>23?ke:t._a[Ne]<0||t._a[Ne]>59?Ne:t._a[Ie]<0||t._a[Ie]>59?Ie:t._a[Ae]<0||t._a[Ae]>999?Ae:-1,t._pf._overflowDayOfYear&&(Te>e||e>Le)&&(e=Le),t._pf.overflow=e)}function P(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length)),t._isValid}function R(t){return t?t.toLowerCase().replace("_","-"):t}function F(t){for(var e,i,s,o,n=0;n0;){if(s=H(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&E(o,i,!0)>=e-1)break;e--}n++}return null}function H(t){var e=null;if(!ze[t]&&Re)try{e=we.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),we.locale(e)}catch(i){}return ze[t]}function Y(t,e){return e._isUTC?we(t).zone(e._offset||0):we(t).local()}function B(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function W(t){var e,i,s=t.match(Be);for(e=0,i=s.length;i>e;e++)s[e]=vi[s[e]]?vi[s[e]]:B(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function G(t,e){return t.isValid()?(e=j(e,t.localeData()),ui[e]||(ui[e]=W(e)),ui[e](t)):t.localeData().invalidDate()}function j(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(We.lastIndex=0;s>=0&&We.test(t);)t=t.replace(We,i),We.lastIndex=0,s-=1;return t}function U(t,e){var i,s=e._strict;switch(t){case"Q":return Qe;case"DDDD":return ei;case"YYYY":case"GGGG":case"gggg":return s?ii:Ue;case"Y":case"G":case"g":return oi;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?si:Ve;case"S":if(s)return Qe;case"SS":if(s)return ti;case"SSS":if(s)return ei;case"DDD":return je;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ze;case"a":case"A":return e._locale._meridiemParse;case"X":return $e;case"Z":case"ZZ":return qe;case"T":return Ke;case"SSSS":return Xe;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?ti:Ge;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ge;case"Do":return Je;default:return i=new RegExp(te(Q(t.replace("\\","")),"i"))}}function V(t){t=t||"";var e=t.match(qe)||[],i=e[e.length-1]||[],s=(i+"").match(di)||["-",0,0],o=+(60*s[1])+L(s[2]);return"+"===s[0]?-o:o}function X(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Oe]=3*(L(e)-1));break;case"M":case"MM":null!=e&&(o[Oe]=L(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e),null!=s?o[Oe]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Le]=L(e));break;case"Do":null!=e&&(o[Le]=L(parseInt(e,10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=L(e));break;case"YY":o[Te]=we.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[Te]=L(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"H":case"HH":case"h":case"hh":o[ke]=L(e);break;case"m":case"mm":o[Ne]=L(e);break;case"s":case"ss":o[Ie]=L(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Ae]=L(1e3*("0."+e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=V(e);break;case"dd":case"ddd":case"dddd":s=i._locale.weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=L(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=we.parseTwoDigitYear(e)}}function Z(t){var e,i,s,o,n,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[Te],le(we(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(n=t._locale._week.dow,a=t._locale._week.doy,i=r(e.gg,t._a[Te],le(we(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ce(i,s,o,a,n),t._a[Te]=h.year,t._dayOfYear=h.dayOfYear}function q(t){var e,i,s,o,n=[];if(!t._d){for(s=$(t),t._w&&null==t._a[Le]&&null==t._a[Oe]&&Z(t),t._dayOfYear&&(o=r(t._a[Te],s[Te]),t._dayOfYear>I(o)&&(t._pf._overflowDayOfYear=!0),i=re(o,0,t._dayOfYear),t._a[Oe]=i.getUTCMonth(),t._a[Le]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];t._d=(t._useUTC?re:ne).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm)}}function K(t){var e;t._d||(e=T(t._i),t._a=[e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond],q(t))}function $(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function J(t){if(t._f===we.ISO_8601)return void ie(t);t._a=[],t._pf.empty=!0;var e,i,s,o,n,r=""+t._i,a=r.length,h=0;for(s=j(t._f,t._locale).match(Be)||[],e=0;e0&&t._pf.unusedInput.push(n),r=r.slice(r.indexOf(i)+i.length),h+=i.length),vi[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),X(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=a-h,r.length>0&&t._pf.unusedInput.push(r),t._isPm&&t._a[ke]<12&&(t._a[ke]+=12),t._isPm===!1&&12===t._a[ke]&&(t._a[ke]=0),q(t),z(t)}function Q(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function te(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ee(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));g(t,i||e)}function ie(t){var e,i,s=t._i,o=ni.exec(s);if(o){for(t._pf.iso=!0,e=0,i=ai.length;i>e;e++)if(ai[e][1].exec(s)){t._f=ai[e][0]+(o[6]||" ");break}for(e=0,i=hi.length;i>e;e++)if(hi[e][1].exec(s)){t._f+=hi[e][0];break}s.match(qe)&&(t._f+="Z"),J(t)}else t._isValid=!1}function se(t){ie(t),t._isValid===!1&&(delete t._isValid,we.createFromInputFallback(t))}function oe(t){var e,i=t._i;i===n?t._d=new Date:C(i)?t._d=new Date(+i):null!==(e=Fe.exec(i))?t._d=new Date(+e[1]):"string"==typeof i?se(t):M(i)?(t._a=i.slice(0),q(t)):"object"==typeof i?K(t):"number"==typeof i?t._d=new Date(i):we.createFromInputFallback(t)}function ne(t,e,i,s,o,n,r){var a=new Date(t,e,i,s,o,n,r);return 1970>t&&a.setFullYear(t),a}function re(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function ae(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function he(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function de(t,e,i){var s=we.duration(t).abs(),o=De(s.as("s")),n=De(s.as("m")),r=De(s.as("h")),a=De(s.as("d")),h=De(s.as("M")),d=De(s.as("y")),l=o0,l[4]=i,he.apply({},l)}function le(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=we(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ce(t,e,i,s,o){var n,r,a=re(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:I(t-1)+r}}function pe(t){var e=t._i,i=t._f;return t._locale=t._locale||we.localeData(t._l),null===e||i===n&&""===e?we.invalid({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),we.isMoment(e)?new f(e,!0):(i?M(i)?ee(t):J(t):oe(t),new f(t)))}function ue(t,e){var i,s;if(1===e.length&&M(e[0])&&(e=e[0]),!e.length)return we();for(i=e[0],s=1;s=0?"+":"-";return e+b(Math.abs(t),6)},gg:function(){return b(this.weekYear()%100,2)},gggg:function(){return b(this.weekYear(),4)},ggggg:function(){return b(this.weekYear(),5)},GG:function(){return b(this.isoWeekYear()%100,2)},GGGG:function(){return b(this.isoWeekYear(),4)},GGGGG:function(){return b(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return L(this.milliseconds()/100)},SS:function(){return b(L(this.milliseconds()/10),2)},SSS:function(){return b(this.milliseconds(),3)},SSSS:function(){return b(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+b(L(t/60),2)+":"+b(L(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+b(L(t/60),2)+b(L(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},yi={},bi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];mi.length;)Me=mi.pop(),vi[Me+"o"]=p(vi[Me],Me);for(;gi.length;)Me=gi.pop(),vi[Me+Me]=c(vi[Me],2);vi.DDDD=c(vi.DDD,3),g(u.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,i,s;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(i=we.utc([2e3,e]),s="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[e]=new RegExp(s.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=we([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var i=this._calendar[t];return"function"==typeof i?i.apply(e):i},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return le(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),we=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=a(),pe(o)},we.suppressDeprecationWarnings=!1,we.createFromInputFallback=d("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i)}),we.min=function(){var t=[].slice.call(arguments,0);return ue("isBefore",t)},we.max=function(){var t=[].slice.call(arguments,0);return ue("isAfter",t)},we.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=a(),pe(o).utc()},we.unix=function(t){return we(1e3*t)},we.duration=function(t,e){var i,s,o,n,r=t,a=null;return we.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(a=He.exec(t))?(i="-"===a[1]?-1:1,r={y:0,d:L(a[Le])*i,h:L(a[ke])*i,m:L(a[Ne])*i,s:L(a[Ie])*i,ms:L(a[Ae])*i}):(a=Ye.exec(t))?(i="-"===a[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(a[2]),M:o(a[3]),d:o(a[4]),h:o(a[5]),m:o(a[6]),s:o(a[7]),w:o(a[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=x(we(r.from),we(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new m(r),we.isDuration(t)&&t.hasOwnProperty("_locale")&&(s._locale=t._locale),s},we.version=Ce,we.defaultFormat=ri,we.ISO_8601=function(){},we.momentProperties=Pe,we.updateOffset=function(){},we.relativeTimeThreshold=function(t,e){return fi[t]===n?!1:e===n?fi[t]:(fi[t]=e,!0)},we.lang=d("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return we.locale(t,e)}),we.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?we.defineLocale(t,e):we.localeData(t),i&&(we.duration._locale=we._locale=i)),we._locale._abbr},we.defineLocale=function(t,e){return null!==e?(e.abbr=t,ze[t]||(ze[t]=new u),ze[t].set(e),we.locale(t),ze[t]):(delete ze[t],null)},we.langData=d("moment.langData is deprecated. Use moment.localeData instead.",function(t){return we.localeData(t)}),we.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return we._locale;if(!M(t)){if(e=H(t))return e;t=[t]}return F(t)},we.isMoment=function(t){return t instanceof f||null!=t&&t.hasOwnProperty("_isAMomentObject")},we.isDuration=function(t){return t instanceof m};for(Me=bi.length-1;Me>=0;--Me)O(bi[Me]);we.normalizeUnits=function(t){return D(t)},we.invalid=function(t){var e=we.utc(0/0);return null!=t?g(e._pf,t):e._pf.userInvalidated=!0,e},we.parseZone=function(){return we.apply(null,arguments).parseZone()},we.parseTwoDigitYear=function(t){return L(t)+(L(t)>68?1900:2e3)},g(we.fn=f.prototype,{clone:function(){return we(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=we(this).utc();return 00:!1},parsingFlags:function(){return g({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._d.getTimezoneOffset(),"m")),this},format:function(t){var e=G(this,t||we.defaultFormat);return this.localeData().postformat(e)},add:w(1,"add"),subtract:w(-1,"subtract"),diff:function(t,e,i){var s,o,n=Y(t,this),r=6e4*(this.zone()-n.zone());return e=D(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+n.daysInMonth()),o=12*(this.year()-n.year())+(this.month()-n.month()),o+=(this-we(this).startOf("month")-(n-we(n).startOf("month")))/s,o-=6e4*(this.zone()-we(this).startOf("month").zone()-(n.zone()-we(n).startOf("month").zone()))/s,"year"===e&&(o/=12)):(s=this-n,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-r)/864e5:"week"===e?(s-r)/6048e5:s),i?o:y(o)},from:function(t,e){return we.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(we(),t)},calendar:function(t){var e=t||we(),i=Y(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.localeData().calendar(o,this))},isLeapYear:function(){return A(this.year())},isDST:function(){return this.zone()+we(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+we(t).startOf(e)},isSame:function(t,e){return e=e||"ms",+this.clone().startOf(e)===+Y(t,this).startOf(e)},min:d("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(t){return t=we.apply(null,arguments),this>t?this:t}),max:d("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=we.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i,s=this._offset||0;return null==t?this._isUTC?s:this._d.getTimezoneOffset():("string"==typeof t&&(t=V(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(i=this._d.getTimezoneOffset()),this._offset=t,this._isUTC=!0,null!=i&&this.subtract(i,"m"),s!==t&&(!e||this._changeInProgress?S(this,we.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,we.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?we(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return k(this.year(),this.month())},dayOfYear:function(t){var e=De((we(this).startOf("day")-we(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=le(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=le(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=le(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return N(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return N(this.year(),t.dow,t.doy)},get:function(t){return t=D(t),this[t]()},set:function(t,e){return t=D(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){return t===n?this._locale._abbr:(this._locale=we.localeData(t),this)},lang:d("moment().lang() is deprecated. Use moment().localeData() instead.",function(t){return t===n?this.localeData():(this._locale=we.localeData(t),this)}),localeData:function(){return this._locale}}),we.fn.millisecond=we.fn.milliseconds=ve("Milliseconds",!1),we.fn.second=we.fn.seconds=ve("Seconds",!1),we.fn.minute=we.fn.minutes=ve("Minutes",!1),we.fn.hour=we.fn.hours=ve("Hours",!0),we.fn.date=ve("Date",!0),we.fn.dates=d("dates accessor is deprecated. Use date instead.",ve("Date",!0)),we.fn.year=ve("FullYear",!0),we.fn.years=d("years accessor is deprecated. Use year instead.",ve("FullYear",!0)),we.fn.days=we.fn.day,we.fn.months=we.fn.month,we.fn.weeks=we.fn.week,we.fn.isoWeeks=we.fn.isoWeek,we.fn.quarters=we.fn.quarter,we.fn.toJSON=we.fn.toISOString,g(we.duration.fn=m.prototype,{_bubble:function(){var t,e,i,s=this._milliseconds,o=this._days,n=this._months,r=this._data,a=0;r.milliseconds=s%1e3,t=y(s/1e3),r.seconds=t%60,e=y(t/60),r.minutes=e%60,i=y(e/60),r.hours=i%24,o+=y(i/24),a=y(ye(o)),o-=y(be(a)),n+=y(o/30),o%=30,a+=y(n/12),n%=12,r.days=o,r.months=n,r.years=a},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return y(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*L(this._months/12)},humanize:function(t){var e=de(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=we.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=we.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=D(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=D(t),e=this._days+this._milliseconds/864e5,"month"===t||"year"===t)return i=this._months+12*ye(e),"month"===t?i:i/12;switch(e+=be(this._months/12),t){case"week":return e/7;case"day":return e;case"hour":return 24*e;case"minute":return 24*e*60;case"second":return 24*e*60*60;case"millisecond":return 24*e*60*60*1e3;default:throw new Error("Unknown unit "+t)}},lang:we.fn.lang,locale:we.fn.locale,toIsoString:d("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"},localeData:function(){return this._locale}});for(Me in li)li.hasOwnProperty(Me)&&_e(Me.toLowerCase());we.duration.fn.asMilliseconds=function(){return this.as("ms")},we.duration.fn.asSeconds=function(){return this.as("s")},we.duration.fn.asMinutes=function(){return this.as("m")},we.duration.fn.asHours=function(){return this.as("h")},we.duration.fn.asDays=function(){return this.as("d")},we.duration.fn.asWeeks=function(){return this.as("weeks")},we.duration.fn.asMonths=function(){return this.as("M")},we.duration.fn.asYears=function(){return this.as("y")},we.locale("en",{ordinal:function(t){var e=t%10,i=1===L(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Re?o.exports=we:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Ee.moment=Se),we}.call(e,i,e,o),!(s!==n&&(o.exports=s)),xe(!0))}).call(this)}).call(e,function(){return this}(),i(58)(t))},function(t,e,i){var s;!function(o,n){"use strict";function r(){a.READY||(w.determineEventTypes(),x.each(a.gestures,function(t){M.register(t)}),w.onTouch(a.DOCUMENT,v,M.detect),w.onTouch(a.DOCUMENT,y,M.detect),a.READY=!0)}var a=function C(t,e){return new C.Instance(t,e||{})};a.VERSION="1.1.3",a.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},a.DOCUMENT=document,a.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,a.HAS_TOUCHEVENTS="ontouchstart"in o,a.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),a.NO_MOUSEEVENTS=a.HAS_TOUCHEVENTS&&a.IS_MOBILE||a.HAS_POINTEREVENTS,a.CALCULATE_INTERVAL=25;var h={},d=a.DIRECTION_DOWN="down",l=a.DIRECTION_LEFT="left",c=a.DIRECTION_UP="up",p=a.DIRECTION_RIGHT="right",u=a.POINTER_MOUSE="mouse",f=a.POINTER_TOUCH="touch",m=a.POINTER_PEN="pen",g=a.EVENT_START="start",v=a.EVENT_MOVE="move",y=a.EVENT_END="end",b=a.EVENT_RELEASE="release",_=a.EVENT_TOUCH="touch";a.READY=!1,a.plugins=a.plugins||{},a.gestures=a.gestures||{};var x=a.utils={extend:function(t,e,i){for(var s in e)!e.hasOwnProperty(s)||t[s]!==n&&i||(t[s]=e[s]);return t},on:function(t,e,i){t.addEventListener(e,i,!1)},off:function(t,e,i){t.removeEventListener(e,i,!1)},each:function(t,e,i){var s,o;if("forEach"in t)t.forEach(e,i);else if(t.length!==n){for(s=0,o=t.length;o>s;s++)if(e.call(i,t[s],s,t)===!1)return}else for(s in t)if(t.hasOwnProperty(s)&&e.call(i,t[s],s,t)===!1)return},inStr:function(t,e){return t.indexOf(e)>-1},inArray:function(t,e){if(t.indexOf){var i=t.indexOf(e);return-1===i?!1:i}for(var s=0,o=t.length;o>s;s++)if(t[s]===e)return s;return!1},toArray:function(t){return Array.prototype.slice.call(t,0)},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){var e=[],i=[],s=[],o=[],n=Math.min,r=Math.max;return 1===t.length?{pageX:t[0].pageX,pageY:t[0].pageY,clientX:t[0].clientX,clientY:t[0].clientY}:(x.each(t,function(t){e.push(t.pageX),i.push(t.pageY),s.push(t.clientX),o.push(t.clientY)}),{pageX:(n.apply(Math,e)+r.apply(Math,e))/2,pageY:(n.apply(Math,i)+r.apply(Math,i))/2,clientX:(n.apply(Math,s)+r.apply(Math,s))/2,clientY:(n.apply(Math,o)+r.apply(Math,o))/2})},getVelocity:function(t,e,i){return{x:Math.abs(e/t)||0,y:Math.abs(i/t)||0}},getAngle:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return 180*Math.atan2(s,i)/Math.PI},getDirection:function(t,e){var i=Math.abs(t.clientX-e.clientX),s=Math.abs(t.clientY-e.clientY);return i>=s?t.clientX-e.clientX>0?l:p:t.clientY-e.clientY>0?c:d},getDistance:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return Math.sqrt(i*i+s*s)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==c||t==d},setPrefixedCss:function(t,e,i,s){var o=["","Webkit","Moz","O","ms"];e=x.toCamelCase(e);for(var n=0;n0&&this.started&&(r=v),this.started=!0;var d=this.collectEventData(i,r,o,t);return e!=y&&s.call(M,d),a&&(d.changedLength=h,d.eventType=a,s.call(M,d),d.eventType=r,delete d.changedLength),r==y&&(s.call(M,d),this.started=!1),r},determineEventTypes:function(){var t;return t=a.HAS_POINTEREVENTS?o.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:a.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],h[g]=t[0],h[v]=t[1],h[y]=t[2],h},getTouchList:function(t,e){if(a.HAS_POINTEREVENTS)return S.getTouchList();if(t.touches){if(e==v)return t.touches;var i=[],s=[].concat(x.toArray(t.touches),x.toArray(t.changedTouches)),o=[];return x.each(s,function(t){x.inArray(i,t.identifier)===!1&&o.push(t),i.push(t.identifier)}),o}return t.identifier=1,[t]},collectEventData:function(t,e,i,s){var o=f;return x.inStr(s.type,"mouse")||S.matchType(u,s)?o=u:S.matchType(m,s)&&(o=m),{center:x.getCenter(i),timeStamp:Date.now(),target:s.target,touches:i,eventType:e,pointerType:o,srcEvent:s,preventDefault:function(){var t=this.srcEvent;t.preventManipulation&&t.preventManipulation(),t.preventDefault&&t.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return M.stopDetect()}}}},S=a.PointerEvent={pointers:{},getTouchList:function(){var t=[];return x.each(this.pointers,function(e){t.push(e)}),t},updatePointer:function(t,e){t==y||t!=y&&1!==e.buttons?delete this.pointers[e.pointerId]:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e)},matchType:function(t,e){if(!e.pointerType)return!1;var i=e.pointerType,s={};return s[u]=i===(e.MSPOINTER_TYPE_MOUSE||u),s[f]=i===(e.MSPOINTER_TYPE_TOUCH||f),s[m]=i===(e.MSPOINTER_TYPE_PEN||m),s[t]},reset:function(){this.pointers={}}},M=a.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:x.extend({},e),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);var e=this.current.inst,i=e.options;return x.each(this.gestures,function(s){!this.stopped&&e.enabled&&i[s.name]&&s.handler.call(s,t,e)},this),this.current&&(this.current.lastEvent=t),t.eventType==y&&this.stopDetect(),t}},stopDetect:function(){this.previous=x.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(t,e,i,s,o){var n=this.current,r=!1,h=n.lastCalcEvent,d=n.lastCalcData;h&&t.timeStamp-h.timeStamp>a.CALCULATE_INTERVAL&&(e=h.center,i=t.timeStamp-h.timeStamp,s=t.center.clientX-h.center.clientX,o=t.center.clientY-h.center.clientY,r=!0),(t.eventType==_||t.eventType==b)&&(n.futureCalcEvent=t),(!n.lastCalcEvent||r)&&(d.velocity=x.getVelocity(i,s,o),d.angle=x.getAngle(e,t.center),d.direction=x.getDirection(e,t.center),n.lastCalcEvent=n.futureCalcEvent||t,n.futureCalcEvent=t),t.velocityX=d.velocity.x,t.velocityY=d.velocity.y,t.interimAngle=d.angle,t.interimDirection=d.direction},extendEventData:function(t){var e=this.current,i=e.startEvent,s=e.lastEvent||i;(t.eventType==_||t.eventType==b)&&(i.touches=[],x.each(t.touches,function(t){i.touches.push({clientX:t.clientX,clientY:t.clientY})}));var o=t.timeStamp-i.timeStamp,n=t.center.clientX-i.center.clientX,r=t.center.clientY-i.center.clientY;return this.getCalculatedData(t,s.center,o,n,r),x.extend(t,{startEvent:i,deltaTime:o,deltaX:n,deltaY:r,distance:x.getDistance(i.center,t.center),angle:x.getAngle(i.center,t.center),direction:x.getDirection(i.center,t.center),scale:x.getScale(i.touches,t.touches),rotation:x.getRotation(i.touches,t.touches)}),t},register:function(t){var e=t.defaults||{};return e[t.name]===n&&(e[t.name]=!0),x.extend(a.defaults,e,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}};a.Instance=function(t,e){var i=this;r(),this.element=t,this.enabled=!0,x.each(e,function(t,i){delete e[i],e[x.toCamelCase(i)]=t}),this.options=x.extend(x.extend({},a.defaults),e||{}),this.options.behavior&&x.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=w.onTouch(t,g,function(t){i.enabled&&t.eventType==g?M.startDetect(i,t):t.eventType==_&&M.detect(t)}),this.eventHandlers=[]},a.Instance.prototype={on:function(t,e){var i=this;return w.on(i.element,t,e,function(t){i.eventHandlers.push({gesture:t,handler:e})}),i},off:function(t,e){var i=this;return w.off(i.element,t,e,function(t){var s=x.inArray({gesture:t,handler:e});s!==!1&&i.eventHandlers.splice(s,1)}),i},trigger:function(t,e){e||(e={});var i=a.DOCUMENT.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e;var s=this.element;return x.hasParent(e.target,s)&&(s=e.target),s.dispatchEvent(i),this},enable:function(t){return this.enabled=t,this},dispose:function(){var t,e;for(x.toggleBehavior(this.element,this.options.behavior,!1),t=-1;e=this.eventHandlers[++t];)x.off(this.element,e.gesture,e.handler);return this.eventHandlers=[],w.off(this.element,h[g],this.eventStartHandler),null}},function(t){function e(e,s){var o=M.current;if(!(s.options.dragMaxTouches>0&&e.touches.length>s.options.dragMaxTouches))switch(e.eventType){case g:i=!1;break;case v:if(e.distance0)){var r=Math.abs(s.options.dragMinDistance/e.distance);n.pageX+=e.deltaX*r,n.pageY+=e.deltaY*r,n.clientX+=e.deltaX*r,n.clientY+=e.deltaY*r,e=M.extendEventData(e)}(o.lastEvent.dragLockToAxis||s.options.dragLockToAxis&&s.options.dragLockMinDistance<=e.distance)&&(e.dragLockToAxis=!0);var a=o.lastEvent.direction;e.dragLockToAxis&&a!==e.direction&&(e.direction=x.isVertical(a)?e.deltaY<0?c:d:e.deltaX<0?l:p),i||(s.trigger(t+"start",e),i=!0),s.trigger(t,e),s.trigger(t+e.direction,e);var h=x.isVertical(e.direction);(s.options.dragBlockVertical&&h||s.options.dragBlockHorizontal&&!h)&&e.preventDefault();break;case b:i&&e.changedLength<=s.options.dragMaxTouches&&(s.trigger(t+"end",e),i=!1);break;case y:i=!1}}var i=!1;a.gestures.Drag={name:t,index:50,handler:e,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),a.gestures.Gesture={name:"gesture",index:1337,handler:function(t,e){e.trigger(this.name,t)}},function(t){function e(e,s){var o=s.options,n=M.current;switch(e.eventType){case g:clearTimeout(i),n.name=t,i=setTimeout(function(){n&&n.name==t&&s.trigger(t,e)},o.holdTimeout);break;case v:e.distance>o.holdThreshold&&clearTimeout(i);break;case b:clearTimeout(i)}}var i;a.gestures.Hold={name:t,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:e}}("hold"),a.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==b&&e.trigger(this.name,t)}},a.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(t,e){if(t.eventType==b){var i=t.touches.length,s=e.options;if(is.swipeMaxTouches)return;(t.velocityX>s.swipeVelocityX||t.velocityY>s.swipeVelocityY)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},function(t){function e(e,s){var o,n,r=s.options,a=M.current,h=M.previous;switch(e.eventType){case g:i=!1;break;case v:i=i||e.distance>r.tapMaxDistance;break;case y:!x.inStr(e.srcEvent.type,"cancel")&&e.deltaTimes.options.transformMinRotation&&s.trigger("rotate",e),o>s.options.transformMinScale&&(s.trigger("pinch",e),s.trigger("pinch"+(e.scale<1?"in":"out"),e));break;case b:i&&e.changedLength<2&&(s.trigger(t+"end",e),i=!1)}}var i=!1;a.gestures.Transform={name:t,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:e}}("transform"),s=function(){return a}.call(e,i,e,t),!(s!==n&&(t.exports=s))}(window)},function(t,e){e.startWithClustering=function(){this.clusterToFit(this.constants.clustering.initialMaxNodes,!0),this.updateLabels(),this.stabilize&&this._stabilize(),this.start()},e.clusterToFit=function(t,e){for(var i=this.nodeIndices.length,s=50,o=0;i>t&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.options.mass>n.from.options.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.options.mass>e.options.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new Node({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInSupportSector=function(t,e){if(void 0===e)this._switchToSupportSector(),this[t]();else{this._switchToSupportSector();var i=Array.prototype.splice.call(arguments,1);i.length>1?this[t](i[0],i[1]):this[t](e)}this._loadLatestSector()},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ee;e++){s=t[e];var o=this.nodes[s];if(!o)throw new RangeError('Node with id "'+s+'" not found');this._selectObject(o,!0,!0)}console.log("setSelection is deprecated. Please use selectNodes instead."),this.redraw()},e.selectNodes=function(t,e){var i,s,o;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),i=0,s=t.length;s>i;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,highlightEdges)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(36),n=i(33);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild)},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=document.getElementById("network-manipulationDiv"),e=document.getElementById("network-manipulation-closeDiv"),i=document.getElementById("network-manipulation-editMode");1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){if(this.boundFunction&&this.off("select",this.boundFunction),void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDiv.innerHTML=""+this.constants.labels.add+"
"+this.constants.labels.link+"",1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDiv.innerHTML+="
"+this.constants.labels.editNode+"":1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDiv.innerHTML+="
"+this.constants.labels.editEdge+""),0==this._selectionIsEmpty()&&(this.manipulationDiv.innerHTML+="
"+this.constants.labels.del+"");var t=document.getElementById("network-manipulate-addNode");t.onclick=this._createAddNodeToolbar.bind(this);var e=document.getElementById("network-manipulate-connectNode");if(e.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit){var i=document.getElementById("network-manipulate-editNode");i.onclick=this._editNode.bind(this)}else if(1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()){var i=document.getElementById("network-manipulate-editEdge");i.onclick=this._createEditEdgeToolbar.bind(this)}if(0==this._selectionIsEmpty()){var s=document.getElementById("network-manipulate-delete");s.onclick=this._deleteSelected.bind(this)}var o=document.getElementById("network-manipulation-closeDiv");o.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{this.editModeDiv.innerHTML=""+this.constants.labels.edit+"";var n=document.getElementById("network-manipulate-editModeButton");n.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction),this.manipulationDiv.innerHTML=""+this.constants.labels.back+"
"+this.constants.labels.addDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0,this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDiv.innerHTML=""+this.constants.labels.back+"
"+this.constants.labels.linkDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._handleOnRelease=this._handleOnRelease,this._handleTouch=this._handleConnect,this._handleOnRelease=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes(),this.manipulationDiv.innerHTML=""+this.constants.labels.back+"
"+this.constants.labels.editEdgeDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._handleOnRelease=this._handleOnRelease,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._handleOnRelease=this._releaseControlNode,this._redraw()},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!=e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);null!=e&&(e.clusterSize>1?alert("Cannot create edges to a cluster."):(this._selectObject(e,!1),this.sectors.support.nodes.targetNode=new o({id:"targetNode"},{},{},this.constants),this.sectors.support.nodes.targetNode.x=e.x,this.sectors.support.nodes.targetNode.y=e.y,this.sectors.support.nodes.targetViaNode=new o({id:"targetViaNode"},{},{},this.constants),this.sectors.support.nodes.targetViaNode.x=e.x,this.sectors.support.nodes.targetViaNode.y=e.y,this.sectors.support.nodes.targetViaNode.parentEdgeId="connectionEdge",this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:this.sectors.support.nodes.targetNode.id},this,this.constants),this.edges.connectionEdge.from=e,this.edges.connectionEdge.connected=!0,this.edges.connectionEdge.smooth=!0,this.edges.connectionEdge.selected=!0,this.edges.connectionEdge.to=this.sectors.support.nodes.targetNode,this.edges.connectionEdge.via=this.sectors.support.nodes.targetViaNode,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center);this.sectors.support.nodes.targetNode.x=this._XconvertDOMtoCanvas(e.x),this.sectors.support.nodes.targetNode.y=this._YconvertDOMtoCanvas(e.y),this.sectors.support.nodes.targetViaNode.x=.5*(this._XconvertDOMtoCanvas(e.x)+this.edges.connectionEdge.from.x),this.sectors.support.nodes.targetViaNode.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()))}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var e=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var i=this._getNodeAt(t);null!=i&&(i.clusterSize>1?alert("Cannot create edges to a cluster."):(this._createEdge(e,i.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add)if(2==this.triggerFunctions.add.length){var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else alert(this.constants.labels.addError),this._createManipulatorBar(),this.moving=!0,this.start();else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect)if(2==this.triggerFunctions.connect.length){var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else alert(this.constants.labels.linkError),this.moving=!0,this.start();else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge)if(2==this.triggerFunctions.editEdge.length){var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else alert(this.constants.labels.linkError),this.moving=!0,this.start();else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(this.triggerFunctions.edit&&1==this.editMode){var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.options.group,shape:t.options.shape,color:{background:t.options.color.background,border:t.options.color.border,highlight:{background:t.options.color.highlight.background,border:t.options.color.highlight.border}}};if(2==this.triggerFunctions.edit.length){var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else alert(this.constants.labels.editError)}else alert(this.constants.labels.editBoundError)},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.labels.deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};(this.triggerFunctions.del.length=2)?this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()}):alert(this.constants.labels.deleteError)}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=i(1),o=i(41);e._cleanNavigation=function(){var t=document.getElementById("network-navigation_wrapper");null!=t&&this.containerElement.removeChild(t),document.onmouseup=null},e._loadNavigationElements=function(){this._cleanNavigation(),this.navigationDivs={};var t=["up","down","left","right","zoomIn","zoomOut","zoomExtends"],e=["_moveUp","_moveDown","_moveLeft","_moveRight","_zoomIn","_zoomOut","zoomExtent"];this.navigationDivs.wrapper=document.createElement("div"),this.navigationDivs.wrapper.id="network-navigation_wrapper",this.navigationDivs.wrapper.style.position="absolute",this.navigationDivs.wrapper.style.width=this.frame.canvas.clientWidth+"px",this.navigationDivs.wrapper.style.height=this.frame.canvas.clientHeight+"px",this.containerElement.insertBefore(this.navigationDivs.wrapper,this.frame);for(var i=this,s=0;s0){"RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation*=-1:this.constants.hierarchicalLayout.levelSeparation=Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,e.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement); +var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t){function e(t){throw new Error("Cannot find module '"+t+"'.")}e.resolve=e,e.keys=function(){return[]},t.exports=e},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,f=4/3,m=this.constants.physics.repulsion.nodeDistance,g=m;for(d=0;di&&(r=.5*g>i?1:v*i+f,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],t.options.mass>0&&(this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t))}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l))}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),f=.5*u,m=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:m-f,maxX:m+f,minY:g-f,maxY:g+f},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.options.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}])}); //# sourceMappingURL=vis.map \ No newline at end of file diff --git a/docs/graph2d.html b/docs/graph2d.html index 9c3f6cfc..5accfab5 100644 --- a/docs/graph2d.html +++ b/docs/graph2d.html @@ -174,7 +174,7 @@ var items = [ -

Groups

+

Groups

Like the items, groups are regular JavaScript Arrays and Objects. @@ -191,7 +191,8 @@ var items = [ var groups = new vis.DataSet(); groups.add({ id: 1, - content: 'Group 1' + content: 'Group 1', + // Optional: a field 'visible' // Optional: a field 'className' // Optional: options }) @@ -241,6 +242,12 @@ groups.add({ This field is optional. The options can be used to give a group a specific draw style. Any options that are colored green in the Configuration Options can be used as options here. + + visible + Boolean + true + This field is optional. If false, the graph will not be drawn. +

Configuration Options

@@ -674,12 +681,32 @@ Graph2d.clear({options: true}); // clear options only + + getLegend(groupId, iconWidth, iconHeight) + SVGelement, String, String + Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right). + + + getWindow() Object Get the current visible window. Returns an object with properties start: Date and end: Date. + + getItemRange() + Object + Get the range of all the items as an object containing min: Date and max: Date. + + + + fit() + none + Adjust the visible window such that it fits all items. + + + on(event, callback) none @@ -699,6 +726,13 @@ Graph2d.clear({options: true}); // clear options only + + isGroupVisible(groupId) + Boolean + This checks if the visible option of the supplied group (by ID) is true or false. + + + setGroups(groups) none diff --git a/docs/network.html b/docs/network.html index a0142866..43e3d9fa 100644 --- a/docs/network.html +++ b/docs/network.html @@ -1261,6 +1261,8 @@ var options = {

Edges can be configured with different length and styling. To configure edges, provide an object named edges in the options for the Network. + Because the length of an edge is a property of the physics simulation, you can change the length of the edge by changing the springLength in your selected physics solver. + To change the edge length of individual edges, you can use the length property in the edge definition.

@@ -1353,12 +1355,6 @@ var options = { Default length of a gap in pixels on a dashed line. Only applicable when the line style is dash-line. - - length - number - physics.[method].springLength - The resting length of the edge when modeled as a spring. By default the springLength determined by the physics is used. By using this setting you can make certain edges have different resting lengths. - inheritColor diff --git a/download/vis.zip b/download/vis.zip index 69e5286ffbf613abd849026058f11df96dae5f19..36952cc5324317abdf13aa120e2c9a03fb48e770 100644 GIT binary patch delta 501624 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

X3)6;xpLqWkheQO;F;t3erA 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

VE>kt?Y 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 z YVo>@=Z{M)v-%-EG7ZMY8$=jtt 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 S!z4)^_|Nkbd^RA5BK1EY8IleF delta 496158 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ⅈ;t+& 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

ATe?wo0Q~(~jzGc5xF} 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

L}JWxncYBNfv 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 diff --git a/examples/graph2d/09_external_legend.html b/examples/graph2d/09_external_legend.html new file mode 100644 index 00000000..0c3b6921 --- /dev/null +++ b/examples/graph2d/09_external_legend.html @@ -0,0 +1,367 @@ + + + + Graph2d | External legend Example + + + + + + + +

Graph2d | External custom legend

+
+ This example shows how to create an external custom legend using the getLegend function. We use normal JavaScript to show and hide the + groups by updating the dataset. + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/examples/graph2d/index.html b/examples/graph2d/index.html index 784f56f6..76a156e5 100644 --- a/examples/graph2d/index.html +++ b/examples/graph2d/index.html @@ -15,6 +15,7 @@

06_interpolation.html

07_scrollingAndSorting.html

08_performance.html

+

09_external_legend.html

diff --git a/examples/network/02_random_nodes.html b/examples/network/02_random_nodes.html index d494d741..4681ddb8 100644 --- a/examples/network/02_random_nodes.html +++ b/examples/network/02_random_nodes.html @@ -31,8 +31,7 @@ for (var i = 0; i < nodeCount; i++) { nodes.push({ id: i, - label: String(i), - radius:300 + label: String(i) }); connectionCount[i] = 0; diff --git a/examples/network/06_groups.html b/examples/network/06_groups.html index d45ef951..00fb1c47 100644 --- a/examples/network/06_groups.html +++ b/examples/network/06_groups.html @@ -64,8 +64,7 @@ edges.push({ from: from + nodeOffset, to: to + nodeOffset, - length: len, - color: color + length: len }); connectionCount[from]++; connectionCount[to]++; @@ -85,8 +84,7 @@ edges.push({ from: from + nodeOffset, to: to + nodeOffset, - length: len, - color: color + length: len }); connectionCount[from]++; connectionCount[to]++; @@ -112,8 +110,7 @@ edges.push({ from: from, to: to, - length: len, - color: color + length: len }); } @@ -135,9 +132,7 @@ nodes: { shape: 'dot' }, - edges: { - length: 50 - } + physics: {barnesHut:{springLength: 200}} }; network = new vis.Network(container, data, options); } diff --git a/examples/network/10_multiline_text.html b/examples/network/10_multiline_text.html index 4c8b29b6..49896e9c 100644 --- a/examples/network/10_multiline_text.html +++ b/examples/network/10_multiline_text.html @@ -26,7 +26,7 @@ // create some edges var edges = [ - {from: 1, to: 2, style: 'line', color: 'red', width: 3, length: 200}, + {from: 1, to: 2, style: 'line', color: 'red', width: 3, length: 200}, // individual length definition is possible {from: 1, to: 3, style: 'dash-line', width: 1, length: 200}, {from: 1, to: 4, style: 'line', width: 1, length: 200}, {from: 1, to: 5, style: 'arrow', width: 3, length: 200} diff --git a/examples/network/11_custom_style.html b/examples/network/11_custom_style.html index cff56c97..37d5a9f4 100644 --- a/examples/network/11_custom_style.html +++ b/examples/network/11_custom_style.html @@ -61,7 +61,6 @@ options = { stabilize: false, edges: { - length: 120, width: 2, style: 'arrow', color: 'gray' @@ -79,6 +78,7 @@ } } }, + physics: {barnesHut:{springLength:200}}, // this is the correct way to set the length of the springs groups: { black: { // defaults for nodes in this group diff --git a/examples/network/13_dashed_lines.html b/examples/network/13_dashed_lines.html index 81716a3a..29391084 100644 --- a/examples/network/13_dashed_lines.html +++ b/examples/network/13_dashed_lines.html @@ -45,9 +45,7 @@ nodes: { shape: 'box' }, - edges: { - length: 180 - }, + physics: {barnesHut:{springLength:150}}, // this is the correct way to set the length of the springs stabilize: false }; var network = new vis.Network(container, data, options); diff --git a/examples/network/17_network_info.html b/examples/network/17_network_info.html index 896e7a12..a10e30f7 100644 --- a/examples/network/17_network_info.html +++ b/examples/network/17_network_info.html @@ -96,11 +96,11 @@ var x = - mynetwork.clientWidth / 2 + 50; var y = - mynetwork.clientHeight / 2 + 50; var step = 70; - nodes.push({id: 1000, x: x, y: y, label: 'Internet', group: 'internet', value: 1}); - nodes.push({id: 1001, x: x, y: y + step, label: 'Switch', group: 'switch', value: 1}); - nodes.push({id: 1002, x: x, y: y + 2 * step, label: 'Server', group: 'server', value: 1}); - nodes.push({id: 1003, x: x, y: y + 3 * step, label: 'Computer', group: 'desktop', value: 1}); - nodes.push({id: 1004, x: x, y: y + 4 * step, label: 'Smartphone', group: 'mobile', value: 1}); + nodes.push({id: 1000, x: x, y: y, label: 'Internet', group: 'internet', value: 1, mass:0}); + nodes.push({id: 1001, x: x, y: y + step, label: 'Switch', group: 'switch', value: 1, mass:0}); + nodes.push({id: 1002, x: x, y: y + 2 * step, label: 'Server', group: 'server', value: 1, mass:0}); + nodes.push({id: 1003, x: x, y: y + 3 * step, label: 'Computer', group: 'desktop', value: 1, mass:0}); + nodes.push({id: 1004, x: x, y: y + 4 * step, label: 'Smartphone', group: 'mobile', value: 1, mass:0}); // create a network var container = document.getElementById('mynetwork'); diff --git a/examples/network/18_fully_random_nodes_clustering.html b/examples/network/18_fully_random_nodes_clustering.html index 3c417f46..21bcbd58 100644 --- a/examples/network/18_fully_random_nodes_clustering.html +++ b/examples/network/18_fully_random_nodes_clustering.html @@ -53,9 +53,7 @@ edges: edges }; var options = { - edges: { - length: 80 - }, + physics: {barnesHut:{springLength:120}}, // this is the correct way to set the length of the springs clustering: { enabled: clusteringOn }, @@ -73,7 +71,7 @@

Clustering - Fully random network

-
+
This example shows a fully randomly generated set of nodes and connected edges. By clicking the checkbox you can turn clustering on and off. If you increase the number of nodes to a value higher than 100, automatic clustering is used before the initial draw (assuming the checkbox is checked). diff --git a/examples/network/19_scale_free_graph_clustering.html b/examples/network/19_scale_free_graph_clustering.html index b60fe079..2ee2d625 100644 --- a/examples/network/19_scale_free_graph_clustering.html +++ b/examples/network/19_scale_free_graph_clustering.html @@ -76,17 +76,6 @@ nodes: nodes, edges: edges }; - /* - var options = { - nodes: { - shape: 'circle' - }, - edges: { - length: 50 - }, - stabilize: false - }; - */ var options = { clustering: { enabled: clusteringOn, @@ -106,7 +95,7 @@

Clustering - Scale-Free-Network

-
+
This example shows the randomly generated scale-free-network set of nodes and connected edges from example 2. By clicking the checkbox you can turn clustering on and off. If you increase the number of nodes to a value higher than 100, automatic clustering is used before the initial draw (assuming the checkbox is checked). diff --git a/examples/network/20_navigation.html b/examples/network/20_navigation.html index 33d721dc..8cf4edee 100644 --- a/examples/network/20_navigation.html +++ b/examples/network/20_navigation.html @@ -94,21 +94,7 @@ nodes: nodes, edges: edges }; - /* - var options = { - nodes: { - shape: 'circle' - }, - edges: { - length: 50 - }, - stabilize: false - }; - */ var options = { - edges: { - length: 50 - }, stabilize: false, navigation: true, keyboard: true @@ -125,7 +111,7 @@

Navigation controls and keyboad navigation

-
+
This example is the same as example 2, except for the navigation controls that have been activated. The navigation controls are described below.

diff --git a/examples/network/21_data_manipulation.html b/examples/network/21_data_manipulation.html index a1819503..d78bf57f 100644 --- a/examples/network/21_data_manipulation.html +++ b/examples/network/21_data_manipulation.html @@ -114,9 +114,6 @@ edges: edges }; var options = { - edges: { - length: 50 - }, stabilize: false, dataManipulation: true, onAdd: function(data,callback) { @@ -194,7 +191,7 @@

Editing the dataset

-
+
In this example we have enabled the data manipulation setting. If the dataManipulation option is set to true, the edit button will appear. If you prefer to have the toolbar visible initially, you can set the initiallyVisible option to true. The exact method is described in the docs.

diff --git a/examples/network/23_hierarchical_layout.html b/examples/network/23_hierarchical_layout.html index bdde2b54..d5c5224b 100644 --- a/examples/network/23_hierarchical_layout.html +++ b/examples/network/23_hierarchical_layout.html @@ -79,8 +79,6 @@ }; var directionInput = document.getElementById("direction"); var options = { - edges: { - }, stabilize: false, smoothCurves: false, hierarchicalLayout: { @@ -100,7 +98,7 @@

Hierarchical Layout - Scale-Free-Network

-
+
This example shows the randomly generated scale-free-network set of nodes and connected edges from example 2. In this example, hierarchical layout has been enabled and the vertical levels are determined automatically.
diff --git a/examples/network/24_hierarchical_layout_userdefined.html b/examples/network/24_hierarchical_layout_userdefined.html index 50981a16..59d09d79 100644 --- a/examples/network/24_hierarchical_layout_userdefined.html +++ b/examples/network/24_hierarchical_layout_userdefined.html @@ -131,7 +131,7 @@

Hierarchical Layout - User-defined

-
+
This example shows a user-defined hierarchical layout. If the user defines levels for nodes but does not do so for all nodes, an alert will show up and hierarchical layout will be disabled. Either all or none can be defined. If the smooth curves appear to be inverted, the direction of the edge is not in the same direction as the network.
diff --git a/examples/network/25_physics_configuration.html b/examples/network/25_physics_configuration.html index 6e5356fd..f619b77c 100644 --- a/examples/network/25_physics_configuration.html +++ b/examples/network/25_physics_configuration.html @@ -77,10 +77,8 @@ }; var options = { - edges: { - }, - stabilize: false, - configurePhysics:true + stabilize: false, + configurePhysics:true }; network = new vis.Network(container, data, options); @@ -95,7 +93,7 @@

Playing with Physics

-
+
Every dataset is different. Nodes can have different sizes based on content, interconnectivity can be high or low etc. Because of this, network has a special option that the user can use to explore which settings may be good for him or her. This is ment to be used during the development phase when you are implementing vis.js. Once you have found settings you are happy with, you can supply them to network using the documented physics options. diff --git a/examples/network/26_staticSmoothCurves.html b/examples/network/26_staticSmoothCurves.html index c12606af..cfff98e7 100644 --- a/examples/network/26_staticSmoothCurves.html +++ b/examples/network/26_staticSmoothCurves.html @@ -17,7 +17,7 @@

Static smooth curves

-
+
All the smooth curves in the examples so far have been using dynamic smooth curves. This means that each curve has a support node which takes part in the physics simulation. For large networks or dense clusters, this may not be the ideal solution. To solve this, static smooth curves have been added. The static smooth curves are based only on the positions of the connected diff --git a/examples/network/30_importing_from_gephi.html b/examples/network/30_importing_from_gephi.html index 7b2f93f1..589d4333 100644 --- a/examples/network/30_importing_from_gephi.html +++ b/examples/network/30_importing_from_gephi.html @@ -34,7 +34,7 @@

Dynamic Data - Importing from Gephi (JSON)

-
+
This example shows how to import a JSON file exported by Gephi. The two options available for the import are available through the checkboxes. You can download the Gephi JSON exporter here: https://marketplace.gephi.org/plugin/json-exporter/. diff --git a/index.html b/index.html index ebc8e878..78f4e731 100644 --- a/index.html +++ b/index.html @@ -74,7 +74,7 @@ bower install vis

download

Click here to download vis.js -(version 3.1.0) +(version 3.2.0)

Example

@@ -482,6 +482,12 @@ The source code of the examples can be found in the
performance
+

_^SB*~-BcskkHJlg(zT)S1|$Q*%tk`$u<$t$ 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