From b7a67920d5753cd840d48ec6afcc8b3b6e2a4392 Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 5 Sep 2014 12:09:19 +0200 Subject: [PATCH] Smarter check whether data changed when redrawing items. (See also #290) --- dist/vis.js | 17566 +++++++++++---------- dist/vis.map | 2 +- dist/vis.min.js | 20 +- lib/timeline/component/ItemSet.js | 6 +- lib/timeline/component/item/Item.js | 68 +- lib/timeline/component/item/ItemBox.js | 51 +- lib/timeline/component/item/ItemPoint.js | 49 +- lib/timeline/component/item/ItemRange.js | 48 +- 8 files changed, 8915 insertions(+), 8895 deletions(-) diff --git a/dist/vis.js b/dist/vis.js index 83439add..537a7874 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.3.1-SNAPSHOT - * @date 2014-09-03 + * @date 2014-09-05 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -9827,7 +9827,7 @@ return /******/ (function(modules) { // webpackBootstrap ItemSet.prototype.setOptions = function(options) { if (options) { // copy all options that we know - var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder']; + var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder', 'dataAttributes']; util.selectiveExtend(fields, this.options, options); if ('margin' in options) { @@ -10517,10 +10517,8 @@ return /******/ (function(modules) { // webpackBootstrap ItemSet.prototype._updateItem = function(item, itemData) { var oldGroupId = item.data.group; - item.data = itemData; - if (item.displayed) { - item.redraw(); - } + // update the items data (will redraw the item when displayed) + item.setData(itemData); // update group if (oldGroupId != item.data.group) { @@ -12952,6 +12950,7 @@ return /******/ (function(modules) { // webpackBootstrap */ Item.prototype.select = function() { this.selected = true; + this.dirty = true; if (this.displayed) this.redraw(); }; @@ -12960,6 +12959,18 @@ return /******/ (function(modules) { // webpackBootstrap */ Item.prototype.unselect = function() { this.selected = false; + this.dirty = true; + if (this.displayed) this.redraw(); + }; + + /** + * Set data for the item. Existing data will be updated. The id should not + * be changed. When the item is displayed, it will be redrawn immediately. + * @param {Object} data + */ + Item.prototype.setData = function(data) { + this.data = data; + this.dirty = true; if (this.displayed) this.redraw(); }; @@ -13060,6 +13071,59 @@ return /******/ (function(modules) { // webpackBootstrap } }; + /** + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @private + */ + Item.prototype._updateContents = function (element) { + if (this.data.content instanceof Element) { + element.innerHTML = ''; + element.appendChild(this.data.content); + } + else if (this.data.content != undefined) { + element.innerHTML = this.data.content; + } + else { + throw new Error('Property "content" missing in item ' + this.data.id); + } + }; + + /** + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @private + */ + Item.prototype._updateTitle = function (element) { + if (this.data.title != null) { + element.title = this.data.title || ''; + } + else { + element.removeAttribute('title'); + } + }; + + /** + * Process dataAttributes timeline option and set as data- attributes on dom.content + * @param {Element} element HTML element to which the attributes will be attached + * @private + */ + Item.prototype._updateDataAttributes = function(element) { + if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { + for (var i = 0; i < this.options.dataAttributes.length; i++) { + var name = this.options.dataAttributes[i]; + var value = this.data[name]; + + if (value != null) { + element.setAttribute('data-' + name, value); + } + else { + element.removeAttribute('data-' + name); + } + } + } + }; + module.exports = Item; @@ -13143,6 +13207,8 @@ return /******/ (function(modules) { // webpackBootstrap // attach this item as attribute dom.box['timeline-item'] = this; + + this.dirty = true; } // append DOM to parent DOM @@ -13166,43 +13232,28 @@ return /******/ (function(modules) { // webpackBootstrap } this.displayed = true; - // update contents - if (this.data.content != this.content) { - this.content = this.data.content; - if (this.content instanceof Element) { - dom.content.innerHTML = ''; - dom.content.appendChild(this.content); - } - else if (this.data.content != undefined) { - dom.content.innerHTML = this.content; - } - else { - throw new Error('Property "content" missing in item ' + this.data.id); - } - - this.dirty = true; - } + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + // update contents + this._updateContents(this.dom.content); - // update title - if (this.data.title != this.title) { - dom.box.title = this.data.title; - this.title = this.data.title; - } + // update title + this._updateTitle(this.dom.box); - // update class - var className = (this.data.className? ' ' + this.data.className : '') + - (this.selected ? ' selected' : ''); - if (this.className != className) { - this.className = className; + // update class + var className = (this.data.className? ' ' + this.data.className : '') + + (this.selected ? ' selected' : ''); dom.box.className = 'item box' + className; dom.line.className = 'item line' + className; dom.dot.className = 'item dot' + className; - this.dirty = true; - } + // update data attributes + this._updateDataAttributes(this.dom.box); - // recalculate size - if (this.dirty) { + // recalculate size this.props.dot.height = dom.dot.offsetHeight; this.props.dot.width = dom.dot.offsetWidth; this.props.line.width = dom.line.offsetWidth; @@ -13387,6 +13438,8 @@ return /******/ (function(modules) { // webpackBootstrap // attach this item as attribute dom.point['timeline-item'] = this; + + this.dirty = true; } // append DOM to parent DOM @@ -13402,42 +13455,27 @@ return /******/ (function(modules) { // webpackBootstrap } this.displayed = true; - // update contents - if (this.data.content != this.content) { - this.content = this.data.content; - if (this.content instanceof Element) { - dom.content.innerHTML = ''; - dom.content.appendChild(this.content); - } - else if (this.data.content != undefined) { - dom.content.innerHTML = this.content; - } - else { - throw new Error('Property "content" missing in item ' + this.data.id); - } - - this.dirty = true; - } + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + // update contents + this._updateContents(this.dom.content); - // update title - if (this.data.title != this.title) { - dom.point.title = this.data.title; - this.title = this.data.title; - } + // update title + this._updateTitle(this.dom.point); - // update class - var className = (this.data.className? ' ' + this.data.className : '') + - (this.selected ? ' selected' : ''); - if (this.className != className) { - this.className = className; + // update class + var className = (this.data.className? ' ' + this.data.className : '') + + (this.selected ? ' selected' : ''); dom.point.className = 'item point' + className; dom.dot.className = 'item dot' + className; - this.dirty = true; - } + // attach HTML attributes + this._updateDataAttributes(this.dom.point); - // recalculate size - if (this.dirty) { + // recalculate size this.width = dom.point.offsetWidth; this.height = dom.point.offsetHeight; this.props.dot.width = dom.dot.offsetWidth; @@ -13588,6 +13626,8 @@ return /******/ (function(modules) { // webpackBootstrap // attach this item as attribute dom.box['timeline-item'] = this; + + this.dirty = true; } // append DOM to parent DOM @@ -13603,44 +13643,28 @@ return /******/ (function(modules) { // webpackBootstrap } this.displayed = true; - // update contents - if (this.data.content != this.content) { - this.content = this.data.content; - if (this.content instanceof Element) { - dom.content.innerHTML = ''; - dom.content.appendChild(this.content); - } - else if (this.data.content != undefined) { - dom.content.innerHTML = this.content; - } - else { - throw new Error('Property "content" missing in item ' + this.data.id); - } - - this.dirty = true; - } + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + // update contents + this._updateContents(this.dom.content); - // update title - if (this.data.title != this.title) { - dom.box.title = this.data.title; - this.title = this.data.title; - } + // update title + this._updateTitle(this.dom.box); - // update class - var className = (this.data.className ? (' ' + this.data.className) : '') + - (this.selected ? ' selected' : ''); - if (this.className != className) { - this.className = className; + // update class + var className = (this.data.className ? (' ' + this.data.className) : '') + + (this.selected ? ' selected' : ''); dom.box.className = this.baseClassName + className; - this.dirty = true; - } + this._updateDataAttributes(this.dom.box); - // recalculate size - if (this.dirty) { // determine from css whether this box has overflow this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; + // recalculate size this.props.content.width = this.dom.content.offsetWidth; this.height = this.dom.box.offsetHeight; @@ -13837,7 +13861,7 @@ return /******/ (function(modules) { // webpackBootstrap var Emitter = __webpack_require__(49); var Hammer = __webpack_require__(41); - var mousetrap = __webpack_require__(59); + var mousetrap = __webpack_require__(50); var util = __webpack_require__(1); var hammerUtil = __webpack_require__(43); var DataSet = __webpack_require__(3); @@ -19467,7 +19491,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__(58); + module.exports = (typeof window !== 'undefined') && window['moment'] || __webpack_require__(52); /***/ }, @@ -19477,7 +19501,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__(50); + module.exports = window['Hammer'] || __webpack_require__(51); } else { module.exports = function () { @@ -19665,7 +19689,7 @@ return /******/ (function(modules) { // webpackBootstrap Core.prototype.setOptions = function (options) { if (options) { // copy the known options - var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'orientation', 'clickToUse']; + var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'orientation', 'clickToUse', 'dataAttributes']; util.selectiveExtend(fields, this.options, options); if ('clickToUse' in options) { @@ -20636,13 +20660,13 @@ return /******/ (function(modules) { // webpackBootstrap /* 47 */ /***/ function(module, exports, __webpack_require__) { - var PhysicsMixin = __webpack_require__(57); - var ClusterMixin = __webpack_require__(51); - var SectorsMixin = __webpack_require__(52); - var SelectionMixin = __webpack_require__(53); - var ManipulationMixin = __webpack_require__(54); - var NavigationMixin = __webpack_require__(55); - var HierarchicalLayoutMixin = __webpack_require__(56); + var PhysicsMixin = __webpack_require__(59); + var ClusterMixin = __webpack_require__(53); + var SectorsMixin = __webpack_require__(54); + var SelectionMixin = __webpack_require__(55); + var ManipulationMixin = __webpack_require__(56); + var NavigationMixin = __webpack_require__(57); + var HierarchicalLayoutMixin = __webpack_require__(58); /** * Load a mixin into the network object @@ -20840,7 +20864,7 @@ return /******/ (function(modules) { // webpackBootstrap /* 48 */ /***/ function(module, exports, __webpack_require__) { - var mousetrap = __webpack_require__(59); + var mousetrap = __webpack_require__(50); var Emitter = __webpack_require__(49); var Hammer = __webpack_require__(41); var util = __webpack_require__(1); @@ -21162,10098 +21186,10110 @@ return /******/ (function(modules) { // webpackBootstrap /* 50 */ /***/ function(module, exports, __webpack_require__) { - var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v1.1.3 - 2014-05-20 - * http://eightmedia.github.io/hammer.js - * - * Copyright (c) 2014 Jorik Tangelder ; - * Licensed under the MIT license */ - - (function(window, undefined) { - 'use strict'; - /** - * @main - * @module hammer + * Copyright 2012 Craig Campbell * - * @class Hammer - * @static - */ - - /** - * Hammer, use this to create instances - * ```` - * var hammertime = new Hammer(myElement); - * ```` + * 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 * - * @method Hammer - * @param {HTMLElement} element - * @param {Object} [options={}] - * @return {Hammer.Instance} - */ - var Hammer = function Hammer(element, options) { - return new Hammer.Instance(element, options || {}); - }; - - /** - * version, as defined in package.json - * the value will be set at each build - * @property VERSION - * @final - * @type {String} - */ - Hammer.VERSION = '1.1.3'; - - /** - * default settings. - * more settings are defined per gesture at `/gestures`. Each gesture can be disabled/enabled - * by setting it's name (like `swipe`) to false. - * You can set the defaults for all instances by changing this object before creating an instance. - * @example - * ```` - * Hammer.defaults.drag = false; - * Hammer.defaults.behavior.touchAction = 'pan-y'; - * delete Hammer.defaults.behavior.userSelect; - * ```` - * @property defaults - * @type {Object} + * 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 */ - Hammer.defaults = { - /** - * this setting object adds styles and attributes to the element to prevent the browser from doing - * its native behavior. The css properties are auto prefixed for the browsers when needed. - * @property defaults.behavior - * @type {Object} - */ - behavior: { - /** - * Disables text selection to improve the dragging gesture. When the value is `none` it also sets - * `onselectstart=false` for IE on the element. Mainly for desktop browsers. - * @property defaults.behavior.userSelect - * @type {String} - * @default 'none' - */ - userSelect: 'none', - /** - * Specifies whether and how a given region can be manipulated by the user (for instance, by panning or zooming). - * Used by Chrome 35> and IE10>. By default this makes the element blocking any touch event. - * @property defaults.behavior.touchAction - * @type {String} - * @default: 'pan-y' - */ - touchAction: 'pan-y', + /** + * 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' + }, - /** - * Disables the default callout shown when you touch and hold a touch target. - * On iOS, when you touch and hold a touch target such as a link, Safari displays - * a callout containing information about the link. This property allows you to disable that callout. - * @property defaults.behavior.touchCallout - * @type {String} - * @default 'none' - */ - touchCallout: 'none', + /** + * 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: '\'' + }, - /** - * Specifies whether zooming is enabled. Used by IE10> - * @property defaults.behavior.contentZooming - * @type {String} - * @default 'none' - */ - contentZooming: 'none', + /** + * 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', + '_': '-', + '+': '=', + ':': ';', + '\"': '\'', + '<': ',', + '>': '.', + '?': '/', + '|': '\\' + }, - /** - * Specifies that an entire element should be draggable instead of its contents. - * Mainly for desktop browsers. - * @property defaults.behavior.userDrag - * @type {String} - * @default 'none' - */ - userDrag: 'none', + /** + * 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' + }, - /** - * Overrides the highlight color shown when the user taps a link or a JavaScript - * clickable element in Safari on iPhone. This property obeys the alpha value, if specified. - * - * If you don't specify an alpha value, Safari on iPhone applies a default alpha value - * to the color. To disable tap highlighting, set the alpha value to 0 (invisible). - * If you set the alpha value to 1.0 (opaque), the element is not visible when tapped. - * @property defaults.behavior.tapHighlightColor - * @type {String} - * @default 'rgba(0,0,0,0)' - */ - tapHighlightColor: 'rgba(0,0,0,0)' - } - }; + /** + * 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, - /** - * hammer document where the base events are added at - * @property DOCUMENT - * @type {HTMLElement} - * @default window.document - */ - Hammer.DOCUMENT = document; + /** + * a list of all the callbacks setup via Mousetrap.bind() + * + * @type {Object} + */ + _callbacks = {}, - /** - * detect support for pointer events - * @property HAS_POINTEREVENTS - * @type {Boolean} - */ - Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled; + /** + * direct map of string combinations to callbacks used for trigger() + * + * @type {Object} + */ + _direct_map = {}, - /** - * detect support for touch events - * @property HAS_TOUCHEVENTS - * @type {Boolean} - */ - Hammer.HAS_TOUCHEVENTS = ('ontouchstart' in window); + /** + * keeps track of what level each sequence is at since multiple + * sequences can start out with the same sequence + * + * @type {Object} + */ + _sequence_levels = {}, - /** - * detect mobile browsers - * @property IS_MOBILE - * @type {Boolean} - */ - Hammer.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent); + /** + * variable to store the setTimeout call + * + * @type {null|number} + */ + _reset_timer, - /** - * detect if we want to support mouseevents at all - * @property NO_MOUSEEVENTS - * @type {Boolean} - */ - Hammer.NO_MOUSEEVENTS = (Hammer.HAS_TOUCHEVENTS && Hammer.IS_MOBILE) || Hammer.HAS_POINTEREVENTS; + /** + * temporary state where we will ignore the next keyup + * + * @type {boolean|string} + */ + _ignore_next_keyup = false, - /** - * interval in which Hammer recalculates current velocity/direction/angle in ms - * @property CALCULATE_INTERVAL - * @type {Number} - * @default 25 - */ - Hammer.CALCULATE_INTERVAL = 25; + /** + * are we currently inside of a sequence? + * type of action ("keyup" or "keydown" or "keypress") or false + * + * @type {boolean|string} + */ + _inside_sequence = false; - /** - * eventtypes per touchevent (start, move, end) are filled by `Event.determineEventTypes` on `setup` - * the object contains the DOM event names per type (`EVENT_START`, `EVENT_MOVE`, `EVENT_END`) - * @property EVENT_TYPES - * @private - * @writeOnce - * @type {Object} - */ - var EVENT_TYPES = {}; + /** + * 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; + } - /** - * direction strings, for safe comparisons - * @property DIRECTION_DOWN|LEFT|UP|RIGHT - * @final - * @type {String} - * @default 'down' 'left' 'up' 'right' - */ - var DIRECTION_DOWN = Hammer.DIRECTION_DOWN = 'down'; - var DIRECTION_LEFT = Hammer.DIRECTION_LEFT = 'left'; - var DIRECTION_UP = Hammer.DIRECTION_UP = 'up'; - var DIRECTION_RIGHT = Hammer.DIRECTION_RIGHT = 'right'; + /** + * loop through to map numbers on the numeric keypad + */ + for (i = 0; i <= 9; ++i) { + _MAP[i + 96] = i; + } - /** - * pointertype strings, for safe comparisons - * @property POINTER_MOUSE|TOUCH|PEN - * @final - * @type {String} - * @default 'mouse' 'touch' 'pen' - */ - var POINTER_MOUSE = Hammer.POINTER_MOUSE = 'mouse'; - var POINTER_TOUCH = Hammer.POINTER_TOUCH = 'touch'; - var POINTER_PEN = Hammer.POINTER_PEN = 'pen'; + /** + * 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); + } - /** - * eventtypes - * @property EVENT_START|MOVE|END|RELEASE|TOUCH - * @final - * @type {String} - * @default 'start' 'change' 'move' 'end' 'release' 'touch' - */ - var EVENT_START = Hammer.EVENT_START = 'start'; - var EVENT_MOVE = Hammer.EVENT_MOVE = 'move'; - var EVENT_END = Hammer.EVENT_END = 'end'; - var EVENT_RELEASE = Hammer.EVENT_RELEASE = 'release'; - var EVENT_TOUCH = Hammer.EVENT_TOUCH = 'touch'; + object.attachEvent('on' + type, callback); + } - /** - * if the window events are set... - * @property READY - * @writeOnce - * @type {Boolean} - * @default false - */ - Hammer.READY = false; + /** + * takes the event and returns the key character + * + * @param {Event} e + * @return {string} + */ + function _characterFromEvent(e) { - /** - * plugins namespace - * @property plugins - * @type {Object} - */ - Hammer.plugins = Hammer.plugins || {}; + // for keypress events we should return the character as is + if (e.type == 'keypress') { + return String.fromCharCode(e.which); + } - /** - * gestures namespace - * see `/gestures` for the definitions - * @property gestures - * @type {Object} - */ - Hammer.gestures = Hammer.gestures || {}; + // for non keypress events the special maps are needed + if (_MAP[e.which]) { + return _MAP[e.which]; + } - /** - * setup events to detect gestures on the document - * this function is called when creating an new instance - * @private - */ - function setup() { - if(Hammer.READY) { - return; - } + if (_KEYCODE_MAP[e.which]) { + return _KEYCODE_MAP[e.which]; + } - // find what eventtypes we add listeners to - Event.determineEventTypes(); + // if it is not in the special map + return String.fromCharCode(e.which).toLowerCase(); + } - // Register all gestures inside Hammer.gestures - Utils.each(Hammer.gestures, function(gesture) { - Detection.register(gesture); - }); + /** + * 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; - // Add touch events on the document - Event.onTouch(Hammer.DOCUMENT, EVENT_MOVE, Detection.detect); - Event.onTouch(Hammer.DOCUMENT, EVENT_END, Detection.detect); + // if the element has the class "mousetrap" then no need to stop + if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { + return false; + } - // Hammer is ready...! - Hammer.READY = true; - } + // stop for input, select, and textarea + return tag_name == 'INPUT' || tag_name == 'SELECT' || tag_name == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true'); + } - /** - * @module hammer - * - * @class Utils - * @static - */ - var Utils = Hammer.utils = { - /** - * extend method, could also be used for cloning when `dest` is an empty object. - * changes the dest object - * @method extend - * @param {Object} dest - * @param {Object} src - * @param {Boolean} [merge=false] do a merge - * @return {Object} dest - */ - extend: function extend(dest, src, merge) { - for(var key in src) { - if(!src.hasOwnProperty(key) || (dest[key] !== undefined && merge)) { - continue; - } - dest[key] = src[key]; - } - return dest; - }, + /** + * 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(','); + } - /** - * simple addEventListener wrapper - * @method on - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - */ - on: function on(element, type, handler) { - element.addEventListener(type, handler, false); - }, + /** + * 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 || {}; - /** - * simple removeEventListener wrapper - * @method off - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - */ - off: function off(element, type, handler) { - element.removeEventListener(type, handler, false); - }, + var active_sequences = false, + key; - /** - * forEach over arrays and objects - * @method each - * @param {Object|Array} obj - * @param {Function} iterator - * @param {any} iterator.item - * @param {Number} iterator.index - * @param {Object|Array} iterator.obj the source object - * @param {Object} context value to use as `this` in the iterator - */ - each: function each(obj, iterator, context) { - var i, len; + for (key in _sequence_levels) { + if (do_not_reset[key]) { + active_sequences = true; + continue; + } + _sequence_levels[key] = 0; + } - // native forEach on arrays - if('forEach' in obj) { - obj.forEach(iterator, context); - // arrays - } else if(obj.length !== undefined) { - for(i = 0, len = obj.length; i < len; i++) { - if(iterator.call(context, obj[i], i, obj) === false) { - return; - } - } - // objects - } else { - for(i in obj) { - if(obj.hasOwnProperty(i) && - iterator.call(context, obj[i], i, obj) === false) { - return; - } - } - } - }, + if (!active_sequences) { + _inside_sequence = false; + } + } - /** - * find if a string contains the string using indexOf - * @method inStr - * @param {String} src - * @param {String} find - * @return {Boolean} found - */ - inStr: function inStr(src, find) { - return src.indexOf(find) > -1; - }, + /** + * 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 = []; - /** - * find if a array contains the object using indexOf or a simple polyfill - * @method inArray - * @param {String} src - * @param {String} find - * @return {Boolean|Number} false when not found, or the index - */ - inArray: function inArray(src, find) { - if(src.indexOf) { - var index = src.indexOf(find); - return (index === -1) ? false : index; - } else { - for(var i = 0, len = src.length; i < len; i++) { - if(src[i] === find) { - return i; - } - } - return false; - } - }, + // if there are no events related to this keycode + if (!_callbacks[character]) { + return []; + } - /** - * convert an array-like object (`arguments`, `touchlist`) to an array - * @method toArray - * @param {Object} obj - * @return {Array} - */ - toArray: function toArray(obj) { - return Array.prototype.slice.call(obj, 0); - }, + // if a modifier key is coming up on its own we should allow it + if (action == 'keyup' && _isModifier(character)) { + modifiers = [character]; + } - /** - * find if a node is in the given parent - * @method hasParent - * @param {HTMLElement} node - * @param {HTMLElement} parent - * @return {Boolean} found - */ - hasParent: function hasParent(node, parent) { - while(node) { - if(node == parent) { - return true; - } - node = node.parentNode; - } - return false; - }, + // 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]; - /** - * get the center of all the touches - * @method getCenter - * @param {Array} touches - * @return {Object} center contains `pageX`, `pageY`, `clientX` and `clientY` properties - */ - getCenter: function getCenter(touches) { - var pageX = [], - pageY = [], - clientX = [], - clientY = [], - min = Math.min, - max = Math.max; + // 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; + } - // no need to loop when only one touch - if(touches.length === 1) { - return { - pageX: touches[0].pageX, - pageY: touches[0].pageY, - clientX: touches[0].clientX, - clientY: touches[0].clientY - }; - } + // if the action we are looking for doesn't match the action we got + // then we should keep going + if (action != callback.action) { + continue; + } - Utils.each(touches, function(touch) { - pageX.push(touch.pageX); - pageY.push(touch.pageY); - clientX.push(touch.clientX); - clientY.push(touch.clientY); - }); + // 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)) { - return { - pageX: (min.apply(Math, pageX) + max.apply(Math, pageX)) / 2, - pageY: (min.apply(Math, pageY) + max.apply(Math, pageY)) / 2, - clientX: (min.apply(Math, clientX) + max.apply(Math, clientX)) / 2, - clientY: (min.apply(Math, clientY) + max.apply(Math, clientY)) / 2 - }; - }, + // 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); + } - /** - * calculate the velocity between two points. unit is in px per ms. - * @method getVelocity - * @param {Number} deltaTime - * @param {Number} deltaX - * @param {Number} deltaY - * @return {Object} velocity `x` and `y` - */ - getVelocity: function getVelocity(deltaTime, deltaX, deltaY) { - return { - x: Math.abs(deltaX / deltaTime) || 0, - y: Math.abs(deltaY / deltaTime) || 0 - }; - }, + matches.push(callback); + } + } - /** - * calculate the angle between two coordinates - * @method getAngle - * @param {Touch} touch1 - * @param {Touch} touch2 - * @return {Number} angle - */ - getAngle: function getAngle(touch1, touch2) { - var x = touch2.clientX - touch1.clientX, - y = touch2.clientY - touch1.clientY; + return matches; + } - return Math.atan2(y, x) * 180 / Math.PI; - }, + /** + * takes a key event and figures out what the modifiers are + * + * @param {Event} e + * @returns {Array} + */ + function _eventModifiers(e) { + var modifiers = []; - /** - * do a small comparision to get the direction between two touches. - * @method getDirection - * @param {Touch} touch1 - * @param {Touch} touch2 - * @return {String} direction matches `DIRECTION_LEFT|RIGHT|UP|DOWN` - */ - getDirection: function getDirection(touch1, touch2) { - var x = Math.abs(touch1.clientX - touch2.clientX), - y = Math.abs(touch1.clientY - touch2.clientY); + if (e.shiftKey) { + modifiers.push('shift'); + } - if(x >= y) { - return touch1.clientX - touch2.clientX > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - return touch1.clientY - touch2.clientY > 0 ? DIRECTION_UP : DIRECTION_DOWN; - }, + if (e.altKey) { + modifiers.push('alt'); + } - /** - * calculate the distance between two touches - * @method getDistance - * @param {Touch}touch1 - * @param {Touch} touch2 - * @return {Number} distance - */ - getDistance: function getDistance(touch1, touch2) { - var x = touch2.clientX - touch1.clientX, - y = touch2.clientY - touch1.clientY; + if (e.ctrlKey) { + modifiers.push('ctrl'); + } - return Math.sqrt((x * x) + (y * y)); - }, + if (e.metaKey) { + modifiers.push('meta'); + } - /** - * calculate the scale factor between two touchLists - * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out - * @method getScale - * @param {Array} start array of touches - * @param {Array} end array of touches - * @return {Number} scale - */ - getScale: function getScale(start, end) { - // need two fingers... - if(start.length >= 2 && end.length >= 2) { - return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]); - } - return 1; - }, + return modifiers; + } - /** - * calculate the rotation degrees between two touchLists - * @method getRotation - * @param {Array} start array of touches - * @param {Array} end array of touches - * @return {Number} rotation - */ - getRotation: function getRotation(start, end) { - // need two fingers - if(start.length >= 2 && end.length >= 2) { - return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]); - } - return 0; - }, + /** + * 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(); + } - /** - * find out if the direction is vertical * - * @method isVertical - * @param {String} direction matches `DIRECTION_UP|DOWN` - * @return {Boolean} is_vertical - */ - isVertical: function isVertical(direction) { - return direction == DIRECTION_UP || direction == DIRECTION_DOWN; - }, + if (e.stopPropagation) { + e.stopPropagation(); + } - /** - * set css properties with their prefixes - * @param {HTMLElement} element - * @param {String} prop - * @param {String} value - * @param {Boolean} [toggle=true] - * @return {Boolean} - */ - setPrefixedCss: function setPrefixedCss(element, prop, value, toggle) { - var prefixes = ['', 'Webkit', 'Moz', 'O', 'ms']; - prop = Utils.toCamelCase(prop); + e.returnValue = false; + e.cancelBubble = true; + } + } - for(var i = 0; i < prefixes.length; i++) { - var p = prop; - // prefixes - if(prefixes[i]) { - p = prefixes[i] + p.slice(0, 1).toUpperCase() + p.slice(1); - } + /** + * handles a character key event + * + * @param {string} character + * @param {Event} e + * @returns void + */ + function _handleCharacter(character, e) { - // test the style - if(p in element.style) { - element.style[p] = (toggle == null || toggle) && value || ''; - break; - } - } - }, + // if this event should not happen stop here + if (_stop(e)) { + return; + } - /** - * toggle browser default behavior by setting css properties. - * `userSelect='none'` also sets `element.onselectstart` to false - * `userDrag='none'` also sets `element.ondragstart` to false - * - * @method toggleBehavior - * @param {HtmlElement} element - * @param {Object} props - * @param {Boolean} [toggle=true] - */ - toggleBehavior: function toggleBehavior(element, props, toggle) { - if(!props || !element || !element.style) { - return; - } + var callbacks = _getMatches(character, _eventModifiers(e), e.type), + i, + do_not_reset = {}, + processed_sequence_callback = false; - // set the css properties - Utils.each(props, function(value, prop) { - Utils.setPrefixedCss(element, prop, value, toggle); - }); + // loop through matching callbacks for this key event + for (i = 0; i < callbacks.length; ++i) { - var falseFn = toggle && function() { - return false; - }; + // 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; - // also the disable onselectstart - if(props.userSelect == 'none') { - element.onselectstart = falseFn; - } - // and disable ondragstart - if(props.userDrag == 'none') { - element.ondragstart = falseFn; - } - }, + // keep a list of which sequences were matches for later + do_not_reset[callbacks[i].seq] = 1; + _fireCallback(callbacks[i].callback, e); + continue; + } - /** - * convert a string with underscores to camelCase - * so prevent_default becomes preventDefault - * @param {String} str - * @return {String} camelCaseStr - */ - toCamelCase: function toCamelCase(str) { - return str.replace(/[_-]([a-z])/g, function(s) { - return s[1].toUpperCase(); - }); - } - }; + // 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); + } + } - /** - * @module hammer - */ - /** - * @class Event - * @static - */ - var Event = Hammer.event = { - /** - * when touch events have been fired, this is true - * this is used to stop mouse events - * @property prevent_mouseevents - * @private - * @type {Boolean} - */ - preventMouseEvents: false, + /** + * handles a keydown event + * + * @param {Event} e + * @returns void + */ + function _handleKey(e) { - /** - * if EVENT_START has been fired - * @property started - * @private - * @type {Boolean} - */ - started: false, + // 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; - /** - * when the mouse is hold down, this is true - * @property should_detect - * @private - * @type {Boolean} - */ - shouldDetect: false, + var character = _characterFromEvent(e); - /** - * simple event binder with a hook and support for multiple types - * @method on - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - * @param {Function} [hook] - * @param {Object} hook.type - */ - on: function on(element, type, handler, hook) { - var types = type.split(' '); - Utils.each(types, function(type) { - Utils.on(element, type, handler); - hook && hook(type); - }); - }, + // no character found then stop + if (!character) { + return; + } - /** - * simple event unbinder with a hook and support for multiple types - * @method off - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - * @param {Function} [hook] - * @param {Object} hook.type - */ - off: function off(element, type, handler, hook) { - var types = type.split(' '); - Utils.each(types, function(type) { - Utils.off(element, type, handler); - hook && hook(type); - }); - }, + if (e.type == 'keyup' && _ignore_next_keyup == character) { + _ignore_next_keyup = false; + return; + } - /** - * the core touch event handler. - * this finds out if we should to detect gestures - * @method onTouch - * @param {HTMLElement} element - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Function} handler - * @return onTouchHandler {Function} the core event handler - */ - onTouch: function onTouch(element, eventType, handler) { - var self = this; + _handleCharacter(character, e); + } - var onTouchHandler = function onTouchHandler(ev) { - var srcType = ev.type.toLowerCase(), - isPointer = Hammer.HAS_POINTEREVENTS, - isMouse = Utils.inStr(srcType, 'mouse'), - triggerType; + /** + * 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'; + } - // if we are in a mouseevent, but there has been a touchevent triggered in this session - // we want to do nothing. simply break out of the event. - if(isMouse && self.preventMouseEvents) { - return; + /** + * 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); + } - // mousebutton must be down - } else if(isMouse && eventType == EVENT_START && ev.button === 0) { - self.preventMouseEvents = false; - self.shouldDetect = true; - } else if(isPointer && eventType == EVENT_START) { - self.shouldDetect = (ev.buttons === 1 || PointerEvent.matchType(POINTER_TOUCH, ev)); - // just a valid start event, but no mouse - } else if(!isMouse && eventType == EVENT_START) { - self.preventMouseEvents = true; - self.shouldDetect = true; - } + /** + * 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) { - // update the pointer event before entering the detection - if(isPointer && eventType != EVENT_END) { - PointerEvent.updatePointer(eventType, ev); - } + // 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; + } - // we are in a touch/down state, so allowed detection of gestures - if(self.shouldDetect) { - triggerType = self.doDetect.call(self, ev, eventType, element, handler); - } + if (_MAP.hasOwnProperty(key)) { + _REVERSE_MAP[_MAP[key]] = key; + } + } + } + return _REVERSE_MAP; + } - // ...and we are done with the detection - // so reset everything to start each detection totally fresh - if(triggerType == EVENT_END) { - self.preventMouseEvents = false; - self.shouldDetect = false; - PointerEvent.reset(); - // update the pointerevent object after the detection - } + /** + * 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) { - if(isPointer && eventType == EVENT_END) { - PointerEvent.updatePointer(eventType, ev); - } - }; + // 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'; + } - this.on(element, EVENT_TYPES[eventType], onTouchHandler); - return onTouchHandler; - }, + // modifier keys don't work as expected with keypress, + // switch to keydown + if (action == 'keypress' && modifiers.length) { + action = 'keydown'; + } - /** - * the core detection method - * this finds out what hammer-touch-events to trigger - * @method doDetect - * @param {Object} ev - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {HTMLElement} element - * @param {Function} handler - * @return {String} triggerType matches `EVENT_START|MOVE|END` - */ - doDetect: function doDetect(ev, eventType, element, handler) { - var touchList = this.getTouchList(ev, eventType); - var touchListLength = touchList.length; - var triggerType = eventType; - var triggerChange = touchList.trigger; // used by fakeMultitouch plugin - var changedLength = touchListLength; + return action; + } - // at each touchstart-like event we want also want to trigger a TOUCH event... - if(eventType == EVENT_START) { - triggerChange = EVENT_TOUCH; - // ...the same for a touchend-like event - } else if(eventType == EVENT_END) { - triggerChange = EVENT_RELEASE; + /** + * 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) { - // keep track of how many touches have been removed - changedLength = touchList.length - ((ev.changedTouches) ? ev.changedTouches.length : 1); - } - - // after there are still touches on the screen, - // we just want to trigger a MOVE event. so change the START or END to a MOVE - // but only after detection has been started, the first time we actualy want a START - if(changedLength > 0 && this.started) { - triggerType = EVENT_MOVE; - } + // start off by adding a sequence level record for this combination + // and setting the level to 0 + _sequence_levels[combo] = 0; - // detection has been started, we keep track of this, see above - this.started = true; + // if there is no action pick the best one for the first key + // in the sequence + if (!action) { + action = _pickBestAction(keys[0], []); + } - // generate some event data, some basic information - var evData = this.collectEventData(element, triggerType, touchList, ev); + /** + * 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(); + }, - // trigger the triggerType event before the change (TOUCH, RELEASE) events - // but the END event should be at last - if(eventType != EVENT_END) { - handler.call(Detection, evData); - } + /** + * 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); - // trigger a change (TOUCH, RELEASE) event, this means the length of the touches changed - if(triggerChange) { - evData.changedLength = changedLength; - evData.eventType = triggerChange; + // 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); + } - handler.call(Detection, evData); + // weird race condition if a sequence ends with the key + // another sequence begins with + setTimeout(_resetSequences, 10); + }, + i; - evData.eventType = triggerType; - delete evData.changedLength; - } + // 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); + } + } - // trigger the END event - if(triggerType == EVENT_END) { - handler.call(Detection, evData); + /** + * 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) { - // ...and we are done with the detection - // so reset everything to start each detection totally fresh - this.started = false; - } + // make sure multiple spaces in a row become a single space + combination = combination.replace(/\s+/g, ' '); - return triggerType; - }, + var sequence = combination.split(' '), + i, + key, + keys, + modifiers = []; - /** - * we have different events for each device/browser - * determine what we need and set them in the EVENT_TYPES constant - * the `onTouch` method is bind to these properties. - * @method determineEventTypes - * @return {Object} events - */ - determineEventTypes: function determineEventTypes() { - var types; - if(Hammer.HAS_POINTEREVENTS) { - if(window.PointerEvent) { - types = [ - 'pointerdown', - 'pointermove', - 'pointerup pointercancel lostpointercapture' - ]; - } else { - types = [ - 'MSPointerDown', - 'MSPointerMove', - 'MSPointerUp MSPointerCancel MSLostPointerCapture' - ]; - } - } else if(Hammer.NO_MOUSEEVENTS) { - types = [ - 'touchstart', - 'touchmove', - 'touchend touchcancel' - ]; - } else { - types = [ - 'touchstart mousedown', - 'touchmove mousemove', - 'touchend touchcancel mouseup' - ]; - } + // 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); + } - EVENT_TYPES[EVENT_START] = types[0]; - EVENT_TYPES[EVENT_MOVE] = types[1]; - EVENT_TYPES[EVENT_END] = types[2]; - return EVENT_TYPES; - }, + // take the keys from this pattern and figure out what the actual + // pattern is all about + keys = combination === '+' ? ['+'] : combination.split('+'); - /** - * create touchList depending on the event - * @method getTouchList - * @param {Object} ev - * @param {String} eventType - * @return {Array} touches - */ - getTouchList: function getTouchList(ev, eventType) { - // get the fake pointerEvent touchlist - if(Hammer.HAS_POINTEREVENTS) { - return PointerEvent.getTouchList(); - } + for (i = 0; i < keys.length; ++i) { + key = keys[i]; - // get the touchlist - if(ev.touches) { - if(eventType == EVENT_MOVE) { - return ev.touches; - } + // normalize key names + if (_SPECIAL_ALIASES[key]) { + key = _SPECIAL_ALIASES[key]; + } - var identifiers = []; - var concat = [].concat(Utils.toArray(ev.touches), Utils.toArray(ev.changedTouches)); - var touchList = []; + // 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'); + } - Utils.each(concat, function(touch) { - if(Utils.inArray(identifiers, touch.identifier) === false) { - touchList.push(touch); - } - identifiers.push(touch.identifier); - }); + // if this key is a modifier then add it to the list of modifiers + if (_isModifier(key)) { + modifiers.push(key); + } + } - return touchList; - } + // depending on what the key combination is + // we will try to pick the best event for it + action = _pickBestAction(key, modifiers, action); - // make fake touchList from mouse position - ev.identifier = 1; - return [ev]; - }, + // make sure to initialize array if this is the first time + // a callback is added for this key + if (!_callbacks[key]) { + _callbacks[key] = []; + } - /** - * collect basic event data - * @method collectEventData - * @param {HTMLElement} element - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Array} touches - * @param {Object} ev - * @return {Object} ev - */ - collectEventData: function collectEventData(element, eventType, touches, ev) { - // find out pointerType - var pointerType = POINTER_TOUCH; - if(Utils.inStr(ev.type, 'mouse') || PointerEvent.matchType(POINTER_MOUSE, ev)) { - pointerType = POINTER_MOUSE; - } else if(PointerEvent.matchType(POINTER_PEN, ev)) { - pointerType = POINTER_PEN; - } + // remove an existing match if there is one + _getMatches(key, modifiers, action, !sequence_name, combination); - return { - center: Utils.getCenter(touches), - timeStamp: Date.now(), - target: ev.target, - touches: touches, - eventType: eventType, - pointerType: pointerType, - srcEvent: ev, + // 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 + }); + } - /** - * prevent the browser default actions - * mostly used to disable scrolling of the browser - */ - preventDefault: function() { - var srcEvent = this.srcEvent; - srcEvent.preventManipulation && srcEvent.preventManipulation(); - srcEvent.preventDefault && srcEvent.preventDefault(); - }, + /** + * 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); + } + } - /** - * stop bubbling the event up to its parents - */ - stopPropagation: function() { - this.srcEvent.stopPropagation(); - }, + // start! + _addEvent(document, 'keypress', _handleKey); + _addEvent(document, 'keydown', _handleKey); + _addEvent(document, 'keyup', _handleKey); - /** - * immediately stop gesture detection - * might be useful after a swipe was detected - * @return {*} - */ - stopDetect: function() { - return Detection.stopDetect(); - } - }; - } - }; + var mousetrap = { + /** + * 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; + }, - /** - * @module hammer - * - * @class PointerEvent - * @static - */ - var PointerEvent = Hammer.PointerEvent = { - /** - * holds all pointers, by `identifier` - * @property pointers - * @type {Object} - */ - pointers: {}, + /** + * 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; + }, - /** - * get the pointers as an array - * @method getTouchList - * @return {Array} touchlist - */ - getTouchList: function getTouchList() { - var touchlist = []; - // we can use forEach since pointerEvents only is in IE10 - Utils.each(this.pointers, function(pointer) { - touchlist.push(pointer); - }); - return touchlist; - }, + /** + * 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; + }, - /** - * update the position of a pointer - * @method updatePointer - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Object} pointerEvent - */ - updatePointer: function updatePointer(eventType, pointerEvent) { - if(eventType == EVENT_END || (eventType != EVENT_END && pointerEvent.buttons !== 1)) { - delete this.pointers[pointerEvent.pointerId]; - } else { - pointerEvent.identifier = pointerEvent.pointerId; - this.pointers[pointerEvent.pointerId] = pointerEvent; - } - }, + /** + * 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; + } + }; - /** - * check if ev matches pointertype - * @method matchType - * @param {String} pointerType matches `POINTER_MOUSE|TOUCH|PEN` - * @param {PointerEvent} ev - */ - matchType: function matchType(pointerType, ev) { - if(!ev.pointerType) { - return false; - } + module.exports = mousetrap; - var pt = ev.pointerType, - types = {}; - types[POINTER_MOUSE] = (pt === (ev.MSPOINTER_TYPE_MOUSE || POINTER_MOUSE)); - types[POINTER_TOUCH] = (pt === (ev.MSPOINTER_TYPE_TOUCH || POINTER_TOUCH)); - types[POINTER_PEN] = (pt === (ev.MSPOINTER_TYPE_PEN || POINTER_PEN)); - return types[pointerType]; - }, - /** - * reset the stored pointers - * @method reset - */ - reset: function resetList() { - this.pointers = {}; - } - }; +/***/ }, +/* 51 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v1.1.3 - 2014-05-20 + * http://eightmedia.github.io/hammer.js + * + * Copyright (c) 2014 Jorik Tangelder ; + * Licensed under the MIT license */ + (function(window, undefined) { + 'use strict'; /** + * @main * @module hammer * - * @class Detection + * @class Hammer * @static */ - var Detection = Hammer.detection = { - // contains all registred Hammer.gestures in the correct order - gestures: [], - // data of the current Hammer.gesture detection session - current: null, - - // the previous Hammer.gesture session data - // is a full clone of the previous gesture.current object - previous: null, + /** + * Hammer, use this to create instances + * ```` + * var hammertime = new Hammer(myElement); + * ```` + * + * @method Hammer + * @param {HTMLElement} element + * @param {Object} [options={}] + * @return {Hammer.Instance} + */ + var Hammer = function Hammer(element, options) { + return new Hammer.Instance(element, options || {}); + }; - // when this becomes true, no gestures are fired - stopped: false, + /** + * version, as defined in package.json + * the value will be set at each build + * @property VERSION + * @final + * @type {String} + */ + Hammer.VERSION = '1.1.3'; + /** + * default settings. + * more settings are defined per gesture at `/gestures`. Each gesture can be disabled/enabled + * by setting it's name (like `swipe`) to false. + * You can set the defaults for all instances by changing this object before creating an instance. + * @example + * ```` + * Hammer.defaults.drag = false; + * Hammer.defaults.behavior.touchAction = 'pan-y'; + * delete Hammer.defaults.behavior.userSelect; + * ```` + * @property defaults + * @type {Object} + */ + Hammer.defaults = { /** - * start Hammer.gesture detection - * @method startDetect - * @param {Hammer.Instance} inst - * @param {Object} eventData + * this setting object adds styles and attributes to the element to prevent the browser from doing + * its native behavior. The css properties are auto prefixed for the browsers when needed. + * @property defaults.behavior + * @type {Object} */ - startDetect: function startDetect(inst, eventData) { - // already busy with a Hammer.gesture detection on an element - if(this.current) { - return; - } + behavior: { + /** + * Disables text selection to improve the dragging gesture. When the value is `none` it also sets + * `onselectstart=false` for IE on the element. Mainly for desktop browsers. + * @property defaults.behavior.userSelect + * @type {String} + * @default 'none' + */ + userSelect: 'none', - this.stopped = false; - - // holds current session - this.current = { - inst: inst, // reference to HammerInstance we're working for - startEvent: Utils.extend({}, eventData), // start eventData for distances, timing etc - lastEvent: false, // last eventData - lastCalcEvent: false, // last eventData for calculations. - futureCalcEvent: false, // last eventData for calculations. - lastCalcData: {}, // last lastCalcData - name: '' // current gesture we're in/detected, can be 'tap', 'hold' etc - }; + /** + * Specifies whether and how a given region can be manipulated by the user (for instance, by panning or zooming). + * Used by Chrome 35> and IE10>. By default this makes the element blocking any touch event. + * @property defaults.behavior.touchAction + * @type {String} + * @default: 'pan-y' + */ + touchAction: 'pan-y', - this.detect(eventData); - }, + /** + * Disables the default callout shown when you touch and hold a touch target. + * On iOS, when you touch and hold a touch target such as a link, Safari displays + * a callout containing information about the link. This property allows you to disable that callout. + * @property defaults.behavior.touchCallout + * @type {String} + * @default 'none' + */ + touchCallout: 'none', - /** - * Hammer.gesture detection - * @method detect - * @param {Object} eventData - * @return {any} - */ - detect: function detect(eventData) { - if(!this.current || this.stopped) { - return; - } + /** + * Specifies whether zooming is enabled. Used by IE10> + * @property defaults.behavior.contentZooming + * @type {String} + * @default 'none' + */ + contentZooming: 'none', - // extend event data with calculations about scale, distance etc - eventData = this.extendEventData(eventData); + /** + * Specifies that an entire element should be draggable instead of its contents. + * Mainly for desktop browsers. + * @property defaults.behavior.userDrag + * @type {String} + * @default 'none' + */ + userDrag: 'none', - // hammer instance and instance options - var inst = this.current.inst, - instOptions = inst.options; + /** + * Overrides the highlight color shown when the user taps a link or a JavaScript + * clickable element in Safari on iPhone. This property obeys the alpha value, if specified. + * + * If you don't specify an alpha value, Safari on iPhone applies a default alpha value + * to the color. To disable tap highlighting, set the alpha value to 0 (invisible). + * If you set the alpha value to 1.0 (opaque), the element is not visible when tapped. + * @property defaults.behavior.tapHighlightColor + * @type {String} + * @default 'rgba(0,0,0,0)' + */ + tapHighlightColor: 'rgba(0,0,0,0)' + } + }; - // call Hammer.gesture handlers - Utils.each(this.gestures, function triggerGesture(gesture) { - // only when the instance options have enabled this gesture - if(!this.stopped && inst.enabled && instOptions[gesture.name]) { - gesture.handler.call(gesture, eventData, inst); - } - }, this); + /** + * hammer document where the base events are added at + * @property DOCUMENT + * @type {HTMLElement} + * @default window.document + */ + Hammer.DOCUMENT = document; - // store as previous event event - if(this.current) { - this.current.lastEvent = eventData; - } + /** + * detect support for pointer events + * @property HAS_POINTEREVENTS + * @type {Boolean} + */ + Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled; - if(eventData.eventType == EVENT_END) { - this.stopDetect(); - } + /** + * detect support for touch events + * @property HAS_TOUCHEVENTS + * @type {Boolean} + */ + Hammer.HAS_TOUCHEVENTS = ('ontouchstart' in window); - return eventData; - }, + /** + * detect mobile browsers + * @property IS_MOBILE + * @type {Boolean} + */ + Hammer.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent); - /** - * clear the Hammer.gesture vars - * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected - * to stop other Hammer.gestures from being fired - * @method stopDetect - */ - stopDetect: function stopDetect() { - // clone current data to the store as the previous gesture - // used for the double tap gesture, since this is an other gesture detect session - this.previous = Utils.extend({}, this.current); + /** + * detect if we want to support mouseevents at all + * @property NO_MOUSEEVENTS + * @type {Boolean} + */ + Hammer.NO_MOUSEEVENTS = (Hammer.HAS_TOUCHEVENTS && Hammer.IS_MOBILE) || Hammer.HAS_POINTEREVENTS; - // reset the current - this.current = null; - this.stopped = true; - }, + /** + * interval in which Hammer recalculates current velocity/direction/angle in ms + * @property CALCULATE_INTERVAL + * @type {Number} + * @default 25 + */ + Hammer.CALCULATE_INTERVAL = 25; - /** - * calculate velocity, angle and direction - * @method getVelocityData - * @param {Object} ev - * @param {Object} center - * @param {Number} deltaTime - * @param {Number} deltaX - * @param {Number} deltaY - */ - getCalculatedData: function getCalculatedData(ev, center, deltaTime, deltaX, deltaY) { - var cur = this.current, - recalc = false, - calcEv = cur.lastCalcEvent, - calcData = cur.lastCalcData; + /** + * eventtypes per touchevent (start, move, end) are filled by `Event.determineEventTypes` on `setup` + * the object contains the DOM event names per type (`EVENT_START`, `EVENT_MOVE`, `EVENT_END`) + * @property EVENT_TYPES + * @private + * @writeOnce + * @type {Object} + */ + var EVENT_TYPES = {}; - if(calcEv && ev.timeStamp - calcEv.timeStamp > Hammer.CALCULATE_INTERVAL) { - center = calcEv.center; - deltaTime = ev.timeStamp - calcEv.timeStamp; - deltaX = ev.center.clientX - calcEv.center.clientX; - deltaY = ev.center.clientY - calcEv.center.clientY; - recalc = true; - } + /** + * direction strings, for safe comparisons + * @property DIRECTION_DOWN|LEFT|UP|RIGHT + * @final + * @type {String} + * @default 'down' 'left' 'up' 'right' + */ + var DIRECTION_DOWN = Hammer.DIRECTION_DOWN = 'down'; + var DIRECTION_LEFT = Hammer.DIRECTION_LEFT = 'left'; + var DIRECTION_UP = Hammer.DIRECTION_UP = 'up'; + var DIRECTION_RIGHT = Hammer.DIRECTION_RIGHT = 'right'; - if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { - cur.futureCalcEvent = ev; - } + /** + * pointertype strings, for safe comparisons + * @property POINTER_MOUSE|TOUCH|PEN + * @final + * @type {String} + * @default 'mouse' 'touch' 'pen' + */ + var POINTER_MOUSE = Hammer.POINTER_MOUSE = 'mouse'; + var POINTER_TOUCH = Hammer.POINTER_TOUCH = 'touch'; + var POINTER_PEN = Hammer.POINTER_PEN = 'pen'; - if(!cur.lastCalcEvent || recalc) { - calcData.velocity = Utils.getVelocity(deltaTime, deltaX, deltaY); - calcData.angle = Utils.getAngle(center, ev.center); - calcData.direction = Utils.getDirection(center, ev.center); + /** + * eventtypes + * @property EVENT_START|MOVE|END|RELEASE|TOUCH + * @final + * @type {String} + * @default 'start' 'change' 'move' 'end' 'release' 'touch' + */ + var EVENT_START = Hammer.EVENT_START = 'start'; + var EVENT_MOVE = Hammer.EVENT_MOVE = 'move'; + var EVENT_END = Hammer.EVENT_END = 'end'; + var EVENT_RELEASE = Hammer.EVENT_RELEASE = 'release'; + var EVENT_TOUCH = Hammer.EVENT_TOUCH = 'touch'; - cur.lastCalcEvent = cur.futureCalcEvent || ev; - cur.futureCalcEvent = ev; - } + /** + * if the window events are set... + * @property READY + * @writeOnce + * @type {Boolean} + * @default false + */ + Hammer.READY = false; - ev.velocityX = calcData.velocity.x; - ev.velocityY = calcData.velocity.y; - ev.interimAngle = calcData.angle; - ev.interimDirection = calcData.direction; - }, + /** + * plugins namespace + * @property plugins + * @type {Object} + */ + Hammer.plugins = Hammer.plugins || {}; - /** - * extend eventData for Hammer.gestures - * @method extendEventData - * @param {Object} ev - * @return {Object} ev - */ - extendEventData: function extendEventData(ev) { - var cur = this.current, - startEv = cur.startEvent, - lastEv = cur.lastEvent || startEv; + /** + * gestures namespace + * see `/gestures` for the definitions + * @property gestures + * @type {Object} + */ + Hammer.gestures = Hammer.gestures || {}; - // update the start touchlist to calculate the scale/rotation - if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { - startEv.touches = []; - Utils.each(ev.touches, function(touch) { - startEv.touches.push({ - clientX: touch.clientX, - clientY: touch.clientY - }); - }); - } - - var deltaTime = ev.timeStamp - startEv.timeStamp, - deltaX = ev.center.clientX - startEv.center.clientX, - deltaY = ev.center.clientY - startEv.center.clientY; - - this.getCalculatedData(ev, lastEv.center, deltaTime, deltaX, deltaY); - - Utils.extend(ev, { - startEvent: startEv, - - deltaTime: deltaTime, - deltaX: deltaX, - deltaY: deltaY, - - distance: Utils.getDistance(startEv.center, ev.center), - angle: Utils.getAngle(startEv.center, ev.center), - direction: Utils.getDirection(startEv.center, ev.center), - scale: Utils.getScale(startEv.touches, ev.touches), - rotation: Utils.getRotation(startEv.touches, ev.touches) - }); - - return ev; - }, - - /** - * register new gesture - * @method register - * @param {Object} gesture object, see `gestures/` for documentation - * @return {Array} gestures - */ - register: function register(gesture) { - // add an enable gesture options if there is no given - var options = gesture.defaults || {}; - if(options[gesture.name] === undefined) { - options[gesture.name] = true; - } - - // extend Hammer default options with the Hammer.gesture options - Utils.extend(Hammer.defaults, options, true); - - // set its index - gesture.index = gesture.index || 1000; + /** + * setup events to detect gestures on the document + * this function is called when creating an new instance + * @private + */ + function setup() { + if(Hammer.READY) { + return; + } - // add Hammer.gesture to the list - this.gestures.push(gesture); + // find what eventtypes we add listeners to + Event.determineEventTypes(); - // sort the list by index - this.gestures.sort(function(a, b) { - if(a.index < b.index) { - return -1; - } - if(a.index > b.index) { - return 1; - } - return 0; - }); + // Register all gestures inside Hammer.gestures + Utils.each(Hammer.gestures, function(gesture) { + Detection.register(gesture); + }); - return this.gestures; - } - }; + // Add touch events on the document + Event.onTouch(Hammer.DOCUMENT, EVENT_MOVE, Detection.detect); + Event.onTouch(Hammer.DOCUMENT, EVENT_END, Detection.detect); + // Hammer is ready...! + Hammer.READY = true; + } /** * @module hammer - */ - - /** - * create new hammer instance - * all methods should return the instance itself, so it is chainable. * - * @class Instance - * @constructor - * @param {HTMLElement} element - * @param {Object} [options={}] options are merged with `Hammer.defaults` - * @return {Hammer.Instance} + * @class Utils + * @static */ - Hammer.Instance = function(element, options) { - var self = this; - - // setup HammerJS window events and register all gestures - // this also sets up the default options - setup(); - - /** - * @property element - * @type {HTMLElement} - */ - this.element = element; - - /** - * @property enabled - * @type {Boolean} - * @protected - */ - this.enabled = true; - - /** - * options, merged with the defaults - * options with an _ are converted to camelCase - * @property options - * @type {Object} - */ - Utils.each(options, function(value, name) { - delete options[name]; - options[Utils.toCamelCase(name)] = value; - }); - - this.options = Utils.extend(Utils.extend({}, Hammer.defaults), options || {}); - - // add some css to the element to prevent the browser from doing its native behavoir - if(this.options.behavior) { - Utils.toggleBehavior(this.element, this.options.behavior, true); - } - + var Utils = Hammer.utils = { /** - * event start handler on the element to start the detection - * @property eventStartHandler - * @type {Object} + * extend method, could also be used for cloning when `dest` is an empty object. + * changes the dest object + * @method extend + * @param {Object} dest + * @param {Object} src + * @param {Boolean} [merge=false] do a merge + * @return {Object} dest */ - this.eventStartHandler = Event.onTouch(element, EVENT_START, function(ev) { - if(self.enabled && ev.eventType == EVENT_START) { - Detection.startDetect(self, ev); - } else if(ev.eventType == EVENT_TOUCH) { - Detection.detect(ev); + extend: function extend(dest, src, merge) { + for(var key in src) { + if(!src.hasOwnProperty(key) || (dest[key] !== undefined && merge)) { + continue; + } + dest[key] = src[key]; } - }); - - /** - * keep a list of user event handlers which needs to be removed when calling 'dispose' - * @property eventHandlers - * @type {Array} - */ - this.eventHandlers = []; - }; + return dest; + }, - Hammer.Instance.prototype = { /** - * bind events to the instance + * simple addEventListener wrapper * @method on - * @chainable - * @param {String} gestures multiple gestures by splitting with a space + * @param {HTMLElement} element + * @param {String} type * @param {Function} handler - * @param {Object} handler.ev event object */ - on: function onEvent(gestures, handler) { - var self = this; - Event.on(self.element, gestures, handler, function(type) { - self.eventHandlers.push({ gesture: type, handler: handler }); - }); - return self; + on: function on(element, type, handler) { + element.addEventListener(type, handler, false); }, /** - * unbind events to the instance + * simple removeEventListener wrapper * @method off - * @chainable - * @param {String} gestures + * @param {HTMLElement} element + * @param {String} type * @param {Function} handler */ - off: function offEvent(gestures, handler) { - var self = this; - - Event.off(self.element, gestures, handler, function(type) { - var index = Utils.inArray({ gesture: type, handler: handler }); - if(index !== false) { - self.eventHandlers.splice(index, 1); - } - }); - return self; + off: function off(element, type, handler) { + element.removeEventListener(type, handler, false); }, /** - * trigger gesture event - * @method trigger - * @chainable - * @param {String} gesture - * @param {Object} [eventData] + * forEach over arrays and objects + * @method each + * @param {Object|Array} obj + * @param {Function} iterator + * @param {any} iterator.item + * @param {Number} iterator.index + * @param {Object|Array} iterator.obj the source object + * @param {Object} context value to use as `this` in the iterator */ - trigger: function triggerEvent(gesture, eventData) { - // optional - if(!eventData) { - eventData = {}; - } - - // create DOM event - var event = Hammer.DOCUMENT.createEvent('Event'); - event.initEvent(gesture, true, true); - event.gesture = eventData; + each: function each(obj, iterator, context) { + var i, len; - // trigger on the target if it is in the instance element, - // this is for event delegation tricks - var element = this.element; - if(Utils.hasParent(eventData.target, element)) { - element = eventData.target; + // native forEach on arrays + if('forEach' in obj) { + obj.forEach(iterator, context); + // arrays + } else if(obj.length !== undefined) { + for(i = 0, len = obj.length; i < len; i++) { + if(iterator.call(context, obj[i], i, obj) === false) { + return; + } + } + // objects + } else { + for(i in obj) { + if(obj.hasOwnProperty(i) && + iterator.call(context, obj[i], i, obj) === false) { + return; + } + } } - - element.dispatchEvent(event); - return this; }, /** - * enable of disable hammer.js detection - * @method enable - * @chainable - * @param {Boolean} state - */ - enable: function enable(state) { - this.enabled = state; - return this; + * find if a string contains the string using indexOf + * @method inStr + * @param {String} src + * @param {String} find + * @return {Boolean} found + */ + inStr: function inStr(src, find) { + return src.indexOf(find) > -1; }, /** - * dispose this hammer instance - * @method dispose - * @return {Null} + * find if a array contains the object using indexOf or a simple polyfill + * @method inArray + * @param {String} src + * @param {String} find + * @return {Boolean|Number} false when not found, or the index */ - dispose: function dispose() { - var i, eh; + inArray: function inArray(src, find) { + if(src.indexOf) { + var index = src.indexOf(find); + return (index === -1) ? false : index; + } else { + for(var i = 0, len = src.length; i < len; i++) { + if(src[i] === find) { + return i; + } + } + return false; + } + }, - // undo all changes made by stop_browser_behavior - Utils.toggleBehavior(this.element, this.options.behavior, false); + /** + * convert an array-like object (`arguments`, `touchlist`) to an array + * @method toArray + * @param {Object} obj + * @return {Array} + */ + toArray: function toArray(obj) { + return Array.prototype.slice.call(obj, 0); + }, - // unbind all custom event handlers - for(i = -1; (eh = this.eventHandlers[++i]);) { - Utils.off(this.element, eh.gesture, eh.handler); + /** + * find if a node is in the given parent + * @method hasParent + * @param {HTMLElement} node + * @param {HTMLElement} parent + * @return {Boolean} found + */ + hasParent: function hasParent(node, parent) { + while(node) { + if(node == parent) { + return true; + } + node = node.parentNode; } + return false; + }, - this.eventHandlers = []; + /** + * get the center of all the touches + * @method getCenter + * @param {Array} touches + * @return {Object} center contains `pageX`, `pageY`, `clientX` and `clientY` properties + */ + getCenter: function getCenter(touches) { + var pageX = [], + pageY = [], + clientX = [], + clientY = [], + min = Math.min, + max = Math.max; - // unbind the start event listener - Event.off(this.element, EVENT_TYPES[EVENT_START], this.eventStartHandler); + // no need to loop when only one touch + if(touches.length === 1) { + return { + pageX: touches[0].pageX, + pageY: touches[0].pageY, + clientX: touches[0].clientX, + clientY: touches[0].clientY + }; + } - return null; - } - }; + Utils.each(touches, function(touch) { + pageX.push(touch.pageX); + pageY.push(touch.pageY); + clientX.push(touch.clientX); + clientY.push(touch.clientY); + }); + return { + pageX: (min.apply(Math, pageX) + max.apply(Math, pageX)) / 2, + pageY: (min.apply(Math, pageY) + max.apply(Math, pageY)) / 2, + clientX: (min.apply(Math, clientX) + max.apply(Math, clientX)) / 2, + clientY: (min.apply(Math, clientY) + max.apply(Math, clientY)) / 2 + }; + }, - /** - * @module gestures - */ - /** - * Move with x fingers (default 1) around on the page. - * Preventing the default browser behavior is a good way to improve feel and working. - * ```` - * hammertime.on("drag", function(ev) { - * console.log(ev); - * ev.gesture.preventDefault(); - * }); - * ```` - * - * @class Drag - * @static - */ - /** - * @event drag - * @param {Object} ev - */ - /** - * @event dragstart - * @param {Object} ev - */ - /** - * @event dragend - * @param {Object} ev - */ - /** - * @event drapleft - * @param {Object} ev - */ - /** - * @event dragright - * @param {Object} ev - */ - /** - * @event dragup - * @param {Object} ev - */ - /** - * @event dragdown - * @param {Object} ev - */ + /** + * calculate the velocity between two points. unit is in px per ms. + * @method getVelocity + * @param {Number} deltaTime + * @param {Number} deltaX + * @param {Number} deltaY + * @return {Object} velocity `x` and `y` + */ + getVelocity: function getVelocity(deltaTime, deltaX, deltaY) { + return { + x: Math.abs(deltaX / deltaTime) || 0, + y: Math.abs(deltaY / deltaTime) || 0 + }; + }, - /** - * @param {String} name - */ - (function(name) { - var triggered = false; + /** + * calculate the angle between two coordinates + * @method getAngle + * @param {Touch} touch1 + * @param {Touch} touch2 + * @return {Number} angle + */ + getAngle: function getAngle(touch1, touch2) { + var x = touch2.clientX - touch1.clientX, + y = touch2.clientY - touch1.clientY; - function dragGesture(ev, inst) { - var cur = Detection.current; + return Math.atan2(y, x) * 180 / Math.PI; + }, - // max touches - if(inst.options.dragMaxTouches > 0 && - ev.touches.length > inst.options.dragMaxTouches) { - return; - } + /** + * do a small comparision to get the direction between two touches. + * @method getDirection + * @param {Touch} touch1 + * @param {Touch} touch2 + * @return {String} direction matches `DIRECTION_LEFT|RIGHT|UP|DOWN` + */ + getDirection: function getDirection(touch1, touch2) { + var x = Math.abs(touch1.clientX - touch2.clientX), + y = Math.abs(touch1.clientY - touch2.clientY); - switch(ev.eventType) { - case EVENT_START: - triggered = false; - break; + if(x >= y) { + return touch1.clientX - touch2.clientX > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + return touch1.clientY - touch2.clientY > 0 ? DIRECTION_UP : DIRECTION_DOWN; + }, - case EVENT_MOVE: - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(ev.distance < inst.options.dragMinDistance && - cur.name != name) { - return; - } + /** + * calculate the distance between two touches + * @method getDistance + * @param {Touch}touch1 + * @param {Touch} touch2 + * @return {Number} distance + */ + getDistance: function getDistance(touch1, touch2) { + var x = touch2.clientX - touch1.clientX, + y = touch2.clientY - touch1.clientY; - var startCenter = cur.startEvent.center; + return Math.sqrt((x * x) + (y * y)); + }, - // we are dragging! - if(cur.name != name) { - cur.name = name; - if(inst.options.dragDistanceCorrection && ev.distance > 0) { - // When a drag is triggered, set the event center to dragMinDistance pixels from the original event center. - // Without this correction, the dragged distance would jumpstart at dragMinDistance pixels instead of at 0. - // It might be useful to save the original start point somewhere - var factor = Math.abs(inst.options.dragMinDistance / ev.distance); - startCenter.pageX += ev.deltaX * factor; - startCenter.pageY += ev.deltaY * factor; - startCenter.clientX += ev.deltaX * factor; - startCenter.clientY += ev.deltaY * factor; + /** + * calculate the scale factor between two touchLists + * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out + * @method getScale + * @param {Array} start array of touches + * @param {Array} end array of touches + * @return {Number} scale + */ + getScale: function getScale(start, end) { + // need two fingers... + if(start.length >= 2 && end.length >= 2) { + return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]); + } + return 1; + }, - // recalculate event data using new start point - ev = Detection.extendEventData(ev); - } - } - - // lock drag to axis? - if(cur.lastEvent.dragLockToAxis || - ( inst.options.dragLockToAxis && - inst.options.dragLockMinDistance <= ev.distance - )) { - ev.dragLockToAxis = true; - } - - // keep direction on the axis that the drag gesture started on - var lastDirection = cur.lastEvent.direction; - if(ev.dragLockToAxis && lastDirection !== ev.direction) { - if(Utils.isVertical(lastDirection)) { - ev.direction = (ev.deltaY < 0) ? DIRECTION_UP : DIRECTION_DOWN; - } else { - ev.direction = (ev.deltaX < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - } - - // first time, trigger dragstart event - if(!triggered) { - inst.trigger(name + 'start', ev); - triggered = true; - } - - // trigger events - inst.trigger(name, ev); - inst.trigger(name + ev.direction, ev); + /** + * calculate the rotation degrees between two touchLists + * @method getRotation + * @param {Array} start array of touches + * @param {Array} end array of touches + * @return {Number} rotation + */ + getRotation: function getRotation(start, end) { + // need two fingers + if(start.length >= 2 && end.length >= 2) { + return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]); + } + return 0; + }, - var isVertical = Utils.isVertical(ev.direction); + /** + * find out if the direction is vertical * + * @method isVertical + * @param {String} direction matches `DIRECTION_UP|DOWN` + * @return {Boolean} is_vertical + */ + isVertical: function isVertical(direction) { + return direction == DIRECTION_UP || direction == DIRECTION_DOWN; + }, - // block the browser events - if((inst.options.dragBlockVertical && isVertical) || - (inst.options.dragBlockHorizontal && !isVertical)) { - ev.preventDefault(); - } - break; + /** + * set css properties with their prefixes + * @param {HTMLElement} element + * @param {String} prop + * @param {String} value + * @param {Boolean} [toggle=true] + * @return {Boolean} + */ + setPrefixedCss: function setPrefixedCss(element, prop, value, toggle) { + var prefixes = ['', 'Webkit', 'Moz', 'O', 'ms']; + prop = Utils.toCamelCase(prop); - case EVENT_RELEASE: - if(triggered && ev.changedLength <= inst.options.dragMaxTouches) { - inst.trigger(name + 'end', ev); - triggered = false; - } - break; + for(var i = 0; i < prefixes.length; i++) { + var p = prop; + // prefixes + if(prefixes[i]) { + p = prefixes[i] + p.slice(0, 1).toUpperCase() + p.slice(1); + } - case EVENT_END: - triggered = false; + // test the style + if(p in element.style) { + element.style[p] = (toggle == null || toggle) && value || ''; break; + } } - } - - Hammer.gestures.Drag = { - name: name, - index: 50, - handler: dragGesture, - defaults: { - /** - * minimal movement that have to be made before the drag event gets triggered - * @property dragMinDistance - * @type {Number} - * @default 10 - */ - dragMinDistance: 10, - - /** - * Set dragDistanceCorrection to true to make the starting point of the drag - * be calculated from where the drag was triggered, not from where the touch started. - * Useful to avoid a jerk-starting drag, which can make fine-adjustments - * through dragging difficult, and be visually unappealing. - * @property dragDistanceCorrection - * @type {Boolean} - * @default true - */ - dragDistanceCorrection: true, - - /** - * set 0 for unlimited, but this can conflict with transform - * @property dragMaxTouches - * @type {Number} - * @default 1 - */ - dragMaxTouches: 1, + }, - /** - * prevent default browser behavior when dragging occurs - * be careful with it, it makes the element a blocking element - * when you are using the drag gesture, it is a good practice to set this true - * @property dragBlockHorizontal - * @type {Boolean} - * @default false - */ - dragBlockHorizontal: false, + /** + * toggle browser default behavior by setting css properties. + * `userSelect='none'` also sets `element.onselectstart` to false + * `userDrag='none'` also sets `element.ondragstart` to false + * + * @method toggleBehavior + * @param {HtmlElement} element + * @param {Object} props + * @param {Boolean} [toggle=true] + */ + toggleBehavior: function toggleBehavior(element, props, toggle) { + if(!props || !element || !element.style) { + return; + } - /** - * same as `dragBlockHorizontal`, but for vertical movement - * @property dragBlockVertical - * @type {Boolean} - * @default false - */ - dragBlockVertical: false, + // set the css properties + Utils.each(props, function(value, prop) { + Utils.setPrefixedCss(element, prop, value, toggle); + }); - /** - * dragLockToAxis keeps the drag gesture on the axis that it started on, - * It disallows vertical directions if the initial direction was horizontal, and vice versa. - * @property dragLockToAxis - * @type {Boolean} - * @default false - */ - dragLockToAxis: false, + var falseFn = toggle && function() { + return false; + }; - /** - * drag lock only kicks in when distance > dragLockMinDistance - * This way, locking occurs only when the distance has become large enough to reliably determine the direction - * @property dragLockMinDistance - * @type {Number} - * @default 25 - */ - dragLockMinDistance: 25 + // also the disable onselectstart + if(props.userSelect == 'none') { + element.onselectstart = falseFn; } - }; - })('drag'); + // and disable ondragstart + if(props.userDrag == 'none') { + element.ondragstart = falseFn; + } + }, - /** - * @module gestures - */ - /** - * trigger a simple gesture event, so you can do anything in your handler. - * only usable if you know what your doing... - * - * @class Gesture - * @static - */ - /** - * @event gesture - * @param {Object} ev - */ - Hammer.gestures.Gesture = { - name: 'gesture', - index: 1337, - handler: function releaseGesture(ev, inst) { - inst.trigger(this.name, ev); + /** + * convert a string with underscores to camelCase + * so prevent_default becomes preventDefault + * @param {String} str + * @return {String} camelCaseStr + */ + toCamelCase: function toCamelCase(str) { + return str.replace(/[_-]([a-z])/g, function(s) { + return s[1].toUpperCase(); + }); } }; + /** - * @module gestures + * @module hammer */ /** - * Touch stays at the same place for x time - * - * @class Hold + * @class Event * @static */ - /** - * @event hold - * @param {Object} ev - */ + var Event = Hammer.event = { + /** + * when touch events have been fired, this is true + * this is used to stop mouse events + * @property prevent_mouseevents + * @private + * @type {Boolean} + */ + preventMouseEvents: false, - /** - * @param {String} name - */ - (function(name) { - var timer; + /** + * if EVENT_START has been fired + * @property started + * @private + * @type {Boolean} + */ + started: false, - function holdGesture(ev, inst) { - var options = inst.options, - current = Detection.current; + /** + * when the mouse is hold down, this is true + * @property should_detect + * @private + * @type {Boolean} + */ + shouldDetect: false, - switch(ev.eventType) { - case EVENT_START: - clearTimeout(timer); - - // set the gesture so we can check in the timeout if it still is - current.name = name; + /** + * simple event binder with a hook and support for multiple types + * @method on + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + * @param {Function} [hook] + * @param {Object} hook.type + */ + on: function on(element, type, handler, hook) { + var types = type.split(' '); + Utils.each(types, function(type) { + Utils.on(element, type, handler); + hook && hook(type); + }); + }, - // set timer and if after the timeout it still is hold, - // we trigger the hold event - timer = setTimeout(function() { - if(current && current.name == name) { - inst.trigger(name, ev); - } - }, options.holdTimeout); - break; + /** + * simple event unbinder with a hook and support for multiple types + * @method off + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + * @param {Function} [hook] + * @param {Object} hook.type + */ + off: function off(element, type, handler, hook) { + var types = type.split(' '); + Utils.each(types, function(type) { + Utils.off(element, type, handler); + hook && hook(type); + }); + }, - case EVENT_MOVE: - if(ev.distance > options.holdThreshold) { - clearTimeout(timer); - } - break; + /** + * the core touch event handler. + * this finds out if we should to detect gestures + * @method onTouch + * @param {HTMLElement} element + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Function} handler + * @return onTouchHandler {Function} the core event handler + */ + onTouch: function onTouch(element, eventType, handler) { + var self = this; - case EVENT_RELEASE: - clearTimeout(timer); - break; - } - } + var onTouchHandler = function onTouchHandler(ev) { + var srcType = ev.type.toLowerCase(), + isPointer = Hammer.HAS_POINTEREVENTS, + isMouse = Utils.inStr(srcType, 'mouse'), + triggerType; - Hammer.gestures.Hold = { - name: name, - index: 10, - defaults: { - /** - * @property holdTimeout - * @type {Number} - * @default 500 - */ - holdTimeout: 500, + // if we are in a mouseevent, but there has been a touchevent triggered in this session + // we want to do nothing. simply break out of the event. + if(isMouse && self.preventMouseEvents) { + return; - /** - * movement allowed while holding - * @property holdThreshold - * @type {Number} - * @default 2 - */ - holdThreshold: 2 - }, - handler: holdGesture - }; - })('hold'); + // mousebutton must be down + } else if(isMouse && eventType == EVENT_START && ev.button === 0) { + self.preventMouseEvents = false; + self.shouldDetect = true; + } else if(isPointer && eventType == EVENT_START) { + self.shouldDetect = (ev.buttons === 1 || PointerEvent.matchType(POINTER_TOUCH, ev)); + // just a valid start event, but no mouse + } else if(!isMouse && eventType == EVENT_START) { + self.preventMouseEvents = true; + self.shouldDetect = true; + } - /** - * @module gestures - */ - /** - * when a touch is being released from the page - * - * @class Release - * @static - */ - /** - * @event release - * @param {Object} ev - */ - Hammer.gestures.Release = { - name: 'release', - index: Infinity, - handler: function releaseGesture(ev, inst) { - if(ev.eventType == EVENT_RELEASE) { - inst.trigger(this.name, ev); - } - } - }; + // update the pointer event before entering the detection + if(isPointer && eventType != EVENT_END) { + PointerEvent.updatePointer(eventType, ev); + } - /** - * @module gestures - */ - /** - * triggers swipe events when the end velocity is above the threshold - * for best usage, set `preventDefault` (on the drag gesture) to `true` - * ```` - * hammertime.on("dragleft swipeleft", function(ev) { - * console.log(ev); - * ev.gesture.preventDefault(); - * }); - * ```` - * - * @class Swipe - * @static - */ - /** - * @event swipe - * @param {Object} ev - */ - /** - * @event swipeleft - * @param {Object} ev - */ - /** - * @event swiperight - * @param {Object} ev - */ - /** - * @event swipeup - * @param {Object} ev - */ - /** - * @event swipedown - * @param {Object} ev - */ - Hammer.gestures.Swipe = { - name: 'swipe', - index: 40, - defaults: { - /** - * @property swipeMinTouches - * @type {Number} - * @default 1 - */ - swipeMinTouches: 1, + // we are in a touch/down state, so allowed detection of gestures + if(self.shouldDetect) { + triggerType = self.doDetect.call(self, ev, eventType, element, handler); + } - /** - * @property swipeMaxTouches - * @type {Number} - * @default 1 - */ - swipeMaxTouches: 1, + // ...and we are done with the detection + // so reset everything to start each detection totally fresh + if(triggerType == EVENT_END) { + self.preventMouseEvents = false; + self.shouldDetect = false; + PointerEvent.reset(); + // update the pointerevent object after the detection + } - /** - * horizontal swipe velocity - * @property swipeVelocityX - * @type {Number} - * @default 0.6 - */ - swipeVelocityX: 0.6, + if(isPointer && eventType == EVENT_END) { + PointerEvent.updatePointer(eventType, ev); + } + }; - /** - * vertical swipe velocity - * @property swipeVelocityY - * @type {Number} - * @default 0.6 - */ - swipeVelocityY: 0.6 + this.on(element, EVENT_TYPES[eventType], onTouchHandler); + return onTouchHandler; }, - handler: function swipeGesture(ev, inst) { - if(ev.eventType == EVENT_RELEASE) { - var touches = ev.touches.length, - options = inst.options; + /** + * the core detection method + * this finds out what hammer-touch-events to trigger + * @method doDetect + * @param {Object} ev + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {HTMLElement} element + * @param {Function} handler + * @return {String} triggerType matches `EVENT_START|MOVE|END` + */ + doDetect: function doDetect(ev, eventType, element, handler) { + var touchList = this.getTouchList(ev, eventType); + var touchListLength = touchList.length; + var triggerType = eventType; + var triggerChange = touchList.trigger; // used by fakeMultitouch plugin + var changedLength = touchListLength; - // max touches - if(touches < options.swipeMinTouches || - touches > options.swipeMaxTouches) { - return; - } + // at each touchstart-like event we want also want to trigger a TOUCH event... + if(eventType == EVENT_START) { + triggerChange = EVENT_TOUCH; + // ...the same for a touchend-like event + } else if(eventType == EVENT_END) { + triggerChange = EVENT_RELEASE; - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(ev.velocityX > options.swipeVelocityX || - ev.velocityY > options.swipeVelocityY) { - // trigger swipe events - inst.trigger(this.name, ev); - inst.trigger(this.name + ev.direction, ev); - } + // keep track of how many touches have been removed + changedLength = touchList.length - ((ev.changedTouches) ? ev.changedTouches.length : 1); } - } - }; - /** - * @module gestures - */ - /** - * Single tap and a double tap on a place - * - * @class Tap - * @static - */ - /** - * @event tap - * @param {Object} ev - */ - /** - * @event doubletap - * @param {Object} ev - */ + // after there are still touches on the screen, + // we just want to trigger a MOVE event. so change the START or END to a MOVE + // but only after detection has been started, the first time we actualy want a START + if(changedLength > 0 && this.started) { + triggerType = EVENT_MOVE; + } - /** - * @param {String} name - */ - (function(name) { - var hasMoved = false; + // detection has been started, we keep track of this, see above + this.started = true; - function tapGesture(ev, inst) { - var options = inst.options, - current = Detection.current, - prev = Detection.previous, - sincePrev, - didDoubleTap; + // generate some event data, some basic information + var evData = this.collectEventData(element, triggerType, touchList, ev); - switch(ev.eventType) { - case EVENT_START: - hasMoved = false; - break; + // trigger the triggerType event before the change (TOUCH, RELEASE) events + // but the END event should be at last + if(eventType != EVENT_END) { + handler.call(Detection, evData); + } - case EVENT_MOVE: - hasMoved = hasMoved || (ev.distance > options.tapMaxDistance); - break; + // trigger a change (TOUCH, RELEASE) event, this means the length of the touches changed + if(triggerChange) { + evData.changedLength = changedLength; + evData.eventType = triggerChange; - case EVENT_END: - if(!Utils.inStr(ev.srcEvent.type, 'cancel') && ev.deltaTime < options.tapMaxTime && !hasMoved) { - // previous gesture, for the double tap since these are two different gesture detections - sincePrev = prev && prev.lastEvent && ev.timeStamp - prev.lastEvent.timeStamp; - didDoubleTap = false; + handler.call(Detection, evData); - // check if double tap - if(prev && prev.name == name && - (sincePrev && sincePrev < options.doubleTapInterval) && - ev.distance < options.doubleTapDistance) { - inst.trigger('doubletap', ev); - didDoubleTap = true; - } + evData.eventType = triggerType; + delete evData.changedLength; + } - // do a single tap - if(!didDoubleTap || options.tapAlways) { - current.name = name; - inst.trigger(current.name, ev); - } + // trigger the END event + if(triggerType == EVENT_END) { + handler.call(Detection, evData); + + // ...and we are done with the detection + // so reset everything to start each detection totally fresh + this.started = false; + } + + return triggerType; + }, + + /** + * we have different events for each device/browser + * determine what we need and set them in the EVENT_TYPES constant + * the `onTouch` method is bind to these properties. + * @method determineEventTypes + * @return {Object} events + */ + determineEventTypes: function determineEventTypes() { + var types; + if(Hammer.HAS_POINTEREVENTS) { + if(window.PointerEvent) { + types = [ + 'pointerdown', + 'pointermove', + 'pointerup pointercancel lostpointercapture' + ]; + } else { + types = [ + 'MSPointerDown', + 'MSPointerMove', + 'MSPointerUp MSPointerCancel MSLostPointerCapture' + ]; + } + } else if(Hammer.NO_MOUSEEVENTS) { + types = [ + 'touchstart', + 'touchmove', + 'touchend touchcancel' + ]; + } else { + types = [ + 'touchstart mousedown', + 'touchmove mousemove', + 'touchend touchcancel mouseup' + ]; + } + + EVENT_TYPES[EVENT_START] = types[0]; + EVENT_TYPES[EVENT_MOVE] = types[1]; + EVENT_TYPES[EVENT_END] = types[2]; + return EVENT_TYPES; + }, + + /** + * create touchList depending on the event + * @method getTouchList + * @param {Object} ev + * @param {String} eventType + * @return {Array} touches + */ + getTouchList: function getTouchList(ev, eventType) { + // get the fake pointerEvent touchlist + if(Hammer.HAS_POINTEREVENTS) { + return PointerEvent.getTouchList(); + } + + // get the touchlist + if(ev.touches) { + if(eventType == EVENT_MOVE) { + return ev.touches; + } + + var identifiers = []; + var concat = [].concat(Utils.toArray(ev.touches), Utils.toArray(ev.changedTouches)); + var touchList = []; + + Utils.each(concat, function(touch) { + if(Utils.inArray(identifiers, touch.identifier) === false) { + touchList.push(touch); } - break; + identifiers.push(touch.identifier); + }); + + return touchList; } - } - Hammer.gestures.Tap = { - name: name, - index: 100, - handler: tapGesture, - defaults: { - /** - * max time of a tap, this is for the slow tappers - * @property tapMaxTime - * @type {Number} - * @default 250 - */ - tapMaxTime: 250, + // make fake touchList from mouse position + ev.identifier = 1; + return [ev]; + }, - /** - * max distance of movement of a tap, this is for the slow tappers - * @property tapMaxDistance - * @type {Number} - * @default 10 - */ - tapMaxDistance: 10, + /** + * collect basic event data + * @method collectEventData + * @param {HTMLElement} element + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Array} touches + * @param {Object} ev + * @return {Object} ev + */ + collectEventData: function collectEventData(element, eventType, touches, ev) { + // find out pointerType + var pointerType = POINTER_TOUCH; + if(Utils.inStr(ev.type, 'mouse') || PointerEvent.matchType(POINTER_MOUSE, ev)) { + pointerType = POINTER_MOUSE; + } else if(PointerEvent.matchType(POINTER_PEN, ev)) { + pointerType = POINTER_PEN; + } + + return { + center: Utils.getCenter(touches), + timeStamp: Date.now(), + target: ev.target, + touches: touches, + eventType: eventType, + pointerType: pointerType, + srcEvent: ev, /** - * always trigger the `tap` event, even while double-tapping - * @property tapAlways - * @type {Boolean} - * @default true + * prevent the browser default actions + * mostly used to disable scrolling of the browser */ - tapAlways: true, + preventDefault: function() { + var srcEvent = this.srcEvent; + srcEvent.preventManipulation && srcEvent.preventManipulation(); + srcEvent.preventDefault && srcEvent.preventDefault(); + }, /** - * max distance between two taps - * @property doubleTapDistance - * @type {Number} - * @default 20 + * stop bubbling the event up to its parents */ - doubleTapDistance: 20, + stopPropagation: function() { + this.srcEvent.stopPropagation(); + }, /** - * max time between two taps - * @property doubleTapInterval - * @type {Number} - * @default 300 + * immediately stop gesture detection + * might be useful after a swipe was detected + * @return {*} */ - doubleTapInterval: 300 - } - }; - })('tap'); + stopDetect: function() { + return Detection.stopDetect(); + } + }; + } + }; + /** - * @module gestures - */ - /** - * when a touch is being touched at the page + * @module hammer * - * @class Touch + * @class PointerEvent * @static */ - /** - * @event touch - * @param {Object} ev - */ - Hammer.gestures.Touch = { - name: 'touch', - index: -Infinity, - defaults: { - /** - * call preventDefault at touchstart, and makes the element blocking by disabling the scrolling of the page, - * but it improves gestures like transforming and dragging. - * be careful with using this, it can be very annoying for users to be stuck on the page - * @property preventDefault - * @type {Boolean} - * @default false - */ - preventDefault: false, + var PointerEvent = Hammer.PointerEvent = { + /** + * holds all pointers, by `identifier` + * @property pointers + * @type {Object} + */ + pointers: {}, - /** - * disable mouse events, so only touch (or pen!) input triggers events - * @property preventMouse - * @type {Boolean} - * @default false - */ - preventMouse: false + /** + * get the pointers as an array + * @method getTouchList + * @return {Array} touchlist + */ + getTouchList: function getTouchList() { + var touchlist = []; + // we can use forEach since pointerEvents only is in IE10 + Utils.each(this.pointers, function(pointer) { + touchlist.push(pointer); + }); + return touchlist; }, - handler: function touchGesture(ev, inst) { - if(inst.options.preventMouse && ev.pointerType == POINTER_MOUSE) { - ev.stopDetect(); - return; - } - if(inst.options.preventDefault) { - ev.preventDefault(); + /** + * update the position of a pointer + * @method updatePointer + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Object} pointerEvent + */ + updatePointer: function updatePointer(eventType, pointerEvent) { + if(eventType == EVENT_END || (eventType != EVENT_END && pointerEvent.buttons !== 1)) { + delete this.pointers[pointerEvent.pointerId]; + } else { + pointerEvent.identifier = pointerEvent.pointerId; + this.pointers[pointerEvent.pointerId] = pointerEvent; } + }, - if(ev.eventType == EVENT_TOUCH) { - inst.trigger('touch', ev); + /** + * check if ev matches pointertype + * @method matchType + * @param {String} pointerType matches `POINTER_MOUSE|TOUCH|PEN` + * @param {PointerEvent} ev + */ + matchType: function matchType(pointerType, ev) { + if(!ev.pointerType) { + return false; } + + var pt = ev.pointerType, + types = {}; + + types[POINTER_MOUSE] = (pt === (ev.MSPOINTER_TYPE_MOUSE || POINTER_MOUSE)); + types[POINTER_TOUCH] = (pt === (ev.MSPOINTER_TYPE_TOUCH || POINTER_TOUCH)); + types[POINTER_PEN] = (pt === (ev.MSPOINTER_TYPE_PEN || POINTER_PEN)); + return types[pointerType]; + }, + + /** + * reset the stored pointers + * @method reset + */ + reset: function resetList() { + this.pointers = {}; } }; + /** - * @module gestures - */ - /** - * User want to scale or rotate with 2 fingers - * Preventing the default browser behavior is a good way to improve feel and working. This can be done with the - * `preventDefault` option. + * @module hammer * - * @class Transform + * @class Detection * @static */ - /** - * @event transform - * @param {Object} ev - */ - /** - * @event transformstart - * @param {Object} ev - */ - /** - * @event transformend - * @param {Object} ev - */ - /** - * @event pinchin - * @param {Object} ev - */ - /** - * @event pinchout - * @param {Object} ev - */ - /** - * @event rotate - * @param {Object} ev - */ + var Detection = Hammer.detection = { + // contains all registred Hammer.gestures in the correct order + gestures: [], - /** - * @param {String} name - */ - (function(name) { - var triggered = false; + // data of the current Hammer.gesture detection session + current: null, - function transformGesture(ev, inst) { - switch(ev.eventType) { - case EVENT_START: - triggered = false; - break; + // the previous Hammer.gesture session data + // is a full clone of the previous gesture.current object + previous: null, - case EVENT_MOVE: - // at least multitouch - if(ev.touches.length < 2) { - return; - } + // when this becomes true, no gestures are fired + stopped: false, - var scaleThreshold = Math.abs(1 - ev.scale); - var rotationThreshold = Math.abs(ev.rotation); + /** + * start Hammer.gesture detection + * @method startDetect + * @param {Hammer.Instance} inst + * @param {Object} eventData + */ + startDetect: function startDetect(inst, eventData) { + // already busy with a Hammer.gesture detection on an element + if(this.current) { + return; + } - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(scaleThreshold < inst.options.transformMinScale && - rotationThreshold < inst.options.transformMinRotation) { - return; - } + this.stopped = false; - // we are transforming! - Detection.current.name = name; + // holds current session + this.current = { + inst: inst, // reference to HammerInstance we're working for + startEvent: Utils.extend({}, eventData), // start eventData for distances, timing etc + lastEvent: false, // last eventData + lastCalcEvent: false, // last eventData for calculations. + futureCalcEvent: false, // last eventData for calculations. + lastCalcData: {}, // last lastCalcData + name: '' // current gesture we're in/detected, can be 'tap', 'hold' etc + }; - // first time, trigger dragstart event - if(!triggered) { - inst.trigger(name + 'start', ev); - triggered = true; - } + this.detect(eventData); + }, - inst.trigger(name, ev); // basic transform event + /** + * Hammer.gesture detection + * @method detect + * @param {Object} eventData + * @return {any} + */ + detect: function detect(eventData) { + if(!this.current || this.stopped) { + return; + } - // trigger rotate event - if(rotationThreshold > inst.options.transformMinRotation) { - inst.trigger('rotate', ev); - } + // extend event data with calculations about scale, distance etc + eventData = this.extendEventData(eventData); - // trigger pinch event - if(scaleThreshold > inst.options.transformMinScale) { - inst.trigger('pinch', ev); - inst.trigger('pinch' + (ev.scale < 1 ? 'in' : 'out'), ev); - } - break; + // hammer instance and instance options + var inst = this.current.inst, + instOptions = inst.options; - case EVENT_RELEASE: - if(triggered && ev.changedLength < 2) { - inst.trigger(name + 'end', ev); - triggered = false; - } - break; + // call Hammer.gesture handlers + Utils.each(this.gestures, function triggerGesture(gesture) { + // only when the instance options have enabled this gesture + if(!this.stopped && inst.enabled && instOptions[gesture.name]) { + gesture.handler.call(gesture, eventData, inst); + } + }, this); + + // store as previous event event + if(this.current) { + this.current.lastEvent = eventData; } - } - Hammer.gestures.Transform = { - name: name, - index: 45, - defaults: { - /** - * minimal scale factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1 - * @property transformMinScale - * @type {Number} - * @default 0.01 - */ - transformMinScale: 0.01, + if(eventData.eventType == EVENT_END) { + this.stopDetect(); + } - /** - * rotation in degrees - * @property transformMinRotation - * @type {Number} - * @default 1 - */ - transformMinRotation: 1 - }, - - handler: transformGesture - }; - })('transform'); + return eventData; + }, - /** - * @module hammer - */ + /** + * clear the Hammer.gesture vars + * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected + * to stop other Hammer.gestures from being fired + * @method stopDetect + */ + stopDetect: function stopDetect() { + // clone current data to the store as the previous gesture + // used for the double tap gesture, since this is an other gesture detect session + this.previous = Utils.extend({}, this.current); - // AMD export - if(true) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - return Hammer; - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - // commonjs export - } else if(typeof module !== 'undefined' && module.exports) { - module.exports = Hammer; - // browser export - } else { - window.Hammer = Hammer; - } + // reset the current + this.current = null; + this.stopped = true; + }, - })(window); + /** + * calculate velocity, angle and direction + * @method getVelocityData + * @param {Object} ev + * @param {Object} center + * @param {Number} deltaTime + * @param {Number} deltaX + * @param {Number} deltaY + */ + getCalculatedData: function getCalculatedData(ev, center, deltaTime, deltaX, deltaY) { + var cur = this.current, + recalc = false, + calcEv = cur.lastCalcEvent, + calcData = cur.lastCalcData; -/***/ }, -/* 51 */ -/***/ function(module, exports, __webpack_require__) { + if(calcEv && ev.timeStamp - calcEv.timeStamp > Hammer.CALCULATE_INTERVAL) { + center = calcEv.center; + deltaTime = ev.timeStamp - calcEv.timeStamp; + deltaX = ev.center.clientX - calcEv.center.clientX; + deltaY = ev.center.clientY - calcEv.center.clientY; + recalc = true; + } - /** - * Creation of the ClusterMixin var. - * - * This contains all the functions the Network object can use to employ clustering - */ + if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { + cur.futureCalcEvent = ev; + } - /** - * This is only called in the constructor of the network object - * - */ - exports.startWithClustering = function() { - // cluster if the data set is big - this.clusterToFit(this.constants.clustering.initialMaxNodes, true); + if(!cur.lastCalcEvent || recalc) { + calcData.velocity = Utils.getVelocity(deltaTime, deltaX, deltaY); + calcData.angle = Utils.getAngle(center, ev.center); + calcData.direction = Utils.getDirection(center, ev.center); - // updates the lables after clustering - this.updateLabels(); + cur.lastCalcEvent = cur.futureCalcEvent || ev; + cur.futureCalcEvent = ev; + } - // this is called here because if clusterin is disabled, the start and stabilize are called in - // the setData function. - if (this.stabilize) { - this._stabilize(); - } - this.start(); - }; + ev.velocityX = calcData.velocity.x; + ev.velocityY = calcData.velocity.y; + ev.interimAngle = calcData.angle; + ev.interimDirection = calcData.direction; + }, - /** - * This function clusters until the initialMaxNodes has been reached - * - * @param {Number} maxNumberOfNodes - * @param {Boolean} reposition - */ - exports.clusterToFit = function(maxNumberOfNodes, reposition) { - var numberOfNodes = this.nodeIndices.length; + /** + * extend eventData for Hammer.gestures + * @method extendEventData + * @param {Object} ev + * @return {Object} ev + */ + extendEventData: function extendEventData(ev) { + var cur = this.current, + startEv = cur.startEvent, + lastEv = cur.lastEvent || startEv; - var maxLevels = 50; - var level = 0; + // update the start touchlist to calculate the scale/rotation + if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { + startEv.touches = []; + Utils.each(ev.touches, function(touch) { + startEv.touches.push({ + clientX: touch.clientX, + clientY: touch.clientY + }); + }); + } - // we first cluster the hubs, then we pull in the outliers, repeat - while (numberOfNodes > maxNumberOfNodes && level < maxLevels) { - if (level % 3 == 0) { - this.forceAggregateHubs(true); - this.normalizeClusterLevels(); - } - else { - this.increaseClusterLevel(); // this also includes a cluster normalization - } + var deltaTime = ev.timeStamp - startEv.timeStamp, + deltaX = ev.center.clientX - startEv.center.clientX, + deltaY = ev.center.clientY - startEv.center.clientY; - numberOfNodes = this.nodeIndices.length; - level += 1; - } + this.getCalculatedData(ev, lastEv.center, deltaTime, deltaX, deltaY); - // after the clustering we reposition the nodes to reduce the initial chaos - if (level > 0 && reposition == true) { - this.repositionNodes(); - } - this._updateCalculationNodes(); - }; + Utils.extend(ev, { + startEvent: startEv, - /** - * This function can be called to open up a specific cluster. It is only called by - * It will unpack the cluster back one level. - * - * @param node | Node object: cluster to open. - */ - exports.openCluster = function(node) { - var isMovingBeforeClustering = this.moving; - if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) && - !(this._sector() == "default" && this.nodeIndices.length == 1)) { - // this loads a new sector, loads the nodes and edges and nodeIndices of it. - this._addSector(node); - var level = 0; + deltaTime: deltaTime, + deltaX: deltaX, + deltaY: deltaY, - // we decluster until we reach a decent number of nodes - while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) { - this.decreaseClusterLevel(); - level += 1; - } + distance: Utils.getDistance(startEv.center, ev.center), + angle: Utils.getAngle(startEv.center, ev.center), + direction: Utils.getDirection(startEv.center, ev.center), + scale: Utils.getScale(startEv.touches, ev.touches), + rotation: Utils.getRotation(startEv.touches, ev.touches) + }); - } - else { - this._expandClusterNode(node,false,true); + return ev; + }, - // update the index list, dynamic edges and labels - this._updateNodeIndexList(); - this._updateDynamicEdges(); - this._updateCalculationNodes(); - this.updateLabels(); - } + /** + * register new gesture + * @method register + * @param {Object} gesture object, see `gestures/` for documentation + * @return {Array} gestures + */ + register: function register(gesture) { + // add an enable gesture options if there is no given + var options = gesture.defaults || {}; + if(options[gesture.name] === undefined) { + options[gesture.name] = true; + } - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); - } - }; + // extend Hammer default options with the Hammer.gesture options + Utils.extend(Hammer.defaults, options, true); + // set its index + gesture.index = gesture.index || 1000; - /** - * This calls the updateClustes with default arguments - */ - exports.updateClustersDefault = function() { - if (this.constants.clustering.enabled == true) { - this.updateClusters(0,false,false); - } - }; + // add Hammer.gesture to the list + this.gestures.push(gesture); + // sort the list by index + this.gestures.sort(function(a, b) { + if(a.index < b.index) { + return -1; + } + if(a.index > b.index) { + return 1; + } + return 0; + }); - /** - * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will - * be clustered with their connected node. This can be repeated as many times as needed. - * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets. - */ - exports.increaseClusterLevel = function() { - this.updateClusters(-1,false,true); + return this.gestures; + } }; /** - * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will - * be unpacked if they are a cluster. This can be repeated as many times as needed. - * This can be called externally (by a key-bind for instance) to look into clusters without zooming. + * @module hammer */ - exports.decreaseClusterLevel = function() { - this.updateClusters(1,false,true); - }; - /** - * This is the main clustering function. It clusters and declusters on zoom or forced - * This function clusters on zoom, it can be called with a predefined zoom direction - * If out, check if we can form clusters, if in, check if we can open clusters. - * This function is only called from _zoom() - * - * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn - * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters - * @param {Boolean} force | enabled or disable forcing - * @param {Boolean} doNotStart | if true do not call start + * create new hammer instance + * all methods should return the instance itself, so it is chainable. * + * @class Instance + * @constructor + * @param {HTMLElement} element + * @param {Object} [options={}] options are merged with `Hammer.defaults` + * @return {Hammer.Instance} */ - exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) { - var isMovingBeforeClustering = this.moving; - var amountOfNodes = this.nodeIndices.length; + Hammer.Instance = function(element, options) { + var self = this; - // on zoom out collapse the sector if the scale is at the level the sector was made - if (this.previousScale > this.scale && zoomDirection == 0) { - this._collapseSector(); - } + // setup HammerJS window events and register all gestures + // this also sets up the default options + setup(); - // check if we zoom in or out - if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out - // forming clusters when forced pulls outliers in. When not forced, the edge length of the - // outer nodes determines if it is being clustered - this._formClusters(force); - } - else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in - if (force == true) { - // _openClusters checks for each node if the formationScale of the cluster is smaller than - // the current scale and if so, declusters. When forced, all clusters are reduced by one step - this._openClusters(recursive,force); - } - else { - // if a cluster takes up a set percentage of the active window - this._openClustersBySize(); + /** + * @property element + * @type {HTMLElement} + */ + this.element = element; + + /** + * @property enabled + * @type {Boolean} + * @protected + */ + this.enabled = true; + + /** + * options, merged with the defaults + * options with an _ are converted to camelCase + * @property options + * @type {Object} + */ + Utils.each(options, function(value, name) { + delete options[name]; + options[Utils.toCamelCase(name)] = value; + }); + + this.options = Utils.extend(Utils.extend({}, Hammer.defaults), options || {}); + + // add some css to the element to prevent the browser from doing its native behavoir + if(this.options.behavior) { + Utils.toggleBehavior(this.element, this.options.behavior, true); } - } - this._updateNodeIndexList(); - // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs - if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) { - this._aggregateHubs(force); - this._updateNodeIndexList(); - } + /** + * event start handler on the element to start the detection + * @property eventStartHandler + * @type {Object} + */ + this.eventStartHandler = Event.onTouch(element, EVENT_START, function(ev) { + if(self.enabled && ev.eventType == EVENT_START) { + Detection.startDetect(self, ev); + } else if(ev.eventType == EVENT_TOUCH) { + Detection.detect(ev); + } + }); - // we now reduce chains. - if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out - this.handleChains(); - this._updateNodeIndexList(); - } + /** + * keep a list of user event handlers which needs to be removed when calling 'dispose' + * @property eventHandlers + * @type {Array} + */ + this.eventHandlers = []; + }; - this.previousScale = this.scale; + Hammer.Instance.prototype = { + /** + * bind events to the instance + * @method on + * @chainable + * @param {String} gestures multiple gestures by splitting with a space + * @param {Function} handler + * @param {Object} handler.ev event object + */ + on: function onEvent(gestures, handler) { + var self = this; + Event.on(self.element, gestures, handler, function(type) { + self.eventHandlers.push({ gesture: type, handler: handler }); + }); + return self; + }, - // rest of the update the index list, dynamic edges and labels - this._updateDynamicEdges(); - this.updateLabels(); + /** + * unbind events to the instance + * @method off + * @chainable + * @param {String} gestures + * @param {Function} handler + */ + off: function offEvent(gestures, handler) { + var self = this; - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place - this.clusterSession += 1; - // if clusters have been made, we normalize the cluster level - this.normalizeClusterLevels(); - } + Event.off(self.element, gestures, handler, function(type) { + var index = Utils.inArray({ gesture: type, handler: handler }); + if(index !== false) { + self.eventHandlers.splice(index, 1); + } + }); + return self; + }, - if (doNotStart == false || doNotStart === undefined) { - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); - } - } + /** + * trigger gesture event + * @method trigger + * @chainable + * @param {String} gesture + * @param {Object} [eventData] + */ + trigger: function triggerEvent(gesture, eventData) { + // optional + if(!eventData) { + eventData = {}; + } - this._updateCalculationNodes(); - }; + // create DOM event + var event = Hammer.DOCUMENT.createEvent('Event'); + event.initEvent(gesture, true, true); + event.gesture = eventData; - /** - * This function handles the chains. It is called on every updateClusters(). - */ - exports.handleChains = function() { - // after clustering we check how many chains there are - var chainPercentage = this._getChainFraction(); - if (chainPercentage > this.constants.clustering.chainThreshold) { - this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage) + // trigger on the target if it is in the instance element, + // this is for event delegation tricks + var element = this.element; + if(Utils.hasParent(eventData.target, element)) { + element = eventData.target; + } - } - }; + element.dispatchEvent(event); + return this; + }, - /** - * this functions starts clustering by hubs - * The minimum hub threshold is set globally - * - * @private - */ - exports._aggregateHubs = function(force) { - this._getHubSize(); - this._formClustersByHub(force,false); - }; + /** + * enable of disable hammer.js detection + * @method enable + * @chainable + * @param {Boolean} state + */ + enable: function enable(state) { + this.enabled = state; + return this; + }, + /** + * dispose this hammer instance + * @method dispose + * @return {Null} + */ + dispose: function dispose() { + var i, eh; - /** - * This function is fired by keypress. It forces hubs to form. - * - */ - exports.forceAggregateHubs = function(doNotStart) { - var isMovingBeforeClustering = this.moving; - var amountOfNodes = this.nodeIndices.length; + // undo all changes made by stop_browser_behavior + Utils.toggleBehavior(this.element, this.options.behavior, false); - this._aggregateHubs(true); + // unbind all custom event handlers + for(i = -1; (eh = this.eventHandlers[++i]);) { + Utils.off(this.element, eh.gesture, eh.handler); + } - // update the index list, dynamic edges and labels - this._updateNodeIndexList(); - this._updateDynamicEdges(); - this.updateLabels(); + this.eventHandlers = []; - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length != amountOfNodes) { - this.clusterSession += 1; - } + // unbind the start event listener + Event.off(this.element, EVENT_TYPES[EVENT_START], this.eventStartHandler); - if (doNotStart == false || doNotStart === undefined) { - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); + return null; } - } }; + /** - * If a cluster takes up more than a set percentage of the screen, open the cluster + * @module gestures + */ + /** + * Move with x fingers (default 1) around on the page. + * Preventing the default browser behavior is a good way to improve feel and working. + * ```` + * hammertime.on("drag", function(ev) { + * console.log(ev); + * ev.gesture.preventDefault(); + * }); + * ```` * - * @private + * @class Drag + * @static */ - exports._openClustersBySize = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.inView() == true) { - if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || - (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { - this.openCluster(node); - } - } - } - } - }; - - /** - * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it - * has to be opened based on the current zoom level. - * - * @private + * @event drag + * @param {Object} ev */ - exports._openClusters = function(recursive,force) { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - this._expandClusterNode(node,recursive,force); - this._updateCalculationNodes(); - } - }; - /** - * This function checks if a node has to be opened. This is done by checking the zoom level. - * If the node contains child nodes, this function is recursively called on the child nodes as well. - * This recursive behaviour is optional and can be set by the recursive argument. - * - * @param {Node} parentNode | to check for cluster and expand - * @param {Boolean} recursive | enabled or disable recursive calling - * @param {Boolean} force | enabled or disable forcing - * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released - * @private + * @event dragstart + * @param {Object} ev */ - exports._expandClusterNode = function(parentNode, recursive, force, openAll) { - // first check if node is a cluster - if (parentNode.clusterSize > 1) { - // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20 - if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) { - openAll = true; - } - recursive = openAll ? true : recursive; - - // if the last child has been added on a smaller scale than current scale decluster - if (parentNode.formationScale < this.scale || force == true) { - // we will check if any of the contained child nodes should be removed from the cluster - for (var containedNodeId in parentNode.containedNodes) { - if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) { - var childNode = parentNode.containedNodes[containedNodeId]; - - // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that - // the largest cluster is the one that comes from outside - if (force == true) { - if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1] - || openAll) { - this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); - } - } - else { - if (this._nodeInActiveArea(parentNode)) { - this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); - } - } - } - } - } - } - }; - /** - * ONLY CALLED FROM _expandClusterNode - * - * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove - * the child node from the parent contained_node object and put it back into the global nodes object. - * The same holds for the edge that was connected to the child node. It is moved back into the global edges object. - * - * @param {Node} parentNode | the parent node - * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node - * @param {Boolean} recursive | This will also check if the child needs to be expanded. - * With force and recursive both true, the entire cluster is unpacked - * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent - * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released - * @private + * @event dragend + * @param {Object} ev + */ + /** + * @event drapleft + * @param {Object} ev + */ + /** + * @event dragright + * @param {Object} ev + */ + /** + * @event dragup + * @param {Object} ev + */ + /** + * @event dragdown + * @param {Object} ev */ - exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) { - var childNode = parentNode.containedNodes[containedNodeId]; - - // if child node has been added on smaller scale than current, kick out - if (childNode.formationScale < this.scale || force == true) { - // unselect all selected items - this._unselectAll(); - // put the child node back in the global nodes object - this.nodes[containedNodeId] = childNode; + /** + * @param {String} name + */ + (function(name) { + var triggered = false; - // release the contained edges from this childNode back into the global edges - this._releaseContainedEdges(parentNode,childNode); + function dragGesture(ev, inst) { + var cur = Detection.current; - // reconnect rerouted edges to the childNode - this._connectEdgeBackToChild(parentNode,childNode); + // max touches + if(inst.options.dragMaxTouches > 0 && + ev.touches.length > inst.options.dragMaxTouches) { + return; + } - // validate all edges in dynamicEdges - this._validateEdges(parentNode); + switch(ev.eventType) { + case EVENT_START: + triggered = false; + break; - // undo the changes from the clustering operation on the parent node - parentNode.options.mass -= childNode.options.mass; - parentNode.clusterSize -= childNode.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; + case EVENT_MOVE: + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(ev.distance < inst.options.dragMinDistance && + cur.name != name) { + return; + } - // place the child node near the parent, not at the exact same location to avoid chaos in the system - childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random()); - childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random()); + var startCenter = cur.startEvent.center; - // remove node from the list - delete parentNode.containedNodes[containedNodeId]; + // we are dragging! + if(cur.name != name) { + cur.name = name; + if(inst.options.dragDistanceCorrection && ev.distance > 0) { + // When a drag is triggered, set the event center to dragMinDistance pixels from the original event center. + // Without this correction, the dragged distance would jumpstart at dragMinDistance pixels instead of at 0. + // It might be useful to save the original start point somewhere + var factor = Math.abs(inst.options.dragMinDistance / ev.distance); + startCenter.pageX += ev.deltaX * factor; + startCenter.pageY += ev.deltaY * factor; + startCenter.clientX += ev.deltaX * factor; + startCenter.clientY += ev.deltaY * factor; - // check if there are other childs with this clusterSession in the parent. - var othersPresent = false; - for (var childNodeId in parentNode.containedNodes) { - if (parentNode.containedNodes.hasOwnProperty(childNodeId)) { - if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) { - othersPresent = true; - break; - } - } - } - // if there are no others, remove the cluster session from the list - if (othersPresent == false) { - parentNode.clusterSessions.pop(); - } + // recalculate event data using new start point + ev = Detection.extendEventData(ev); + } + } - this._repositionBezierNodes(childNode); - // this._repositionBezierNodes(parentNode); + // lock drag to axis? + if(cur.lastEvent.dragLockToAxis || + ( inst.options.dragLockToAxis && + inst.options.dragLockMinDistance <= ev.distance + )) { + ev.dragLockToAxis = true; + } - // remove the clusterSession from the child node - childNode.clusterSession = 0; + // keep direction on the axis that the drag gesture started on + var lastDirection = cur.lastEvent.direction; + if(ev.dragLockToAxis && lastDirection !== ev.direction) { + if(Utils.isVertical(lastDirection)) { + ev.direction = (ev.deltaY < 0) ? DIRECTION_UP : DIRECTION_DOWN; + } else { + ev.direction = (ev.deltaX < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + } - // recalculate the size of the node on the next time the node is rendered - parentNode.clearSizeCache(); + // first time, trigger dragstart event + if(!triggered) { + inst.trigger(name + 'start', ev); + triggered = true; + } - // restart the simulation to reorganise all nodes - this.moving = true; - } + // trigger events + inst.trigger(name, ev); + inst.trigger(name + ev.direction, ev); - // check if a further expansion step is possible if recursivity is enabled - if (recursive == true) { - this._expandClusterNode(childNode,recursive,force,openAll); - } - }; + var isVertical = Utils.isVertical(ev.direction); + // block the browser events + if((inst.options.dragBlockVertical && isVertical) || + (inst.options.dragBlockHorizontal && !isVertical)) { + ev.preventDefault(); + } + break; - /** - * position the bezier nodes at the center of the edges - * - * @param node - * @private - */ - exports._repositionBezierNodes = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - node.dynamicEdges[i].positionBezierNode(); - } - }; + case EVENT_RELEASE: + if(triggered && ev.changedLength <= inst.options.dragMaxTouches) { + inst.trigger(name + 'end', ev); + triggered = false; + } + break; + case EVENT_END: + triggered = false; + break; + } + } - /** - * This function checks if any nodes at the end of their trees have edges below a threshold length - * This function is called only from updateClusters() - * forceLevelCollapse ignores the length of the edge and collapses one level - * This means that a node with only one edge will be clustered with its connected node - * - * @private - * @param {Boolean} force - */ - exports._formClusters = function(force) { - if (force == false) { - this._formClustersByZoom(); - } - else { - this._forceClustersByZoom(); - } - }; + Hammer.gestures.Drag = { + name: name, + index: 50, + handler: dragGesture, + defaults: { + /** + * minimal movement that have to be made before the drag event gets triggered + * @property dragMinDistance + * @type {Number} + * @default 10 + */ + dragMinDistance: 10, + /** + * Set dragDistanceCorrection to true to make the starting point of the drag + * be calculated from where the drag was triggered, not from where the touch started. + * Useful to avoid a jerk-starting drag, which can make fine-adjustments + * through dragging difficult, and be visually unappealing. + * @property dragDistanceCorrection + * @type {Boolean} + * @default true + */ + dragDistanceCorrection: true, - /** - * This function handles the clustering by zooming out, this is based on a minimum edge distance - * - * @private - */ - exports._formClustersByZoom = function() { - var dx,dy,length, - minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; + /** + * set 0 for unlimited, but this can conflict with transform + * @property dragMaxTouches + * @type {Number} + * @default 1 + */ + dragMaxTouches: 1, - // check if any edges are shorter than minLength and start the clustering - // the clustering favours the node with the larger mass - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - var edge = this.edges[edgeId]; - if (edge.connected) { - if (edge.toId != edge.fromId) { - dx = (edge.to.x - edge.from.x); - dy = (edge.to.y - edge.from.y); - length = Math.sqrt(dx * dx + dy * dy); + /** + * prevent default browser behavior when dragging occurs + * be careful with it, it makes the element a blocking element + * when you are using the drag gesture, it is a good practice to set this true + * @property dragBlockHorizontal + * @type {Boolean} + * @default false + */ + dragBlockHorizontal: false, + /** + * same as `dragBlockHorizontal`, but for vertical movement + * @property dragBlockVertical + * @type {Boolean} + * @default false + */ + dragBlockVertical: false, - if (length < minLength) { - // first check which node is larger - var parentNode = edge.from; - var childNode = edge.to; - if (edge.to.options.mass > edge.from.options.mass) { - parentNode = edge.to; - childNode = edge.from; - } + /** + * dragLockToAxis keeps the drag gesture on the axis that it started on, + * It disallows vertical directions if the initial direction was horizontal, and vice versa. + * @property dragLockToAxis + * @type {Boolean} + * @default false + */ + dragLockToAxis: false, - if (childNode.dynamicEdgesLength == 1) { - this._addToCluster(parentNode,childNode,false); - } - else if (parentNode.dynamicEdgesLength == 1) { - this._addToCluster(childNode,parentNode,false); - } - } + /** + * drag lock only kicks in when distance > dragLockMinDistance + * This way, locking occurs only when the distance has become large enough to reliably determine the direction + * @property dragLockMinDistance + * @type {Number} + * @default 25 + */ + dragLockMinDistance: 25 } - } - } - } - }; + }; + })('drag'); /** - * This function forces the network to cluster all nodes with only one connecting edge to their - * connected node. + * @module gestures + */ + /** + * trigger a simple gesture event, so you can do anything in your handler. + * only usable if you know what your doing... * - * @private + * @class Gesture + * @static */ - exports._forceClustersByZoom = function() { - for (var nodeId in this.nodes) { - // another node could have absorbed this child. - if (this.nodes.hasOwnProperty(nodeId)) { - var childNode = this.nodes[nodeId]; - - // the edges can be swallowed by another decrease - if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) { - var edge = childNode.dynamicEdges[0]; - var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId]; - - // group to the largest node - if (childNode.id != parentNode.id) { - if (parentNode.options.mass > childNode.options.mass) { - this._addToCluster(parentNode,childNode,true); - } - else { - this._addToCluster(childNode,parentNode,true); - } - } - } + /** + * @event gesture + * @param {Object} ev + */ + Hammer.gestures.Gesture = { + name: 'gesture', + index: 1337, + handler: function releaseGesture(ev, inst) { + inst.trigger(this.name, ev); } - } }; - /** - * To keep the nodes of roughly equal size we normalize the cluster levels. - * This function clusters a node to its smallest connected neighbour. + * @module gestures + */ + /** + * Touch stays at the same place for x time * - * @param node - * @private + * @class Hold + * @static + */ + /** + * @event hold + * @param {Object} ev */ - exports._clusterToSmallestNeighbour = function(node) { - var smallestNeighbour = -1; - var smallestNeighbourNode = null; - for (var i = 0; i < node.dynamicEdges.length; i++) { - if (node.dynamicEdges[i] !== undefined) { - var neighbour = null; - if (node.dynamicEdges[i].fromId != node.id) { - neighbour = node.dynamicEdges[i].from; - } - else if (node.dynamicEdges[i].toId != node.id) { - neighbour = node.dynamicEdges[i].to; - } + /** + * @param {String} name + */ + (function(name) { + var timer; - if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) { - smallestNeighbour = neighbour.clusterSessions.length; - smallestNeighbourNode = neighbour; - } + function holdGesture(ev, inst) { + var options = inst.options, + current = Detection.current; + + switch(ev.eventType) { + case EVENT_START: + clearTimeout(timer); + + // set the gesture so we can check in the timeout if it still is + current.name = name; + + // set timer and if after the timeout it still is hold, + // we trigger the hold event + timer = setTimeout(function() { + if(current && current.name == name) { + inst.trigger(name, ev); + } + }, options.holdTimeout); + break; + + case EVENT_MOVE: + if(ev.distance > options.holdThreshold) { + clearTimeout(timer); + } + break; + + case EVENT_RELEASE: + clearTimeout(timer); + break; + } } - } - if (neighbour != null && this.nodes[neighbour.id] !== undefined) { - this._addToCluster(neighbour, node, true); - } - }; + Hammer.gestures.Hold = { + name: name, + index: 10, + defaults: { + /** + * @property holdTimeout + * @type {Number} + * @default 500 + */ + holdTimeout: 500, + /** + * movement allowed while holding + * @property holdThreshold + * @type {Number} + * @default 2 + */ + holdThreshold: 2 + }, + handler: holdGesture + }; + })('hold'); /** - * This function forms clusters from hubs, it loops over all nodes + * @module gestures + */ + /** + * when a touch is being released from the page * - * @param {Boolean} force | Disregard zoom level - * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges - * @private + * @class Release + * @static */ - exports._formClustersByHub = function(force, onlyEqual) { - // we loop over all nodes in the list - for (var nodeId in this.nodes) { - // we check if it is still available since it can be used by the clustering in this loop - if (this.nodes.hasOwnProperty(nodeId)) { - this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual); + /** + * @event release + * @param {Object} ev + */ + Hammer.gestures.Release = { + name: 'release', + index: Infinity, + handler: function releaseGesture(ev, inst) { + if(ev.eventType == EVENT_RELEASE) { + inst.trigger(this.name, ev); + } } - } }; /** - * This function forms a cluster from a specific preselected hub node + * @module gestures + */ + /** + * triggers swipe events when the end velocity is above the threshold + * for best usage, set `preventDefault` (on the drag gesture) to `true` + * ```` + * hammertime.on("dragleft swipeleft", function(ev) { + * console.log(ev); + * ev.gesture.preventDefault(); + * }); + * ```` * - * @param {Node} hubNode | the node we will cluster as a hub - * @param {Boolean} force | Disregard zoom level - * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges - * @param {Number} [absorptionSizeOffset] | - * @private + * @class Swipe + * @static */ - exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) { - if (absorptionSizeOffset === undefined) { - absorptionSizeOffset = 0; - } - // we decide if the node is a hub - if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) || - (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) { - // initialize variables - var dx,dy,length; - var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - var allowCluster = false; + /** + * @event swipe + * @param {Object} ev + */ + /** + * @event swipeleft + * @param {Object} ev + */ + /** + * @event swiperight + * @param {Object} ev + */ + /** + * @event swipeup + * @param {Object} ev + */ + /** + * @event swipedown + * @param {Object} ev + */ + Hammer.gestures.Swipe = { + name: 'swipe', + index: 40, + defaults: { + /** + * @property swipeMinTouches + * @type {Number} + * @default 1 + */ + swipeMinTouches: 1, - // we create a list of edges because the dynamicEdges change over the course of this loop - var edgesIdarray = []; - var amountOfInitialEdges = hubNode.dynamicEdges.length; - for (var j = 0; j < amountOfInitialEdges; j++) { - edgesIdarray.push(hubNode.dynamicEdges[j].id); - } + /** + * @property swipeMaxTouches + * @type {Number} + * @default 1 + */ + swipeMaxTouches: 1, - // if the hub clustering is not forces, we check if one of the edges connected - // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold - if (force == false) { - allowCluster = false; - for (j = 0; j < amountOfInitialEdges; j++) { - var edge = this.edges[edgesIdarray[j]]; - if (edge !== undefined) { - if (edge.connected) { - if (edge.toId != edge.fromId) { - dx = (edge.to.x - edge.from.x); - dy = (edge.to.y - edge.from.y); - length = Math.sqrt(dx * dx + dy * dy); + /** + * horizontal swipe velocity + * @property swipeVelocityX + * @type {Number} + * @default 0.6 + */ + swipeVelocityX: 0.6, - if (length < minLength) { - allowCluster = true; - break; - } + /** + * vertical swipe velocity + * @property swipeVelocityY + * @type {Number} + * @default 0.6 + */ + swipeVelocityY: 0.6 + }, + + handler: function swipeGesture(ev, inst) { + if(ev.eventType == EVENT_RELEASE) { + var touches = ev.touches.length, + options = inst.options; + + // max touches + if(touches < options.swipeMinTouches || + touches > options.swipeMaxTouches) { + return; } - } - } - } - } - // start the clustering if allowed - if ((!force && allowCluster) || force) { - // we loop over all edges INITIALLY connected to this hub - for (j = 0; j < amountOfInitialEdges; j++) { - edge = this.edges[edgesIdarray[j]]; - // the edge can be clustered by this function in a previous loop - if (edge !== undefined) { - var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId]; - // we do not want hubs to merge with other hubs nor do we want to cluster itself. - if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) && - (childNode.id != hubNode.id)) { - this._addToCluster(hubNode,childNode,force); - } + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(ev.velocityX > options.swipeVelocityX || + ev.velocityY > options.swipeVelocityY) { + // trigger swipe events + inst.trigger(this.name, ev); + inst.trigger(this.name + ev.direction, ev); + } } - } } - } }; - - /** - * This function adds the child node to the parent node, creating a cluster if it is not already. + * @module gestures + */ + /** + * Single tap and a double tap on a place * - * @param {Node} parentNode | this is the node that will house the child node - * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node - * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse - * @private + * @class Tap + * @static + */ + /** + * @event tap + * @param {Object} ev + */ + /** + * @event doubletap + * @param {Object} ev */ - exports._addToCluster = function(parentNode, childNode, force) { - // join child node in the parent node - parentNode.containedNodes[childNode.id] = childNode; - // manage all the edges connected to the child and parent nodes - for (var i = 0; i < childNode.dynamicEdges.length; i++) { - var edge = childNode.dynamicEdges[i]; - if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode - this._addToContainedEdges(parentNode,childNode,edge); - } - else { - this._connectEdgeToCluster(parentNode,childNode,edge); - } - } - // a contained node has no dynamic edges. - childNode.dynamicEdges = []; + /** + * @param {String} name + */ + (function(name) { + var hasMoved = false; - // remove circular edges from clusters - this._containCircularEdgesFromNode(parentNode,childNode); + function tapGesture(ev, inst) { + var options = inst.options, + current = Detection.current, + prev = Detection.previous, + sincePrev, + didDoubleTap; + switch(ev.eventType) { + case EVENT_START: + hasMoved = false; + break; - // remove the childNode from the global nodes object - delete this.nodes[childNode.id]; + case EVENT_MOVE: + hasMoved = hasMoved || (ev.distance > options.tapMaxDistance); + break; - // update the properties of the child and parent - var massBefore = parentNode.options.mass; - childNode.clusterSession = this.clusterSession; - parentNode.options.mass += childNode.options.mass; - parentNode.clusterSize += childNode.clusterSize; - parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); + case EVENT_END: + if(!Utils.inStr(ev.srcEvent.type, 'cancel') && ev.deltaTime < options.tapMaxTime && !hasMoved) { + // previous gesture, for the double tap since these are two different gesture detections + sincePrev = prev && prev.lastEvent && ev.timeStamp - prev.lastEvent.timeStamp; + didDoubleTap = false; - // 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) { - parentNode.clusterSessions.push(this.clusterSession); - } + // check if double tap + if(prev && prev.name == name && + (sincePrev && sincePrev < options.doubleTapInterval) && + ev.distance < options.doubleTapDistance) { + inst.trigger('doubletap', ev); + didDoubleTap = true; + } - // forced clusters only open from screen size and double tap - if (force == true) { - // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3); - parentNode.formationScale = 0; - } - else { - parentNode.formationScale = this.scale; // The latest child has been added on this scale - } + // do a single tap + if(!didDoubleTap || options.tapAlways) { + current.name = name; + inst.trigger(current.name, ev); + } + } + break; + } + } - // recalculate the size of the node on the next time the node is rendered - parentNode.clearSizeCache(); - - // set the pop-out scale for the childnode - parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale; + Hammer.gestures.Tap = { + name: name, + index: 100, + handler: tapGesture, + defaults: { + /** + * max time of a tap, this is for the slow tappers + * @property tapMaxTime + * @type {Number} + * @default 250 + */ + tapMaxTime: 250, - // nullify the movement velocity of the child, this is to avoid hectic behaviour - childNode.clearVelocity(); + /** + * max distance of movement of a tap, this is for the slow tappers + * @property tapMaxDistance + * @type {Number} + * @default 10 + */ + tapMaxDistance: 10, - // the mass has altered, preservation of energy dictates the velocity to be updated - parentNode.updateVelocity(massBefore); + /** + * always trigger the `tap` event, even while double-tapping + * @property tapAlways + * @type {Boolean} + * @default true + */ + tapAlways: true, - // restart the simulation to reorganise all nodes - this.moving = true; - }; + /** + * max distance between two taps + * @property doubleTapDistance + * @type {Number} + * @default 20 + */ + doubleTapDistance: 20, + /** + * max time between two taps + * @property doubleTapInterval + * @type {Number} + * @default 300 + */ + doubleTapInterval: 300 + } + }; + })('tap'); /** - * This function will apply the changes made to the remainingEdges during the formation of the clusters. - * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree. - * It has to be called if a level is collapsed. It is called by _formClusters(). - * @private + * @module gestures */ - exports._updateDynamicEdges = function() { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - node.dynamicEdgesLength = node.dynamicEdges.length; - - // this corrects for multiple edges pointing at the same other node - var correction = 0; - if (node.dynamicEdgesLength > 1) { - for (var j = 0; j < node.dynamicEdgesLength - 1; j++) { - var edgeToId = node.dynamicEdges[j].toId; - var edgeFromId = node.dynamicEdges[j].fromId; - for (var k = j+1; k < node.dynamicEdgesLength; k++) { - if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) || - (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) { - correction += 1; - } - } - } - } - node.dynamicEdgesLength -= correction; - } - }; - - /** - * This adds an edge from the childNode to the contained edges of the parent node + * when a touch is being touched at the page * - * @param parentNode | Node object - * @param childNode | Node object - * @param edge | Edge object - * @private + * @class Touch + * @static */ - exports._addToContainedEdges = function(parentNode, childNode, edge) { - // create an array object if it does not yet exist for this childNode - if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) { - parentNode.containedEdges[childNode.id] = [] - } - // add this edge to the list - parentNode.containedEdges[childNode.id].push(edge); + /** + * @event touch + * @param {Object} ev + */ + Hammer.gestures.Touch = { + name: 'touch', + index: -Infinity, + defaults: { + /** + * call preventDefault at touchstart, and makes the element blocking by disabling the scrolling of the page, + * but it improves gestures like transforming and dragging. + * be careful with using this, it can be very annoying for users to be stuck on the page + * @property preventDefault + * @type {Boolean} + * @default false + */ + preventDefault: false, - // remove the edge from the global edges object - delete this.edges[edge.id]; + /** + * disable mouse events, so only touch (or pen!) input triggers events + * @property preventMouse + * @type {Boolean} + * @default false + */ + preventMouse: false + }, + handler: function touchGesture(ev, inst) { + if(inst.options.preventMouse && ev.pointerType == POINTER_MOUSE) { + ev.stopDetect(); + return; + } - // remove the edge from the parent object - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - if (parentNode.dynamicEdges[i].id == edge.id) { - parentNode.dynamicEdges.splice(i,1); - break; + if(inst.options.preventDefault) { + ev.preventDefault(); + } + + if(ev.eventType == EVENT_TOUCH) { + inst.trigger('touch', ev); + } } - } }; /** - * This function connects an edge that was connected to a child node to the parent node. - * It keeps track of which nodes it has been connected to with the originalId array. - * - * @param {Node} parentNode | Node object - * @param {Node} childNode | Node object - * @param {Edge} edge | Edge object - * @private + * @module gestures */ - exports._connectEdgeToCluster = function(parentNode, childNode, edge) { - // handle circular edges - if (edge.toId == edge.fromId) { - this._addToContainedEdges(parentNode, childNode, edge); - } - else { - if (edge.toId == childNode.id) { // edge connected to other node on the "to" side - edge.originalToId.push(childNode.id); - edge.to = parentNode; - edge.toId = parentNode.id; - } - else { // edge connected to other node with the "from" side - - edge.originalFromId.push(childNode.id); - edge.from = parentNode; - edge.fromId = parentNode.id; - } - - this._addToReroutedEdges(parentNode,childNode,edge); - } - }; - - /** - * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain - * these edges inside of the cluster. + * User want to scale or rotate with 2 fingers + * Preventing the default browser behavior is a good way to improve feel and working. This can be done with the + * `preventDefault` option. * - * @param parentNode - * @param childNode - * @private + * @class Transform + * @static + */ + /** + * @event transform + * @param {Object} ev + */ + /** + * @event transformstart + * @param {Object} ev + */ + /** + * @event transformend + * @param {Object} ev + */ + /** + * @event pinchin + * @param {Object} ev + */ + /** + * @event pinchout + * @param {Object} ev + */ + /** + * @event rotate + * @param {Object} ev */ - exports._containCircularEdgesFromNode = function(parentNode, childNode) { - // manage all the edges connected to the child and parent nodes - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - var edge = parentNode.dynamicEdges[i]; - // handle circular edges - if (edge.toId == edge.fromId) { - this._addToContainedEdges(parentNode, childNode, edge); - } - } - }; - /** - * This adds an edge from the childNode to the rerouted edges of the parent node - * - * @param parentNode | Node object - * @param childNode | Node object - * @param edge | Edge object - * @private + * @param {String} name */ - exports._addToReroutedEdges = function(parentNode, childNode, edge) { - // create an array object if it does not yet exist for this childNode - // we store the edge in the rerouted edges so we can restore it when the cluster pops open - if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) { - parentNode.reroutedEdges[childNode.id] = []; - } - parentNode.reroutedEdges[childNode.id].push(edge); + (function(name) { + var triggered = false; - // this edge becomes part of the dynamicEdges of the cluster node - parentNode.dynamicEdges.push(edge); - }; + function transformGesture(ev, inst) { + switch(ev.eventType) { + case EVENT_START: + triggered = false; + break; + case EVENT_MOVE: + // at least multitouch + if(ev.touches.length < 2) { + return; + } + var scaleThreshold = Math.abs(1 - ev.scale); + var rotationThreshold = Math.abs(ev.rotation); - /** - * This function connects an edge that was connected to a cluster node back to the child node. - * - * @param parentNode | Node object - * @param childNode | Node object - * @private - */ - exports._connectEdgeBackToChild = function(parentNode, childNode) { - if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) { - for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) { - var edge = parentNode.reroutedEdges[childNode.id][i]; - if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) { - edge.originalFromId.pop(); - edge.fromId = childNode.id; - edge.from = childNode; - } - else { - edge.originalToId.pop(); - edge.toId = childNode.id; - edge.to = childNode; - } + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(scaleThreshold < inst.options.transformMinScale && + rotationThreshold < inst.options.transformMinRotation) { + return; + } - // append this edge to the list of edges connecting to the childnode - childNode.dynamicEdges.push(edge); + // we are transforming! + Detection.current.name = name; - // remove the edge from the parent object - for (var j = 0; j < parentNode.dynamicEdges.length; j++) { - if (parentNode.dynamicEdges[j].id == edge.id) { - parentNode.dynamicEdges.splice(j,1); - break; + // first time, trigger dragstart event + if(!triggered) { + inst.trigger(name + 'start', ev); + triggered = true; + } + + inst.trigger(name, ev); // basic transform event + + // trigger rotate event + if(rotationThreshold > inst.options.transformMinRotation) { + inst.trigger('rotate', ev); + } + + // trigger pinch event + if(scaleThreshold > inst.options.transformMinScale) { + inst.trigger('pinch', ev); + inst.trigger('pinch' + (ev.scale < 1 ? 'in' : 'out'), ev); + } + break; + + case EVENT_RELEASE: + if(triggered && ev.changedLength < 2) { + inst.trigger(name + 'end', ev); + triggered = false; + } + break; } - } } - // remove the entry from the rerouted edges - delete parentNode.reroutedEdges[childNode.id]; - } - }; + Hammer.gestures.Transform = { + name: name, + index: 45, + defaults: { + /** + * minimal scale factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1 + * @property transformMinScale + * @type {Number} + * @default 0.01 + */ + transformMinScale: 0.01, - /** - * When loops are clustered, an edge can be both in the rerouted array and the contained array. - * This function is called last to verify that all edges in dynamicEdges are in fact connected to the - * parentNode - * - * @param parentNode | Node object - * @private - */ - exports._validateEdges = function(parentNode) { - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - var edge = parentNode.dynamicEdges[i]; - if (parentNode.id != edge.toId && parentNode.id != edge.fromId) { - parentNode.dynamicEdges.splice(i,1); - } - } - }; + /** + * rotation in degrees + * @property transformMinRotation + * @type {Number} + * @default 1 + */ + transformMinRotation: 1 + }, + handler: transformGesture + }; + })('transform'); /** - * This function released the contained edges back into the global domain and puts them back into the - * dynamic edges of both parent and child. - * - * @param {Node} parentNode | - * @param {Node} childNode | - * @private + * @module hammer */ - exports._releaseContainedEdges = function(parentNode, childNode) { - for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) { - var edge = parentNode.containedEdges[childNode.id][i]; - // put the edge back in the global edges object - this.edges[edge.id] = edge; + // AMD export + if(true) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + return Hammer; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + // commonjs export + } else if(typeof module !== 'undefined' && module.exports) { + module.exports = Hammer; + // browser export + } else { + window.Hammer = Hammer; + } - // put the edge back in the dynamic edges of the child and parent - childNode.dynamicEdges.push(edge); - parentNode.dynamicEdges.push(edge); - } - // remove the entry from the contained edges - delete parentNode.containedEdges[childNode.id]; + })(window); - }; +/***/ }, +/* 52 */ +/***/ function(module, exports, __webpack_require__) { + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {//! moment.js + //! version : 2.8.2 + //! authors : Tim Wood, Iskren Chernev, Moment.js contributors + //! license : MIT + //! momentjs.com + (function (undefined) { + /************************************ + Constants + ************************************/ + var moment, + VERSION = '2.8.2', + // the global-scope this is NOT the global object in Node.js + globalScope = typeof global !== 'undefined' ? global : this, + oldGlobalMoment, + round = Math.round, + hasOwnProperty = Object.prototype.hasOwnProperty, + i, - // ------------------- UTILITY FUNCTIONS ---------------------------- // + YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + // internal storage for locale config files + locales = {}, - /** - * This updates the node labels for all nodes (for debugging purposes) - */ - exports.updateLabels = function() { - var nodeId; - // update node labels - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.clusterSize > 1) { - node.label = "[".concat(String(node.clusterSize),"]"); - } - } - } + // extra moment internal properties (plugins register props here) + momentProperties = [], - // update node labels - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.clusterSize == 1) { - if (node.originalLabel !== undefined) { - node.label = node.originalLabel; - } - else { - node.label = String(node.id); - } - } - } - } + // check for nodeJS + hasModule = (typeof module !== 'undefined' && module.exports), - // /* Debug Override */ - // for (nodeId in this.nodes) { - // if (this.nodes.hasOwnProperty(nodeId)) { - // node = this.nodes[nodeId]; - // node.label = String(node.level); - // } - // } + // 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)$/, + // 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, - /** - * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes - * if the rest of the nodes are already a few cluster levels in. - * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not - * clustered enough to the clusterToSmallestNeighbours function. - */ - exports.normalizeClusterLevels = function() { - var maxLevel = 0; - var minLevel = 1e9; - var clusterLevel = 0; - var nodeId; + // 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}/, - // we loop over all nodes in the list - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - clusterLevel = this.nodes[nodeId].clusterSessions.length; - if (maxLevel < clusterLevel) {maxLevel = clusterLevel;} - if (minLevel > clusterLevel) {minLevel = clusterLevel;} - } - } + //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 - if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) { - var amountOfNodes = this.nodeIndices.length; - var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference; - // we loop over all nodes in the list - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].clusterSessions.length < targetLevel) { - this._clusterToSmallestNeighbour(this.nodes[nodeId]); - } - } - } - this._updateNodeIndexList(); - this._updateDynamicEdges(); - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length != amountOfNodes) { - this.clusterSession += 1; - } - } - }; - - - - /** - * This function determines if the cluster we want to decluster is in the active area - * this means around the zoom center - * - * @param {Node} node - * @returns {boolean} - * @private - */ - exports._nodeInActiveArea = function(node) { - return ( - Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale - && - Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale - ) - }; - - - /** - * This is an adaptation of the original repositioning function. This is called if the system is clustered initially - * It puts large clusters away from the center and randomizes the order. - * - */ - exports.repositionNodes = function() { - 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.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);} - this._repositionBezierNodes(node); - } - } - }; - - - /** - * We determine how many connections denote an important hub. - * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) - * - * @private - */ - exports._getHubSize = function() { - var average = 0; - var averageSquared = 0; - var hubCounter = 0; - var largestHub = 0; - - for (var i = 0; i < this.nodeIndices.length; i++) { - - var node = this.nodes[this.nodeIndices[i]]; - if (node.dynamicEdgesLength > largestHub) { - largestHub = node.dynamicEdgesLength; - } - average += node.dynamicEdgesLength; - averageSquared += Math.pow(node.dynamicEdgesLength,2); - hubCounter += 1; - } - average = average / hubCounter; - averageSquared = averageSquared / hubCounter; - - var variance = averageSquared - Math.pow(average,2); - - var standardDeviation = Math.sqrt(variance); - - this.hubThreshold = Math.floor(average + 2*standardDeviation); - - // always have at least one to cluster - if (this.hubThreshold > largestHub) { - this.hubThreshold = largestHub; - } - - // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation); - // console.log("hubThreshold:",this.hubThreshold); - }; - - - /** - * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods - * with this amount we can cluster specifically on these chains. - * - * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce - * @private - */ - exports._reduceAmountOfChains = function(fraction) { - this.hubThreshold = 2; - var reduceAmount = Math.floor(this.nodeIndices.length * fraction); - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { - if (reduceAmount > 0) { - this._formClusterFromHub(this.nodes[nodeId],true,true,1); - reduceAmount -= 1; - } - } - } - } - }; - - /** - * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods - * with this amount we can cluster specifically on these chains. - * - * @private - */ - exports._getChainFraction = function() { - var chains = 0; - var total = 0; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { - chains += 1; - } - total += 1; - } - } - return chains/total; - }; + // 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)?)?$/, + isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', -/***/ }, -/* 52 */ -/***/ function(module, exports, __webpack_require__) { + 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}/] + ], - var util = __webpack_require__(1); + // 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/] + ], - /** - * Creation of the SectorMixin var. - * - * This contains all the functions the Network object can use to employ the sector system. - * The sector system is always used by Network, though the benefits only apply to the use of clustering. - * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges. - */ + // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30'] + parseTimezoneChunker = /([\+\-]|\d\d)/gi, - /** - * This function is only called by the setData function of the Network object. - * This loads the global references into the active sector. This initializes the sector. - * - * @private - */ - exports._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; - }; + // 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 + }, + 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' + }, - /** - * /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied (active) sector. If a type is defined, do the specific type - * - * @param {String} sectorId - * @param {String} [sectorType] | "active" or "frozen" - * @private - */ - exports._switchToSector = function(sectorId, sectorType) { - if (sectorType === undefined || sectorType == "active") { - this._switchToActiveSector(sectorId); - } - else { - this._switchToFrozenSector(sectorId); - } - }; + camelFunctions = { + dayofyear : 'dayOfYear', + isoweekday : 'isoWeekday', + isoweek : 'isoWeek', + weekyear : 'weekYear', + isoweekyear : 'isoWeekYear' + }, + // format function strings + formatFunctions = {}, - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied active sector. - * - * @param sectorId - * @private - */ - exports._switchToActiveSector = function(sectorId) { - this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"]; - this.nodes = this.sectors["active"][sectorId]["nodes"]; - this.edges = this.sectors["active"][sectorId]["edges"]; - }; + // 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 + }, + // tokens to ordinalize and pad + ordinalizeTokens = 'DDD w W M D d'.split(' '), + paddedTokens = 'M D H h m s w W'.split(' '), - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied active sector. - * - * @private - */ - exports._switchToSupportSector = function() { - this.nodeIndices = this.sectors["support"]["nodeIndices"]; - this.nodes = this.sectors["support"]["nodes"]; - this.edges = this.sectors["support"]["edges"]; - }; + 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 = '-'; + } + 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(); + } + }, + + deprecations = {}, + + lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; + + // 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'); + } + } + + function hasOwnProp(a, b) { + return hasOwnProperty.call(a, b); + } + + 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 + }; + } + + function printMsg(msg) { + if (moment.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && console.warn) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + return extend(function () { + if (firstTime) { + printMsg(msg); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + printMsg(msg); + deprecations[name] = true; + } + } + + 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); + } + + // 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; + + // 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 function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied frozen sector. - * - * @param sectorId - * @private - */ - exports._switchToFrozenSector = function(sectorId) { - this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"]; - this.nodes = this.sectors["frozen"][sectorId]["nodes"]; - this.edges = this.sectors["frozen"][sectorId]["edges"]; - }; + this._locale = moment.localeData(); + this._bubble(); + } - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the currently active sector. - * - * @private - */ - exports._loadLatestSector = function() { - this._switchToSector(this._sector()); - }; + /************************************ + Helpers + ************************************/ - /** - * This function returns the currently active sector Id - * - * @returns {String} - * @private - */ - exports._sector = function() { - return this.activeSector[this.activeSector.length-1]; - }; + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } - /** - * This function returns the previously active sector Id - * - * @returns {String} - * @private - */ - exports._previousSector = function() { - if (this.activeSector.length > 1) { - return this.activeSector[this.activeSector.length-2]; - } - else { - throw new TypeError('there are not enough sectors in the this.activeSector array.'); - } - }; + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + return a; + } - /** - * We add the active sector at the end of the this.activeSector array - * This ensures it is the currently active sector returned by _sector() and it reaches the top - * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack. - * - * @param newId - * @private - */ - exports._setActiveSector = function(newId) { - this.activeSector.push(newId); - }; + function copyConfig(to, from) { + var i, prop, val; + 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; + } - /** - * We remove the currently active sector id from the active sector stack. This happens when - * we reactivate the previously active sector - * - * @private - */ - exports._forgetLastSector = function() { - this.activeSector.pop(); - }; + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; + } + } + } + return to; + } - /** - * This function creates a new active sector with the supplied newId. This newId - * is the expanding node id. - * - * @param {String} newId | Id of the new active sector - * @private - */ - exports._createNewSector = function(newId) { - // create the new sector - this.sectors["active"][newId] = {"nodes":{}, - "edges":{}, - "nodeIndices":[], - "formationScale": this.scale, - "drawingNode": undefined}; + 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; + } + + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + 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; + } + + return res; + } + + // 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; + } + + val = typeof val === 'string' ? +val : val; + dur = moment.duration(val, period); + addOrSubtractDurationFromMoment(this, dur, direction); + return this; + }; + } + + function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; + + 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); + } + } + + // check if is an array + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; + } + + function isDate(input) { + return Object.prototype.toString.call(input) === '[object Date]' || + input instanceof Date; + } + + // 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; + } - // create the new sector render node. This gives visual feedback that you are in a new sector. - this.sectors["active"][newId]['drawingNode'] = new Node( - {id:newId, - color: { - background: "#eaefef", - border: "495c5e" + function normalizeUnits(units) { + if (units) { + var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); + units = unitAliases[units] || camelFunctions[lowered] || lowered; } - },{},{},this.constants); - this.sectors["active"][newId]['drawingNode'].clusterSize = 2; - }; + return units; + } + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; - /** - * This function removes the currently active sector. This is called when we create a new - * active sector. - * - * @param {String} sectorId | Id of the active sector that will be removed - * @private - */ - exports._deleteActiveSector = function(sectorId) { - delete this.sectors["active"][sectorId]; - }; + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + return normalizedInput; + } - /** - * This function removes the currently active sector. This is called when we reactivate - * the previously active sector. - * - * @param {String} sectorId | Id of the active sector that will be removed - * @private - */ - exports._deleteFrozenSector = function(sectorId) { - delete this.sectors["frozen"][sectorId]; - }; + function makeList(field) { + var count, setter; + if (field.indexOf('week') === 0) { + count = 7; + setter = 'day'; + } + else if (field.indexOf('month') === 0) { + count = 12; + setter = 'month'; + } + else { + return; + } - /** - * Freezing an active sector means moving it from the "active" object to the "frozen" object. - * We copy the references, then delete the active entree. - * - * @param sectorId - * @private - */ - exports._freezeSector = function(sectorId) { - // we move the set references from the active to the frozen stack. - this.sectors["frozen"][sectorId] = this.sectors["active"][sectorId]; + moment[field] = function (format, index) { + var i, getter, + method = moment._locale[field], + results = []; - // we have moved the sector data into the frozen set, we now remove it from the active set - this._deleteActiveSector(sectorId); - }; + if (typeof format === 'number') { + index = format; + format = undefined; + } + getter = function (i) { + var m = moment().utc().set(setter, i); + return method.call(moment._locale, m, format || ''); + }; - /** - * This is the reverse operation of _freezeSector. Activating means moving the sector from the "frozen" - * object to the "active" object. - * - * @param sectorId - * @private - */ - exports._activateSector = function(sectorId) { - // we move the set references from the frozen to the active stack. - this.sectors["active"][sectorId] = this.sectors["frozen"][sectorId]; + if (index != null) { + return getter(index); + } + else { + for (i = 0; i < count; i++) { + results.push(getter(i)); + } + return results; + } + }; + } - // we have moved the sector data into the active set, we now remove it from the frozen stack - this._deleteFrozenSector(sectorId); - }; + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + if (coercedNumber >= 0) { + value = Math.floor(coercedNumber); + } else { + value = Math.ceil(coercedNumber); + } + } - /** - * This function merges the data from the currently active sector with a frozen sector. This is used - * in the process of reverting back to the previously active sector. - * The data that is placed in the frozen (the previously active) sector is the node that has been removed from it - * upon the creation of a new active sector. - * - * @param sectorId - * @private - */ - exports._mergeThisWithFrozen = function(sectorId) { - // copy all nodes - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.sectors["frozen"][sectorId]["nodes"][nodeId] = this.nodes[nodeId]; + return value; } - } - // copy all edges (if not fully clustered, else there are no edges) - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - this.sectors["frozen"][sectorId]["edges"][edgeId] = this.edges[edgeId]; + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); } - } - // merge the nodeIndices - for (var i = 0; i < this.nodeIndices.length; i++) { - this.sectors["frozen"][sectorId]["nodeIndices"].push(this.nodeIndices[i]); - } - }; + function weeksInYear(year, dow, doy) { + return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; + } + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } - /** - * This clusters the sector to one cluster. It was a single cluster before this process started so - * we revert to that state. The clusterToFit function with a maximum size of 1 node does this. - * - * @private - */ - exports._collapseThisToSingleCluster = function() { - this.clusterToFit(1,false); - }; + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + 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; - /** - * We create a new active sector from the node that we want to open. - * - * @param node - * @private - */ - exports._addSector = function(node) { - // this is the currently active sector - var sector = this._sector(); + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } - // // this should allow me to select nodes from a frozen set. - // if (this.sectors['active'][sector]["nodes"].hasOwnProperty(node.id)) { - // console.log("the node is part of the active sector"); - // } - // else { - // console.log("I dont know what the fuck happened!!"); - // } + m._pf.overflow = overflow; + } + } - // when we switch to a new sector, we remove the node that will be expanded from the current nodes list. - delete this.nodes[node.id]; + 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 (m._strict) { + m._isValid = m._isValid && + m._pf.charsLeftOver === 0 && + m._pf.unusedTokens.length === 0; + } + } + return m._isValid; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // 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; + + 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; + } + 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--; + } + i++; + } + return null; + } + + 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]; + } - var unqiueIdentifier = util.randomUUID(); + // 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(); + } - // we fully freeze the currently active sector - this._freezeSector(sector); + /************************************ + Locale + ************************************/ - // we create a new active sector. This sector has the Id of the node to ensure uniqueness - this._createNewSector(unqiueIdentifier); - // we add the active sector to the sectors array to be able to revert these steps later on - this._setActiveSector(unqiueIdentifier); + extend(Locale.prototype, { - // we redirect the global references to the new sector's references. this._sector() now returns unqiueIdentifier - this._switchToSector(this._sector()); + set : function (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + }, - // finally we add the node we removed from our previous active sector to the new active sector - this.nodes[node.id] = node; - }; + _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()]; + }, - /** - * We close the sector that is currently open and revert back to the one before. - * If the active sector is the "default" sector, nothing happens. - * - * @private - */ - exports._collapseSector = function() { - // the currently active sector - var sector = this._sector(); + monthsParse : function (monthName) { + var i, mom, regex; - // we cannot collapse the default sector - if (sector != "default") { - if ((this.nodeIndices.length == 1) || - (this.sectors["active"][sector]["drawingNode"].width*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || - (this.sectors["active"][sector]["drawingNode"].height*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { - var previousSector = this._previousSector(); + if (!this._monthsParse) { + this._monthsParse = []; + } - // we collapse the sector back to a single cluster - this._collapseThisToSingleCluster(); + 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; + } + } + }, - // we move the remaining nodes, edges and nodeIndices to the previous sector. - // This previous sector is the one we will reactivate - this._mergeThisWithFrozen(previousSector); + _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdays : function (m) { + return this._weekdays[m.day()]; + }, - // the previously active (frozen) sector now has all the data from the currently active sector. - // we can now delete the active sector. - this._deleteActiveSector(sector); + _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysShort : function (m) { + return this._weekdaysShort[m.day()]; + }, - // we activate the previously active (and currently frozen) sector. - this._activateSector(previousSector); + _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + weekdaysMin : function (m) { + return this._weekdaysMin[m.day()]; + }, - // we load the references from the newly active sector into the global references - this._switchToSector(previousSector); + weekdaysParse : function (weekdayName) { + var i, mom, regex; - // we forget the previously active sector because we reverted to the one before - this._forgetLastSector(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + } - // finally, we update the node index list. - this._updateNodeIndexList(); + 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; + } + } + }, - // we refresh the list with calulation nodes and calculation node indices. - this._updateCalculationNodes(); - } - } - }; + _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'); + }, - /** - * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we dont pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInAllActiveSectors = function(runFunction,argument) { - var returnValues = []; - if (argument === undefined) { - for (var sector in this.sectors["active"]) { - if (this.sectors["active"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToActiveSector(sector); - returnValues.push( this[runFunction]() ); - } - } - } - else { - for (var sector in this.sectors["active"]) { - if (this.sectors["active"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToActiveSector(sector); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - returnValues.push( this[runFunction](args[0],args[1]) ); - } - else { - returnValues.push( this[runFunction](argument) ); - } - } - } - } - // we revert the global references back to our active sector - this._loadLatestSector(); - return returnValues; - }; + _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; + }, - /** - * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we dont pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInSupportSector = function(runFunction,argument) { - var returnValues = false; - if (argument === undefined) { - this._switchToSupportSector(); - returnValues = this[runFunction](); - } - else { - this._switchToSupportSector(); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - returnValues = this[runFunction](args[0],args[1]); - } - else { - returnValues = this[runFunction](argument); - } - } - // we revert the global references back to our active sector - this._loadLatestSector(); - return returnValues; - }; + _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); + }, - /** - * This runs a function in all frozen sectors. This is used in the _redraw(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we don't pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInAllFrozenSectors = function(runFunction,argument) { - if (argument === undefined) { - for (var sector in this.sectors["frozen"]) { - if (this.sectors["frozen"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToFrozenSector(sector); - this[runFunction](); - } - } - } - else { - for (var sector in this.sectors["frozen"]) { - if (this.sectors["frozen"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToFrozenSector(sector); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - this[runFunction](args[0],args[1]); - } - else { - this[runFunction](argument); - } - } - } - } - this._loadLatestSector(); - }; + pastFuture : function (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + }, + ordinal : function (number) { + return this._ordinal.replace('%d', number); + }, + _ordinal : '%d', - /** - * This runs a function in all sectors. This is used in the _redraw(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we don't pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInAllSectors = function(runFunction,argument) { - var args = Array.prototype.splice.call(arguments, 1); - if (argument === undefined) { - this._doInAllActiveSectors(runFunction); - this._doInAllFrozenSectors(runFunction); - } - else { - if (args.length > 1) { - this._doInAllActiveSectors(runFunction,args[0],args[1]); - this._doInAllFrozenSectors(runFunction,args[0],args[1]); - } - else { - this._doInAllActiveSectors(runFunction,argument); - this._doInAllFrozenSectors(runFunction,argument); - } - } - }; + preparse : function (string) { + return string; + }, + postformat : function (string) { + return string; + }, - /** - * This clears the nodeIndices list. We cannot use this.nodeIndices = [] because we would break the link with the - * active sector. Thus we clear the nodeIndices in the active sector, then reconnect the this.nodeIndices to it. - * - * @private - */ - exports._clearNodeIndexList = function() { - var sector = this._sector(); - this.sectors["active"][sector]["nodeIndices"] = []; - this.nodeIndices = this.sectors["active"][sector]["nodeIndices"]; - }; + week : function (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + }, + _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. + }, - /** - * Draw the encompassing sector node - * - * @param ctx - * @param sectorType - * @private - */ - exports._drawSectorNodes = function(ctx,sectorType) { - var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node; - for (var sector in this.sectors[sectorType]) { - if (this.sectors[sectorType].hasOwnProperty(sector)) { - if (this.sectors[sectorType][sector]["drawingNode"] !== undefined) { + _invalidDate: 'Invalid date', + invalidDate: function () { + return this._invalidDate; + } + }); - this._switchToSector(sector,sectorType); + /************************************ + Formatting + ************************************/ - minY = 1e9; maxY = -1e9; minX = 1e9; maxX = -1e9; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.resize(ctx); - if (minX > node.x - 0.5 * node.width) {minX = node.x - 0.5 * node.width;} - if (maxX < node.x + 0.5 * node.width) {maxX = node.x + 0.5 * node.width;} - if (minY > node.y - 0.5 * node.height) {minY = node.y - 0.5 * node.height;} - if (maxY < node.y + 0.5 * node.height) {maxY = node.y + 0.5 * node.height;} - } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); } - node = this.sectors[sectorType][sector]["drawingNode"]; - node.x = 0.5 * (maxX + minX); - node.y = 0.5 * (maxY + minY); - node.width = 2 * (node.x - minX); - node.height = 2 * (node.y - minY); - node.radius = Math.sqrt(Math.pow(0.5*node.width,2) + Math.pow(0.5*node.height,2)); - node.setScale(this.scale); - node._drawCircle(ctx); - } + return input.replace(/\\/g, ''); } - } - }; - - exports._drawAllSectorNodes = function(ctx) { - this._drawSectorNodes(ctx,"frozen"); - this._drawSectorNodes(ctx,"active"); - this._loadLatestSector(); - }; + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; -/***/ }, -/* 53 */ -/***/ function(module, exports, __webpack_require__) { - - var Node = __webpack_require__(36); + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } - /** - * This function can be called from the _doInAllSectors function - * - * @param object - * @param overlappingNodes - * @private - */ - exports._getNodesOverlappingWith = function(object, overlappingNodes) { - var nodes = this.nodes; - for (var nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - if (nodes[nodeId].isOverlappingWith(object)) { - overlappingNodes.push(nodeId); - } + 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; + }; } - } - }; - - /** - * retrieve all nodes overlapping with given object - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getAllNodesOverlappingWith = function (object) { - var overlappingNodes = []; - this._doInAllActiveSectors("_getNodesOverlappingWith",object,overlappingNodes); - return overlappingNodes; - }; + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } - /** - * Return a position object in canvasspace from a single point in screenspace - * - * @param pointer - * @returns {{left: number, top: number, right: number, bottom: number}} - * @private - */ - exports._pointerToPositionObject = function(pointer) { - var x = this._XconvertDOMtoCanvas(pointer.x); - var y = this._YconvertDOMtoCanvas(pointer.y); + format = expandFormat(format, m.localeData()); - return { - left: x, - top: y, - right: x, - bottom: y - }; - }; + if (!formatFunctions[format]) { + formatFunctions[format] = makeFormatFunction(format); + } + return formatFunctions[format](m); + } - /** - * Get the top node at the a specific point (like a click) - * - * @param {{x: Number, y: Number}} pointer - * @return {Node | null} node - * @private - */ - exports._getNodeAt = function (pointer) { - // we first check if this is an navigation controls element - var positionObject = this._pointerToPositionObject(pointer); - var overlappingNodes = this._getAllNodesOverlappingWith(positionObject); + function expandFormat(format, locale) { + var i = 5; - // if there are overlapping nodes, select the last one, this is the - // one which is drawn on top of the others - if (overlappingNodes.length > 0) { - return this.nodes[overlappingNodes[overlappingNodes.length - 1]]; - } - else { - return null; - } - }; + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } - /** - * retrieve all edges overlapping with given object, selector is around center - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getEdgesOverlappingWith = function (object, overlappingEdges) { - var edges = this.edges; - for (var edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - if (edges[edgeId].isOverlappingWith(object)) { - overlappingEdges.push(edgeId); - } + return format; } - } - }; - /** - * retrieve all nodes overlapping with given object - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getAllEdgesOverlappingWith = function (object) { - var overlappingEdges = []; - this._doInAllActiveSectors("_getEdgesOverlappingWith",object,overlappingEdges); - return overlappingEdges; - }; + /************************************ + Parsing + ************************************/ - /** - * Place holder. To implement change the _getNodeAt to a _getObjectAt. Have the _getObjectAt call - * _getNodeAt and _getEdgesAt, then priortize the selection to user preferences. - * - * @param pointer - * @returns {null} - * @private - */ - exports._getEdgeAt = function(pointer) { - var positionObject = this._pointerToPositionObject(pointer); - var overlappingEdges = this._getAllEdgesOverlappingWith(positionObject); - if (overlappingEdges.length > 0) { - return this.edges[overlappingEdges[overlappingEdges.length - 1]]; - } - else { - return null; - } - }; + // 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; + } + } + 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]); - /** - * Add object to the selection array. - * - * @param obj - * @private - */ - exports._addToSelection = function(obj) { - if (obj instanceof Node) { - this.selectionObj.nodes[obj.id] = obj; - } - else { - this.selectionObj.edges[obj.id] = obj; - } - }; + return parts[0] === '+' ? -minutes : minutes; + } - /** - * Add object to the selection array. - * - * @param obj - * @private - */ - exports._addToHover = function(obj) { - if (obj instanceof Node) { - this.hoverObj.nodes[obj.id] = obj; - } - else { - this.hoverObj.edges[obj.id] = obj; - } - }; + // function to convert string input to date + function addTimeToArrayFromToken(token, input, config) { + var a, datePartArray = config._a; + + 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 { + 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 = 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); + } + } - /** - * Remove a single option from selection. - * - * @param {Object} obj - * @private - */ - exports._removeFromSelection = function(obj) { - if (obj instanceof Node) { - delete this.selectionObj.nodes[obj.id]; - } - else { - delete this.selectionObj.edges[obj.id]; - } - }; + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; - /** - * Unselect all. The selectionObj is useful for this. - * - * @param {Boolean} [doNotTrigger] | ignore trigger - * @private - */ - exports._unselectAll = function(doNotTrigger) { - if (doNotTrigger === undefined) { - doNotTrigger = false; - } - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - this.selectionObj.nodes[nodeId].unselect(); - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - this.selectionObj.edges[edgeId].unselect(); - } - } + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; - this.selectionObj = {nodes:{},edges:{}}; + // 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; - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); - } - }; + weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); + week = dfl(w.w, 1); - /** - * Unselect all clusters. The selectionObj is useful for this. - * - * @param {Boolean} [doNotTrigger] | ignore trigger - * @private - */ - exports._unselectClusters = function(doNotTrigger) { - if (doNotTrigger === undefined) { - doNotTrigger = false; - } + 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 (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (this.selectionObj.nodes[nodeId].clusterSize > 1) { - this.selectionObj.nodes[nodeId].unselect(); - this._removeFromSelection(this.selectionObj.nodes[nodeId]); - } + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; } - } - - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); - } - }; + // 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; - /** - * return the number of selected nodes - * - * @returns {number} - * @private - */ - exports._getSelectedNodeCount = function() { - var count = 0; - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - count += 1; - } - } - return count; - }; + if (config._d) { + return; + } - /** - * return the selected node - * - * @returns {number} - * @private - */ - exports._getSelectedNode = function() { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - return this.selectionObj.nodes[nodeId]; - } - } - return null; - }; + currentDate = currentDateArray(config); - /** - * return the selected edge - * - * @returns {number} - * @private - */ - exports._getSelectedEdge = function() { - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - return this.selectionObj.edges[edgeId]; - } - } - return null; - }; + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); - /** - * return the number of selected edges - * - * @returns {number} - * @private - */ - exports._getSelectedEdgeCount = function() { - var count = 0; - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - count += 1; - } - } - return count; - }; + 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(); + } - /** - * return the number of selected objects. - * - * @returns {number} - * @private - */ - exports._getSelectedObjectCount = function() { - var count = 0; - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - count += 1; - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - count += 1; - } - } - return count; - }; + // 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]; + } - /** - * Check if anything is selected - * - * @returns {boolean} - * @private - */ - exports._selectionIsEmpty = function() { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - return false; - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - return false; + // 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]; + } + + 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); + } } - } - return true; - }; + function dateFromObject(config) { + var normalizedInput; - /** - * check if one of the selected nodes is a cluster. - * - * @returns {boolean} - * @private - */ - exports._clusterInSelection = function() { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (this.selectionObj.nodes[nodeId].clusterSize > 1) { - return true; - } - } - } - return false; - }; + if (config._d) { + return; + } - /** - * select the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ - exports._selectConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.select(); - this._addToSelection(edge); - } - }; + normalizedInput = normalizeObjectUnits(config._i); + config._a = [ + normalizedInput.year, + normalizedInput.month, + normalizedInput.day, + normalizedInput.hour, + normalizedInput.minute, + normalizedInput.second, + normalizedInput.millisecond + ]; - /** - * select the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ - exports._hoverConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.hover = true; - this._addToHover(edge); - } - }; + dateFromConfig(config); + } + + 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()]; + } + } + // date from string and format string + function makeDateFromStringAndFormat(config) { + if (config._f === moment.ISO_8601) { + parseISO(config); + return; + } - /** - * unselect the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ - exports._unselectConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.unselect(); - this._removeFromSelection(edge); - } - }; + config._a = []; + config._pf.empty = true; + // 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; + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + 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; + } + // 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); + } + else if (config._strict && !parsedInput) { + config._pf.unusedTokens.push(token); + } + } - /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection - * - * @param {Node || Edge} object - * @param {Boolean} append - * @param {Boolean} [doNotTrigger] | ignore trigger - * @private - */ - exports._selectObject = function(object, append, doNotTrigger, highlightEdges) { - if (doNotTrigger === undefined) { - doNotTrigger = false; - } - if (highlightEdges === undefined) { - highlightEdges = true; - } + // add remaining unparsed input length to the string + config._pf.charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + config._pf.unusedInput.push(string); + } - if (this._selectionIsEmpty() == false && append == false && this.forceAppendSelection == false) { - this._unselectAll(true); - } + // 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 (object.selected == false) { - object.select(); - this._addToSelection(object); - if (object instanceof Node && this.blockConnectingEdgeSelection == false && highlightEdges == true) { - this._selectConnectedEdges(object); + dateFromConfig(config); + checkOverflow(config); } - } - else { - object.unselect(); - this._removeFromSelection(object); - } - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); - } - }; + 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, '\\$&'); + } - /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection - * - * @param {Node || Edge} object - * @private - */ - exports._blurObject = function(object) { - if (object.hover == true) { - object.hover = false; - this.emit("blurNode",{node:object.id}); - } - }; + // date from string and array of format strings + function makeDateFromStringAndArray(config) { + var tempConfig, + bestMoment, - /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection - * - * @param {Node || Edge} object - * @private - */ - exports._hoverObject = function(object) { - if (object.hover == false) { - object.hover = true; - this._addToHover(object); - if (object instanceof Node) { - this.emit("hoverNode",{node:object.id}); - } - } - if (object instanceof Node) { - this._hoverConnectedEdges(object); - } - }; + scoreToBeat, + i, + currentScore; + if (config._f.length === 0) { + config._pf.invalidFormat = true; + config._d = new Date(NaN); + return; + } - /** - * handles the selection part of the touch, only for navigation controls elements; - * Touch is triggered before tap, also before hold. Hold triggers after a while. - * This is the most responsive solution - * - * @param {Object} pointer - * @private - */ - exports._handleTouch = function(pointer) { - }; + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + tempConfig._pf = defaultParsingFlags(); + tempConfig._f = config._f[i]; + makeDateFromStringAndFormat(tempConfig); + if (!isValid(tempConfig)) { + continue; + } - /** - * handles the selection part of the tap; - * - * @param {Object} pointer - * @private - */ - exports._handleTap = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null) { - this._selectObject(node,false); - } - else { - var edge = this._getEdgeAt(pointer); - if (edge != null) { - this._selectObject(edge,false); - } - else { - this._unselectAll(); - } - } - this.emit("click", this.getSelection()); - this._redraw(); - }; + // if there is any input that was not parsed add a penalty for that format + currentScore += tempConfig._pf.charsLeftOver; + //or tokens + currentScore += tempConfig._pf.unusedTokens.length * 10; - /** - * handles the selection part of the double tap and opens a cluster if needed - * - * @param {Object} pointer - * @private - */ - exports._handleDoubleTap = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null && node !== undefined) { - // we reset the areaCenter here so the opening of the node will occur - this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x), - "y" : this._YconvertDOMtoCanvas(pointer.y)}; - this.openCluster(node); - } - this.emit("doubleClick", this.getSelection()); - }; + tempConfig._pf.score = currentScore; + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } - /** - * Handle the onHold selection part - * - * @param pointer - * @private - */ - exports._handleOnHold = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null) { - this._selectObject(node,true); - } - else { - var edge = this._getEdgeAt(pointer); - if (edge != null) { - this._selectObject(edge,true); + extend(config, bestMoment || tempConfig); } - } - this._redraw(); - }; + // date from iso format + function parseISO(config) { + var i, l, + string = config._i, + match = isoRegex.exec(string); - /** - * handle the onRelease event. These functions are here for the navigation controls module. - * - * @private - */ - exports._handleOnRelease = function(pointer) { + 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; + } + } - }; + // date from iso format or fallback + function makeDateFromString(config) { + parseISO(config); + if (config._isValid === false) { + delete config._isValid; + moment.createFromInputFallback(config); + } + } + 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); + } + } + 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); - /** - * - * retrieve the currently selected objects - * @return {{nodes: Array., edges: Array.}} selection - */ - exports.getSelection = function() { - var nodeIds = this.getSelectedNodes(); - var edgeIds = this.getSelectedEdges(); - return {nodes:nodeIds, edges:edgeIds}; - }; + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } - /** - * - * retrieve the currently selected nodes - * @return {String[]} selection An array with the ids of the - * selected nodes. - */ - exports.getSelectedNodes = function() { - var idArray = []; - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - idArray.push(nodeId); + function makeUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; } - } - return idArray - }; - /** - * - * retrieve the currently selected edges - * @return {Array} selection An array with the ids of the - * selected nodes. - */ - exports.getSelectedEdges = function() { - var idArray = []; - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - idArray.push(edgeId); + 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; + } + } + } + return input; } - } - return idArray; - }; + + /************************************ + Relative Time + ************************************/ - /** - * select zero or more nodes - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - */ - exports.setSelection = function(selection) { - var i, iMax, id; + // 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]; - if (!selection || (selection.length == undefined)) - throw 'Selection must be an array with ids'; + args[2] = withoutSuffix; + args[3] = +posNegDuration > 0; + args[4] = locale; + return substituteTimeAgo.apply({}, args); + } - // first unselect any selected node - this._unselectAll(true); - for (i = 0, iMax = selection.length; i < iMax; i++) { - id = selection[i]; + /************************************ + Week of Year + ************************************/ - var node = this.nodes[id]; - if (!node) { - throw new RangeError('Node with id "' + id + '" not found'); - } - this._selectObject(node,true,true); - } - console.log("setSelection is deprecated. Please use selectNodes instead.") + // 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; - this.redraw(); - }; + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } - /** - * select zero or more nodes with the option to highlight edges - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - * @param {boolean} [highlightEdges] - */ - exports.selectNodes = function(selection, highlightEdges) { - var i, iMax, id; + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } - if (!selection || (selection.length == undefined)) - throw 'Selection must be an array with ids'; + adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } - // first unselect any selected node - this._unselectAll(true); + //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; - for (i = 0, iMax = selection.length; i < iMax; i++) { - id = selection[i]; + 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; - var node = this.nodes[id]; - if (!node) { - throw new RangeError('Node with id "' + id + '" not found'); + return { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; } - this._selectObject(node,true,true,highlightEdges); - } - this.redraw(); - }; + /************************************ + Top Level Functions + ************************************/ - /** - * select zero or more edges - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - */ - exports.selectEdges = function(selection) { - var i, iMax, id; + function makeMoment(config) { + var input = config._i, + format = config._f; - if (!selection || (selection.length == undefined)) - throw 'Selection must be an array with ids'; + config._locale = config._locale || moment.localeData(config._l); - // first unselect any selected node - this._unselectAll(true); + if (input === null || (format === undefined && input === '')) { + return moment.invalid({nullInput: true}); + } - for (i = 0, iMax = selection.length; i < iMax; i++) { - id = selection[i]; + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } - var edge = this.edges[id]; - if (!edge) { - throw new RangeError('Edge with id "' + id + '" not found'); - } - this._selectObject(edge,true,true,highlightEdges); - } - this.redraw(); - }; + if (moment.isMoment(input)) { + return new Moment(input, true); + } else if (format) { + if (isArray(format)) { + makeDateFromStringAndArray(config); + } else { + makeDateFromStringAndFormat(config); + } + } else { + makeDateFromInput(config); + } - /** - * Validate the selection: remove ids of nodes which no longer exist - * @private - */ - exports._updateSelection = function () { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (!this.nodes.hasOwnProperty(nodeId)) { - delete this.selectionObj.nodes[nodeId]; - } - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - if (!this.edges.hasOwnProperty(edgeId)) { - delete this.selectionObj.edges[edgeId]; - } + return new Moment(config); } - } - }; - -/***/ }, -/* 54 */ -/***/ function(module, exports, __webpack_require__) { + moment = function (input, format, locale, strict) { + var c; - var util = __webpack_require__(1); - var Node = __webpack_require__(36); - var Edge = __webpack_require__(33); + 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(); - /** - * clears the toolbar div element of children - * - * @private - */ - exports._clearManipulatorBar = function() { - while (this.manipulationDiv.hasChildNodes()) { - this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); - } - }; + return makeMoment(c); + }; - /** - * Manipulation UI temporarily overloads certain functions to extend or replace them. To be able to restore - * these functions to their original functionality, we saved them in this.cachedFunctions. - * This function restores these functions to their original function. - * - * @private - */ - exports._restoreOverloadedFunctions = function() { - for (var functionName in this.cachedFunctions) { - if (this.cachedFunctions.hasOwnProperty(functionName)) { - this[functionName] = this.cachedFunctions[functionName]; - } - } - }; + moment.suppressDeprecationWarnings = false; - /** - * Enable or disable edit-mode. - * - * @private - */ - exports._toggleEditMode = function() { - this.editMode = !this.editMode; - var toolbar = document.getElementById("network-manipulationDiv"); - var closeDiv = document.getElementById("network-manipulation-closeDiv"); - var editModeDiv = document.getElementById("network-manipulation-editMode"); - if (this.editMode == true) { - toolbar.style.display="block"; - closeDiv.style.display="block"; - editModeDiv.style.display="none"; - closeDiv.onclick = this._toggleEditMode.bind(this); - } - else { - toolbar.style.display="none"; - closeDiv.style.display="none"; - editModeDiv.style.display="block"; - closeDiv.onclick = null; - } - this._createManipulatorBar() - }; + 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); + } + ); - /** - * main function, creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar. - * - * @private - */ - exports._createManipulatorBar = function() { - // remove bound functions - if (this.boundFunction) { - this.off('select', this.boundFunction); - } + // 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; + } - var locale = this.constants.locales[this.constants.locale]; + moment.min = function () { + var args = [].slice.call(arguments, 0); - if (this.edgeBeingEdited !== undefined) { - this.edgeBeingEdited._disableControlNodes(); - this.edgeBeingEdited = undefined; - this.selectedControlNode = null; - this.controlNodesActive = false; - } + return pickBy('isBefore', args); + }; - // restore overloaded functions - this._restoreOverloadedFunctions(); + moment.max = function () { + var args = [].slice.call(arguments, 0); - // resume calculation - this.freezeSimulation = false; + return pickBy('isAfter', args); + }; - // reset global variables - this.blockConnectingEdgeSelection = false; - this.forceAppendSelection = false; + // creating with utc + moment.utc = function (input, format, locale, strict) { + var c; - if (this.editMode == true) { - while (this.manipulationDiv.hasChildNodes()) { - this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); - } + 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(); - // add the icons to the manipulator div - this.manipulationDiv.innerHTML = "" + - "" + - ""+locale['addNode'] +"" + - "
" + - "" + - ""+locale['addEdge'] +""; - if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { - this.manipulationDiv.innerHTML += "" + - "
" + - "" + - ""+locale['editNode'] +""; - } - else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { - this.manipulationDiv.innerHTML += "" + - "
" + - "" + - ""+locale['editEdge'] +""; - } - if (this._selectionIsEmpty() == false) { - this.manipulationDiv.innerHTML += "" + - "
" + - "" + - ""+locale['del'] +""; - } + return makeMoment(c).utc(); + }; + // creating with unix timestamp (in seconds) + moment.unix = function (input) { + return moment(input * 1000); + }; - // bind the icons - var addNodeButton = document.getElementById("network-manipulate-addNode"); - addNodeButton.onclick = this._createAddNodeToolbar.bind(this); - var addEdgeButton = document.getElementById("network-manipulate-connectNode"); - addEdgeButton.onclick = this._createAddEdgeToolbar.bind(this); - if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { - var editButton = document.getElementById("network-manipulate-editNode"); - editButton.onclick = this._editNode.bind(this); - } - else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { - var editButton = document.getElementById("network-manipulate-editEdge"); - editButton.onclick = this._createEditEdgeToolbar.bind(this); - } - if (this._selectionIsEmpty() == false) { - var deleteButton = document.getElementById("network-manipulate-delete"); - deleteButton.onclick = this._deleteSelected.bind(this); - } - var closeDiv = document.getElementById("network-manipulation-closeDiv"); - closeDiv.onclick = this._toggleEditMode.bind(this); + // duration + moment.duration = function (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + parseIso, + diffRes; - this.boundFunction = this._createManipulatorBar.bind(this); - this.on('select', this.boundFunction); - } - else { - this.editModeDiv.innerHTML = "" + - "" + - "" + locale['edit'] + ""; - var editModeButton = document.getElementById("network-manipulate-editModeButton"); - editModeButton.onclick = this._toggleEditMode.bind(this); - } - }; + 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)); + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + ret = new Duration(duration); - /** - * Create the toolbar for adding Nodes - * - * @private - */ - exports._createAddNodeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - if (this.boundFunction) { - this.off('select', this.boundFunction); - } + if (moment.isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } - var locale = this.constants.locales[this.constants.locale]; + return ret; + }; - // create the toolbar contents - this.manipulationDiv.innerHTML = "" + - "" + - "" + locale['back'] + " " + - "
" + - "" + - "" + locale['addDescription'] + ""; + // version number + moment.version = VERSION; - // bind the icon - var backButton = document.getElementById("network-manipulate-back"); - backButton.onclick = this._createManipulatorBar.bind(this); + // default format + moment.defaultFormat = isoFormat; - // we use the boundFunction so we can reference it when we unbind it from the "select" event. - this.boundFunction = this._addNode.bind(this); - this.on('select', this.boundFunction); - }; + // 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; - /** - * create the toolbar to connect nodes - * - * @private - */ - exports._createAddEdgeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - this._unselectAll(true); - this.freezeSimulation = true; + // 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 () {}; - var locale = this.constants.locales[this.constants.locale]; + // 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; + }; - if (this.boundFunction) { - this.off('select', this.boundFunction); - } + moment.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + function (key, value) { + return moment.locale(key, value); + } + ); - this._unselectAll(); - this.forceAppendSelection = false; - this.blockConnectingEdgeSelection = true; + // 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); + } - this.manipulationDiv.innerHTML = "" + - "" + - "" + locale['back'] + " " + - "
" + - "" + - "" + locale['edgeDescription'] + ""; + if (data) { + moment.duration._locale = moment._locale = data; + } + } - // bind the icon - var backButton = document.getElementById("network-manipulate-back"); - backButton.onclick = this._createManipulatorBar.bind(this); + return moment._locale._abbr; + }; - // we use the boundFunction so we can reference it when we unbind it from the "select" event. - this.boundFunction = this._handleConnect.bind(this); - this.on('select', this.boundFunction); + moment.defineLocale = function (name, values) { + if (values !== null) { + values.abbr = name; + if (!locales[name]) { + locales[name] = new Locale(); + } + locales[name].set(values); - // temporarily overload functions - this.cachedFunctions["_handleTouch"] = this._handleTouch; - this.cachedFunctions["_handleOnRelease"] = this._handleOnRelease; - this._handleTouch = this._handleConnect; - this._handleOnRelease = this._finishConnect; + // backwards compat for now: also set the locale + moment.locale(name); - // redraw to show the unselect - this._redraw(); - }; + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + }; - /** - * create the toolbar to edit edges - * - * @private - */ - exports._createEditEdgeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - this.controlNodesActive = true; + moment.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + function (key) { + return moment.localeData(key); + } + ); - if (this.boundFunction) { - this.off('select', this.boundFunction); - } + // returns locale data + moment.localeData = function (key) { + var locale; - this.edgeBeingEdited = this._getSelectedEdge(); - this.edgeBeingEdited._enableControlNodes(); + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } - var locale = this.constants.locales[this.constants.locale]; + if (!key) { + return moment._locale; + } - this.manipulationDiv.innerHTML = "" + - "" + - "" + locale['back'] + " " + - "
" + - "" + - "" + locale['editEdgeDescription'] + ""; + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } - // bind the icon - var backButton = document.getElementById("network-manipulate-back"); - backButton.onclick = this._createManipulatorBar.bind(this); + return chooseLocale(key); + }; - // temporarily overload functions - 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; + // compare moment object + moment.isMoment = function (obj) { + return obj instanceof Moment || + (obj != null && hasOwnProp(obj, '_isAMomentObject')); + }; - // redraw to show the unselect - this._redraw(); - }; + // for typechecking Duration objects + moment.isDuration = function (obj) { + return obj instanceof Duration; + }; + + for (i = lists.length - 1; i >= 0; --i) { + makeList(lists[i]); + } + moment.normalizeUnits = function (units) { + return normalizeUnits(units); + }; + moment.invalid = function (flags) { + var m = moment.utc(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; + } + return m; + }; + moment.parseZone = function () { + return moment.apply(null, arguments).parseZone(); + }; - /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. - * - * @private - */ - exports._selectControlNode = function(pointer) { - this.edgeBeingEdited.controlNodes.from.unselect(); - this.edgeBeingEdited.controlNodes.to.unselect(); - this.selectedControlNode = this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(pointer.x),this._YconvertDOMtoCanvas(pointer.y)); - if (this.selectedControlNode !== null) { - this.selectedControlNode.select(); - this.freezeSimulation = true; - } - this._redraw(); - }; + moment.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; - /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. - * - * @private - */ - exports._controlNodeDrag = function(event) { - var pointer = this._getPointer(event.gesture.center); - if (this.selectedControlNode !== null && this.selectedControlNode !== undefined) { - this.selectedControlNode.x = this._XconvertDOMtoCanvas(pointer.x); - this.selectedControlNode.y = this._YconvertDOMtoCanvas(pointer.y); - } - this._redraw(); - }; + /************************************ + Moment Prototype + ************************************/ - exports._releaseControlNode = function(pointer) { - var newNode = this._getNodeAt(pointer); - if (newNode != null) { - if (this.edgeBeingEdited.controlNodes.from.selected == true) { - this._editEdge(newNode.id, this.edgeBeingEdited.to.id); - this.edgeBeingEdited.controlNodes.from.unselect(); - } - if (this.edgeBeingEdited.controlNodes.to.selected == true) { - this._editEdge(this.edgeBeingEdited.from.id, newNode.id); - this.edgeBeingEdited.controlNodes.to.unselect(); - } - } - else { - this.edgeBeingEdited._restoreControlNodes(); - } - this.freezeSimulation = false; - this._redraw(); - }; - /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. - * - * @private - */ - exports._handleConnect = function(pointer) { - if (this._getSelectedNodeCount() == 0) { - var node = this._getNodeAt(pointer); - var supportNodes, targetNode, targetViaNode, connectionEdge; + extend(moment.fn = Moment.prototype, { - if (node != null) { - if (node.clusterSize > 1) { - alert(this.constants.locales[this.constants.locale]['createEdgeError']) - } - else { - this._selectObject(node,false); - supportNodes = this.sectors['support']['nodes']; + clone : function () { + return moment(this); + }, - // create a node the temporary line can look at - supportNodes['targetNode'] = targetNode = new Node({id:'targetNode'},{},{},this.constants); - targetNode.x = node.x; - targetNode.y = node.y; + valueOf : function () { + return +this._d + ((this._offset || 0) * 60000); + }, - supportNodes['targetViaNode'] = targetViaNode = new Node({id:'targetViaNode'},{},{},this.constants); - targetViaNode.x = node.x; - targetViaNode.y = node.y; - targetViaNode.parentEdgeId = "connectionEdge"; + unix : function () { + return Math.floor(+this / 1000); + }, - // create a temporary edge - this.edges['connectionEdge'] = connectionEdge = new Edge({id:"connectionEdge",from:node.id,to:targetNode.id}, this, this.constants); - connectionEdge.from = node; - connectionEdge.connected = true; - connectionEdge.smooth = true; - connectionEdge.selected = true; - connectionEdge.to = targetNode; - connectionEdge.via = targetViaNode; + toString : function () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + }, - this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; - this._handleOnDrag = function(event) { - var pointer = this._getPointer(event.gesture.center); - var supportNodes = this.sectors['support']['nodes']; - supportNodes['targetNode'].x = this._XconvertDOMtoCanvas(pointer.x); - supportNodes['targetNode'].y = this._YconvertDOMtoCanvas(pointer.y); - supportNodes['targetViaNode'].x = 0.5 * (this._XconvertDOMtoCanvas(pointer.x) + this.edges['connectionEdge'].from.x); - supportNodes['targetViaNode'].y = this._YconvertDOMtoCanvas(pointer.y); - }; + toDate : function () { + return this._offset ? new Date(+this) : this._d; + }, - this.moving = true; - this.start(); - } - } - } - }; + 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]'); + } + }, - exports._finishConnect = function(pointer) { - if (this._getSelectedNodeCount() == 1) { + toArray : function () { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hours(), + m.minutes(), + m.seconds(), + m.milliseconds() + ]; + }, - // restore the drag function - this._handleOnDrag = this.cachedFunctions["_handleOnDrag"]; - delete this.cachedFunctions["_handleOnDrag"]; + isValid : function () { + return isValid(this); + }, - // remember the edge id - var connectFromId = this.edges['connectionEdge'].fromId; + isDSTShifted : function () { + if (this._a) { + return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; + } - // remove the temporary nodes and edge - delete this.edges['connectionEdge']; - delete this.sectors['support']['nodes']['targetNode']; - delete this.sectors['support']['nodes']['targetViaNode']; + return false; + }, - var node = this._getNodeAt(pointer); - if (node != null) { - if (node.clusterSize > 1) { - alert(this.constants.locales[this.constants.locale]["createEdgeError"]) - } - else { - this._createEdge(connectFromId,node.id); - this._createManipulatorBar(); - } - } - this._unselectAll(); - } - }; + parsingFlags : function () { + return extend({}, this._pf); + }, + invalidAt: function () { + return this._pf.overflow; + }, - /** - * Adds a node on the specified location - */ - exports._addNode = function() { - if (this._selectionIsEmpty() && this.editMode == true) { - var positionObject = this._pointerToPositionObject(this.pointerPosition); - var defaultData = {id:util.randomUUID(),x:positionObject.left,y:positionObject.top,label:"new",allowedToMoveX:true,allowedToMoveY:true}; - if (this.triggerFunctions.add) { - if (this.triggerFunctions.add.length == 2) { - var me = this; - this.triggerFunctions.add(defaultData, function(finalizedData) { - me.nodesData.add(finalizedData); - me._createManipulatorBar(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for add does not support two arguments (data,callback)'); - this._createManipulatorBar(); - this.moving = true; - this.start(); - } - } - else { - this.nodesData.add(defaultData); - this._createManipulatorBar(); - this.moving = true; - this.start(); - } - } - }; + utc : function (keepLocalTime) { + return this.zone(0, keepLocalTime); + }, + local : function (keepLocalTime) { + if (this._isUTC) { + this.zone(0, keepLocalTime); + this._isUTC = false; - /** - * connect two nodes with a new edge. - * - * @private - */ - exports._createEdge = function(sourceNodeId,targetNodeId) { - if (this.editMode == true) { - var defaultData = {from:sourceNodeId, to:targetNodeId}; - if (this.triggerFunctions.connect) { - if (this.triggerFunctions.connect.length == 2) { - var me = this; - this.triggerFunctions.connect(defaultData, function(finalizedData) { - me.edgesData.add(finalizedData); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for connect does not support two arguments (data,callback)'); - this.moving = true; - this.start(); - } - } - else { - this.edgesData.add(defaultData); - this.moving = true; - this.start(); - } - } - }; + if (keepLocalTime) { + this.add(this._d.getTimezoneOffset(), 'm'); + } + } + return this; + }, - /** - * connect two nodes with a new edge. - * - * @private - */ - exports._editEdge = function(sourceNodeId,targetNodeId) { - if (this.editMode == true) { - var defaultData = {id: this.edgeBeingEdited.id, from:sourceNodeId, to:targetNodeId}; - if (this.triggerFunctions.editEdge) { - if (this.triggerFunctions.editEdge.length == 2) { - var me = this; - this.triggerFunctions.editEdge(defaultData, function(finalizedData) { - me.edgesData.update(finalizedData); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for edit does not support two arguments (data, callback)'); - this.moving = true; - this.start(); - } - } - else { - this.edgesData.update(defaultData); - this.moving = true; - this.start(); - } - } - }; + format : function (inputString) { + var output = formatMoment(this, inputString || moment.defaultFormat); + return this.localeData().postformat(output); + }, - /** - * Create the toolbar to edit the selected node. The label and the color can be changed. Other colors are derived from the chosen color. - * - * @private - */ - exports._editNode = function() { - if (this.triggerFunctions.edit && this.editMode == true) { - var node = this._getSelectedNode(); - var data = {id:node.id, - label: node.label, - group: node.options.group, - shape: node.options.shape, - color: { - background:node.options.color.background, - border:node.options.color.border, - highlight: { - background:node.options.color.highlight.background, - border:node.options.color.highlight.border - } - }}; - if (this.triggerFunctions.edit.length == 2) { - var me = this; - this.triggerFunctions.edit(data, function (finalizedData) { - me.nodesData.update(finalizedData); - me._createManipulatorBar(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for edit does not support two arguments (data, callback)'); - } - } - else { - throw new Error('No edit function has been bound to this button'); - } - }; + add : createAdder(1, 'add'), + subtract : createAdder(-1, 'subtract'), + diff : function (input, units, asFloat) { + var that = makeAs(input, this), + zoneDiff = (this.zone() - that.zone()) * 6e4, + diff, output; + units = normalizeUnits(units); - /** - * delete everything in the selection - * - * @private - */ - exports._deleteSelected = function() { - if (!this._selectionIsEmpty() && this.editMode == true) { - if (!this._clusterInSelection()) { - var selectedNodes = this.getSelectedNodes(); - var selectedEdges = this.getSelectedEdges(); - if (this.triggerFunctions.del) { - var me = this; - var data = {nodes: selectedNodes, edges: selectedEdges}; - if (this.triggerFunctions.del.length = 2) { - this.triggerFunctions.del(data, function (finalizedData) { - me.edgesData.remove(finalizedData.edges); - me.nodesData.remove(finalizedData.nodes); - me._unselectAll(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for delete does not support two arguments (data, callback)') - } - } - else { - this.edgesData.remove(selectedEdges); - this.nodesData.remove(selectedNodes); - this._unselectAll(); - this.moving = true; - this.start(); - } - } - else { - alert(this.constants.locales[this.constants.locale]["deleteClusterError"]); - } - } - }; + 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); + }, -/***/ }, -/* 55 */ -/***/ function(module, exports, __webpack_require__) { + fromNow : function (withoutSuffix) { + return this.from(moment(), withoutSuffix); + }, - var util = __webpack_require__(1); - var Hammer = __webpack_require__(41); + 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)); + }, - exports._cleanNavigation = function() { - // clean up previous navigation items - var wrapper = document.getElementById('network-navigation_wrapper'); - if (wrapper && wrapper.parentNode) { - wrapper.parentNode.removeChild(wrapper); - } - document.onmouseup = null; - }; + isLeapYear : function () { + return isLeapYear(this.year()); + }, - /** - * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation - * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent - * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false. - * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas. - * - * @private - */ - exports._loadNavigationElements = function() { - this._cleanNavigation(); + isDST : function () { + return (this.zone() < this.clone().month(0).zone() || + this.zone() < this.clone().month(5).zone()); + }, - this.navigationDivs = {}; - var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends']; - var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','zoomExtent']; + 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; + } + }, - this.navigationDivs['wrapper'] = document.createElement('div'); - this.navigationDivs['wrapper'].id = 'network-navigation_wrapper'; - this.frame.appendChild(this.navigationDivs['wrapper']); + month : makeAccessor('Month', true), - 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]]); - var hammer = Hammer(this.navigationDivs[navigationDivs[i]], {prevent_default: true}); - hammer.on('touch', me[navigationDivActions[i]].bind(me)); - } - var hammer = Hammer(document, {prevent_default: false}); - hammer.on('release', me._stopMovement.bind(me)); - }; + 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 */ + } - /** - * this stops all movement induced by the navigation buttons - * - * @private - */ - exports._stopMovement = function() { - this._xStopMoving(); - this._yStopMoving(); - this._stopZoom(); - }; + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } else if (units === 'isoWeek') { + this.isoWeekday(1); + } + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } - /** - * move the screen up - * By using the increments, instead of adding a fixed number to the translation, we keep fluent and - * instant movement. The onKeypress event triggers immediately, then pauses, then triggers frequently - * To avoid this behaviour, we do the translation in the start loop. - * - * @private - */ - exports._moveUp = function(event) { - this.yIncrement = this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; + return this; + }, + + endOf: function (units) { + units = normalizeUnits(units); + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + }, + isAfter: function (input, units) { + units = typeof units !== 'undefined' ? units : 'millisecond'; + return +this.clone().startOf(units) > +moment(input).startOf(units); + }, - /** - * move the screen down - * @private - */ - exports._moveDown = function(event) { - this.yIncrement = -this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; + isBefore: function (input, units) { + units = typeof units !== 'undefined' ? units : 'millisecond'; + return +this.clone().startOf(units) < +moment(input).startOf(units); + }, + isSame: function (input, units) { + units = units || 'ms'; + return +this.clone().startOf(units) === +makeAs(input, this).startOf(units); + }, - /** - * move the screen left - * @private - */ - exports._moveLeft = function(event) { - this.xIncrement = this.constants.keyboard.speed.x; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; + 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; + } + ), + 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; + } + ), - /** - * move the screen right - * @private - */ - exports._moveRight = function(event) { - this.xIncrement = -this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; + // 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; + }, + zoneAbbr : function () { + return this._isUTC ? 'UTC' : ''; + }, - /** - * Zoom in, using the same method as the movement. - * @private - */ - exports._zoomIn = function(event) { - this.zoomIncrement = this.constants.keyboard.speed.zoom; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; + 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; + }, - /** - * Zoom out - * @private - */ - exports._zoomOut = function(event) { - this.zoomIncrement = -this.constants.keyboard.speed.zoom; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; + hasAlignedHourOffset : function (input) { + if (!input) { + input = 0; + } + else { + input = moment(input).zone(); + } + return (this.zone() - input) % 60 === 0; + }, - /** - * Stop zooming and unhighlight the zoom controls - * @private - */ - exports._stopZoom = function(event) { - this.zoomIncrement = 0; - event && event.preventDefault(); - }; + daysInMonth : function () { + return daysInMonth(this.year(), this.month()); + }, + 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'); + }, - /** - * Stop moving in the Y direction and unHighlight the up and down - * @private - */ - exports._yStopMoving = function(event) { - this.yIncrement = 0; - event && event.preventDefault(); - }; + quarter : function (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + }, + 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'); + }, - /** - * Stop moving in the X direction and unHighlight left and right. - * @private - */ - exports._xStopMoving = function(event) { - this.xIncrement = 0; - event && event.preventDefault(); - }; + isoWeekYear : function (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + }, + week : function (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + }, -/***/ }, -/* 56 */ -/***/ function(module, exports, __webpack_require__) { + isoWeek : function (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + }, - exports._resetLevels = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.preassignedLevel == false) { - node.level = -1; - node.hierarchyEnumerated = false; - } - } - } - }; + weekday : function (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + }, - /** - * This is the main function to layout the nodes in a hierarchical way. - * It checks if the node details are supplied correctly - * - * @private - */ - exports._setupHierarchicalLayout = function() { - if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) { - if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") { - this.constants.hierarchicalLayout.levelSeparation *= -1; - } - else { - this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation); - } + 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); + }, - if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "LR") { - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.type = "vertical"; - } - } - else { - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.type = "horizontal"; - } - } - // get the size of the largest hubs and check if the user has defined a level for a node. - var hubsize = 0; - var node, nodeId; - var definedLevel = false; - var undefinedLevel = false; + isoWeeksInYear : function () { + return weeksInYear(this.year(), 1, 4); + }, - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level != -1) { - definedLevel = true; - } - else { - undefinedLevel = true; - } - if (hubsize < node.edges.length) { - hubsize = node.edges.length; - } - } - } + weeksInYear : function () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + }, - // if the user defined some levels but not all, alert and run without hierarchical layout - if (undefinedLevel == true && definedLevel == true) { - throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes."); - this.zoomExtent(true,this.constants.clustering.enabled); - if (!this.constants.clustering.enabled) { - this.start(); - } - } - else { - // setup the system to use hierarchical method. - this._changeConstants(); + get : function (units) { + units = normalizeUnits(units); + return this[units](); + }, - // define levels if undefined by the users. Based on hubsize - if (undefinedLevel == true) { - if (this.constants.hierarchicalLayout.layout == "hubsize") { - this._determineLevels(hubsize); - } - else { - this._determineLevelsDirected(); - } + set : function (units, value) { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + this[units](value); + } + return this; + }, - } - // check the distribution of the nodes per level. - var distribution = this._getDistribution(); + // 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; + } + }, - // place the nodes on the canvas. This also stablilizes the system. - this._placeNodesByHierarchy(distribution); + 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; + } + } + ), - // start the simulation. - this.start(); - } - } - }; + localeData : function () { + return this._locale; + } + }); + function rawMonthSetter(mom, value) { + var dayOfMonth; - /** - * This function places the nodes on the canvas based on the hierarchial distribution. - * - * @param {Object} distribution | obtained by the function this._getDistribution() - * @private - */ - exports._placeNodesByHierarchy = function(distribution) { - var nodeId, node; + // 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; + } + } - // start placing all the level 0 nodes first. Then recursively position their branches. - for (var level in distribution) { - if (distribution.hasOwnProperty(level)) { + dayOfMonth = Math.min(mom.date(), + daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } - for (nodeId in distribution[level].nodes) { - if (distribution[level].nodes.hasOwnProperty(nodeId)) { - node = distribution[level].nodes[nodeId]; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - if (node.xFixed) { - node.x = distribution[level].minPos; - node.xFixed = false; + function rawGetter(mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } - distribution[level].minPos += distribution[level].nodeSpacing; - } - } - else { - if (node.yFixed) { - node.y = distribution[level].minPos; - node.yFixed = false; + function rawSetter(mom, unit, value) { + if (unit === 'Month') { + return rawMonthSetter(mom, value); + } else { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } - distribution[level].minPos += distribution[level].nodeSpacing; + 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); } - } - this._placeBranchNodes(node.edges,node.id,distribution,node.level); - } - } + }; } - } - // stabilize the system after positioning. This function calls zoomExtent. - this._stabilize(); - }; + 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)); + + // 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; + // add aliased format methods + moment.fn.toJSON = moment.fn.toISOString; - /** - * This function get the distribution of levels based on hubsize - * - * @returns {Object} - * @private - */ - exports._getDistribution = function() { - var distribution = {}; - var nodeId, node, level; + /************************************ + Duration Prototype + ************************************/ - // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time. - // the fix of X is removed after the x value has been set. - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.xFixed = true; - node.yFixed = true; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - node.y = this.constants.hierarchicalLayout.levelSeparation*node.level; - } - else { - node.x = this.constants.hierarchicalLayout.levelSeparation*node.level; - } - if (distribution[node.level] === undefined) { - distribution[node.level] = {amount: 0, nodes: {}, minPos:0, nodeSpacing:0}; - } - distribution[node.level].amount += 1; - distribution[node.level].nodes[nodeId] = node; - } - } - // determine the largest amount of nodes of all levels - var maxCount = 0; - for (level in distribution) { - if (distribution.hasOwnProperty(level)) { - if (maxCount < distribution[level].amount) { - maxCount = distribution[level].amount; - } + function daysToYears (days) { + // 400 years have 146097 days (taking into account leap year rules) + return days * 400 / 146097; } - } - // set the initial position and spacing of each nodes accordingly - for (level in distribution) { - if (distribution.hasOwnProperty(level)) { - distribution[level].nodeSpacing = (maxCount + 1) * this.constants.hierarchicalLayout.nodeSpacing; - distribution[level].nodeSpacing /= (distribution[level].amount + 1); - distribution[level].minPos = distribution[level].nodeSpacing - (0.5 * (distribution[level].amount + 1) * distribution[level].nodeSpacing); + function yearsToDays (years) { + // years * 365 + absRound(years / 4) - + // absRound(years / 100) + absRound(years / 400); + return years * 146097 / 400; } - } - return distribution; - }; + 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; - /** - * this function allocates nodes in levels based on the recursive branching from the largest hubs. - * - * @param hubsize - * @private - */ - exports._determineLevels = function(hubsize) { - var nodeId, node; + seconds = absRound(milliseconds / 1000); + data.seconds = seconds % 60; - // determine hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.edges.length == hubsize) { - node.level = 0; - } - } - } + minutes = absRound(seconds / 60); + data.minutes = minutes % 60; - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level == 0) { - this._setLevel(1,node.edges,node.id); - } - } - } - }; + hours = absRound(minutes / 60); + data.hours = hours % 24; - /** - * this function allocates nodes in levels based on the recursive branching from the largest hubs. - * - * @param hubsize - * @private - */ - exports._determineLevelsDirected = function() { - var nodeId, node; + days += absRound(hours / 24); - // set first node to source - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.nodes[nodeId].level = 10000; - break; - } - } + // Accurately convert days to years, assume start from year 0. + years = absRound(daysToYears(days)); + days -= absRound(yearsToDays(years)); - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level == 10000) { - this._setLevelDirected(10000,node.edges,node.id); - } - } - } + // 30 days to a month + // TODO (iskren): Use anchor date (like 1st Jan) to compute this. + months += absRound(days / 30); + days %= 30; + // 12 months -> 1 year + years += absRound(months / 12); + months %= 12; - // branch from hubs - var minLevel = 10000; - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - minLevel = node.level < minLevel ? node.level : minLevel; - } - } + data.days = days; + data.months = months; + data.years = years; + }, - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.level -= minLevel; - } - } - }; + abs : function () { + 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); - /** - * Since hierarchical layout does not support: - * - smooth curves (based on the physics), - * - clustering (based on dynamic node counts) - * - * We disable both features so there will be no problems. - * - * @private - */ - exports._changeConstants = function() { - this.constants.clustering.enabled = false; - this.constants.physics.barnesHut.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = true; - this._loadSelectedForceSolver(); - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.dynamic = false; - } - this._configureSmoothCurves(); - }; + return this; + }, + weeks : function () { + return absRound(this.days() / 7); + }, - /** - * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes - * on a X position that ensures there will be no overlap. - * - * @param edges - * @param parentId - * @param distribution - * @param parentLevel - * @private - */ - exports._placeBranchNodes = function(edges, parentId, distribution, parentLevel) { - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - } - else { - childNode = edges[i].to; - } + valueOf : function () { + return this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6; + }, - // if a node is conneceted to another node on the same level (or higher (means lower level))!, this is not handled here. - var nodeMoved = false; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - if (childNode.xFixed && childNode.level > parentLevel) { - childNode.xFixed = false; - childNode.x = distribution[childNode.level].minPos; - nodeMoved = true; - } - } - else { - if (childNode.yFixed && childNode.level > parentLevel) { - childNode.yFixed = false; - childNode.y = distribution[childNode.level].minPos; - nodeMoved = true; - } - } + humanize : function (withSuffix) { + var output = relativeTime(this, !withSuffix, this.localeData()); - if (nodeMoved == true) { - distribution[childNode.level].minPos += distribution[childNode.level].nodeSpacing; - if (childNode.edges.length > 1) { - this._placeBranchNodes(childNode.edges,childNode.id,distribution,childNode.level); - } - } - } - }; + if (withSuffix) { + output = this.localeData().pastFuture(+this, output); + } + return this.localeData().postformat(output); + }, - /** - * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. - * - * @param level - * @param edges - * @param parentId - * @private - */ - exports._setLevel = function(level, edges, parentId) { - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - } - else { - childNode = edges[i].to; - } - if (childNode.level == -1 || childNode.level > level) { - childNode.level = level; - if (childNode.edges.length > 1) { - this._setLevel(level+1, childNode.edges, childNode.id); - } - } - } - }; + 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; - /** - * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. - * - * @param level - * @param edges - * @param parentId - * @private - */ - exports._setLevelDirected = function(level, edges, parentId) { - this.nodes[parentId].hierarchyEnumerated = true; - for (var i = 0; i < edges.length; i++) { - var childNode = null; - var direction = 1; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - direction = -1; - } - else { - childNode = edges[i].to; - } - if (childNode.level == -1) { - childNode.level = level + direction; - } - } + this._bubble(); - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) {childNode = edges[i].from;} - else {childNode = edges[i].to;} - if (childNode.edges.length > 1 && childNode.hierarchyEnumerated === false) { - this._setLevelDirected(childNode.level, childNode.edges, childNode.id); - } - } - }; + return this; + }, + subtract : function (input, val) { + var dur = moment.duration(input, val); - /** - * Unfix nodes - * - * @private - */ - exports._restoreNodes = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.nodes[nodeId].xFixed = false; - this.nodes[nodeId].yFixed = false; - } - } - }; + this._milliseconds -= dur._milliseconds; + this._days -= dur._days; + this._months -= dur._months; + this._bubble(); -/***/ }, -/* 57 */ -/***/ function(module, exports, __webpack_require__) { + return this; + }, - var util = __webpack_require__(1); - var RepulsionMixin = __webpack_require__(60); - var HierarchialRepulsionMixin = __webpack_require__(61); - var BarnesHutMixin = __webpack_require__(62); + get : function (units) { + units = normalizeUnits(units); + return this[units.toLowerCase() + 's'](); + }, - /** - * Toggling barnes Hut calculation on and off. - * - * @private - */ - exports._toggleBarnesHut = function () { - this.constants.physics.barnesHut.enabled = !this.constants.physics.barnesHut.enabled; - this._loadSelectedForceSolver(); - this.moving = true; - this.start(); - }; + as : function (units) { + var days, months; + units = normalizeUnits(units); + 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); + } + } + }, - /** - * This loads the node force solver based on the barnes hut or repulsion algorithm - * - * @private - */ - exports._loadSelectedForceSolver = function () { - // this overloads the this._calculateNodeForces - if (this.constants.physics.barnesHut.enabled == true) { - this._clearMixin(RepulsionMixin); - this._clearMixin(HierarchialRepulsionMixin); + lang : moment.fn.lang, + locale : moment.fn.locale, - this.constants.physics.centralGravity = this.constants.physics.barnesHut.centralGravity; - this.constants.physics.springLength = this.constants.physics.barnesHut.springLength; - this.constants.physics.springConstant = this.constants.physics.barnesHut.springConstant; - this.constants.physics.damping = this.constants.physics.barnesHut.damping; + toIsoString : deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead ' + + '(notice the capitals)', + function () { + return this.toISOString(); + } + ), - this._loadMixin(BarnesHutMixin); - } - else if (this.constants.physics.hierarchicalRepulsion.enabled == true) { - this._clearMixin(BarnesHutMixin); - this._clearMixin(RepulsionMixin); + 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); - this.constants.physics.centralGravity = this.constants.physics.hierarchicalRepulsion.centralGravity; - this.constants.physics.springLength = this.constants.physics.hierarchicalRepulsion.springLength; - this.constants.physics.springConstant = this.constants.physics.hierarchicalRepulsion.springConstant; - this.constants.physics.damping = this.constants.physics.hierarchicalRepulsion.damping; + if (!this.asSeconds()) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } - this._loadMixin(HierarchialRepulsionMixin); - } - else { - this._clearMixin(BarnesHutMixin); - this._clearMixin(HierarchialRepulsionMixin); - this.barnesHutTree = undefined; + 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' : ''); + }, - this.constants.physics.centralGravity = this.constants.physics.repulsion.centralGravity; - this.constants.physics.springLength = this.constants.physics.repulsion.springLength; - this.constants.physics.springConstant = this.constants.physics.repulsion.springConstant; - this.constants.physics.damping = this.constants.physics.repulsion.damping; + localeData : function () { + return this._locale; + } + }); - this._loadMixin(RepulsionMixin); - } - }; + moment.duration.fn.toString = moment.duration.fn.toISOString; - /** - * Before calculating the forces, we check if we need to cluster to keep up performance and we check - * if there is more than one node. If it is just one node, we dont calculate anything. - * - * @private - */ - exports._initializeForceCalculation = function () { - // stop calculation if there is only one node - if (this.nodeIndices.length == 1) { - this.nodes[this.nodeIndices[0]]._setForce(0, 0); - } - else { - // if there are too many nodes on screen, we cluster without repositioning - if (this.nodeIndices.length > this.constants.clustering.clusterThreshold && this.constants.clustering.enabled == true) { - this.clusterToFit(this.constants.clustering.reduceToNodes, false); + function makeDurationGetter(name) { + moment.duration.fn[name] = function () { + return this._data[name]; + }; } - // we now start the force calculation - this._calculateForces(); - } - }; + for (i in unitMillisecondFactors) { + if (hasOwnProp(unitMillisecondFactors, i)) { + makeDurationGetter(i.toLowerCase()); + } + } + 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'); + }; - /** - * Calculate the external forces acting on the nodes - * Forces are caused by: edges, repulsing forces between nodes, gravity - * @private - */ - exports._calculateForces = function () { - // Gravity is required to keep separated groups from floating off - // the forces are reset to zero in this loop by using _setForce instead - // of _addForce + /************************************ + Default Locale + ************************************/ - this._calculateGravitationalForces(); - this._calculateNodeForces(); - if (this.constants.physics.springConstant > 0) { - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - this._calculateSpringForcesWithSupport(); - } - else { - if (this.constants.physics.hierarchicalRepulsion.enabled == true) { - this._calculateHierarchicalSpringForces(); - } - else { - this._calculateSpringForces(); - } - } - } - }; + // 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; + } + }); + /* EMBED_LOCALES */ - /** - * Smooth curves are created by adding invisible nodes in the center of the edges. These nodes are also - * handled in the calculateForces function. We then use a quadratic curve with the center node as control. - * This function joins the datanodes and invisible (called support) nodes into one object. - * We do this so we do not contaminate this.nodes with the support nodes. - * - * @private - */ - exports._updateCalculationNodes = function () { - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - this.calculationNodes = {}; - this.calculationNodeIndices = []; + /************************************ + Exposing Moment + ************************************/ - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.calculationNodes[nodeId] = this.nodes[nodeId]; - } - } - var supportNodes = this.sectors['support']['nodes']; - for (var supportNodeId in supportNodes) { - if (supportNodes.hasOwnProperty(supportNodeId)) { - if (this.edges.hasOwnProperty(supportNodes[supportNodeId].parentEdgeId)) { - this.calculationNodes[supportNodeId] = supportNodes[supportNodeId]; + function makeGlobal(shouldDeprecate) { + /*global ender:false */ + if (typeof ender !== 'undefined') { + return; } - else { - supportNodes[supportNodeId]._setForce(0, 0); + 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; } - } } - for (var idx in this.calculationNodes) { - if (this.calculationNodes.hasOwnProperty(idx)) { - this.calculationNodeIndices.push(idx); - } + // 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(); } - } - else { - this.calculationNodes = this.nodes; - this.calculationNodeIndices = this.nodeIndices; - } - }; + }).call(this); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(64)(module))) +/***/ }, +/* 53 */ +/***/ function(module, exports, __webpack_require__) { /** - * this function applies the central gravity effect to keep groups from floating off + * Creation of the ClusterMixin var. * - * @private + * This contains all the functions the Network object can use to employ clustering */ - exports._calculateGravitationalForces = function () { - var dx, dy, distance, node, i; - var nodes = this.calculationNodes; - var gravity = this.constants.physics.centralGravity; - var gravityForce = 0; - - for (i = 0; i < this.calculationNodeIndices.length; i++) { - node = nodes[this.calculationNodeIndices[i]]; - node.damping = this.constants.physics.damping; // possibly add function to alter damping properties of clusters. - // gravity does not apply when we are in a pocket sector - if (this._sector() == "default" && gravity != 0) { - dx = -node.x; - dy = -node.y; - distance = Math.sqrt(dx * dx + dy * dy); - - gravityForce = (distance == 0) ? 0 : (gravity / distance); - node.fx = dx * gravityForce; - node.fy = dy * gravityForce; - } - else { - node.fx = 0; - node.fy = 0; - } - } - }; + /** + * This is only called in the constructor of the network object + * + */ + exports.startWithClustering = function() { + // cluster if the data set is big + this.clusterToFit(this.constants.clustering.initialMaxNodes, true); + // updates the lables after clustering + this.updateLabels(); + // this is called here because if clusterin is disabled, the start and stabilize are called in + // the setData function. + if (this.stabilize) { + this._stabilize(); + } + this.start(); + }; /** - * this function calculates the effects of the springs in the case of unsmooth curves. + * This function clusters until the initialMaxNodes has been reached * - * @private + * @param {Number} maxNumberOfNodes + * @param {Boolean} reposition */ - exports._calculateSpringForces = function () { - var edgeLength, edge, edgeId; - var dx, dy, fx, fy, springForce, distance; - var edges = this.edges; - - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - 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.physics.springLength; - // this implies that the edges between big clusters are longer - edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; - - dx = (edge.from.x - edge.to.x); - dy = (edge.from.y - edge.to.y); - distance = Math.sqrt(dx * dx + dy * dy); - - if (distance == 0) { - distance = 0.01; - } - - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - - fx = dx * springForce; - fy = dy * springForce; + exports.clusterToFit = function(maxNumberOfNodes, reposition) { + var numberOfNodes = this.nodeIndices.length; - edge.from.fx += fx; - edge.from.fy += fy; - edge.to.fx -= fx; - edge.to.fy -= fy; - } - } - } - } - }; + var maxLevels = 50; + var level = 0; + // we first cluster the hubs, then we pull in the outliers, repeat + while (numberOfNodes > maxNumberOfNodes && level < maxLevels) { + if (level % 3 == 0) { + this.forceAggregateHubs(true); + this.normalizeClusterLevels(); + } + else { + this.increaseClusterLevel(); // this also includes a cluster normalization + } + numberOfNodes = this.nodeIndices.length; + level += 1; + } + // after the clustering we reposition the nodes to reduce the initial chaos + if (level > 0 && reposition == true) { + this.repositionNodes(); + } + this._updateCalculationNodes(); + }; /** - * This function calculates the springforces on the nodes, accounting for the support nodes. + * This function can be called to open up a specific cluster. It is only called by + * It will unpack the cluster back one level. * - * @private + * @param node | Node object: cluster to open. */ - exports._calculateSpringForcesWithSupport = function () { - var edgeLength, edge, edgeId, combinedClusterSize; - var edges = this.edges; + exports.openCluster = function(node) { + var isMovingBeforeClustering = this.moving; + if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) && + !(this._sector() == "default" && this.nodeIndices.length == 1)) { + // this loads a new sector, loads the nodes and edges and nodeIndices of it. + this._addSector(node); + var level = 0; - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - if (edge.connected) { - // only calculate forces if nodes are in the same sector - if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - if (edge.via != null) { - var node1 = edge.to; - var node2 = edge.via; - var node3 = edge.from; + // we decluster until we reach a decent number of nodes + while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) { + this.decreaseClusterLevel(); + level += 1; + } - edgeLength = edge.physics.springLength; + } + else { + this._expandClusterNode(node,false,true); - combinedClusterSize = node1.clusterSize + node3.clusterSize - 2; + // update the index list, dynamic edges and labels + this._updateNodeIndexList(); + this._updateDynamicEdges(); + this._updateCalculationNodes(); + this.updateLabels(); + } - // this implies that the edges between big clusters are longer - edgeLength += combinedClusterSize * this.constants.clustering.edgeGrowth; - this._calculateSpringForce(node1, node2, 0.5 * edgeLength); - this._calculateSpringForce(node2, node3, 0.5 * edgeLength); - } - } - } - } + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); } }; /** - * This is the code actually performing the calculation for the function above. It is split out to avoid repetition. - * - * @param node1 - * @param node2 - * @param edgeLength - * @private + * This calls the updateClustes with default arguments */ - exports._calculateSpringForce = function (node1, node2, edgeLength) { - var dx, dy, fx, fy, springForce, distance; - - dx = (node1.x - node2.x); - dy = (node1.y - node2.y); - distance = Math.sqrt(dx * dx + dy * dy); - - if (distance == 0) { - distance = 0.01; + exports.updateClustersDefault = function() { + if (this.constants.clustering.enabled == true) { + this.updateClusters(0,false,false); } - - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - - fx = dx * springForce; - fy = dy * springForce; - - node1.fx += fx; - node1.fy += fy; - node2.fx -= fx; - node2.fy -= fy; }; /** - * Load the HTML for the physics config and bind it - * @private + * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will + * be clustered with their connected node. This can be repeated as many times as needed. + * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets. */ - exports._loadPhysicsConfiguration = function () { - if (this.physicsConfiguration === undefined) { - this.backupConstants = {}; - util.deepExtend(this.backupConstants,this.constants); - - var hierarchicalLayoutDirections = ["LR", "RL", "UD", "DU"]; - this.physicsConfiguration = document.createElement('div'); - this.physicsConfiguration.className = "PhysicsConfiguration"; - this.physicsConfiguration.innerHTML = '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
Simulation 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); + exports.increaseClusterLevel = function() { + this.updateClusters(-1,false,true); + }; - var rangeElement; - rangeElement = document.getElementById('graph_BH_gc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_gc', -1, "physics_barnesHut_gravitationalConstant"); - rangeElement = document.getElementById('graph_BH_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_BH_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_BH_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_BH_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_damp', 1, "physics_damping"); - rangeElement = document.getElementById('graph_R_nd'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_nd', 1, "physics_repulsion_nodeDistance"); - rangeElement = document.getElementById('graph_R_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_R_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_R_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_R_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_damp', 1, "physics_damping"); + /** + * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will + * be unpacked if they are a cluster. This can be repeated as many times as needed. + * This can be called externally (by a key-bind for instance) to look into clusters without zooming. + */ + exports.decreaseClusterLevel = function() { + this.updateClusters(1,false,true); + }; - rangeElement = document.getElementById('graph_H_nd'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); - rangeElement = document.getElementById('graph_H_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_H_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_H_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_H_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_damp', 1, "physics_damping"); - rangeElement = document.getElementById('graph_H_direction'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_direction', hierarchicalLayoutDirections, "hierarchicalLayout_direction"); - rangeElement = document.getElementById('graph_H_levsep'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_levsep', 1, "hierarchicalLayout_levelSeparation"); - rangeElement = document.getElementById('graph_H_nspac'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nspac', 1, "hierarchicalLayout_nodeSpacing"); - var radioButton1 = document.getElementById("graph_physicsMethod1"); - var radioButton2 = document.getElementById("graph_physicsMethod2"); - var radioButton3 = document.getElementById("graph_physicsMethod3"); - radioButton2.checked = true; - if (this.constants.physics.barnesHut.enabled) { - radioButton1.checked = true; - } - if (this.constants.hierarchicalLayout.enabled) { - radioButton3.checked = true; - } + /** + * This is the main clustering function. It clusters and declusters on zoom or forced + * This function clusters on zoom, it can be called with a predefined zoom direction + * If out, check if we can form clusters, if in, check if we can open clusters. + * This function is only called from _zoom() + * + * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn + * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters + * @param {Boolean} force | enabled or disable forcing + * @param {Boolean} doNotStart | if true do not call start + * + */ + exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) { + var isMovingBeforeClustering = this.moving; + var amountOfNodes = this.nodeIndices.length; - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - var graph_repositionNodes = document.getElementById("graph_repositionNodes"); - var graph_generateOptions = document.getElementById("graph_generateOptions"); + // on zoom out collapse the sector if the scale is at the level the sector was made + if (this.previousScale > this.scale && zoomDirection == 0) { + this._collapseSector(); + } - graph_toggleSmooth.onclick = graphToggleSmoothCurves.bind(this); - graph_repositionNodes.onclick = graphRepositionNodes.bind(this); - graph_generateOptions.onclick = graphGenerateOptions.bind(this); - if (this.constants.smoothCurves == true && this.constants.dynamicSmoothCurves == false) { - graph_toggleSmooth.style.background = "#A4FF56"; + // check if we zoom in or out + if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out + // forming clusters when forced pulls outliers in. When not forced, the edge length of the + // outer nodes determines if it is being clustered + this._formClusters(force); + } + else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in + if (force == true) { + // _openClusters checks for each node if the formationScale of the cluster is smaller than + // the current scale and if so, declusters. When forced, all clusters are reduced by one step + this._openClusters(recursive,force); } else { - graph_toggleSmooth.style.background = "#FF8532"; + // if a cluster takes up a set percentage of the active window + this._openClustersBySize(); } + } + this._updateNodeIndexList(); + // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs + if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) { + this._aggregateHubs(force); + this._updateNodeIndexList(); + } - switchConfigurations.apply(this); + // we now reduce chains. + if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out + this.handleChains(); + this._updateNodeIndexList(); + } - radioButton1.onchange = switchConfigurations.bind(this); - radioButton2.onchange = switchConfigurations.bind(this); - radioButton3.onchange = switchConfigurations.bind(this); + this.previousScale = this.scale; + + // rest of the update the index list, dynamic edges and labels + this._updateDynamicEdges(); + this.updateLabels(); + + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place + this.clusterSession += 1; + // if clusters have been made, we normalize the cluster level + this.normalizeClusterLevels(); + } + + if (doNotStart == false || doNotStart === undefined) { + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); + } } + + this._updateCalculationNodes(); }; /** - * This overwrites the this.constants. - * - * @param constantsVariableName - * @param value - * @private + * This function handles the chains. It is called on every updateClusters(). */ - exports._overWriteGraphConstants = function (constantsVariableName, value) { - var nameArray = constantsVariableName.split("_"); - if (nameArray.length == 1) { - this.constants[nameArray[0]] = value; - } - else if (nameArray.length == 2) { - this.constants[nameArray[0]][nameArray[1]] = value; - } - else if (nameArray.length == 3) { - this.constants[nameArray[0]][nameArray[1]][nameArray[2]] = value; + exports.handleChains = function() { + // after clustering we check how many chains there are + var chainPercentage = this._getChainFraction(); + if (chainPercentage > this.constants.clustering.chainThreshold) { + this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage) + } }; - /** - * this function is bound to the toggle smooth curves button. That is also why it is not in the prototype. + * this functions starts clustering by hubs + * The minimum hub threshold is set globally + * + * @private */ - function graphToggleSmoothCurves () { - this.constants.smoothCurves.enabled = !this.constants.smoothCurves.enabled; - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} - else {graph_toggleSmooth.style.background = "#FF8532";} + exports._aggregateHubs = function(force) { + this._getHubSize(); + this._formClustersByHub(force,false); + }; - this._configureSmoothCurves(false); - } /** - * this function is used to scramble the nodes + * This function is fired by keypress. It forces hubs to form. * */ - function graphRepositionNodes () { - for (var nodeId in this.calculationNodes) { - if (this.calculationNodes.hasOwnProperty(nodeId)) { - this.calculationNodes[nodeId].vx = 0; this.calculationNodes[nodeId].vy = 0; - this.calculationNodes[nodeId].fx = 0; this.calculationNodes[nodeId].fy = 0; - } - } - if (this.constants.hierarchicalLayout.enabled == true) { - this._setupHierarchicalLayout(); - showValueOfRange.call(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); - showValueOfRange.call(this, 'graph_H_cg', 1, "physics_centralGravity"); - showValueOfRange.call(this, 'graph_H_sc', 1, "physics_springConstant"); - showValueOfRange.call(this, 'graph_H_sl', 1, "physics_springLength"); - showValueOfRange.call(this, 'graph_H_damp', 1, "physics_damping"); + exports.forceAggregateHubs = function(doNotStart) { + var isMovingBeforeClustering = this.moving; + var amountOfNodes = this.nodeIndices.length; + + this._aggregateHubs(true); + + // update the index list, dynamic edges and labels + this._updateNodeIndexList(); + this._updateDynamicEdges(); + this.updateLabels(); + + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length != amountOfNodes) { + this.clusterSession += 1; } - else { - this.repositionNodes(); + + if (doNotStart == false || doNotStart === undefined) { + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); + } } - this.moving = true; - this.start(); - } + }; /** - * this is used to generate an options file from the playing with physics system. + * If a cluster takes up more than a set percentage of the screen, open the cluster + * + * @private */ - function graphGenerateOptions () { - var options = "No options are required, default values used."; - var optionsSpecific = []; - var radioButton1 = document.getElementById("graph_physicsMethod1"); - var radioButton2 = document.getElementById("graph_physicsMethod2"); - if (radioButton1.checked == true) { - if (this.constants.physics.barnesHut.gravitationalConstant != this.backupConstants.physics.barnesHut.gravitationalConstant) {optionsSpecific.push("gravitationalConstant: " + this.constants.physics.barnesHut.gravitationalConstant);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.barnesHut.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.barnesHut.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.barnesHut.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.barnesHut.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options = "var options = {"; - options += "physics: {barnesHut: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " - } - } - options += '}}' - } - if (this.constants.smoothCurves.enabled != this.backupConstants.smoothCurves.enabled) { - if (optionsSpecific.length == 0) {options = "var options = {";} - else {options += ", "} - options += "smoothCurves: " + this.constants.smoothCurves.enabled; - } - if (options != "No options are required, default values used.") { - options += '};' - } - } - else if (radioButton2.checked == true) { - options = "var options = {"; - options += "physics: {barnesHut: {enabled: false}"; - if (this.constants.physics.repulsion.nodeDistance != this.backupConstants.physics.repulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.repulsion.nodeDistance);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.repulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.repulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.repulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.repulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options += ", repulsion: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " - } - } - options += '}}' - } - if (optionsSpecific.length == 0) {options += "}"} - if (this.constants.smoothCurves != this.backupConstants.smoothCurves) { - options += ", smoothCurves: " + this.constants.smoothCurves; - } - options += '};' - } - else { - options = "var options = {"; - if (this.constants.physics.hierarchicalRepulsion.nodeDistance != this.backupConstants.physics.hierarchicalRepulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.hierarchicalRepulsion.nodeDistance);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.hierarchicalRepulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.hierarchicalRepulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.hierarchicalRepulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.hierarchicalRepulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options += "physics: {hierarchicalRepulsion: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", "; - } - } - options += '}},'; - } - options += 'hierarchicalLayout: {'; - optionsSpecific = []; - if (this.constants.hierarchicalLayout.direction != this.backupConstants.hierarchicalLayout.direction) {optionsSpecific.push("direction: " + this.constants.hierarchicalLayout.direction);} - if (Math.abs(this.constants.hierarchicalLayout.levelSeparation) != this.backupConstants.hierarchicalLayout.levelSeparation) {optionsSpecific.push("levelSeparation: " + this.constants.hierarchicalLayout.levelSeparation);} - if (this.constants.hierarchicalLayout.nodeSpacing != this.backupConstants.hierarchicalLayout.nodeSpacing) {optionsSpecific.push("nodeSpacing: " + this.constants.hierarchicalLayout.nodeSpacing);} - if (optionsSpecific.length != 0) { - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " - } - } - options += '}' - } - else { - options += "enabled:true}"; + exports._openClustersBySize = function() { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.inView() == true) { + if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || + (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { + this.openCluster(node); + } + } } - options += '};' } + }; - this.optionsDiv.innerHTML = options; - } - /** - * this is used to switch between barnesHut, repulsion and hierarchical. + * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it + * has to be opened based on the current zoom level. * + * @private */ - function switchConfigurations () { - var ids = ["graph_BH_table", "graph_R_table", "graph_H_table"]; - var radioButton = document.querySelector('input[name="graph_physicsMethod"]:checked').value; - var tableId = "graph_" + radioButton + "_table"; - var table = document.getElementById(tableId); - table.style.display = "block"; - for (var i = 0; i < ids.length; i++) { - if (ids[i] != tableId) { - table = document.getElementById(ids[i]); - table.style.display = "none"; - } - } - this._restoreNodes(); - if (radioButton == "R") { - this.constants.hierarchicalLayout.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = false; - this.constants.physics.barnesHut.enabled = false; - } - else if (radioButton == "H") { - if (this.constants.hierarchicalLayout.enabled == false) { - this.constants.hierarchicalLayout.enabled = true; - this.constants.physics.hierarchicalRepulsion.enabled = true; - this.constants.physics.barnesHut.enabled = false; - this.constants.smoothCurves.enabled = false; - this._setupHierarchicalLayout(); - } - } - else { - this.constants.hierarchicalLayout.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = false; - this.constants.physics.barnesHut.enabled = true; + exports._openClusters = function(recursive,force) { + for (var i = 0; i < this.nodeIndices.length; i++) { + var node = this.nodes[this.nodeIndices[i]]; + this._expandClusterNode(node,recursive,force); + this._updateCalculationNodes(); } - this._loadSelectedForceSolver(); - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} - else {graph_toggleSmooth.style.background = "#FF8532";} - this.moving = true; - this.start(); - } - + }; /** - * this generates the ranges depending on the iniital values. + * This function checks if a node has to be opened. This is done by checking the zoom level. + * If the node contains child nodes, this function is recursively called on the child nodes as well. + * This recursive behaviour is optional and can be set by the recursive argument. * - * @param id - * @param map - * @param constantsVariableName + * @param {Node} parentNode | to check for cluster and expand + * @param {Boolean} recursive | enabled or disable recursive calling + * @param {Boolean} force | enabled or disable forcing + * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released + * @private */ - function showValueOfRange (id,map,constantsVariableName) { - var valueId = id + "_value"; - var rangeValue = document.getElementById(id).value; + exports._expandClusterNode = function(parentNode, recursive, force, openAll) { + // first check if node is a cluster + if (parentNode.clusterSize > 1) { + // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20 + if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) { + openAll = true; + } + recursive = openAll ? true : recursive; - if (map instanceof Array) { - document.getElementById(valueId).value = map[parseInt(rangeValue)]; - this._overWriteGraphConstants(constantsVariableName,map[parseInt(rangeValue)]); - } - else { - document.getElementById(valueId).value = parseInt(map) * parseFloat(rangeValue); - this._overWriteGraphConstants(constantsVariableName, parseInt(map) * parseFloat(rangeValue)); - } + // if the last child has been added on a smaller scale than current scale decluster + if (parentNode.formationScale < this.scale || force == true) { + // we will check if any of the contained child nodes should be removed from the cluster + for (var containedNodeId in parentNode.containedNodes) { + if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) { + var childNode = parentNode.containedNodes[containedNodeId]; - if (constantsVariableName == "hierarchicalLayout_direction" || - constantsVariableName == "hierarchicalLayout_levelSeparation" || - constantsVariableName == "hierarchicalLayout_nodeSpacing") { - this._setupHierarchicalLayout(); + // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that + // the largest cluster is the one that comes from outside + if (force == true) { + if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1] + || openAll) { + this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); + } + } + else { + if (this._nodeInActiveArea(parentNode)) { + this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); + } + } + } + } + } } - this.moving = true; - this.start(); - } - - -/***/ }, -/* 58 */ -/***/ function(module, exports, __webpack_require__) { + }; - var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {//! moment.js - //! version : 2.8.2 - //! authors : Tim Wood, Iskren Chernev, Moment.js contributors - //! license : MIT - //! momentjs.com + /** + * ONLY CALLED FROM _expandClusterNode + * + * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove + * the child node from the parent contained_node object and put it back into the global nodes object. + * The same holds for the edge that was connected to the child node. It is moved back into the global edges object. + * + * @param {Node} parentNode | the parent node + * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node + * @param {Boolean} recursive | This will also check if the child needs to be expanded. + * With force and recursive both true, the entire cluster is unpacked + * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent + * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released + * @private + */ + exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) { + var childNode = parentNode.containedNodes[containedNodeId]; - (function (undefined) { - /************************************ - Constants - ************************************/ + // if child node has been added on smaller scale than current, kick out + if (childNode.formationScale < this.scale || force == true) { + // unselect all selected items + this._unselectAll(); - var moment, - VERSION = '2.8.2', - // the global-scope this is NOT the global object in Node.js - globalScope = typeof global !== 'undefined' ? global : this, - oldGlobalMoment, - round = Math.round, - hasOwnProperty = Object.prototype.hasOwnProperty, - i, + // put the child node back in the global nodes object + this.nodes[containedNodeId] = childNode; - YEAR = 0, - MONTH = 1, - DATE = 2, - HOUR = 3, - MINUTE = 4, - SECOND = 5, - MILLISECOND = 6, + // release the contained edges from this childNode back into the global edges + this._releaseContainedEdges(parentNode,childNode); - // internal storage for locale config files - locales = {}, + // reconnect rerouted edges to the childNode + this._connectEdgeBackToChild(parentNode,childNode); - // extra moment internal properties (plugins register props here) - momentProperties = [], + // validate all edges in dynamicEdges + this._validateEdges(parentNode); - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports), + // undo the changes from the clustering operation on the parent node + parentNode.options.mass -= childNode.options.mass; + parentNode.clusterSize -= childNode.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; - // ASP.NET json date format regex - aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, - aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, + // place the child node near the parent, not at the exact same location to avoid chaos in the system + childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random()); + childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random()); - // 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)$/, + // remove node from the list + delete parentNode.containedNodes[containedNodeId]; - // 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, + // check if there are other childs with this clusterSession in the parent. + var othersPresent = false; + for (var childNodeId in parentNode.containedNodes) { + if (parentNode.containedNodes.hasOwnProperty(childNodeId)) { + if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) { + othersPresent = true; + break; + } + } + } + // if there are no others, remove the cluster session from the list + if (othersPresent == false) { + parentNode.clusterSessions.pop(); + } - // 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}/, + this._repositionBezierNodes(childNode); + // this._repositionBezierNodes(parentNode); - //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 + // remove the clusterSession from the child node + childNode.clusterSession = 0; - // 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)?)?$/, + // recalculate the size of the node on the next time the node is rendered + parentNode.clearSizeCache(); - isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', + // restart the simulation to reorganise all nodes + this.moving = true; + } - 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}/] - ], + // check if a further expansion step is possible if recursivity is enabled + if (recursive == true) { + this._expandClusterNode(childNode,recursive,force,openAll); + } + }; - // 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/] - ], - // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30'] - parseTimezoneChunker = /([\+\-]|\d\d)/gi, + /** + * position the bezier nodes at the center of the edges + * + * @param node + * @private + */ + exports._repositionBezierNodes = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + node.dynamicEdges[i].positionBezierNode(); + } + }; - // 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 - }, - 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' - }, + /** + * This function checks if any nodes at the end of their trees have edges below a threshold length + * This function is called only from updateClusters() + * forceLevelCollapse ignores the length of the edge and collapses one level + * This means that a node with only one edge will be clustered with its connected node + * + * @private + * @param {Boolean} force + */ + exports._formClusters = function(force) { + if (force == false) { + this._formClustersByZoom(); + } + else { + this._forceClustersByZoom(); + } + }; - camelFunctions = { - dayofyear : 'dayOfYear', - isoweekday : 'isoWeekday', - isoweek : 'isoWeek', - weekyear : 'weekYear', - isoweekyear : 'isoWeekYear' - }, - // format function strings - formatFunctions = {}, + /** + * This function handles the clustering by zooming out, this is based on a minimum edge distance + * + * @private + */ + exports._formClustersByZoom = function() { + var dx,dy,length, + minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - // 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 - }, + // check if any edges are shorter than minLength and start the clustering + // the clustering favours the node with the larger mass + for (var edgeId in this.edges) { + if (this.edges.hasOwnProperty(edgeId)) { + var edge = this.edges[edgeId]; + if (edge.connected) { + if (edge.toId != edge.fromId) { + dx = (edge.to.x - edge.from.x); + dy = (edge.to.y - edge.from.y); + length = Math.sqrt(dx * dx + dy * dy); - // tokens to ordinalize and pad - ordinalizeTokens = 'DDD w W M D d'.split(' '), - paddedTokens = 'M D H h m s w W'.split(' '), - 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 = '-'; - } - 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(); + if (length < minLength) { + // first check which node is larger + var parentNode = edge.from; + var childNode = edge.to; + if (edge.to.options.mass > edge.from.options.mass) { + parentNode = edge.to; + childNode = edge.from; } - }, - deprecations = {}, + if (childNode.dynamicEdgesLength == 1) { + this._addToCluster(parentNode,childNode,false); + } + else if (parentNode.dynamicEdgesLength == 1) { + this._addToCluster(childNode,parentNode,false); + } + } + } + } + } + } + }; + + /** + * This function forces the network to cluster all nodes with only one connecting edge to their + * connected node. + * + * @private + */ + exports._forceClustersByZoom = function() { + for (var nodeId in this.nodes) { + // another node could have absorbed this child. + if (this.nodes.hasOwnProperty(nodeId)) { + var childNode = this.nodes[nodeId]; - lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; + // the edges can be swallowed by another decrease + if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) { + var edge = childNode.dynamicEdges[0]; + var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId]; - // 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'); + // group to the largest node + if (childNode.id != parentNode.id) { + if (parentNode.options.mass > childNode.options.mass) { + this._addToCluster(parentNode,childNode,true); + } + else { + this._addToCluster(childNode,parentNode,true); + } } + } } + } + }; - function hasOwnProp(a, b) { - return hasOwnProperty.call(a, b); + + /** + * To keep the nodes of roughly equal size we normalize the cluster levels. + * This function clusters a node to its smallest connected neighbour. + * + * @param node + * @private + */ + exports._clusterToSmallestNeighbour = function(node) { + var smallestNeighbour = -1; + var smallestNeighbourNode = null; + for (var i = 0; i < node.dynamicEdges.length; i++) { + if (node.dynamicEdges[i] !== undefined) { + var neighbour = null; + if (node.dynamicEdges[i].fromId != node.id) { + neighbour = node.dynamicEdges[i].from; + } + else if (node.dynamicEdges[i].toId != node.id) { + neighbour = node.dynamicEdges[i].to; + } + + + if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) { + smallestNeighbour = neighbour.clusterSessions.length; + smallestNeighbourNode = neighbour; + } } + } - 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 (neighbour != null && this.nodes[neighbour.id] !== undefined) { + this._addToCluster(neighbour, node, true); + } + }; + + + /** + * This function forms clusters from hubs, it loops over all nodes + * + * @param {Boolean} force | Disregard zoom level + * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges + * @private + */ + exports._formClustersByHub = function(force, onlyEqual) { + // we loop over all nodes in the list + for (var nodeId in this.nodes) { + // we check if it is still available since it can be used by the clustering in this loop + if (this.nodes.hasOwnProperty(nodeId)) { + this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual); } + } + }; - function printMsg(msg) { - if (moment.suppressDeprecationWarnings === false && - typeof console !== 'undefined' && console.warn) { - console.warn('Deprecation warning: ' + msg); - } + /** + * This function forms a cluster from a specific preselected hub node + * + * @param {Node} hubNode | the node we will cluster as a hub + * @param {Boolean} force | Disregard zoom level + * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges + * @param {Number} [absorptionSizeOffset] | + * @private + */ + exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) { + if (absorptionSizeOffset === undefined) { + absorptionSizeOffset = 0; + } + // we decide if the node is a hub + if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) || + (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) { + // initialize variables + var dx,dy,length; + var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; + var allowCluster = false; + + // we create a list of edges because the dynamicEdges change over the course of this loop + var edgesIdarray = []; + var amountOfInitialEdges = hubNode.dynamicEdges.length; + for (var j = 0; j < amountOfInitialEdges; j++) { + edgesIdarray.push(hubNode.dynamicEdges[j].id); } - function deprecate(msg, fn) { - var firstTime = true; - return extend(function () { - if (firstTime) { - printMsg(msg); - firstTime = false; + // if the hub clustering is not forces, we check if one of the edges connected + // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold + if (force == false) { + allowCluster = false; + for (j = 0; j < amountOfInitialEdges; j++) { + var edge = this.edges[edgesIdarray[j]]; + if (edge !== undefined) { + if (edge.connected) { + if (edge.toId != edge.fromId) { + dx = (edge.to.x - edge.from.x); + dy = (edge.to.y - edge.from.y); + length = Math.sqrt(dx * dx + dy * dy); + + if (length < minLength) { + allowCluster = true; + break; + } } - return fn.apply(this, arguments); - }, fn); + } + } + } } - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - printMsg(msg); - deprecations[name] = true; + // start the clustering if allowed + if ((!force && allowCluster) || force) { + // we loop over all edges INITIALLY connected to this hub + for (j = 0; j < amountOfInitialEdges; j++) { + edge = this.edges[edgesIdarray[j]]; + // the edge can be clustered by this function in a previous loop + if (edge !== undefined) { + var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId]; + // we do not want hubs to merge with other hubs nor do we want to cluster itself. + if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) && + (childNode.id != hubNode.id)) { + this._addToCluster(hubNode,childNode,force); + } } + } } + } + }; - 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); + + /** + * This function adds the child node to the parent node, creating a cluster if it is not already. + * + * @param {Node} parentNode | this is the node that will house the child node + * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node + * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse + * @private + */ + exports._addToCluster = function(parentNode, childNode, force) { + // join child node in the parent node + parentNode.containedNodes[childNode.id] = childNode; + + // manage all the edges connected to the child and parent nodes + for (var i = 0; i < childNode.dynamicEdges.length; i++) { + var edge = childNode.dynamicEdges[i]; + if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode + this._addToContainedEdges(parentNode,childNode,edge); } - while (paddedTokens.length) { - i = paddedTokens.pop(); - formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); + else { + this._connectEdgeToCluster(parentNode,childNode,edge); } - formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); + } + // a contained node has no dynamic edges. + childNode.dynamicEdges = []; + // remove circular edges from clusters + this._containCircularEdgesFromNode(parentNode,childNode); - /************************************ - Constructors - ************************************/ - function Locale() { - } + // remove the childNode from the global nodes object + delete this.nodes[childNode.id]; - // Moment prototype object - function Moment(config, skipOverflow) { - if (skipOverflow !== false) { - checkOverflow(config); - } - copyConfig(this, config); - this._d = new Date(+config._d); - } + // update the properties of the child and parent + var massBefore = parentNode.options.mass; + childNode.clusterSession = this.clusterSession; + parentNode.options.mass += childNode.options.mass; + parentNode.clusterSize += childNode.clusterSize; + parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); - // 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; + // 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) { + parentNode.clusterSessions.push(this.clusterSession); + } - // 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; + // forced clusters only open from screen size and double tap + if (force == true) { + // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3); + parentNode.formationScale = 0; + } + else { + parentNode.formationScale = this.scale; // The latest child has been added on this scale + } - this._data = {}; + // recalculate the size of the node on the next time the node is rendered + parentNode.clearSizeCache(); - this._locale = moment.localeData(); + // set the pop-out scale for the childnode + parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale; - this._bubble(); - } + // nullify the movement velocity of the child, this is to avoid hectic behaviour + childNode.clearVelocity(); - /************************************ - Helpers - ************************************/ + // the mass has altered, preservation of energy dictates the velocity to be updated + parentNode.updateVelocity(massBefore); + // restart the simulation to reorganise all nodes + this.moving = true; + }; - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } + /** + * This function will apply the changes made to the remainingEdges during the formation of the clusters. + * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree. + * It has to be called if a level is collapsed. It is called by _formClusters(). + * @private + */ + exports._updateDynamicEdges = function() { + for (var i = 0; i < this.nodeIndices.length; i++) { + var node = this.nodes[this.nodeIndices[i]]; + node.dynamicEdgesLength = node.dynamicEdges.length; - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; + // this corrects for multiple edges pointing at the same other node + var correction = 0; + if (node.dynamicEdgesLength > 1) { + for (var j = 0; j < node.dynamicEdgesLength - 1; j++) { + var edgeToId = node.dynamicEdges[j].toId; + var edgeFromId = node.dynamicEdges[j].fromId; + for (var k = j+1; k < node.dynamicEdgesLength; k++) { + if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) || + (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) { + correction += 1; + } } - - return a; + } } + node.dynamicEdgesLength -= correction; + } + }; - function copyConfig(to, from) { - var i, prop, val; - 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; - } + /** + * This adds an edge from the childNode to the contained edges of the parent node + * + * @param parentNode | Node object + * @param childNode | Node object + * @param edge | Edge object + * @private + */ + exports._addToContainedEdges = function(parentNode, childNode, edge) { + // create an array object if it does not yet exist for this childNode + if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) { + parentNode.containedEdges[childNode.id] = [] + } + // add this edge to the list + parentNode.containedEdges[childNode.id].push(edge); - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (typeof val !== 'undefined') { - to[prop] = val; - } - } - } + // remove the edge from the global edges object + delete this.edges[edge.id]; - return to; + // remove the edge from the parent object + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + if (parentNode.dynamicEdges[i].id == edge.id) { + parentNode.dynamicEdges.splice(i,1); + break; } + } + }; - function absRound(number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } + /** + * This function connects an edge that was connected to a child node to the parent node. + * It keeps track of which nodes it has been connected to with the originalId array. + * + * @param {Node} parentNode | Node object + * @param {Node} childNode | Node object + * @param {Edge} edge | Edge object + * @private + */ + exports._connectEdgeToCluster = function(parentNode, childNode, edge) { + // handle circular edges + if (edge.toId == edge.fromId) { + this._addToContainedEdges(parentNode, childNode, edge); + } + else { + if (edge.toId == childNode.id) { // edge connected to other node on the "to" side + edge.originalToId.push(childNode.id); + edge.to = parentNode; + edge.toId = parentNode.id; } + else { // edge connected to other node with the "from" side - // 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; + edge.originalFromId.push(childNode.id); + edge.from = parentNode; + edge.fromId = parentNode.id; + } - while (output.length < targetLength) { - output = '0' + output; - } - return (sign ? (forceSign ? '+' : '') : '-') + output; + this._addToReroutedEdges(parentNode,childNode,edge); + } + }; + + + /** + * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain + * these edges inside of the cluster. + * + * @param parentNode + * @param childNode + * @private + */ + exports._containCircularEdgesFromNode = function(parentNode, childNode) { + // manage all the edges connected to the child and parent nodes + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + var edge = parentNode.dynamicEdges[i]; + // handle circular edges + if (edge.toId == edge.fromId) { + this._addToContainedEdges(parentNode, childNode, edge); } + } + }; - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } + /** + * This adds an edge from the childNode to the rerouted edges of the parent node + * + * @param parentNode | Node object + * @param childNode | Node object + * @param edge | Edge object + * @private + */ + exports._addToReroutedEdges = function(parentNode, childNode, edge) { + // create an array object if it does not yet exist for this childNode + // we store the edge in the rerouted edges so we can restore it when the cluster pops open + if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) { + parentNode.reroutedEdges[childNode.id] = []; + } + parentNode.reroutedEdges[childNode.id].push(edge); + + // this edge becomes part of the dynamicEdges of the cluster node + parentNode.dynamicEdges.push(edge); + }; + + + + /** + * This function connects an edge that was connected to a cluster node back to the child node. + * + * @param parentNode | Node object + * @param childNode | Node object + * @private + */ + exports._connectEdgeBackToChild = function(parentNode, childNode) { + if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) { + for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) { + var edge = parentNode.reroutedEdges[childNode.id][i]; + if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) { + edge.originalFromId.pop(); + edge.fromId = childNode.id; + edge.from = childNode; + } + else { + edge.originalToId.pop(); + edge.toId = childNode.id; + edge.to = childNode; + } - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + // append this edge to the list of edges connecting to the childnode + childNode.dynamicEdges.push(edge); - return res; + // remove the edge from the parent object + for (var j = 0; j < parentNode.dynamicEdges.length; j++) { + if (parentNode.dynamicEdges[j].id == edge.id) { + parentNode.dynamicEdges.splice(j,1); + break; + } + } } + // remove the entry from the rerouted edges + delete parentNode.reroutedEdges[childNode.id]; + } + }; - 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; - } - return res; + /** + * When loops are clustered, an edge can be both in the rerouted array and the contained array. + * This function is called last to verify that all edges in dynamicEdges are in fact connected to the + * parentNode + * + * @param parentNode | Node object + * @private + */ + exports._validateEdges = function(parentNode) { + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + var edge = parentNode.dynamicEdges[i]; + if (parentNode.id != edge.toId && parentNode.id != edge.fromId) { + parentNode.dynamicEdges.splice(i,1); } + } + }; - // 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; - } - val = typeof val === 'string' ? +val : val; - dur = moment.duration(val, period); - addOrSubtractDurationFromMoment(this, dur, direction); - return this; - }; - } + /** + * This function released the contained edges back into the global domain and puts them back into the + * dynamic edges of both parent and child. + * + * @param {Node} parentNode | + * @param {Node} childNode | + * @private + */ + exports._releaseContainedEdges = function(parentNode, childNode) { + for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) { + var edge = parentNode.containedEdges[childNode.id][i]; - function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - updateOffset = updateOffset == null ? true : updateOffset; + // put the edge back in the global edges object + this.edges[edge.id] = edge; - 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); - } - } + // put the edge back in the dynamic edges of the child and parent + childNode.dynamicEdges.push(edge); + parentNode.dynamicEdges.push(edge); + } + // remove the entry from the contained edges + delete parentNode.containedEdges[childNode.id]; - // check if is an array - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; - } + }; - function isDate(input) { - return Object.prototype.toString.call(input) === '[object Date]' || - input instanceof Date; - } - // 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; - } - function normalizeUnits(units) { - if (units) { - var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); - units = unitAliases[units] || camelFunctions[lowered] || lowered; - } - return units; - } - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; + // ------------------- UTILITY FUNCTIONS ---------------------------- // - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } - return normalizedInput; + /** + * This updates the node labels for all nodes (for debugging purposes) + */ + exports.updateLabels = function() { + var nodeId; + // update node labels + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.clusterSize > 1) { + node.label = "[".concat(String(node.clusterSize),"]"); + } } + } - function makeList(field) { - var count, setter; - - if (field.indexOf('week') === 0) { - count = 7; - setter = 'day'; - } - else if (field.indexOf('month') === 0) { - count = 12; - setter = 'month'; + // update node labels + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.clusterSize == 1) { + if (node.originalLabel !== undefined) { + node.label = node.originalLabel; } else { - return; + node.label = String(node.id); } + } + } + } - moment[field] = function (format, index) { - var i, getter, - method = moment._locale[field], - results = []; + // /* Debug Override */ + // for (nodeId in this.nodes) { + // if (this.nodes.hasOwnProperty(nodeId)) { + // node = this.nodes[nodeId]; + // node.label = String(node.level); + // } + // } - if (typeof format === 'number') { - index = format; - format = undefined; - } + }; - getter = function (i) { - var m = moment().utc().set(setter, i); - return method.call(moment._locale, m, format || ''); - }; - if (index != null) { - return getter(index); - } - else { - for (i = 0; i < count; i++) { - results.push(getter(i)); - } - return results; - } - }; + /** + * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes + * if the rest of the nodes are already a few cluster levels in. + * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not + * clustered enough to the clusterToSmallestNeighbours function. + */ + exports.normalizeClusterLevels = function() { + var maxLevel = 0; + var minLevel = 1e9; + var clusterLevel = 0; + var nodeId; + + // we loop over all nodes in the list + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + clusterLevel = this.nodes[nodeId].clusterSessions.length; + if (maxLevel < clusterLevel) {maxLevel = clusterLevel;} + if (minLevel > clusterLevel) {minLevel = clusterLevel;} + } + } + + if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) { + var amountOfNodes = this.nodeIndices.length; + var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference; + // we loop over all nodes in the list + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (this.nodes[nodeId].clusterSessions.length < targetLevel) { + this._clusterToSmallestNeighbour(this.nodes[nodeId]); + } + } + } + this._updateNodeIndexList(); + this._updateDynamicEdges(); + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length != amountOfNodes) { + this.clusterSession += 1; } + } + }; - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - if (coercedNumber >= 0) { - value = Math.floor(coercedNumber); - } else { - value = Math.ceil(coercedNumber); - } - } - return value; + /** + * This function determines if the cluster we want to decluster is in the active area + * this means around the zoom center + * + * @param {Node} node + * @returns {boolean} + * @private + */ + exports._nodeInActiveArea = function(node) { + return ( + Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale + && + Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale + ) + }; + + + /** + * This is an adaptation of the original repositioning function. This is called if the system is clustered initially + * It puts large clusters away from the center and randomizes the order. + * + */ + exports.repositionNodes = function() { + 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.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);} + this._repositionBezierNodes(node); } + } + }; - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } - function weeksInYear(year, dow, doy) { - return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; - } + /** + * We determine how many connections denote an important hub. + * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) + * + * @private + */ + exports._getHubSize = function() { + var average = 0; + var averageSquared = 0; + var hubCounter = 0; + var largestHub = 0; - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } + for (var i = 0; i < this.nodeIndices.length; i++) { - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + var node = this.nodes[this.nodeIndices[i]]; + if (node.dynamicEdgesLength > largestHub) { + largestHub = node.dynamicEdgesLength; } + average += node.dynamicEdgesLength; + averageSquared += Math.pow(node.dynamicEdgesLength,2); + hubCounter += 1; + } + average = average / hubCounter; + averageSquared = averageSquared / hubCounter; - 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; + var variance = averageSquared - Math.pow(average,2); - if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } + var standardDeviation = Math.sqrt(variance); - m._pf.overflow = overflow; - } - } + this.hubThreshold = Math.floor(average + 2*standardDeviation); - 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; + // always have at least one to cluster + if (this.hubThreshold > largestHub) { + this.hubThreshold = largestHub; + } - if (m._strict) { - m._isValid = m._isValid && - m._pf.charsLeftOver === 0 && - m._pf.unusedTokens.length === 0; - } + // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation); + // console.log("hubThreshold:",this.hubThreshold); + }; + + + /** + * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods + * with this amount we can cluster specifically on these chains. + * + * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce + * @private + */ + exports._reduceAmountOfChains = function(fraction) { + this.hubThreshold = 2; + var reduceAmount = Math.floor(this.nodeIndices.length * fraction); + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { + if (reduceAmount > 0) { + this._formClusterFromHub(this.nodes[nodeId],true,true,1); + reduceAmount -= 1; } - return m._isValid; + } } + } + }; - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; + /** + * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods + * with this amount we can cluster specifically on these chains. + * + * @private + */ + exports._getChainFraction = function() { + var chains = 0; + var total = 0; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { + chains += 1; + } + total += 1; } + } + return chains/total; + }; - // 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; - 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; - } - 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--; - } - i++; - } - return null; - } +/***/ }, +/* 54 */ +/***/ function(module, exports, __webpack_require__) { - 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]; - } + var util = __webpack_require__(1); - // 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(); - } + /** + * Creation of the SectorMixin var. + * + * This contains all the functions the Network object can use to employ the sector system. + * The sector system is always used by Network, though the benefits only apply to the use of clustering. + * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges. + */ - /************************************ - Locale - ************************************/ + /** + * This function is only called by the setData function of the Network object. + * This loads the global references into the active sector. This initializes the sector. + * + * @private + */ + exports._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; + }; - extend(Locale.prototype, { + /** + * /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied (active) sector. If a type is defined, do the specific type + * + * @param {String} sectorId + * @param {String} [sectorType] | "active" or "frozen" + * @private + */ + exports._switchToSector = function(sectorId, sectorType) { + if (sectorType === undefined || sectorType == "active") { + this._switchToActiveSector(sectorId); + } + else { + this._switchToFrozenSector(sectorId); + } + }; + + + /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied active sector. + * + * @param sectorId + * @private + */ + exports._switchToActiveSector = function(sectorId) { + this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"]; + this.nodes = this.sectors["active"][sectorId]["nodes"]; + this.edges = this.sectors["active"][sectorId]["edges"]; + }; + + + /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied active sector. + * + * @private + */ + exports._switchToSupportSector = function() { + this.nodeIndices = this.sectors["support"]["nodeIndices"]; + this.nodes = this.sectors["support"]["nodes"]; + this.edges = this.sectors["support"]["edges"]; + }; - 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()]; - }, + /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied frozen sector. + * + * @param sectorId + * @private + */ + exports._switchToFrozenSector = function(sectorId) { + this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"]; + this.nodes = this.sectors["frozen"][sectorId]["nodes"]; + this.edges = this.sectors["frozen"][sectorId]["edges"]; + }; - _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; + /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the currently active sector. + * + * @private + */ + exports._loadLatestSector = function() { + this._switchToSector(this._sector()); + }; - 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; - } - } - }, + /** + * This function returns the currently active sector Id + * + * @returns {String} + * @private + */ + exports._sector = function() { + return this.activeSector[this.activeSector.length-1]; + }; - _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()]; - }, + /** + * This function returns the previously active sector Id + * + * @returns {String} + * @private + */ + exports._previousSector = function() { + if (this.activeSector.length > 1) { + return this.activeSector[this.activeSector.length-2]; + } + else { + throw new TypeError('there are not enough sectors in the this.activeSector array.'); + } + }; - _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - weekdaysMin : function (m) { - return this._weekdaysMin[m.day()]; - }, - weekdaysParse : function (weekdayName) { - var i, mom, regex; + /** + * We add the active sector at the end of the this.activeSector array + * This ensures it is the currently active sector returned by _sector() and it reaches the top + * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack. + * + * @param newId + * @private + */ + exports._setActiveSector = function(newId) { + this.activeSector.push(newId); + }; - if (!this._weekdaysParse) { - this._weekdaysParse = []; - } - 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; - } - } - }, + /** + * We remove the currently active sector id from the active sector stack. This happens when + * we reactivate the previously active sector + * + * @private + */ + exports._forgetLastSector = function() { + this.activeSector.pop(); + }; - _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'); - }, + /** + * This function creates a new active sector with the supplied newId. This newId + * is the expanding node id. + * + * @param {String} newId | Id of the new active sector + * @private + */ + exports._createNewSector = function(newId) { + // create the new sector + this.sectors["active"][newId] = {"nodes":{}, + "edges":{}, + "nodeIndices":[], + "formationScale": this.scale, + "drawingNode": undefined}; - _meridiemParse : /[ap]\.?m?\.?/i, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - }, + // create the new sector render node. This gives visual feedback that you are in a new sector. + this.sectors["active"][newId]['drawingNode'] = new Node( + {id:newId, + color: { + background: "#eaefef", + border: "495c5e" + } + },{},{},this.constants); + this.sectors["active"][newId]['drawingNode'].clusterSize = 2; + }; - _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' - }, + /** + * This function removes the currently active sector. This is called when we create a new + * active sector. + * + * @param {String} sectorId | Id of the active sector that will be removed + * @private + */ + exports._deleteActiveSector = function(sectorId) { + delete this.sectors["active"][sectorId]; + }; - 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); - }, + /** + * This function removes the currently active sector. This is called when we reactivate + * the previously active sector. + * + * @param {String} sectorId | Id of the active sector that will be removed + * @private + */ + exports._deleteFrozenSector = function(sectorId) { + delete this.sectors["frozen"][sectorId]; + }; - ordinal : function (number) { - return this._ordinal.replace('%d', number); - }, - _ordinal : '%d', - preparse : function (string) { - return string; - }, + /** + * Freezing an active sector means moving it from the "active" object to the "frozen" object. + * We copy the references, then delete the active entree. + * + * @param sectorId + * @private + */ + exports._freezeSector = function(sectorId) { + // we move the set references from the active to the frozen stack. + this.sectors["frozen"][sectorId] = this.sectors["active"][sectorId]; - postformat : function (string) { - return string; - }, + // we have moved the sector data into the frozen set, we now remove it from the active set + this._deleteActiveSector(sectorId); + }; - week : function (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - }, - _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. - }, + /** + * This is the reverse operation of _freezeSector. Activating means moving the sector from the "frozen" + * object to the "active" object. + * + * @param sectorId + * @private + */ + exports._activateSector = function(sectorId) { + // we move the set references from the frozen to the active stack. + this.sectors["active"][sectorId] = this.sectors["frozen"][sectorId]; - _invalidDate: 'Invalid date', - invalidDate: function () { - return this._invalidDate; - } - }); + // we have moved the sector data into the active set, we now remove it from the frozen stack + this._deleteFrozenSector(sectorId); + }; - /************************************ - Formatting - ************************************/ + /** + * This function merges the data from the currently active sector with a frozen sector. This is used + * in the process of reverting back to the previously active sector. + * The data that is placed in the frozen (the previously active) sector is the node that has been removed from it + * upon the creation of a new active sector. + * + * @param sectorId + * @private + */ + exports._mergeThisWithFrozen = function(sectorId) { + // copy all nodes + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + this.sectors["frozen"][sectorId]["nodes"][nodeId] = this.nodes[nodeId]; + } + } - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); + // copy all edges (if not fully clustered, else there are no edges) + for (var edgeId in this.edges) { + if (this.edges.hasOwnProperty(edgeId)) { + this.sectors["frozen"][sectorId]["edges"][edgeId] = this.edges[edgeId]; } + } - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; + // merge the nodeIndices + for (var i = 0; i < this.nodeIndices.length; i++) { + this.sectors["frozen"][sectorId]["nodeIndices"].push(this.nodeIndices[i]); + } + }; - 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; - }; - } + /** + * This clusters the sector to one cluster. It was a single cluster before this process started so + * we revert to that state. The clusterToFit function with a maximum size of 1 node does this. + * + * @private + */ + exports._collapseThisToSingleCluster = function() { + this.clusterToFit(1,false); + }; - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } - format = expandFormat(format, m.localeData()); + /** + * We create a new active sector from the node that we want to open. + * + * @param node + * @private + */ + exports._addSector = function(node) { + // this is the currently active sector + var sector = this._sector(); - if (!formatFunctions[format]) { - formatFunctions[format] = makeFormatFunction(format); - } + // // this should allow me to select nodes from a frozen set. + // if (this.sectors['active'][sector]["nodes"].hasOwnProperty(node.id)) { + // console.log("the node is part of the active sector"); + // } + // else { + // console.log("I dont know what the fuck happened!!"); + // } - return formatFunctions[format](m); - } + // when we switch to a new sector, we remove the node that will be expanded from the current nodes list. + delete this.nodes[node.id]; - function expandFormat(format, locale) { - var i = 5; + var unqiueIdentifier = util.randomUUID(); - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } + // we fully freeze the currently active sector + this._freezeSector(sector); - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } + // we create a new active sector. This sector has the Id of the node to ensure uniqueness + this._createNewSector(unqiueIdentifier); - return format; - } + // we add the active sector to the sectors array to be able to revert these steps later on + this._setActiveSector(unqiueIdentifier); + // we redirect the global references to the new sector's references. this._sector() now returns unqiueIdentifier + this._switchToSector(this._sector()); - /************************************ - Parsing - ************************************/ + // finally we add the node we removed from our previous active sector to the new active sector + this.nodes[node.id] = node; + }; - // 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; - } - } + /** + * We close the sector that is currently open and revert back to the one before. + * If the active sector is the "default" sector, nothing happens. + * + * @private + */ + exports._collapseSector = function() { + // the currently active sector + var sector = this._sector(); + + // we cannot collapse the default sector + if (sector != "default") { + if ((this.nodeIndices.length == 1) || + (this.sectors["active"][sector]["drawingNode"].width*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || + (this.sectors["active"][sector]["drawingNode"].height*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { + var previousSector = this._previousSector(); - 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]); + // we collapse the sector back to a single cluster + this._collapseThisToSingleCluster(); - return parts[0] === '+' ? -minutes : minutes; - } + // we move the remaining nodes, edges and nodeIndices to the previous sector. + // This previous sector is the one we will reactivate + this._mergeThisWithFrozen(previousSector); - // function to convert string input to date - function addTimeToArrayFromToken(token, input, config) { - var a, datePartArray = config._a; + // the previously active (frozen) sector now has all the data from the currently active sector. + // we can now delete the active sector. + this._deleteActiveSector(sector); - 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 { - 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); - } + // we activate the previously active (and currently frozen) sector. + this._activateSector(previousSector); - 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); - } - } + // we load the references from the newly active sector into the global references + this._switchToSector(previousSector); - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp; + // we forget the previously active sector because we reverted to the one before + this._forgetLastSector(); - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; + // finally, we update the node index list. + this._updateNodeIndexList(); - // 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; + // we refresh the list with calulation nodes and calculation node indices. + this._updateCalculationNodes(); + } + } + }; - weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); - week = dfl(w.w, 1); - 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; - } + /** + * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). + * + * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors + * | we dont pass the function itself because then the "this" is the window object + * | instead of the Network object + * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @private + */ + exports._doInAllActiveSectors = function(runFunction,argument) { + var returnValues = []; + if (argument === undefined) { + for (var sector in this.sectors["active"]) { + if (this.sectors["active"].hasOwnProperty(sector)) { + // switch the global references to those of this sector + this._switchToActiveSector(sector); + returnValues.push( this[runFunction]() ); + } + } + } + else { + for (var sector in this.sectors["active"]) { + if (this.sectors["active"].hasOwnProperty(sector)) { + // switch the global references to those of this sector + this._switchToActiveSector(sector); + var args = Array.prototype.splice.call(arguments, 1); + if (args.length > 1) { + returnValues.push( this[runFunction](args[0],args[1]) ); } - temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); + else { + returnValues.push( this[runFunction](argument) ); + } + } + } + } + // we revert the global references back to our active sector + this._loadLatestSector(); + return returnValues; + }; - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; + + /** + * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). + * + * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors + * | we dont pass the function itself because then the "this" is the window object + * | instead of the Network object + * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @private + */ + exports._doInSupportSector = function(runFunction,argument) { + var returnValues = false; + if (argument === undefined) { + this._switchToSupportSector(); + returnValues = this[runFunction](); + } + else { + this._switchToSupportSector(); + var args = Array.prototype.splice.call(arguments, 1); + if (args.length > 1) { + returnValues = this[runFunction](args[0],args[1]); + } + else { + returnValues = this[runFunction](argument); } + } + // we revert the global references back to our active sector + this._loadLatestSector(); + return returnValues; + }; - // 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; - if (config._d) { - return; + /** + * This runs a function in all frozen sectors. This is used in the _redraw(). + * + * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors + * | we don't pass the function itself because then the "this" is the window object + * | instead of the Network object + * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @private + */ + exports._doInAllFrozenSectors = function(runFunction,argument) { + if (argument === undefined) { + for (var sector in this.sectors["frozen"]) { + if (this.sectors["frozen"].hasOwnProperty(sector)) { + // switch the global references to those of this sector + this._switchToFrozenSector(sector); + this[runFunction](); + } + } + } + else { + for (var sector in this.sectors["frozen"]) { + if (this.sectors["frozen"].hasOwnProperty(sector)) { + // switch the global references to those of this sector + this._switchToFrozenSector(sector); + var args = Array.prototype.splice.call(arguments, 1); + if (args.length > 1) { + this[runFunction](args[0],args[1]); } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); + else { + this[runFunction](argument); } + } + } + } + this._loadLatestSector(); + }; - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); - if (config._dayOfYear > daysInYear(yearToUse)) { - config._pf._overflowDayOfYear = true; - } + /** + * This runs a function in all sectors. This is used in the _redraw(). + * + * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors + * | we don't pass the function itself because then the "this" is the window object + * | instead of the Network object + * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @private + */ + exports._doInAllSectors = function(runFunction,argument) { + var args = Array.prototype.splice.call(arguments, 1); + if (argument === undefined) { + this._doInAllActiveSectors(runFunction); + this._doInAllFrozenSectors(runFunction); + } + else { + if (args.length > 1) { + this._doInAllActiveSectors(runFunction,args[0],args[1]); + this._doInAllFrozenSectors(runFunction,args[0],args[1]); + } + else { + this._doInAllActiveSectors(runFunction,argument); + this._doInAllFrozenSectors(runFunction,argument); + } + } + }; - date = makeUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - // 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]; - } + /** + * This clears the nodeIndices list. We cannot use this.nodeIndices = [] because we would break the link with the + * active sector. Thus we clear the nodeIndices in the active sector, then reconnect the this.nodeIndices to it. + * + * @private + */ + exports._clearNodeIndexList = function() { + var sector = this._sector(); + this.sectors["active"][sector]["nodeIndices"] = []; + this.nodeIndices = this.sectors["active"][sector]["nodeIndices"]; + }; - // 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]; - } - 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); - } - } + /** + * Draw the encompassing sector node + * + * @param ctx + * @param sectorType + * @private + */ + exports._drawSectorNodes = function(ctx,sectorType) { + var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node; + for (var sector in this.sectors[sectorType]) { + if (this.sectors[sectorType].hasOwnProperty(sector)) { + if (this.sectors[sectorType][sector]["drawingNode"] !== undefined) { - function dateFromObject(config) { - var normalizedInput; + this._switchToSector(sector,sectorType); - if (config._d) { - return; + minY = 1e9; maxY = -1e9; minX = 1e9; maxX = -1e9; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + node.resize(ctx); + if (minX > node.x - 0.5 * node.width) {minX = node.x - 0.5 * node.width;} + if (maxX < node.x + 0.5 * node.width) {maxX = node.x + 0.5 * node.width;} + if (minY > node.y - 0.5 * node.height) {minY = node.y - 0.5 * node.height;} + if (maxY < node.y + 0.5 * node.height) {maxY = node.y + 0.5 * node.height;} + } } - - normalizedInput = normalizeObjectUnits(config._i); - config._a = [ - normalizedInput.year, - normalizedInput.month, - normalizedInput.day, - normalizedInput.hour, - normalizedInput.minute, - normalizedInput.second, - normalizedInput.millisecond - ]; - - dateFromConfig(config); + node = this.sectors[sectorType][sector]["drawingNode"]; + node.x = 0.5 * (maxX + minX); + node.y = 0.5 * (maxY + minY); + node.width = 2 * (node.x - minX); + node.height = 2 * (node.y - minY); + node.radius = Math.sqrt(Math.pow(0.5*node.width,2) + Math.pow(0.5*node.height,2)); + node.setScale(this.scale); + node._drawCircle(ctx); + } } + } + }; - 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()]; - } - } + exports._drawAllSectorNodes = function(ctx) { + this._drawSectorNodes(ctx,"frozen"); + this._drawSectorNodes(ctx,"active"); + this._loadLatestSector(); + }; - // date from string and format string - function makeDateFromStringAndFormat(config) { - if (config._f === moment.ISO_8601) { - parseISO(config); - return; - } - config._a = []; - config._pf.empty = true; +/***/ }, +/* 55 */ +/***/ function(module, exports, __webpack_require__) { - // 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; + var Node = __webpack_require__(36); - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + /** + * This function can be called from the _doInAllSectors function + * + * @param object + * @param overlappingNodes + * @private + */ + exports._getNodesOverlappingWith = function(object, overlappingNodes) { + var nodes = this.nodes; + for (var nodeId in nodes) { + if (nodes.hasOwnProperty(nodeId)) { + if (nodes[nodeId].isOverlappingWith(object)) { + overlappingNodes.push(nodeId); + } + } + } + }; - 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; - } - // 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); - } - else if (config._strict && !parsedInput) { - config._pf.unusedTokens.push(token); - } - } + /** + * retrieve all nodes overlapping with given object + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes + * @private + */ + exports._getAllNodesOverlappingWith = function (object) { + var overlappingNodes = []; + this._doInAllActiveSectors("_getNodesOverlappingWith",object,overlappingNodes); + return overlappingNodes; + }; - // add remaining unparsed input length to the string - config._pf.charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - config._pf.unusedInput.push(string); - } - // 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; - } + /** + * Return a position object in canvasspace from a single point in screenspace + * + * @param pointer + * @returns {{left: number, top: number, right: number, bottom: number}} + * @private + */ + exports._pointerToPositionObject = function(pointer) { + var x = this._XconvertDOMtoCanvas(pointer.x); + var y = this._YconvertDOMtoCanvas(pointer.y); - dateFromConfig(config); - checkOverflow(config); - } + return { + left: x, + top: y, + right: x, + bottom: y + }; + }; - 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, '\\$&'); - } + /** + * Get the top node at the a specific point (like a click) + * + * @param {{x: Number, y: Number}} pointer + * @return {Node | null} node + * @private + */ + exports._getNodeAt = function (pointer) { + // we first check if this is an navigation controls element + var positionObject = this._pointerToPositionObject(pointer); + var overlappingNodes = this._getAllNodesOverlappingWith(positionObject); - // date from string and array of format strings - function makeDateFromStringAndArray(config) { - var tempConfig, - bestMoment, + // if there are overlapping nodes, select the last one, this is the + // one which is drawn on top of the others + if (overlappingNodes.length > 0) { + return this.nodes[overlappingNodes[overlappingNodes.length - 1]]; + } + else { + return null; + } + }; - scoreToBeat, - i, - currentScore; - if (config._f.length === 0) { - config._pf.invalidFormat = true; - config._d = new Date(NaN); - return; - } + /** + * retrieve all edges overlapping with given object, selector is around center + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes + * @private + */ + exports._getEdgesOverlappingWith = function (object, overlappingEdges) { + var edges = this.edges; + for (var edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + if (edges[edgeId].isOverlappingWith(object)) { + overlappingEdges.push(edgeId); + } + } + } + }; - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - tempConfig._pf = defaultParsingFlags(); - tempConfig._f = config._f[i]; - makeDateFromStringAndFormat(tempConfig); - if (!isValid(tempConfig)) { - continue; - } + /** + * retrieve all nodes overlapping with given object + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes + * @private + */ + exports._getAllEdgesOverlappingWith = function (object) { + var overlappingEdges = []; + this._doInAllActiveSectors("_getEdgesOverlappingWith",object,overlappingEdges); + return overlappingEdges; + }; - // if there is any input that was not parsed add a penalty for that format - currentScore += tempConfig._pf.charsLeftOver; + /** + * Place holder. To implement change the _getNodeAt to a _getObjectAt. Have the _getObjectAt call + * _getNodeAt and _getEdgesAt, then priortize the selection to user preferences. + * + * @param pointer + * @returns {null} + * @private + */ + exports._getEdgeAt = function(pointer) { + var positionObject = this._pointerToPositionObject(pointer); + var overlappingEdges = this._getAllEdgesOverlappingWith(positionObject); - //or tokens - currentScore += tempConfig._pf.unusedTokens.length * 10; + if (overlappingEdges.length > 0) { + return this.edges[overlappingEdges[overlappingEdges.length - 1]]; + } + else { + return null; + } + }; - tempConfig._pf.score = currentScore; - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } + /** + * Add object to the selection array. + * + * @param obj + * @private + */ + exports._addToSelection = function(obj) { + if (obj instanceof Node) { + this.selectionObj.nodes[obj.id] = obj; + } + else { + this.selectionObj.edges[obj.id] = obj; + } + }; - extend(config, bestMoment || tempConfig); - } + /** + * Add object to the selection array. + * + * @param obj + * @private + */ + exports._addToHover = function(obj) { + if (obj instanceof Node) { + this.hoverObj.nodes[obj.id] = obj; + } + else { + this.hoverObj.edges[obj.id] = obj; + } + }; - // date from iso format - function parseISO(config) { - var i, l, - string = config._i, - match = isoRegex.exec(string); - 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; - } - } + /** + * Remove a single option from selection. + * + * @param {Object} obj + * @private + */ + exports._removeFromSelection = function(obj) { + if (obj instanceof Node) { + delete this.selectionObj.nodes[obj.id]; + } + else { + delete this.selectionObj.edges[obj.id]; + } + }; - // date from iso format or fallback - function makeDateFromString(config) { - parseISO(config); - if (config._isValid === false) { - delete config._isValid; - moment.createFromInputFallback(config); - } + /** + * Unselect all. The selectionObj is useful for this. + * + * @param {Boolean} [doNotTrigger] | ignore trigger + * @private + */ + exports._unselectAll = function(doNotTrigger) { + if (doNotTrigger === undefined) { + doNotTrigger = false; + } + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + this.selectionObj.nodes[nodeId].unselect(); } - - 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); - } + } + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + this.selectionObj.edges[edgeId].unselect(); } + } - 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); + this.selectionObj = {nodes:{},edges:{}}; - //the date constructor doesn't accept years < 1970 - if (y < 1970) { - date.setFullYear(y); - } - return date; - } + if (doNotTrigger == false) { + this.emit('select', this.getSelection()); + } + }; - function makeUTCDate(y) { - var date = new Date(Date.UTC.apply(null, arguments)); - if (y < 1970) { - date.setUTCFullYear(y); - } - return date; - } + /** + * Unselect all clusters. The selectionObj is useful for this. + * + * @param {Boolean} [doNotTrigger] | ignore trigger + * @private + */ + exports._unselectClusters = function(doNotTrigger) { + if (doNotTrigger === undefined) { + doNotTrigger = false; + } - 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; - } - } - } - return input; + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + if (this.selectionObj.nodes[nodeId].clusterSize > 1) { + this.selectionObj.nodes[nodeId].unselect(); + this._removeFromSelection(this.selectionObj.nodes[nodeId]); + } } + } - /************************************ - Relative Time - ************************************/ + if (doNotTrigger == false) { + this.emit('select', this.getSelection()); + } + }; - // 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); + /** + * return the number of selected nodes + * + * @returns {number} + * @private + */ + exports._getSelectedNodeCount = function() { + var count = 0; + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + count += 1; } + } + return count; + }; - 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); + /** + * return the selected node + * + * @returns {number} + * @private + */ + exports._getSelectedNode = function() { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + return this.selectionObj.nodes[nodeId]; } + } + return null; + }; + /** + * return the selected edge + * + * @returns {number} + * @private + */ + exports._getSelectedEdge = function() { + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + return this.selectionObj.edges[edgeId]; + } + } + return null; + }; - /************************************ - Week of Year - ************************************/ + /** + * return the number of selected edges + * + * @returns {number} + * @private + */ + exports._getSelectedEdgeCount = function() { + var count = 0; + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + count += 1; + } + } + return count; + }; - // 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; + /** + * return the number of selected objects. + * + * @returns {number} + * @private + */ + exports._getSelectedObjectCount = function() { + var count = 0; + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + count += 1; + } + } + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + count += 1; + } + } + return count; + }; - if (daysToDayOfWeek > end) { - daysToDayOfWeek -= 7; - } + /** + * Check if anything is selected + * + * @returns {boolean} + * @private + */ + exports._selectionIsEmpty = function() { + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + return false; + } + } + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + return false; + } + } + return true; + }; - if (daysToDayOfWeek < end - 7) { - daysToDayOfWeek += 7; - } - adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); - return { - week: Math.ceil(adjustedMoment.dayOfYear() / 7), - year: adjustedMoment.year() - }; + /** + * check if one of the selected nodes is a cluster. + * + * @returns {boolean} + * @private + */ + exports._clusterInSelection = function() { + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + if (this.selectionObj.nodes[nodeId].clusterSize > 1) { + return true; + } } + } + return false; + }; - //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; + /** + * select the edges connected to the node that is being selected + * + * @param {Node} node + * @private + */ + exports._selectConnectedEdges = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + var edge = node.dynamicEdges[i]; + edge.select(); + this._addToSelection(edge); + } + }; - 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; + /** + * select the edges connected to the node that is being selected + * + * @param {Node} node + * @private + */ + exports._hoverConnectedEdges = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + var edge = node.dynamicEdges[i]; + edge.hover = true; + this._addToHover(edge); + } + }; - return { - year: dayOfYear > 0 ? year : year - 1, - dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear - }; - } - /************************************ - Top Level Functions - ************************************/ + /** + * unselect the edges connected to the node that is being selected + * + * @param {Node} node + * @private + */ + exports._unselectConnectedEdges = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + var edge = node.dynamicEdges[i]; + edge.unselect(); + this._removeFromSelection(edge); + } + }; - function makeMoment(config) { - var input = config._i, - format = config._f; - config._locale = config._locale || moment.localeData(config._l); - if (input === null || (format === undefined && input === '')) { - return moment.invalid({nullInput: true}); - } - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } + /** + * This is called when someone clicks on a node. either select or deselect it. + * If there is an existing selection and we don't want to append to it, clear the existing selection + * + * @param {Node || Edge} object + * @param {Boolean} append + * @param {Boolean} [doNotTrigger] | ignore trigger + * @private + */ + exports._selectObject = function(object, append, doNotTrigger, highlightEdges) { + if (doNotTrigger === undefined) { + doNotTrigger = false; + } + if (highlightEdges === undefined) { + highlightEdges = true; + } - if (moment.isMoment(input)) { - return new Moment(input, true); - } else if (format) { - if (isArray(format)) { - makeDateFromStringAndArray(config); - } else { - makeDateFromStringAndFormat(config); - } - } else { - makeDateFromInput(config); - } + if (this._selectionIsEmpty() == false && append == false && this.forceAppendSelection == false) { + this._unselectAll(true); + } - return new Moment(config); + if (object.selected == false) { + object.select(); + this._addToSelection(object); + if (object instanceof Node && this.blockConnectingEdgeSelection == false && highlightEdges == true) { + this._selectConnectedEdges(object); } + } + else { + object.unselect(); + this._removeFromSelection(object); + } - 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(); - - return makeMoment(c); - }; + if (doNotTrigger == false) { + this.emit('select', this.getSelection()); + } + }; - moment.suppressDeprecationWarnings = false; - 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); - } - ); + /** + * This is called when someone clicks on a node. either select or deselect it. + * If there is an existing selection and we don't want to append to it, clear the existing selection + * + * @param {Node || Edge} object + * @private + */ + exports._blurObject = function(object) { + if (object.hover == true) { + object.hover = false; + this.emit("blurNode",{node:object.id}); + } + }; - // 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; + /** + * This is called when someone clicks on a node. either select or deselect it. + * If there is an existing selection and we don't want to append to it, clear the existing selection + * + * @param {Node || Edge} object + * @private + */ + exports._hoverObject = function(object) { + if (object.hover == false) { + object.hover = true; + this._addToHover(object); + if (object instanceof Node) { + this.emit("hoverNode",{node:object.id}); } + } + if (object instanceof Node) { + this._hoverConnectedEdges(object); + } + }; - moment.min = function () { - var args = [].slice.call(arguments, 0); - return pickBy('isBefore', args); - }; + /** + * handles the selection part of the touch, only for navigation controls elements; + * Touch is triggered before tap, also before hold. Hold triggers after a while. + * This is the most responsive solution + * + * @param {Object} pointer + * @private + */ + exports._handleTouch = function(pointer) { + }; - moment.max = function () { - var args = [].slice.call(arguments, 0); - return pickBy('isAfter', args); - }; + /** + * handles the selection part of the tap; + * + * @param {Object} pointer + * @private + */ + exports._handleTap = function(pointer) { + var node = this._getNodeAt(pointer); + if (node != null) { + this._selectObject(node,false); + } + else { + var edge = this._getEdgeAt(pointer); + if (edge != null) { + this._selectObject(edge,false); + } + else { + this._unselectAll(); + } + } + this.emit("click", this.getSelection()); + this._redraw(); + }; - // creating with utc - moment.utc = 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._useUTC = true; - c._isUTC = true; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - c._pf = defaultParsingFlags(); + /** + * handles the selection part of the double tap and opens a cluster if needed + * + * @param {Object} pointer + * @private + */ + exports._handleDoubleTap = function(pointer) { + var node = this._getNodeAt(pointer); + if (node != null && node !== undefined) { + // we reset the areaCenter here so the opening of the node will occur + this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x), + "y" : this._YconvertDOMtoCanvas(pointer.y)}; + this.openCluster(node); + } + this.emit("doubleClick", this.getSelection()); + }; - return makeMoment(c).utc(); - }; - // creating with unix timestamp (in seconds) - moment.unix = function (input) { - return moment(input * 1000); - }; + /** + * Handle the onHold selection part + * + * @param pointer + * @private + */ + exports._handleOnHold = function(pointer) { + var node = this._getNodeAt(pointer); + if (node != null) { + this._selectObject(node,true); + } + else { + var edge = this._getEdgeAt(pointer); + if (edge != null) { + this._selectObject(edge,true); + } + } + this._redraw(); + }; - // 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)); + /** + * handle the onRelease event. These functions are here for the navigation controls module. + * + * @private + */ + exports._handleOnRelease = function(pointer) { - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } + }; - ret = new Duration(duration); - if (moment.isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } - return ret; - }; + /** + * + * retrieve the currently selected objects + * @return {{nodes: Array., edges: Array.}} selection + */ + exports.getSelection = function() { + var nodeIds = this.getSelectedNodes(); + var edgeIds = this.getSelectedEdges(); + return {nodes:nodeIds, edges:edgeIds}; + }; - // version number - moment.version = VERSION; + /** + * + * retrieve the currently selected nodes + * @return {String[]} selection An array with the ids of the + * selected nodes. + */ + exports.getSelectedNodes = function() { + var idArray = []; + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + idArray.push(nodeId); + } + } + return idArray + }; - // default format - moment.defaultFormat = isoFormat; + /** + * + * retrieve the currently selected edges + * @return {Array} selection An array with the ids of the + * selected nodes. + */ + exports.getSelectedEdges = function() { + var idArray = []; + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + idArray.push(edgeId); + } + } + return idArray; + }; - // 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; + /** + * select zero or more nodes + * @param {Number[] | String[]} selection An array with the ids of the + * selected nodes. + */ + exports.setSelection = function(selection) { + var i, iMax, id; - // 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 () {}; + if (!selection || (selection.length == undefined)) + throw 'Selection must be an array with ids'; - // 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; - }; + // first unselect any selected node + this._unselectAll(true); - moment.lang = deprecate( - 'moment.lang is deprecated. Use moment.locale instead.', - function (key, value) { - return moment.locale(key, value); - } - ); + for (i = 0, iMax = selection.length; i < iMax; i++) { + id = selection[i]; - // 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); - } + var node = this.nodes[id]; + if (!node) { + throw new RangeError('Node with id "' + id + '" not found'); + } + this._selectObject(node,true,true); + } - if (data) { - moment.duration._locale = moment._locale = data; - } - } + console.log("setSelection is deprecated. Please use selectNodes instead.") - return moment._locale._abbr; - }; + this.redraw(); + }; - moment.defineLocale = function (name, values) { - if (values !== null) { - values.abbr = name; - if (!locales[name]) { - locales[name] = new Locale(); - } - locales[name].set(values); - // backwards compat for now: also set the locale - moment.locale(name); + /** + * select zero or more nodes with the option to highlight edges + * @param {Number[] | String[]} selection An array with the ids of the + * selected nodes. + * @param {boolean} [highlightEdges] + */ + exports.selectNodes = function(selection, highlightEdges) { + var i, iMax, id; - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - }; + if (!selection || (selection.length == undefined)) + throw 'Selection must be an array with ids'; - moment.langData = deprecate( - 'moment.langData is deprecated. Use moment.localeData instead.', - function (key) { - return moment.localeData(key); - } - ); + // first unselect any selected node + this._unselectAll(true); - // returns locale data - moment.localeData = function (key) { - var locale; + for (i = 0, iMax = selection.length; i < iMax; i++) { + id = selection[i]; - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } + var node = this.nodes[id]; + if (!node) { + throw new RangeError('Node with id "' + id + '" not found'); + } + this._selectObject(node,true,true,highlightEdges); + } + this.redraw(); + }; - if (!key) { - return moment._locale; - } - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } + /** + * select zero or more edges + * @param {Number[] | String[]} selection An array with the ids of the + * selected nodes. + */ + exports.selectEdges = function(selection) { + var i, iMax, id; - return chooseLocale(key); - }; + if (!selection || (selection.length == undefined)) + throw 'Selection must be an array with ids'; - // compare moment object - moment.isMoment = function (obj) { - return obj instanceof Moment || - (obj != null && hasOwnProp(obj, '_isAMomentObject')); - }; + // first unselect any selected node + this._unselectAll(true); - // for typechecking Duration objects - moment.isDuration = function (obj) { - return obj instanceof Duration; - }; + for (i = 0, iMax = selection.length; i < iMax; i++) { + id = selection[i]; - for (i = lists.length - 1; i >= 0; --i) { - makeList(lists[i]); + var edge = this.edges[id]; + if (!edge) { + throw new RangeError('Edge with id "' + id + '" not found'); } + this._selectObject(edge,true,true,highlightEdges); + } + this.redraw(); + }; - moment.normalizeUnits = function (units) { - return normalizeUnits(units); - }; + /** + * Validate the selection: remove ids of nodes which no longer exist + * @private + */ + exports._updateSelection = function () { + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + if (!this.nodes.hasOwnProperty(nodeId)) { + delete this.selectionObj.nodes[nodeId]; + } + } + } + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + if (!this.edges.hasOwnProperty(edgeId)) { + delete this.selectionObj.edges[edgeId]; + } + } + } + }; - moment.invalid = function (flags) { - var m = moment.utc(NaN); - if (flags != null) { - extend(m._pf, flags); - } - else { - m._pf.userInvalidated = true; - } - return m; - }; +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { - moment.parseZone = function () { - return moment.apply(null, arguments).parseZone(); - }; + var util = __webpack_require__(1); + var Node = __webpack_require__(36); + var Edge = __webpack_require__(33); - moment.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; + /** + * clears the toolbar div element of children + * + * @private + */ + exports._clearManipulatorBar = function() { + while (this.manipulationDiv.hasChildNodes()) { + this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); + } + }; - /************************************ - Moment Prototype - ************************************/ + /** + * Manipulation UI temporarily overloads certain functions to extend or replace them. To be able to restore + * these functions to their original functionality, we saved them in this.cachedFunctions. + * This function restores these functions to their original function. + * + * @private + */ + exports._restoreOverloadedFunctions = function() { + for (var functionName in this.cachedFunctions) { + if (this.cachedFunctions.hasOwnProperty(functionName)) { + this[functionName] = this.cachedFunctions[functionName]; + } + } + }; + /** + * Enable or disable edit-mode. + * + * @private + */ + exports._toggleEditMode = function() { + this.editMode = !this.editMode; + var toolbar = document.getElementById("network-manipulationDiv"); + var closeDiv = document.getElementById("network-manipulation-closeDiv"); + var editModeDiv = document.getElementById("network-manipulation-editMode"); + if (this.editMode == true) { + toolbar.style.display="block"; + closeDiv.style.display="block"; + editModeDiv.style.display="none"; + closeDiv.onclick = this._toggleEditMode.bind(this); + } + else { + toolbar.style.display="none"; + closeDiv.style.display="none"; + editModeDiv.style.display="block"; + closeDiv.onclick = null; + } + this._createManipulatorBar() + }; - extend(moment.fn = Moment.prototype, { + /** + * main function, creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar. + * + * @private + */ + exports._createManipulatorBar = function() { + // remove bound functions + if (this.boundFunction) { + this.off('select', this.boundFunction); + } - clone : function () { - return moment(this); - }, + var locale = this.constants.locales[this.constants.locale]; - valueOf : function () { - return +this._d + ((this._offset || 0) * 60000); - }, + if (this.edgeBeingEdited !== undefined) { + this.edgeBeingEdited._disableControlNodes(); + this.edgeBeingEdited = undefined; + this.selectedControlNode = null; + this.controlNodesActive = false; + } - unix : function () { - return Math.floor(+this / 1000); - }, + // restore overloaded functions + this._restoreOverloadedFunctions(); - toString : function () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - }, + // resume calculation + this.freezeSimulation = false; - toDate : function () { - return this._offset ? new Date(+this) : this._d; - }, + // reset global variables + this.blockConnectingEdgeSelection = false; + this.forceAppendSelection = false; - 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]'); - } - }, + if (this.editMode == true) { + while (this.manipulationDiv.hasChildNodes()) { + this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); + } - toArray : function () { - var m = this; - return [ - m.year(), - m.month(), - m.date(), - m.hours(), - m.minutes(), - m.seconds(), - m.milliseconds() - ]; - }, + // add the icons to the manipulator div + this.manipulationDiv.innerHTML = "" + + "" + + ""+locale['addNode'] +"" + + "
" + + "" + + ""+locale['addEdge'] +""; + if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { + this.manipulationDiv.innerHTML += "" + + "
" + + "" + + ""+locale['editNode'] +""; + } + else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { + this.manipulationDiv.innerHTML += "" + + "
" + + "" + + ""+locale['editEdge'] +""; + } + if (this._selectionIsEmpty() == false) { + this.manipulationDiv.innerHTML += "" + + "
" + + "" + + ""+locale['del'] +""; + } - 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; - } + // bind the icons + var addNodeButton = document.getElementById("network-manipulate-addNode"); + addNodeButton.onclick = this._createAddNodeToolbar.bind(this); + var addEdgeButton = document.getElementById("network-manipulate-connectNode"); + addEdgeButton.onclick = this._createAddEdgeToolbar.bind(this); + if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { + var editButton = document.getElementById("network-manipulate-editNode"); + editButton.onclick = this._editNode.bind(this); + } + else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { + var editButton = document.getElementById("network-manipulate-editEdge"); + editButton.onclick = this._createEditEdgeToolbar.bind(this); + } + if (this._selectionIsEmpty() == false) { + var deleteButton = document.getElementById("network-manipulate-delete"); + deleteButton.onclick = this._deleteSelected.bind(this); + } + var closeDiv = document.getElementById("network-manipulation-closeDiv"); + closeDiv.onclick = this._toggleEditMode.bind(this); - return false; - }, + this.boundFunction = this._createManipulatorBar.bind(this); + this.on('select', this.boundFunction); + } + else { + this.editModeDiv.innerHTML = "" + + "" + + "" + locale['edit'] + ""; + var editModeButton = document.getElementById("network-manipulate-editModeButton"); + editModeButton.onclick = this._toggleEditMode.bind(this); + } + }; - parsingFlags : function () { - return extend({}, this._pf); - }, - invalidAt: function () { - return this._pf.overflow; - }, - utc : function (keepLocalTime) { - return this.zone(0, keepLocalTime); - }, + /** + * Create the toolbar for adding Nodes + * + * @private + */ + exports._createAddNodeToolbar = function() { + // clear the toolbar + this._clearManipulatorBar(); + if (this.boundFunction) { + this.off('select', this.boundFunction); + } + + var locale = this.constants.locales[this.constants.locale]; + + // create the toolbar contents + this.manipulationDiv.innerHTML = "" + + "" + + "" + locale['back'] + " " + + "
" + + "" + + "" + locale['addDescription'] + ""; - local : function (keepLocalTime) { - if (this._isUTC) { - this.zone(0, keepLocalTime); - this._isUTC = false; + // bind the icon + var backButton = document.getElementById("network-manipulate-back"); + backButton.onclick = this._createManipulatorBar.bind(this); - if (keepLocalTime) { - this.add(this._d.getTimezoneOffset(), 'm'); - } - } - return this; - }, + // we use the boundFunction so we can reference it when we unbind it from the "select" event. + this.boundFunction = this._addNode.bind(this); + this.on('select', this.boundFunction); + }; - format : function (inputString) { - var output = formatMoment(this, inputString || moment.defaultFormat); - return this.localeData().postformat(output); - }, - add : createAdder(1, 'add'), + /** + * create the toolbar to connect nodes + * + * @private + */ + exports._createAddEdgeToolbar = function() { + // clear the toolbar + this._clearManipulatorBar(); + this._unselectAll(true); + this.freezeSimulation = true; - subtract : createAdder(-1, 'subtract'), + var locale = this.constants.locales[this.constants.locale]; - diff : function (input, units, asFloat) { - var that = makeAs(input, this), - zoneDiff = (this.zone() - that.zone()) * 6e4, - diff, output; + if (this.boundFunction) { + this.off('select', this.boundFunction); + } - units = normalizeUnits(units); + this._unselectAll(); + this.forceAppendSelection = false; + this.blockConnectingEdgeSelection = true; - 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); - }, + this.manipulationDiv.innerHTML = "" + + "" + + "" + locale['back'] + " " + + "
" + + "" + + "" + locale['edgeDescription'] + ""; - from : function (time, withoutSuffix) { - return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - }, + // bind the icon + var backButton = document.getElementById("network-manipulate-back"); + backButton.onclick = this._createManipulatorBar.bind(this); - fromNow : function (withoutSuffix) { - return this.from(moment(), withoutSuffix); - }, + // we use the boundFunction so we can reference it when we unbind it from the "select" event. + this.boundFunction = this._handleConnect.bind(this); + this.on('select', this.boundFunction); - 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)); - }, + // temporarily overload functions + this.cachedFunctions["_handleTouch"] = this._handleTouch; + this.cachedFunctions["_handleOnRelease"] = this._handleOnRelease; + this._handleTouch = this._handleConnect; + this._handleOnRelease = this._finishConnect; - isLeapYear : function () { - return isLeapYear(this.year()); - }, + // redraw to show the unselect + this._redraw(); + }; - isDST : function () { - return (this.zone() < this.clone().month(0).zone() || - this.zone() < this.clone().month(5).zone()); - }, + /** + * create the toolbar to edit edges + * + * @private + */ + exports._createEditEdgeToolbar = function() { + // clear the toolbar + this._clearManipulatorBar(); + this.controlNodesActive = true; - 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; - } - }, + if (this.boundFunction) { + this.off('select', this.boundFunction); + } - month : makeAccessor('Month', true), + this.edgeBeingEdited = this._getSelectedEdge(); + this.edgeBeingEdited._enableControlNodes(); - 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 */ - } + var locale = this.constants.locales[this.constants.locale]; - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } else if (units === 'isoWeek') { - this.isoWeekday(1); - } + this.manipulationDiv.innerHTML = "" + + "" + + "" + locale['back'] + " " + + "
" + + "" + + "" + locale['editEdgeDescription'] + ""; - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } + // bind the icon + var backButton = document.getElementById("network-manipulate-back"); + backButton.onclick = this._createManipulatorBar.bind(this); - return this; - }, + // temporarily overload functions + 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; - endOf: function (units) { - units = normalizeUnits(units); - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - }, + // redraw to show the unselect + this._redraw(); + }; - isAfter: function (input, units) { - units = typeof units !== 'undefined' ? units : 'millisecond'; - return +this.clone().startOf(units) > +moment(input).startOf(units); - }, - isBefore: function (input, units) { - units = typeof units !== 'undefined' ? units : 'millisecond'; - return +this.clone().startOf(units) < +moment(input).startOf(units); - }, - isSame: function (input, units) { - units = units || 'ms'; - return +this.clone().startOf(units) === +makeAs(input, this).startOf(units); - }, - 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; - } - ), - 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 function bound to the selection event. It checks if you want to connect a cluster and changes the description + * to walk the user through the process. + * + * @private + */ + exports._selectControlNode = function(pointer) { + this.edgeBeingEdited.controlNodes.from.unselect(); + this.edgeBeingEdited.controlNodes.to.unselect(); + this.selectedControlNode = this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(pointer.x),this._YconvertDOMtoCanvas(pointer.y)); + if (this.selectedControlNode !== null) { + this.selectedControlNode.select(); + this.freezeSimulation = true; + } + this._redraw(); + }; - // 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; - }, + /** + * the function bound to the selection event. It checks if you want to connect a cluster and changes the description + * to walk the user through the process. + * + * @private + */ + exports._controlNodeDrag = function(event) { + var pointer = this._getPointer(event.gesture.center); + if (this.selectedControlNode !== null && this.selectedControlNode !== undefined) { + this.selectedControlNode.x = this._XconvertDOMtoCanvas(pointer.x); + this.selectedControlNode.y = this._YconvertDOMtoCanvas(pointer.y); + } + this._redraw(); + }; - zoneAbbr : function () { - return this._isUTC ? 'UTC' : ''; - }, + exports._releaseControlNode = function(pointer) { + var newNode = this._getNodeAt(pointer); + if (newNode != null) { + if (this.edgeBeingEdited.controlNodes.from.selected == true) { + this._editEdge(newNode.id, this.edgeBeingEdited.to.id); + this.edgeBeingEdited.controlNodes.from.unselect(); + } + if (this.edgeBeingEdited.controlNodes.to.selected == true) { + this._editEdge(this.edgeBeingEdited.from.id, newNode.id); + this.edgeBeingEdited.controlNodes.to.unselect(); + } + } + else { + this.edgeBeingEdited._restoreControlNodes(); + } + this.freezeSimulation = false; + this._redraw(); + }; - zoneName : function () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - }, + /** + * the function bound to the selection event. It checks if you want to connect a cluster and changes the description + * to walk the user through the process. + * + * @private + */ + exports._handleConnect = function(pointer) { + if (this._getSelectedNodeCount() == 0) { + var node = this._getNodeAt(pointer); + var supportNodes, targetNode, targetViaNode, connectionEdge; - parseZone : function () { - if (this._tzm) { - this.zone(this._tzm); - } else if (typeof this._i === 'string') { - this.zone(this._i); - } - return this; - }, + if (node != null) { + if (node.clusterSize > 1) { + alert(this.constants.locales[this.constants.locale]['createEdgeError']) + } + else { + this._selectObject(node,false); + supportNodes = this.sectors['support']['nodes']; - hasAlignedHourOffset : function (input) { - if (!input) { - input = 0; - } - else { - input = moment(input).zone(); - } + // create a node the temporary line can look at + supportNodes['targetNode'] = targetNode = new Node({id:'targetNode'},{},{},this.constants); + targetNode.x = node.x; + targetNode.y = node.y; - return (this.zone() - input) % 60 === 0; - }, + supportNodes['targetViaNode'] = targetViaNode = new Node({id:'targetViaNode'},{},{},this.constants); + targetViaNode.x = node.x; + targetViaNode.y = node.y; + targetViaNode.parentEdgeId = "connectionEdge"; - daysInMonth : function () { - return daysInMonth(this.year(), this.month()); - }, + // create a temporary edge + this.edges['connectionEdge'] = connectionEdge = new Edge({id:"connectionEdge",from:node.id,to:targetNode.id}, this, this.constants); + connectionEdge.from = node; + connectionEdge.connected = true; + connectionEdge.smooth = true; + connectionEdge.selected = true; + connectionEdge.to = targetNode; + connectionEdge.via = targetViaNode; - 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'); - }, + this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; + this._handleOnDrag = function(event) { + var pointer = this._getPointer(event.gesture.center); + var supportNodes = this.sectors['support']['nodes']; + supportNodes['targetNode'].x = this._XconvertDOMtoCanvas(pointer.x); + supportNodes['targetNode'].y = this._YconvertDOMtoCanvas(pointer.y); + supportNodes['targetViaNode'].x = 0.5 * (this._XconvertDOMtoCanvas(pointer.x) + this.edges['connectionEdge'].from.x); + supportNodes['targetViaNode'].y = this._YconvertDOMtoCanvas(pointer.y); + }; - quarter : function (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - }, + this.moving = true; + this.start(); + } + } + } + }; - 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'); - }, + exports._finishConnect = function(pointer) { + if (this._getSelectedNodeCount() == 1) { - isoWeekYear : function (input) { - var year = weekOfYear(this, 1, 4).year; - return input == null ? year : this.add((input - year), 'y'); - }, + // restore the drag function + this._handleOnDrag = this.cachedFunctions["_handleOnDrag"]; + delete this.cachedFunctions["_handleOnDrag"]; - week : function (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - }, + // remember the edge id + var connectFromId = this.edges['connectionEdge'].fromId; - isoWeek : function (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - }, + // remove the temporary nodes and edge + delete this.edges['connectionEdge']; + delete this.sectors['support']['nodes']['targetNode']; + delete this.sectors['support']['nodes']['targetViaNode']; - weekday : function (input) { - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - }, + var node = this._getNodeAt(pointer); + if (node != null) { + if (node.clusterSize > 1) { + alert(this.constants.locales[this.constants.locale]["createEdgeError"]) + } + else { + this._createEdge(connectFromId,node.id); + this._createManipulatorBar(); + } + } + this._unselectAll(); + } + }; - 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); - }, - isoWeeksInYear : function () { - return weeksInYear(this.year(), 1, 4); - }, + /** + * Adds a node on the specified location + */ + exports._addNode = function() { + if (this._selectionIsEmpty() && this.editMode == true) { + var positionObject = this._pointerToPositionObject(this.pointerPosition); + var defaultData = {id:util.randomUUID(),x:positionObject.left,y:positionObject.top,label:"new",allowedToMoveX:true,allowedToMoveY:true}; + if (this.triggerFunctions.add) { + if (this.triggerFunctions.add.length == 2) { + var me = this; + this.triggerFunctions.add(defaultData, function(finalizedData) { + me.nodesData.add(finalizedData); + me._createManipulatorBar(); + me.moving = true; + me.start(); + }); + } + else { + throw new Error('The function for add does not support two arguments (data,callback)'); + this._createManipulatorBar(); + this.moving = true; + this.start(); + } + } + else { + this.nodesData.add(defaultData); + this._createManipulatorBar(); + this.moving = true; + this.start(); + } + } + }; - weeksInYear : function () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - }, - get : function (units) { - units = normalizeUnits(units); - return this[units](); - }, + /** + * connect two nodes with a new edge. + * + * @private + */ + exports._createEdge = function(sourceNodeId,targetNodeId) { + if (this.editMode == true) { + var defaultData = {from:sourceNodeId, to:targetNodeId}; + if (this.triggerFunctions.connect) { + if (this.triggerFunctions.connect.length == 2) { + var me = this; + this.triggerFunctions.connect(defaultData, function(finalizedData) { + me.edgesData.add(finalizedData); + me.moving = true; + me.start(); + }); + } + else { + throw new Error('The function for connect does not support two arguments (data,callback)'); + this.moving = true; + this.start(); + } + } + else { + this.edgesData.add(defaultData); + this.moving = true; + this.start(); + } + } + }; - set : function (units, value) { - units = normalizeUnits(units); - if (typeof this[units] === 'function') { - this[units](value); - } - return this; - }, + /** + * connect two nodes with a new edge. + * + * @private + */ + exports._editEdge = function(sourceNodeId,targetNodeId) { + if (this.editMode == true) { + var defaultData = {id: this.edgeBeingEdited.id, from:sourceNodeId, to:targetNodeId}; + if (this.triggerFunctions.editEdge) { + if (this.triggerFunctions.editEdge.length == 2) { + var me = this; + this.triggerFunctions.editEdge(defaultData, function(finalizedData) { + me.edgesData.update(finalizedData); + me.moving = true; + me.start(); + }); + } + else { + throw new Error('The function for edit does not support two arguments (data, callback)'); + this.moving = true; + this.start(); + } + } + else { + this.edgesData.update(defaultData); + this.moving = true; + this.start(); + } + } + }; - // 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; - } - }, + /** + * Create the toolbar to edit the selected node. The label and the color can be changed. Other colors are derived from the chosen color. + * + * @private + */ + exports._editNode = function() { + if (this.triggerFunctions.edit && this.editMode == true) { + var node = this._getSelectedNode(); + var data = {id:node.id, + label: node.label, + group: node.options.group, + shape: node.options.shape, + color: { + background:node.options.color.background, + border:node.options.color.border, + highlight: { + background:node.options.color.highlight.background, + border:node.options.color.highlight.border + } + }}; + if (this.triggerFunctions.edit.length == 2) { + var me = this; + this.triggerFunctions.edit(data, function (finalizedData) { + me.nodesData.update(finalizedData); + me._createManipulatorBar(); + me.moving = true; + me.start(); + }); + } + else { + throw new Error('The function for edit does not support two arguments (data, callback)'); + } + } + else { + throw new Error('No edit function has been bound to this button'); + } + }; - 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; - } - } - ), - localeData : function () { - return this._locale; - } - }); - function rawMonthSetter(mom, value) { - var dayOfMonth; - // 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; - } + /** + * delete everything in the selection + * + * @private + */ + exports._deleteSelected = function() { + if (!this._selectionIsEmpty() && this.editMode == true) { + if (!this._clusterInSelection()) { + var selectedNodes = this.getSelectedNodes(); + var selectedEdges = this.getSelectedEdges(); + if (this.triggerFunctions.del) { + var me = this; + var data = {nodes: selectedNodes, edges: selectedEdges}; + if (this.triggerFunctions.del.length = 2) { + this.triggerFunctions.del(data, function (finalizedData) { + me.edgesData.remove(finalizedData.edges); + me.nodesData.remove(finalizedData.nodes); + me._unselectAll(); + me.moving = true; + me.start(); + }); } - - dayOfMonth = Math.min(mom.date(), - daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; + else { + throw new Error('The function for delete does not support two arguments (data, callback)') + } + } + else { + this.edgesData.remove(selectedEdges); + this.nodesData.remove(selectedNodes); + this._unselectAll(); + this.moving = true; + this.start(); + } } - - function rawGetter(mom, unit) { - return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + else { + alert(this.constants.locales[this.constants.locale]["deleteClusterError"]); } + } + }; - function rawSetter(mom, unit, value) { - if (unit === 'Month') { - return rawMonthSetter(mom, value); - } else { - return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } - 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); - } - }; - } +/***/ }, +/* 57 */ +/***/ function(module, exports, __webpack_require__) { - 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)); + var util = __webpack_require__(1); + var Hammer = __webpack_require__(41); - // 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; + exports._cleanNavigation = function() { + // clean up previous navigation items + var wrapper = document.getElementById('network-navigation_wrapper'); + if (wrapper && wrapper.parentNode) { + wrapper.parentNode.removeChild(wrapper); + } + document.onmouseup = null; + }; + + /** + * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation + * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent + * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false. + * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas. + * + * @private + */ + exports._loadNavigationElements = function() { + this._cleanNavigation(); + + this.navigationDivs = {}; + var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends']; + var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','zoomExtent']; - // add aliased format methods - moment.fn.toJSON = moment.fn.toISOString; + this.navigationDivs['wrapper'] = document.createElement('div'); + this.navigationDivs['wrapper'].id = 'network-navigation_wrapper'; + this.frame.appendChild(this.navigationDivs['wrapper']); - /************************************ - Duration Prototype - ************************************/ + 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]]); + var hammer = Hammer(this.navigationDivs[navigationDivs[i]], {prevent_default: true}); + hammer.on('touch', me[navigationDivActions[i]].bind(me)); + } + var hammer = Hammer(document, {prevent_default: false}); + hammer.on('release', me._stopMovement.bind(me)); + }; + /** + * this stops all movement induced by the navigation buttons + * + * @private + */ + exports._stopMovement = function() { + this._xStopMoving(); + this._yStopMoving(); + this._stopZoom(); + }; - function daysToYears (days) { - // 400 years have 146097 days (taking into account leap year rules) - return days * 400 / 146097; - } - function yearsToDays (years) { - // years * 365 + absRound(years / 4) - - // absRound(years / 100) + absRound(years / 400); - return years * 146097 / 400; - } + /** + * move the screen up + * By using the increments, instead of adding a fixed number to the translation, we keep fluent and + * instant movement. The onKeypress event triggers immediately, then pauses, then triggers frequently + * To avoid this behaviour, we do the translation in the start loop. + * + * @private + */ + exports._moveUp = function(event) { + this.yIncrement = this.constants.keyboard.speed.y; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - 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; + /** + * move the screen down + * @private + */ + exports._moveDown = function(event) { + this.yIncrement = -this.constants.keyboard.speed.y; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; - seconds = absRound(milliseconds / 1000); - data.seconds = seconds % 60; + /** + * move the screen left + * @private + */ + exports._moveLeft = function(event) { + this.xIncrement = this.constants.keyboard.speed.x; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - minutes = absRound(seconds / 60); - data.minutes = minutes % 60; - hours = absRound(minutes / 60); - data.hours = hours % 24; + /** + * move the screen right + * @private + */ + exports._moveRight = function(event) { + this.xIncrement = -this.constants.keyboard.speed.y; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - days += absRound(hours / 24); - // Accurately convert days to years, assume start from year 0. - years = absRound(daysToYears(days)); - days -= absRound(yearsToDays(years)); + /** + * Zoom in, using the same method as the movement. + * @private + */ + exports._zoomIn = function(event) { + this.zoomIncrement = this.constants.keyboard.speed.zoom; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - // 30 days to a month - // TODO (iskren): Use anchor date (like 1st Jan) to compute this. - months += absRound(days / 30); - days %= 30; - // 12 months -> 1 year - years += absRound(months / 12); - months %= 12; + /** + * Zoom out + * @private + */ + exports._zoomOut = function(event) { + this.zoomIncrement = -this.constants.keyboard.speed.zoom; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - data.days = days; - data.months = months; - data.years = years; - }, - abs : function () { - this._milliseconds = Math.abs(this._milliseconds); - this._days = Math.abs(this._days); - this._months = Math.abs(this._months); + /** + * Stop zooming and unhighlight the zoom controls + * @private + */ + exports._stopZoom = function(event) { + this.zoomIncrement = 0; + event && event.preventDefault(); + }; - 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); - return this; - }, + /** + * Stop moving in the Y direction and unHighlight the up and down + * @private + */ + exports._yStopMoving = function(event) { + this.yIncrement = 0; + event && event.preventDefault(); + }; - weeks : function () { - return absRound(this.days() / 7); - }, - valueOf : function () { - return this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6; - }, + /** + * Stop moving in the X direction and unHighlight left and right. + * @private + */ + exports._xStopMoving = function(event) { + this.xIncrement = 0; + event && event.preventDefault(); + }; - humanize : function (withSuffix) { - var output = relativeTime(this, !withSuffix, this.localeData()); - if (withSuffix) { - output = this.localeData().pastFuture(+this, output); - } +/***/ }, +/* 58 */ +/***/ function(module, exports, __webpack_require__) { - return this.localeData().postformat(output); - }, + exports._resetLevels = function() { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.preassignedLevel == false) { + node.level = -1; + node.hierarchyEnumerated = false; + } + } + } + }; - add : function (input, val) { - // supports only 2.0-style add(1, 's') or add(moment) - var dur = moment.duration(input, val); + /** + * This is the main function to layout the nodes in a hierarchical way. + * It checks if the node details are supplied correctly + * + * @private + */ + exports._setupHierarchicalLayout = function() { + if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) { + if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") { + this.constants.hierarchicalLayout.levelSeparation *= -1; + } + else { + this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation); + } - this._milliseconds += dur._milliseconds; - this._days += dur._days; - this._months += dur._months; + if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "LR") { + if (this.constants.smoothCurves.enabled == true) { + this.constants.smoothCurves.type = "vertical"; + } + } + else { + if (this.constants.smoothCurves.enabled == true) { + this.constants.smoothCurves.type = "horizontal"; + } + } + // get the size of the largest hubs and check if the user has defined a level for a node. + var hubsize = 0; + var node, nodeId; + var definedLevel = false; + var undefinedLevel = false; - this._bubble(); + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.level != -1) { + definedLevel = true; + } + else { + undefinedLevel = true; + } + if (hubsize < node.edges.length) { + hubsize = node.edges.length; + } + } + } - return this; - }, + // if the user defined some levels but not all, alert and run without hierarchical layout + if (undefinedLevel == true && definedLevel == true) { + throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes."); + this.zoomExtent(true,this.constants.clustering.enabled); + if (!this.constants.clustering.enabled) { + this.start(); + } + } + else { + // setup the system to use hierarchical method. + this._changeConstants(); - subtract : function (input, val) { - var dur = moment.duration(input, val); + // define levels if undefined by the users. Based on hubsize + if (undefinedLevel == true) { + if (this.constants.hierarchicalLayout.layout == "hubsize") { + this._determineLevels(hubsize); + } + else { + this._determineLevelsDirected(); + } - this._milliseconds -= dur._milliseconds; - this._days -= dur._days; - this._months -= dur._months; + } + // check the distribution of the nodes per level. + var distribution = this._getDistribution(); - this._bubble(); + // place the nodes on the canvas. This also stablilizes the system. + this._placeNodesByHierarchy(distribution); - return this; - }, + // start the simulation. + this.start(); + } + } + }; - get : function (units) { - units = normalizeUnits(units); - return this[units.toLowerCase() + 's'](); - }, - as : function (units) { - var days, months; - units = normalizeUnits(units); + /** + * This function places the nodes on the canvas based on the hierarchial distribution. + * + * @param {Object} distribution | obtained by the function this._getDistribution() + * @private + */ + exports._placeNodesByHierarchy = function(distribution) { + var nodeId, node; - 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); - } - } - }, + // start placing all the level 0 nodes first. Then recursively position their branches. + for (var level in distribution) { + if (distribution.hasOwnProperty(level)) { - lang : moment.fn.lang, - locale : moment.fn.locale, + for (nodeId in distribution[level].nodes) { + if (distribution[level].nodes.hasOwnProperty(nodeId)) { + node = distribution[level].nodes[nodeId]; + if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { + if (node.xFixed) { + node.x = distribution[level].minPos; + node.xFixed = false; - toIsoString : deprecate( - 'toIsoString() is deprecated. Please use toISOString() instead ' + - '(notice the capitals)', - function () { - return this.toISOString(); + distribution[level].minPos += distribution[level].nodeSpacing; } - ), - - 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); + } + else { + if (node.yFixed) { + node.y = distribution[level].minPos; + node.yFixed = false; - if (!this.asSeconds()) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; + distribution[level].minPos += distribution[level].nodeSpacing; } + } + this._placeBranchNodes(node.edges,node.id,distribution,node.level); + } + } + } + } - 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' : ''); - }, + // stabilize the system after positioning. This function calls zoomExtent. + this._stabilize(); + }; - localeData : function () { - return this._locale; - } - }); - moment.duration.fn.toString = moment.duration.fn.toISOString; + /** + * This function get the distribution of levels based on hubsize + * + * @returns {Object} + * @private + */ + exports._getDistribution = function() { + var distribution = {}; + var nodeId, node, level; - function makeDurationGetter(name) { - moment.duration.fn[name] = function () { - return this._data[name]; - }; + // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time. + // the fix of X is removed after the x value has been set. + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + node.xFixed = true; + node.yFixed = true; + if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { + node.y = this.constants.hierarchicalLayout.levelSeparation*node.level; + } + else { + node.x = this.constants.hierarchicalLayout.levelSeparation*node.level; + } + if (distribution[node.level] === undefined) { + distribution[node.level] = {amount: 0, nodes: {}, minPos:0, nodeSpacing:0}; + } + distribution[node.level].amount += 1; + distribution[node.level].nodes[nodeId] = node; } + } - for (i in unitMillisecondFactors) { - if (hasOwnProp(unitMillisecondFactors, i)) { - makeDurationGetter(i.toLowerCase()); - } + // determine the largest amount of nodes of all levels + var maxCount = 0; + for (level in distribution) { + if (distribution.hasOwnProperty(level)) { + if (maxCount < distribution[level].amount) { + maxCount = distribution[level].amount; + } } + } - 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'); - }; + // set the initial position and spacing of each nodes accordingly + for (level in distribution) { + if (distribution.hasOwnProperty(level)) { + distribution[level].nodeSpacing = (maxCount + 1) * this.constants.hierarchicalLayout.nodeSpacing; + distribution[level].nodeSpacing /= (distribution[level].amount + 1); + distribution[level].minPos = distribution[level].nodeSpacing - (0.5 * (distribution[level].amount + 1) * distribution[level].nodeSpacing); + } + } - /************************************ - Default Locale - ************************************/ + return distribution; + }; - // 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; - } - }); + /** + * this function allocates nodes in levels based on the recursive branching from the largest hubs. + * + * @param hubsize + * @private + */ + exports._determineLevels = function(hubsize) { + var nodeId, node; + + // determine hubs + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.edges.length == hubsize) { + node.level = 0; + } + } + } + + // branch from hubs + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.level == 0) { + this._setLevel(1,node.edges,node.id); + } + } + } + }; + + /** + * this function allocates nodes in levels based on the recursive branching from the largest hubs. + * + * @param hubsize + * @private + */ + exports._determineLevelsDirected = function() { + var nodeId, node; + + // set first node to source + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + this.nodes[nodeId].level = 10000; + break; + } + } - /* EMBED_LOCALES */ + // branch from hubs + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.level == 10000) { + this._setLevelDirected(10000,node.edges,node.id); + } + } + } - /************************************ - Exposing Moment - ************************************/ - 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; - } + // branch from hubs + var minLevel = 10000; + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + minLevel = node.level < minLevel ? node.level : minLevel; } + } - // 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(); + // branch from hubs + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + node.level -= minLevel; } - }).call(this); - - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(64)(module))) + } + }; -/***/ }, -/* 59 */ -/***/ 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. + * Since hierarchical layout does not support: + * - smooth curves (based on the physics), + * - clustering (based on dynamic node counts) * - * Mousetrap is a simple keyboard shortcut library for Javascript with - * no external dependencies + * We disable both features so there will be no problems. * - * @version 1.1.2 - * @url craig.is/killing/mice + * @private */ + exports._changeConstants = function() { + this.constants.clustering.enabled = false; + this.constants.physics.barnesHut.enabled = false; + this.constants.physics.hierarchicalRepulsion.enabled = true; + this._loadSelectedForceSolver(); + if (this.constants.smoothCurves.enabled == true) { + this.constants.smoothCurves.dynamic = false; + } + this._configureSmoothCurves(); + }; - /** - * 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 = {}, + /** + * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes + * on a X position that ensures there will be no overlap. + * + * @param edges + * @param parentId + * @param distribution + * @param parentLevel + * @private + */ + exports._placeBranchNodes = function(edges, parentId, distribution, parentLevel) { + for (var i = 0; i < edges.length; i++) { + var childNode = null; + if (edges[i].toId == parentId) { + childNode = edges[i].from; + } + else { + childNode = edges[i].to; + } - /** - * direct map of string combinations to callbacks used for trigger() - * - * @type {Object} - */ - _direct_map = {}, + // if a node is conneceted to another node on the same level (or higher (means lower level))!, this is not handled here. + var nodeMoved = false; + if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { + if (childNode.xFixed && childNode.level > parentLevel) { + childNode.xFixed = false; + childNode.x = distribution[childNode.level].minPos; + nodeMoved = true; + } + } + else { + if (childNode.yFixed && childNode.level > parentLevel) { + childNode.yFixed = false; + childNode.y = distribution[childNode.level].minPos; + nodeMoved = true; + } + } - /** - * keeps track of what level each sequence is at since multiple - * sequences can start out with the same sequence - * - * @type {Object} - */ - _sequence_levels = {}, + if (nodeMoved == true) { + distribution[childNode.level].minPos += distribution[childNode.level].nodeSpacing; + if (childNode.edges.length > 1) { + this._placeBranchNodes(childNode.edges,childNode.id,distribution,childNode.level); + } + } + } + }; - /** - * 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, + /** + * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. + * + * @param level + * @param edges + * @param parentId + * @private + */ + exports._setLevel = function(level, edges, parentId) { + for (var i = 0; i < edges.length; i++) { + var childNode = null; + if (edges[i].toId == parentId) { + childNode = edges[i].from; + } + else { + childNode = edges[i].to; + } + if (childNode.level == -1 || childNode.level > level) { + childNode.level = level; + if (childNode.edges.length > 1) { + this._setLevel(level+1, childNode.edges, childNode.id); + } + } + } + }; - /** - * 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; + /** + * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. + * + * @param level + * @param edges + * @param parentId + * @private + */ + exports._setLevelDirected = function(level, edges, parentId) { + this.nodes[parentId].hierarchyEnumerated = true; + for (var i = 0; i < edges.length; i++) { + var childNode = null; + var direction = 1; + if (edges[i].toId == parentId) { + childNode = edges[i].from; + direction = -1; + } + else { + childNode = edges[i].to; + } + if (childNode.level == -1) { + childNode.level = level + direction; + } } - /** - * loop through to map numbers on the numeric keypad - */ - for (i = 0; i <= 9; ++i) { - _MAP[i + 96] = i; + for (var i = 0; i < edges.length; i++) { + var childNode = null; + if (edges[i].toId == parentId) {childNode = edges[i].from;} + else {childNode = edges[i].to;} + if (childNode.edges.length > 1 && childNode.hierarchyEnumerated === false) { + this._setLevelDirected(childNode.level, childNode.edges, childNode.id); + } } + }; - /** - * 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); - } - object.attachEvent('on' + type, callback); + /** + * Unfix nodes + * + * @private + */ + exports._restoreNodes = function() { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + this.nodes[nodeId].xFixed = false; + this.nodes[nodeId].yFixed = false; + } } + }; - /** - * takes the event and returns the key character - * - * @param {Event} e - * @return {string} - */ - function _characterFromEvent(e) { - // for keypress events we should return the character as is - if (e.type == 'keypress') { - return String.fromCharCode(e.which); - } +/***/ }, +/* 59 */ +/***/ function(module, exports, __webpack_require__) { - // for non keypress events the special maps are needed - if (_MAP[e.which]) { - return _MAP[e.which]; - } + var util = __webpack_require__(1); + var RepulsionMixin = __webpack_require__(61); + var HierarchialRepulsionMixin = __webpack_require__(62); + var BarnesHutMixin = __webpack_require__(63); - if (_KEYCODE_MAP[e.which]) { - return _KEYCODE_MAP[e.which]; - } + /** + * Toggling barnes Hut calculation on and off. + * + * @private + */ + exports._toggleBarnesHut = function () { + this.constants.physics.barnesHut.enabled = !this.constants.physics.barnesHut.enabled; + this._loadSelectedForceSolver(); + this.moving = true; + this.start(); + }; - // if it is not in the special map - return String.fromCharCode(e.which).toLowerCase(); + + /** + * This loads the node force solver based on the barnes hut or repulsion algorithm + * + * @private + */ + exports._loadSelectedForceSolver = function () { + // this overloads the this._calculateNodeForces + if (this.constants.physics.barnesHut.enabled == true) { + this._clearMixin(RepulsionMixin); + this._clearMixin(HierarchialRepulsionMixin); + + this.constants.physics.centralGravity = this.constants.physics.barnesHut.centralGravity; + this.constants.physics.springLength = this.constants.physics.barnesHut.springLength; + this.constants.physics.springConstant = this.constants.physics.barnesHut.springConstant; + this.constants.physics.damping = this.constants.physics.barnesHut.damping; + + this._loadMixin(BarnesHutMixin); } + else if (this.constants.physics.hierarchicalRepulsion.enabled == true) { + this._clearMixin(BarnesHutMixin); + this._clearMixin(RepulsionMixin); - /** - * 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; + this.constants.physics.centralGravity = this.constants.physics.hierarchicalRepulsion.centralGravity; + this.constants.physics.springLength = this.constants.physics.hierarchicalRepulsion.springLength; + this.constants.physics.springConstant = this.constants.physics.hierarchicalRepulsion.springConstant; + this.constants.physics.damping = this.constants.physics.hierarchicalRepulsion.damping; - // if the element has the class "mousetrap" then no need to stop - if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { - return false; - } + this._loadMixin(HierarchialRepulsionMixin); + } + else { + this._clearMixin(BarnesHutMixin); + this._clearMixin(HierarchialRepulsionMixin); + this.barnesHutTree = undefined; - // stop for input, select, and textarea - return tag_name == 'INPUT' || tag_name == 'SELECT' || tag_name == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true'); + this.constants.physics.centralGravity = this.constants.physics.repulsion.centralGravity; + this.constants.physics.springLength = this.constants.physics.repulsion.springLength; + this.constants.physics.springConstant = this.constants.physics.repulsion.springConstant; + this.constants.physics.damping = this.constants.physics.repulsion.damping; + + this._loadMixin(RepulsionMixin); } + }; - /** - * 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(','); + /** + * Before calculating the forces, we check if we need to cluster to keep up performance and we check + * if there is more than one node. If it is just one node, we dont calculate anything. + * + * @private + */ + exports._initializeForceCalculation = function () { + // stop calculation if there is only one node + if (this.nodeIndices.length == 1) { + this.nodes[this.nodeIndices[0]]._setForce(0, 0); + } + else { + // if there are too many nodes on screen, we cluster without repositioning + if (this.nodeIndices.length > this.constants.clustering.clusterThreshold && this.constants.clustering.enabled == true) { + this.clusterToFit(this.constants.clustering.reduceToNodes, false); + } + + // we now start the force calculation + this._calculateForces(); } + }; - /** - * 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 || {}; - var active_sequences = false, - key; + /** + * Calculate the external forces acting on the nodes + * Forces are caused by: edges, repulsing forces between nodes, gravity + * @private + */ + exports._calculateForces = function () { + // Gravity is required to keep separated groups from floating off + // the forces are reset to zero in this loop by using _setForce instead + // of _addForce + + this._calculateGravitationalForces(); + this._calculateNodeForces(); - for (key in _sequence_levels) { - if (do_not_reset[key]) { - active_sequences = true; - continue; - } - _sequence_levels[key] = 0; + if (this.constants.physics.springConstant > 0) { + if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { + this._calculateSpringForcesWithSupport(); + } + else { + if (this.constants.physics.hierarchicalRepulsion.enabled == true) { + this._calculateHierarchicalSpringForces(); } - - if (!active_sequences) { - _inside_sequence = false; + else { + this._calculateSpringForces(); } + } } + }; - /** - * 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 = []; - // if there are no events related to this keycode - if (!_callbacks[character]) { - return []; - } + /** + * Smooth curves are created by adding invisible nodes in the center of the edges. These nodes are also + * handled in the calculateForces function. We then use a quadratic curve with the center node as control. + * This function joins the datanodes and invisible (called support) nodes into one object. + * We do this so we do not contaminate this.nodes with the support nodes. + * + * @private + */ + exports._updateCalculationNodes = function () { + if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { + this.calculationNodes = {}; + this.calculationNodeIndices = []; - // if a modifier key is coming up on its own we should allow it - if (action == 'keyup' && _isModifier(character)) { - modifiers = [character]; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + this.calculationNodes[nodeId] = this.nodes[nodeId]; } + } + var supportNodes = this.sectors['support']['nodes']; + for (var supportNodeId in supportNodes) { + if (supportNodes.hasOwnProperty(supportNodeId)) { + if (this.edges.hasOwnProperty(supportNodes[supportNodeId].parentEdgeId)) { + this.calculationNodes[supportNodeId] = supportNodes[supportNodeId]; + } + else { + supportNodes[supportNodeId]._setForce(0, 0); + } + } + } - // 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]; - - // 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; - } + for (var idx in this.calculationNodes) { + if (this.calculationNodes.hasOwnProperty(idx)) { + this.calculationNodeIndices.push(idx); + } + } + } + else { + this.calculationNodes = this.nodes; + this.calculationNodeIndices = this.nodeIndices; + } + }; - // 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)) { - // 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); - } + /** + * this function applies the central gravity effect to keep groups from floating off + * + * @private + */ + exports._calculateGravitationalForces = function () { + var dx, dy, distance, node, i; + var nodes = this.calculationNodes; + var gravity = this.constants.physics.centralGravity; + var gravityForce = 0; - matches.push(callback); - } - } + for (i = 0; i < this.calculationNodeIndices.length; i++) { + node = nodes[this.calculationNodeIndices[i]]; + node.damping = this.constants.physics.damping; // possibly add function to alter damping properties of clusters. + // gravity does not apply when we are in a pocket sector + if (this._sector() == "default" && gravity != 0) { + dx = -node.x; + dy = -node.y; + distance = Math.sqrt(dx * dx + dy * dy); - return matches; + gravityForce = (distance == 0) ? 0 : (gravity / distance); + node.fx = dx * gravityForce; + node.fy = dy * gravityForce; + } + else { + node.fx = 0; + node.fy = 0; + } } + }; - /** - * takes a key event and figures out what the modifiers are - * - * @param {Event} e - * @returns {Array} - */ - function _eventModifiers(e) { - var modifiers = []; - if (e.shiftKey) { - modifiers.push('shift'); - } - if (e.altKey) { - modifiers.push('alt'); - } - if (e.ctrlKey) { - modifiers.push('ctrl'); - } + /** + * this function calculates the effects of the springs in the case of unsmooth curves. + * + * @private + */ + exports._calculateSpringForces = function () { + var edgeLength, edge, edgeId; + var dx, dy, fx, fy, springForce, distance; + var edges = this.edges; - if (e.metaKey) { - modifiers.push('meta'); - } + // forces caused by the edges, modelled as springs + for (edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + edge = edges[edgeId]; + 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.physics.springLength; + // this implies that the edges between big clusters are longer + edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; - return modifiers; - } + dx = (edge.from.x - edge.to.x); + dy = (edge.from.y - edge.to.y); + distance = Math.sqrt(dx * dx + dy * dy); - /** - * 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 (distance == 0) { + distance = 0.01; } - if (e.stopPropagation) { - e.stopPropagation(); - } + // the 1/distance is so the fx and fy can be calculated without sine or cosine. + springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - e.returnValue = false; - e.cancelBubble = true; + fx = dx * springForce; + fy = dy * springForce; + + edge.from.fx += fx; + edge.from.fy += fy; + edge.to.fx -= fx; + edge.to.fy -= fy; + } } + } } + }; - /** - * 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) { + /** + * This function calculates the springforces on the nodes, accounting for the support nodes. + * + * @private + */ + exports._calculateSpringForcesWithSupport = function () { + var edgeLength, edge, edgeId, combinedClusterSize; + var edges = this.edges; + + // forces caused by the edges, modelled as springs + for (edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + edge = edges[edgeId]; + if (edge.connected) { + // only calculate forces if nodes are in the same sector + if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { + if (edge.via != null) { + var node1 = edge.to; + var node2 = edge.via; + var node3 = edge.from; - // 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; + edgeLength = edge.physics.springLength; - // keep a list of which sequences were matches for later - do_not_reset[callbacks[i].seq] = 1; - _fireCallback(callbacks[i].callback, e); - continue; - } + combinedClusterSize = node1.clusterSize + node3.clusterSize - 2; - // 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); + // this implies that the edges between big clusters are longer + edgeLength += combinedClusterSize * this.constants.clustering.edgeGrowth; + this._calculateSpringForce(node1, node2, 0.5 * edgeLength); + this._calculateSpringForce(node2, node3, 0.5 * edgeLength); } + } } - - // 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) { - // 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; + /** + * This is the code actually performing the calculation for the function above. It is split out to avoid repetition. + * + * @param node1 + * @param node2 + * @param edgeLength + * @private + */ + exports._calculateSpringForce = function (node1, node2, edgeLength) { + var dx, dy, fx, fy, springForce, distance; - var character = _characterFromEvent(e); + dx = (node1.x - node2.x); + dy = (node1.y - node2.y); + distance = Math.sqrt(dx * dx + dy * dy); - // no character found then stop - if (!character) { - return; - } + if (distance == 0) { + distance = 0.01; + } - if (e.type == 'keyup' && _ignore_next_keyup == character) { - _ignore_next_keyup = false; - return; - } + // the 1/distance is so the fx and fy can be calculated without sine or cosine. + springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - _handleCharacter(character, e); - } + fx = dx * springForce; + fy = dy * springForce; - /** - * 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'; - } + node1.fx += fx; + node1.fy += fy; + node2.fx -= fx; + node2.fy -= fy; + }; - /** - * 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); - } - /** - * 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) { + /** + * Load the HTML for the physics config and bind it + * @private + */ + exports._loadPhysicsConfiguration = function () { + if (this.physicsConfiguration === undefined) { + this.backupConstants = {}; + util.deepExtend(this.backupConstants,this.constants); - // 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; - } + var hierarchicalLayoutDirections = ["LR", "RL", "UD", "DU"]; + this.physicsConfiguration = document.createElement('div'); + this.physicsConfiguration.className = "PhysicsConfiguration"; + this.physicsConfiguration.innerHTML = '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
Simulation 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); - if (_MAP.hasOwnProperty(key)) { - _REVERSE_MAP[_MAP[key]] = key; - } - } - } - return _REVERSE_MAP; - } + var rangeElement; + rangeElement = document.getElementById('graph_BH_gc'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_gc', -1, "physics_barnesHut_gravitationalConstant"); + rangeElement = document.getElementById('graph_BH_cg'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_cg', 1, "physics_centralGravity"); + rangeElement = document.getElementById('graph_BH_sc'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sc', 1, "physics_springConstant"); + rangeElement = document.getElementById('graph_BH_sl'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sl', 1, "physics_springLength"); + rangeElement = document.getElementById('graph_BH_damp'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_damp', 1, "physics_damping"); + + rangeElement = document.getElementById('graph_R_nd'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_nd', 1, "physics_repulsion_nodeDistance"); + rangeElement = document.getElementById('graph_R_cg'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_cg', 1, "physics_centralGravity"); + rangeElement = document.getElementById('graph_R_sc'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sc', 1, "physics_springConstant"); + rangeElement = document.getElementById('graph_R_sl'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sl', 1, "physics_springLength"); + rangeElement = document.getElementById('graph_R_damp'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_damp', 1, "physics_damping"); + + rangeElement = document.getElementById('graph_H_nd'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); + rangeElement = document.getElementById('graph_H_cg'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_cg', 1, "physics_centralGravity"); + rangeElement = document.getElementById('graph_H_sc'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sc', 1, "physics_springConstant"); + rangeElement = document.getElementById('graph_H_sl'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sl', 1, "physics_springLength"); + rangeElement = document.getElementById('graph_H_damp'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_damp', 1, "physics_damping"); + rangeElement = document.getElementById('graph_H_direction'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_direction', hierarchicalLayoutDirections, "hierarchicalLayout_direction"); + rangeElement = document.getElementById('graph_H_levsep'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_levsep', 1, "hierarchicalLayout_levelSeparation"); + rangeElement = document.getElementById('graph_H_nspac'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nspac', 1, "hierarchicalLayout_nodeSpacing"); - /** - * 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) { + var radioButton1 = document.getElementById("graph_physicsMethod1"); + var radioButton2 = document.getElementById("graph_physicsMethod2"); + var radioButton3 = document.getElementById("graph_physicsMethod3"); + radioButton2.checked = true; + if (this.constants.physics.barnesHut.enabled) { + radioButton1.checked = true; + } + if (this.constants.hierarchicalLayout.enabled) { + radioButton3.checked = true; + } - // 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'; - } + var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); + var graph_repositionNodes = document.getElementById("graph_repositionNodes"); + var graph_generateOptions = document.getElementById("graph_generateOptions"); - // modifier keys don't work as expected with keypress, - // switch to keydown - if (action == 'keypress' && modifiers.length) { - action = 'keydown'; - } + graph_toggleSmooth.onclick = graphToggleSmoothCurves.bind(this); + graph_repositionNodes.onclick = graphRepositionNodes.bind(this); + graph_generateOptions.onclick = graphGenerateOptions.bind(this); + if (this.constants.smoothCurves == true && this.constants.dynamicSmoothCurves == false) { + graph_toggleSmooth.style.background = "#A4FF56"; + } + else { + graph_toggleSmooth.style.background = "#FF8532"; + } - return action; - } - /** - * 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) { + switchConfigurations.apply(this); - // start off by adding a sequence level record for this combination - // and setting the level to 0 - _sequence_levels[combo] = 0; + radioButton1.onchange = switchConfigurations.bind(this); + radioButton2.onchange = switchConfigurations.bind(this); + radioButton3.onchange = switchConfigurations.bind(this); + } + }; - // if there is no action pick the best one for the first key - // in the sequence - if (!action) { - action = _pickBestAction(keys[0], []); - } + /** + * This overwrites the this.constants. + * + * @param constantsVariableName + * @param value + * @private + */ + exports._overWriteGraphConstants = function (constantsVariableName, value) { + var nameArray = constantsVariableName.split("_"); + if (nameArray.length == 1) { + this.constants[nameArray[0]] = value; + } + else if (nameArray.length == 2) { + this.constants[nameArray[0]][nameArray[1]] = value; + } + else if (nameArray.length == 3) { + this.constants[nameArray[0]][nameArray[1]][nameArray[2]] = value; + } + }; - /** - * 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(); - }, - /** - * 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 function is bound to the toggle smooth curves button. That is also why it is not in the prototype. + */ + function graphToggleSmoothCurves () { + this.constants.smoothCurves.enabled = !this.constants.smoothCurves.enabled; + var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); + if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} + else {graph_toggleSmooth.style.background = "#FF8532";} - // 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._configureSmoothCurves(false); + } - // weird race condition if a sequence ends with the key - // another sequence begins with - setTimeout(_resetSequences, 10); - }, - i; + /** + * this function is used to scramble the nodes + * + */ + function graphRepositionNodes () { + for (var nodeId in this.calculationNodes) { + if (this.calculationNodes.hasOwnProperty(nodeId)) { + this.calculationNodes[nodeId].vx = 0; this.calculationNodes[nodeId].vy = 0; + this.calculationNodes[nodeId].fx = 0; this.calculationNodes[nodeId].fy = 0; + } + } + if (this.constants.hierarchicalLayout.enabled == true) { + this._setupHierarchicalLayout(); + showValueOfRange.call(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); + showValueOfRange.call(this, 'graph_H_cg', 1, "physics_centralGravity"); + showValueOfRange.call(this, 'graph_H_sc', 1, "physics_springConstant"); + showValueOfRange.call(this, 'graph_H_sl', 1, "physics_springLength"); + showValueOfRange.call(this, 'graph_H_damp', 1, "physics_damping"); + } + else { + this.repositionNodes(); + } + this.moving = true; + this.start(); + } - // 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); + /** + * this is used to generate an options file from the playing with physics system. + */ + function graphGenerateOptions () { + var options = "No options are required, default values used."; + var optionsSpecific = []; + var radioButton1 = document.getElementById("graph_physicsMethod1"); + var radioButton2 = document.getElementById("graph_physicsMethod2"); + if (radioButton1.checked == true) { + if (this.constants.physics.barnesHut.gravitationalConstant != this.backupConstants.physics.barnesHut.gravitationalConstant) {optionsSpecific.push("gravitationalConstant: " + this.constants.physics.barnesHut.gravitationalConstant);} + if (this.constants.physics.centralGravity != this.backupConstants.physics.barnesHut.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} + if (this.constants.physics.springLength != this.backupConstants.physics.barnesHut.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} + if (this.constants.physics.springConstant != this.backupConstants.physics.barnesHut.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} + if (this.constants.physics.damping != this.backupConstants.physics.barnesHut.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} + if (optionsSpecific.length != 0) { + options = "var options = {"; + options += "physics: {barnesHut: {"; + for (var i = 0; i < optionsSpecific.length; i++) { + options += optionsSpecific[i]; + if (i < optionsSpecific.length - 1) { + options += ", " + } + } + options += '}}' + } + if (this.constants.smoothCurves.enabled != this.backupConstants.smoothCurves.enabled) { + if (optionsSpecific.length == 0) {options = "var options = {";} + else {options += ", "} + options += "smoothCurves: " + this.constants.smoothCurves.enabled; + } + if (options != "No options are required, default values used.") { + options += '};' + } + } + else if (radioButton2.checked == true) { + options = "var options = {"; + options += "physics: {barnesHut: {enabled: false}"; + if (this.constants.physics.repulsion.nodeDistance != this.backupConstants.physics.repulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.repulsion.nodeDistance);} + if (this.constants.physics.centralGravity != this.backupConstants.physics.repulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} + if (this.constants.physics.springLength != this.backupConstants.physics.repulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} + if (this.constants.physics.springConstant != this.backupConstants.physics.repulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} + if (this.constants.physics.damping != this.backupConstants.physics.repulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} + if (optionsSpecific.length != 0) { + options += ", repulsion: {"; + for (var i = 0; i < optionsSpecific.length; i++) { + options += optionsSpecific[i]; + if (i < optionsSpecific.length - 1) { + options += ", " + } } + options += '}}' + } + if (optionsSpecific.length == 0) {options += "}"} + if (this.constants.smoothCurves != this.backupConstants.smoothCurves) { + options += ", smoothCurves: " + this.constants.smoothCurves; + } + options += '};' } - - /** - * 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, ' '); - - var sequence = combination.split(' '), - i, - key, - keys, - modifiers = []; - - // 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); + else { + options = "var options = {"; + if (this.constants.physics.hierarchicalRepulsion.nodeDistance != this.backupConstants.physics.hierarchicalRepulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.hierarchicalRepulsion.nodeDistance);} + if (this.constants.physics.centralGravity != this.backupConstants.physics.hierarchicalRepulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} + if (this.constants.physics.springLength != this.backupConstants.physics.hierarchicalRepulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} + if (this.constants.physics.springConstant != this.backupConstants.physics.hierarchicalRepulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} + if (this.constants.physics.damping != this.backupConstants.physics.hierarchicalRepulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} + if (optionsSpecific.length != 0) { + options += "physics: {hierarchicalRepulsion: {"; + for (var i = 0; i < optionsSpecific.length; i++) { + options += optionsSpecific[i]; + if (i < optionsSpecific.length - 1) { + options += ", "; + } } - - // take the keys from this pattern and figure out what the actual - // pattern is all about - keys = combination === '+' ? ['+'] : combination.split('+'); - - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - - // normalize key names - if (_SPECIAL_ALIASES[key]) { - key = _SPECIAL_ALIASES[key]; - } - - // 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'); - } - - // if this key is a modifier then add it to the list of modifiers - if (_isModifier(key)) { - modifiers.push(key); - } + options += '}},'; + } + options += 'hierarchicalLayout: {'; + optionsSpecific = []; + if (this.constants.hierarchicalLayout.direction != this.backupConstants.hierarchicalLayout.direction) {optionsSpecific.push("direction: " + this.constants.hierarchicalLayout.direction);} + if (Math.abs(this.constants.hierarchicalLayout.levelSeparation) != this.backupConstants.hierarchicalLayout.levelSeparation) {optionsSpecific.push("levelSeparation: " + this.constants.hierarchicalLayout.levelSeparation);} + if (this.constants.hierarchicalLayout.nodeSpacing != this.backupConstants.hierarchicalLayout.nodeSpacing) {optionsSpecific.push("nodeSpacing: " + this.constants.hierarchicalLayout.nodeSpacing);} + if (optionsSpecific.length != 0) { + for (var i = 0; i < optionsSpecific.length; i++) { + options += optionsSpecific[i]; + if (i < optionsSpecific.length - 1) { + options += ", " + } } + options += '}' + } + else { + options += "enabled:true}"; + } + options += '};' + } - // depending on what the key combination is - // we will try to pick the best event for it - action = _pickBestAction(key, modifiers, action); - - // make sure to initialize array if this is the first time - // a callback is added for this key - if (!_callbacks[key]) { - _callbacks[key] = []; - } - // remove an existing match if there is one - _getMatches(key, modifiers, action, !sequence_name, combination); + this.optionsDiv.innerHTML = options; + } - // 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 - }); + /** + * this is used to switch between barnesHut, repulsion and hierarchical. + * + */ + function switchConfigurations () { + var ids = ["graph_BH_table", "graph_R_table", "graph_H_table"]; + var radioButton = document.querySelector('input[name="graph_physicsMethod"]:checked').value; + var tableId = "graph_" + radioButton + "_table"; + var table = document.getElementById(tableId); + table.style.display = "block"; + for (var i = 0; i < ids.length; i++) { + if (ids[i] != tableId) { + table = document.getElementById(ids[i]); + table.style.display = "none"; + } } - - /** - * 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); - } + this._restoreNodes(); + if (radioButton == "R") { + this.constants.hierarchicalLayout.enabled = false; + this.constants.physics.hierarchicalRepulsion.enabled = false; + this.constants.physics.barnesHut.enabled = false; } + else if (radioButton == "H") { + if (this.constants.hierarchicalLayout.enabled == false) { + this.constants.hierarchicalLayout.enabled = true; + this.constants.physics.hierarchicalRepulsion.enabled = true; + this.constants.physics.barnesHut.enabled = false; + this.constants.smoothCurves.enabled = false; + this._setupHierarchicalLayout(); + } + } + else { + this.constants.hierarchicalLayout.enabled = false; + this.constants.physics.hierarchicalRepulsion.enabled = false; + this.constants.physics.barnesHut.enabled = true; + } + this._loadSelectedForceSolver(); + var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); + if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} + else {graph_toggleSmooth.style.background = "#FF8532";} + this.moving = true; + this.start(); + } - // start! - _addEvent(document, 'keypress', _handleKey); - _addEvent(document, 'keydown', _handleKey); - _addEvent(document, 'keyup', _handleKey); - - var mousetrap = { - /** - * 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; - }, + /** + * this generates the ranges depending on the iniital values. + * + * @param id + * @param map + * @param constantsVariableName + */ + function showValueOfRange (id,map,constantsVariableName) { + var valueId = id + "_value"; + var rangeValue = document.getElementById(id).value; - /** - * 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; - }, + if (map instanceof Array) { + document.getElementById(valueId).value = map[parseInt(rangeValue)]; + this._overWriteGraphConstants(constantsVariableName,map[parseInt(rangeValue)]); + } + else { + document.getElementById(valueId).value = parseInt(map) * parseFloat(rangeValue); + this._overWriteGraphConstants(constantsVariableName, parseInt(map) * parseFloat(rangeValue)); + } - /** - * 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; - }, + if (constantsVariableName == "hierarchicalLayout_direction" || + constantsVariableName == "hierarchicalLayout_levelSeparation" || + constantsVariableName == "hierarchicalLayout_nodeSpacing") { + this._setupHierarchicalLayout(); + } + this.moving = true; + this.start(); + } - /** - * 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; +/***/ }, +/* 60 */ +/***/ function(module, exports, __webpack_require__) { + function webpackContext(req) { + throw new Error("Cannot find module '" + req + "'."); + } + webpackContext.resolve = webpackContext; + webpackContext.keys = function() { return []; }; + module.exports = webpackContext; /***/ }, -/* 60 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { /** @@ -31317,7 +31353,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 61 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { /** @@ -31476,7 +31512,7 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 62 */ +/* 63 */ /***/ function(module, exports, __webpack_require__) { /** @@ -31880,18 +31916,6 @@ return /******/ (function(modules) { // webpackBootstrap }; -/***/ }, -/* 63 */ -/***/ function(module, exports, __webpack_require__) { - - function webpackContext(req) { - throw new Error("Cannot find module '" + req + "'."); - } - webpackContext.resolve = webpackContext; - webpackContext.keys = function() { return []; }; - module.exports = webpackContext; - - /***/ }, /* 64 */ /***/ function(module, exports, __webpack_require__) { diff --git a/dist/vis.map b/dist/vis.map index 30a6bac2..476b78ca 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","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","easeInOutQuad","end","duration","change","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","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","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","Core","newDataSet","initialLoad","setWindow","animate","fit","setGroups","groups","setSelection","focus","getSelection","itemData","middle","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","minimumStep","containerHeight","customRange","current","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","slice","isMajor","now","hours","minutes","seconds","milliseconds","clone","direction","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","dragging","time","initTime","done","initStart","initEnd","changed","_applyRange","anyChanged","_cancelAnimation","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","first","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","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","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","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","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","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","onMoving","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","_removeItem","groupData","groupOptions","oldGroupId","oldGroup","itemFromTarget","selected","dragLeftItem","dragRightItem","itemProps","newProps","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","itemSetFromTarget","side","iconSize","iconSpacing","textArea","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","lastStart","_updateGraph","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_convertXcoordinates","_getYRanges","_updateYAxis","_convertYcoordinates","_drawLineGraph","_drawBarGraphs","dataContainer","_applySampling","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedData","barCombinedDataLeft","barCombinedDataRight","ignore","intersections","_getDataIntersections","_getStackedBarYRange","combinedData","accumulated","xpos","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","_toggleAxisVisiblity","drawIcons","axisUsed","coreDistance","drawData","barPoints","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","svgHeight","_catmullRom","_linear","dFill","_drawPoints","datapoints","xValue","yValue","extractedData","_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","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","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","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","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","layout","freezeForStabilization","smoothCurves","dynamic","roundness","dynamicSmoothCurves","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","hoverObj","controlNodesActive","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","stabilized","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","Activator","_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","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","pinch","_onTap","_onDoubleTap","_onRelease","_onMouseMoveTitle","reset","isActive","_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","emitEvent","oldNodesData","_updateSelection","angle","_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","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","dataArray","allowedToMoveX","allowedToMoveY","focusOnNode","nodePosition","requiredScale","canvasCenter","distanceFromCenter","active","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","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","dynamicEdges","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","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","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","listeners","events","args","scrollTop","scrollTopMin","_initAutoResize","component","_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","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","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","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_RESULT__","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","VERSION","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","trigger","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","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","returnValues","_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","supportNodes","targetNode","targetViaNode","connectionEdge","alert","smooth","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","wrapper","navigationDivs","navigationDivActions","_stopMovement","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","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","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","nameArray","global","dfl","hasOwnProp","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","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","loadLocale","oldLocale","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","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","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","_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","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","webpackContext","req","resolve","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","easeInOutQuad","end","duration","change","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","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","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","Core","newDataSet","initialLoad","setWindow","animate","fit","setGroups","groups","setSelection","focus","getSelection","itemData","middle","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","minimumStep","containerHeight","customRange","current","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","slice","isMajor","now","hours","minutes","seconds","milliseconds","clone","direction","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","dragging","time","initTime","done","initStart","initEnd","changed","_applyRange","anyChanged","_cancelAnimation","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","first","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","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","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","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","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","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","onMoving","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","_removeItem","groupData","groupOptions","oldGroupId","oldGroup","itemFromTarget","selected","dragLeftItem","dragRightItem","itemProps","newProps","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","itemSetFromTarget","side","iconSize","iconSpacing","textArea","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","lastStart","_updateGraph","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_convertXcoordinates","_getYRanges","_updateYAxis","_convertYcoordinates","_drawLineGraph","_drawBarGraphs","dataContainer","_applySampling","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedData","barCombinedDataLeft","barCombinedDataRight","ignore","intersections","_getDataIntersections","_getStackedBarYRange","combinedData","accumulated","xpos","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","_toggleAxisVisiblity","drawIcons","axisUsed","coreDistance","drawData","barPoints","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","svgHeight","_catmullRom","_linear","dFill","_drawPoints","datapoints","xValue","yValue","extractedData","_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","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","_updateContents","_updateTitle","removeAttribute","_updateDataAttributes","dataAttributes","setAttribute","itemSetHeight","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","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","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","layout","freezeForStabilization","smoothCurves","dynamic","roundness","dynamicSmoothCurves","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","hoverObj","controlNodesActive","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","stabilized","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","Activator","_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","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","pinch","_onTap","_onDoubleTap","_onRelease","_onMouseMoveTitle","reset","isActive","_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","emitEvent","oldNodesData","_updateSelection","angle","_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","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","dataArray","allowedToMoveX","allowedToMoveY","focusOnNode","nodePosition","requiredScale","canvasCenter","distanceFromCenter","active","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","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","dynamicEdges","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","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","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","listeners","events","args","scrollTop","scrollTopMin","_initAutoResize","component","_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","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","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","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_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","trigger","__WEBPACK_AMD_DEFINE_RESULT__","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","VERSION","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","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","global","dfl","hasOwnProp","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","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","loadLocale","oldLocale","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","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","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","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","returnValues","_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","supportNodes","targetNode","targetViaNode","connectionEdge","alert","smooth","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","wrapper","navigationDivs","navigationDivActions","_stopMovement","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","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","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","nameArray","webpackContext","req","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 diff --git a/dist/vis.min.js b/dist/vis.min.js index 9bcf6793..8cb5225d 100644 --- a/dist/vis.min.js +++ b/dist/vis.min.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.3.1-SNAPSHOT - * @date 2014-09-03 + * @date 2014-09-05 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -25,13 +25,13 @@ !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,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},exports.easeInOutQuad=function(t,e,i,s){var o=i-e;return t/=s/2,1>t?o/2*t*t+e:(t--,-o/2*(t*(t-2)-1)+e)}},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,s){var o;return e.hasOwnProperty(t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==s?i.insertBefore(o,s):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==s?i.insertBefore(o,s):i.appendChild(o)),e[t].used.push(o),o},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(49),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){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");var n=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:n._toScreen.bind(n),toGlobalScreen:n._toGlobalScreen.bind(n),toTime:n._toTime.bind(n),toGlobalTime:n._toGlobalTime.bind(n)}},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(49),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=new h,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)if(void 0!=this.options.start||void 0!=this.options.end){var s=void 0!=this.options.start?this.options.start:null,o=void 0!=this.options.end?this.options.end:null;this.setWindow(s,o,{animate:!1})}else this.fit({animate:!1})},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,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],s=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),o=null,n=null;if(s.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===o||o>e)&&(o=e),(null===n||i>n)&&(n=i)}),null!==o&&null!==n){var r=(o+n)/2,a=Math.max(this.range.end-this.range.start,1.1*(n-o)),h=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(r-a/2,r+a/2,h)}}},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,s){var n=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:n._toScreen.bind(n),toGlobalScreen:n._toGlobalScreen.bind(n),toTime:n._toTime.bind(n),toGlobalTime:n._toGlobalTime.bind(n)}},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),s&&this.setGroups(s),e?this.setItems(e):this.redraw()}var o=(i(49),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=new h,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&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]):!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.deadSpace=0,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=void 0===o.min?t:o.min,this._end=void 0===o.max?e:o.max,t==e&&(this._start=t-.75,this._end=e+1),this.autoScale&&this.setMinimumStep(i,s),this.setFirst(o)},e.prototype.setMinimumStep=function(t,e){var i=this._end-this._start,s=1.2*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.setFirst=function(t){void 0===t&&(t={});var e=void 0===t.min?this._start-2*this.scale*this.minorSteps[this.stepIndex]:t.min,i=void 0===t.max?this._end+this.scale*this.minorSteps[this.stepIndex]:t.max;this.marginEnd=void 0===t.max?this.roundToMinor(i):t.max,this.marginStart=void 0===t.min?this.roundToMinor(e):t.min,this.deadSpace=this.roundToMinor(i)-i+this.roundToMinor(e)-e,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.animateTimer=null,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","activate"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e,i){function s(){if(!a.props.touch.dragging){var t=(new Date).valueOf(),e=t-c,i=e>l,f=i||null===o?o:r.easeInOutQuad(e,h,o,l),m=i||null===n?n:r.easeInOutQuad(e,d,n,l);u=a._applyRange(f,m),p=p||u,u&&a.body.emitter.emit("rangechange",{start:new Date(a.start),end:new Date(a.end)}),i?p&&a.body.emitter.emit("rangechanged",{start:new Date(a.start),end:new Date(a.end)}):a.animateTimer=setTimeout(s,20)}}var o=void 0!=t?r.convert(t,"Date").valueOf():null,n=void 0!=e?r.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var a=this,h=this.start,d=this.end,l="number"==typeof i?i:500,c=(new Date).valueOf(),p=!1;return s()}var u=this._applyRange(o,n);if(u){var f={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",f),this.body.emitter.emit("rangechanged",f)}},s.prototype._cancelAnimation=function(){this.animateTimer&&(clearTimeout(this.animateTimer),this.animateTimer=null)},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.props.touch.dragging=!0,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.props.touch.dragging=!1,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,locales:a,locale:"en"},this.options=o.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var o=i(1),n=i(18),r=i(40),a=i(44);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","locale","locales"],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((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),s=this.options.locales[this.options.locale],o=s.current+" "+s.time+": "+r(e).format("dddd, MMMM Do YYYY, H:mm:ss");o=o.charAt(0).toUpperCase()+o.substring(1),this.bar.style.left=i+"px",this.bar.title=o}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)},s.prototype.setCurrentTime=function(t){var e=o.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},s.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1,locales:h,locale:"en"},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),a=i(40),h=i(44);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime","locale","locales"],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),i=this.options.locales[this.options.locale],s=i.time+": "+a(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss");s=s.charAt(0).toUpperCase()+s.substring(1),this.bar.style.left=e+"px",this.bar.title=s}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=n.convert(t,"Date"),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,s){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,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}}},this.linegraphOptions=s,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","customRange"];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||void 0!==this.linegraphOptions.visibility[r]&&1!=this.linegraphOptions.visibility[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,e=0;for(var i in this.groups)this.groups.hasOwnProperty(i)&&(1!=this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&1!=this.linegraphOptions.visibility[i]||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.options.customRange[this.options.orientation]);this.step=i;var s=(this.dom.frame.offsetHeight-i.deadSpace*(this.dom.frame.offsetHeight/i.marginRange))/((i.marginRange-i.deadSpace)/i.step);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.dom.frame.offsetHeight/s-o);for(var h=0;.5*r>h;h++)i.previous();o=this.height/s}else o+=.25;this.valueAtZero=i.marginEnd;var d=0,l=1;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),l++}this.conversionFactor=0==this.master?c/(this.valueAtZero-i.current):this.dom.frame.offsetHeight/i.marginRange;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.convertValue=function(t){var e=this.valueAtZero-t,i=e*this.conversionFactor;return i},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="0",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(t)})}}},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,s){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.linegraphOptions=s,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||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||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||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||(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||void 0!==this.linegraphOptions.visibility[a]&&1!=this.linegraphOptions.visibility[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,handleOverlap:"overlap",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,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},groups:{visibility:{}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1;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("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.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new c(this.body,this.options.legend,"right",this.options.groups),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];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){var d=this.body.util.toGlobalTime(-this.body.domProps.root.width),l=this.body.util.toGlobalTime(2*this.body.domProps.root.width),c={};for(this._getRelevantData(a,c,d,l),e=0;e0)for(r=0;rs){d.push(h);break}d.push(h)}}else for(a=0;ai&&h.x0)for(var s=0;s0){var n=1,r=o.length,a=this.body.util.toGlobalScreen(o[o.length-1].x)-this.body.util.toGlobalScreen(o[0].x),h=r/a;n=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=[],l=0;r>l;l+=n)d.push(o[l]);e[t[s]]=d}}},s.prototype._getYRanges=function(t,e,i){var s,o,n,r,a,h=[],d=[];if(t.length>0){for(n=0;n0)if(o=this.groups[t[n]],"line"==o.options.style||"stack"!=o.options.barChart.handleOverlap){var l=s[0].y,c=s[0].y;for(r=0;rs[r].y?s[r].y:l,c=c0&&(h.sort(function(t,e){return t.x==e.x?t.groupId-e.groupId:t.x-e.x}),p={},this._getDataIntersections(p,h),i.__barchartLeft=this._getStackedBarYRange(p,h),i.__barchartLeft.yAxisOrientation="left",t.push("__barchartLeft")),d.length>0&&(d.sort(function(t,e){return t.x==e.x?t.groupId-e.groupId:t.x-e.x}),p={},this._getDataIntersections(p,d),i.__barchartRight=this._getStackedBarYRange(p,d),i.__barchartRight.yAxisOrientation="right",t.push("__barchartRight"))}},s.prototype._getStackedBarYRange=function(t,e){for(var i,s=e[0].y,o=e[0].y,n=0;ne[n].y?e[n].y:s,o=ot[r].accumulated?t[r].accumulated:s,o=o0){for(var c=0;ci?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,-1!=t.indexOf("__barchartLeft")&&t.splice(t.indexOf("__barchartLeft"),1),-1!=t.indexOf("__barchartRight")&&t.splice(t.indexOf("__barchartRight"),1),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._drawBarGraphs=function(t,e){var i,s,o,r,a,h,d=[],l={},c=0;for(a=0;a0&&(i=Math.min(i,Math.abs(d[a-1].x-s))),o=this._getSafeDrawData(i,r,p);else{var f=a+(l[s].amount-l[s].resolved),m=a-(l[s].resolved+1);f0&&(i=Math.min(i,Math.abs(d[m].x-s))),o=this._getSafeDrawData(i,r,p),l[s].resolved+=1,"stack"==r.options.barChart.handleOverlap?(u=l[s].accumulated,l[s].accumulated+=r.zeroPosition-d[a].y):"sideBySide"==r.options.barChart.handleOverlap&&(o.width=o.width/l[s].amount,o.offset+=l[s].resolved*o.width-.5*o.width*(l[s].amount+1),"left"==r.options.barChart.align?o.offset-=.5*o.width:"right"==r.options.barChart.align&&(o.offset+=.5*o.width))}n.drawBar(d[a].x+o.offset,d[a].y-u,o.width,r.zeroPosition-d[a].y,r.className+" bar",this.svgElements,this.svg),1==r.options.drawPoints.enabled&&n.drawPoint(d[a].x+o.offset,d[a].y-u,r,this.svgElements,this.svg)}},s.prototype._getDataIntersections=function(t,e){for(var i,s=0;s0&&(i=Math.min(i,Math.abs(e[s-1].x-e[s].x))),0==i&&(void 0===t[e[s].x]&&(t[e[s].x]={amount:0,resolved:0,accumulated:0}),t[e[s].x].amount+=1)},s.prototype._getSafeDrawData=function(t,e,i){var s,o;return t0?(s=i>t?i:t,o=0,"left"==e.options.barChart.align?o-=.5*t:"right"==e.options.barChart.align&&(o+=.5*t)):(s=e.options.barChart.width,o=0,"left"==e.options.barChart.align?o-=.5*e.options.barChart.width:"right"==e.options.barChart.align&&(o+=.5*e.options.barChart.width)),{width:s,offset: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;rl;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){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,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end);-i>s&&(s=-i),o>2*i&&(o=2*i);var n=Math.max(o-s,1);switch(this.overflow?(this.left=s,this.width=n+this.props.content.width,e=this.props.content.width):(this.left=s,this.width=n,e=Math.min(o-s,this.props.content.width)),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=n+"px",this.options.align){case"left":this.dom.content.style.left="0";break;case"right":this.dom.content.style.left=Math.max(n-e-2*this.options.padding,0)+"px";break;case"center":this.dom.content.style.left=Math.max((n-e-2*this.options.padding)/2,0)+"px";break;default:t=this.overflow?Math.max(-s,0):0>s?Math.min(-s,o-s-this.props.content.width-2*this.options.padding):0,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,fontColor:"black",fontSize:14,fontFace:"verdana",fontFill:void 0,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,borderWidthSelected:void 0},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",layout:"hubsize"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},dynamicSmoothCurves:!0,maxVelocity:30,minVelocity:.1,stabilize:!0,stabilizationIterations:1e3,locale:"en",locales:_,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.stabilized=!1,this.stabilizationIterations=null,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(49),n=i(41),r=i(59),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(47),b=i(48),_=i(45);i(46),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),this.initializing=!0,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);this._putDataInSector(),0==e&&(1==this.constants.hierarchicalLayout.enabled?(this._resetLevels(),this._setupHierarchicalLayout()):this.constants.stabilize&&this._stabilize(),this.start()),this.initializing=!1},s.prototype.setOptions=function(t){if(t){var e,i=["nodes","edges","smoothCurves","hierarchicalLayout","clustering","navigation","keyboard","dataManipulation","onAdd","onEdit","onEditEdge","onConnect","onDelete","clickToUse"];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))}if("clickToUse"in t&&(t.clickToUse?(this.activator=new b(this.frame),this.activator.on("change",this._createKeyBinds.bind(this))):this.activator&&(this.activator.destroy(),delete this.activator)),t.labels)throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.')}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="vis 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(),this.constants.keyboard.enabled&&this.isActive()&&(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){var i=!1;t!=this.constants.width||e!=this.constants.height||this.frame.style.width!=t||this.frame.style.height!=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,this.constants.width=t,this.constants.height=e,i=!0):(this.frame.canvas.width!=this.frame.canvas.clientWidth&&(this.frame.canvas.width=this.frame.canvas.clientWidth,i=!0),this.frame.canvas.height!=this.frame.canvas.clientHeight&&(this.frame.canvas.height=this.frame.canvas.clientHeight,i=!0)),1==i&&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+10,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(),this._updateCalculationNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout())},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);return o>.5*this.constants.maxVelocity?!0:this._isMoving(o)}return!1},s.prototype._physicsTick=function(){if(!this.freezeSimulation&&1==this.moving){var t=!1,e=!1;this._doInAllActiveSectors("_initializeForceCalculation");var i=this._doInAllActiveSectors("_discreteStepNodes");1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&(e=this._doInSupportSector("_discreteStepNodes"));for(var s=0;s0){var i=this,s={iterations:i.stabilizationIterations};i.stabilizationIterations=0,setTimeout(function(){i.emit("stabilized",s)},0)}},s.prototype._handleNavigation=function(){if(0!=this.xIncrement||0!=this.yIncrement){var t=this._getTranslation();this._setTranslation(t.x+this.xIncrement,t.y+this.yIncrement)}if(0!=this.zoomIncrement){var e={x:this.frame.canvas.clientWidth/2,y:this.frame.canvas.clientHeight/2};this._zoom(this.scale*(1+this.zoomIncrement),e)}},s.prototype.toggleFreeze=function(){0==this.freezeSimulation?this.freezeSimulation=!0:(this.freezeSimulation=!1,this.start())},s.prototype._configureSmoothCurves=function(t){if(void 0===t&&(t=!0),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this._createBezierNodes();for(var e in this.sectors.support.nodes)this.sectors.support.nodes.hasOwnProperty(e)&&void 0===this.edges[this.sectors.support.nodes[e].parentEdgeId]&&delete this.sectors.support.nodes[e]}else{this.sectors.support.nodes={};for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.edges[i].via=null)}this._updateCalculationNodes(),t||(this.moving=!0,this.start())},s.prototype._createBezierNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic)for(var t in this.edges)if(this.edges.hasOwnProperty(t)){var e=this.edges[t];if(null==e.via){var i="edgeId:".concat(e.id);this.sectors.support.nodes[i]=new m({id:i,mass:1,shape:"circle",image:"",internalMultiplier:1},{},{},this.constants),e.via=this.sectors.support.nodes[i],e.via.parentEdgeId=e.id,e.positionBezierNode()}}},s.prototype._initializeMixinLoaders=function(){for(var t in y)y.hasOwnProperty(t)&&(s.prototype[t]=y[t])},s.prototype.storePosition=function(){var t=[];for(var e in this.nodes)if(this.nodes.hasOwnProperty(e)){var i=this.nodes[e],s=!this.nodes.xFixed,o=!this.nodes.yFixed;(this.nodesData._data[e].x!=Math.round(i.x)||this.nodesData._data[e].y!=Math.round(i.y))&&t.push({id:e,x:Math.round(i.x),y:Math.round(i.y),allowedToMoveX:s,allowedToMoveY:o})}this.nodesData.update(t)},s.prototype.focusOnNode=function(t,e){if(this.nodes.hasOwnProperty(t)){void 0===e&&(e=this._getScale());var i={x:this.nodes[t].x,y:this.nodes[t].y},s=e;this._setScale(s);var o=this.DOMtoCanvas({x:.5*this.frame.canvas.width,y:.5*this.frame.canvas.height}),n=this._getTranslation(),r={x:o.x-i.x,y:o.y-i.y};this._setTranslation(n.x+s*r.x,n.y+s*r.y),this.redraw()}else console.log("This nodeId cannot be found.")},s.prototype.isActive=function(){return!this.activator||this.activator.active},t.exports=s},function(t,e,i){function s(t,e,i){if(!e)throw"No network provided";var s=["edges","physics"],n=o.selectiveBridgeObject(s,i);this.options=n.edges,this.physics=n.physics,this.options.smoothCurves=i.smoothCurves,this.network=e,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.title=void 0,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.value=void 0,this.selected=!1,this.hover=!1,this.from=null,this.to=null,this.via=null,this.originalFromId=[],this.originalToId=[],this.connected=!1,this.widthFixed=!1,this.lengthFixed=!1,this.setProperties(t),this.controlNodesEnabled=!1,this.controlNodes={from:null,to:null,positions:{}},this.connectedNode=null}var o=i(1),n=i(36);s.prototype.setProperties=function(t){if(t){var e=["style","fontSize","fontFace","fontColor","fontFill","width","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","inheritColor"];switch(o.selectiveDeepExtend(e,this.options,t),void 0!==t.from&&(this.fromId=t.from),void 0!==t.to&&(this.toId=t.to),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.value&&(this.value=t.value),void 0!==t.length&&(this.physics.springLength=t.length),void 0!==t.color&&(this.options.inheritColor=!1,o.isString(t.color)?(this.options.color.color=t.color,this.options.color.highlight=t.color):(void 0!==t.color.color&&(this.options.color.color=t.color.color),void 0!==t.color.highlight&&(this.options.color.highlight=t.color.highlight),void 0!==t.color.hover&&(this.options.color.hover=t.color.hover))),this.connect(),this.widthFixed=this.widthFixed||void 0!==t.width,this.lengthFixed=this.lengthFixed||void 0!==t.length,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,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;case"dash-line":this.draw=this._drawDashLine;break;default:this.draw=this._drawLine}}},s.prototype.connect=function(){this.disconnect(),this.from=this.network.nodes[this.fromId]||null,this.to=this.network.nodes[this.toId]||null,this.connected=this.from&&this.to,this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this))},s.prototype.disconnect=function(){this.from&&(this.from.detachEdge(this),this.from=null),this.to&&(this.to.detachEdge(this),this.to=null),this.connected=!1},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.getValue=function(){return this.value},s.prototype.setValueRange=function(t,e){if(!this.widthFixed&&void 0!==this.value){var i=(this.options.widthMax-this.options.widthMin)/(e-t);this.options.width=(this.value-t)*i+this.options.widthMin,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier}},s.prototype.draw=function(){throw"Method draw not initialized in edge"},s.prototype.isOverlappingWith=function(t){if(this.connected){var e=10,i=this.from.x,s=this.from.y,o=this.to.x,n=this.to.y,r=t.left,a=t.top,h=this._getDistanceToEdge(i,s,o,n,r,a);return e>h}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.max(Math.min(this.widthSelected,this.options.widthMax),.3*this.networkScaleInv):1==this.hover?Math.max(Math.min(this.options.hoverWidth,this.options.widthMax),.3*this.networkScaleInv):Math.max(this.options.width,.3*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=.25*this.physics.springLength,_=this.from;return _.width>_.height?(p=_.x+.5*_.width,u=_.y-b):(p=_.x+b,u=_.y-.5*_.height),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,e){var i=this.images[t];if(void 0==i){var s=this;i=new Image,this.images[t]=i,i.onload=function(){s.callback&&s.callback(this)},i.onerror=function(){this.src=e,s.callback&&s.callback(this)},i.src=t}return i},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.hierarchyEnumerated=!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","brokenImage","radius","fontColor","fontSize","fontFace","fontFill","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("number"==typeof this.options.group||"string"==typeof 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,this.options.brokenImage)}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){var e=Math.sqrt(Math.pow(this.vx,2)+Math.pow(this.vy,2));return e>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.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;if(1==r&&(l=s+(1-h)/(2*d)),void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill){var c=t.measureText(e).width,p=this.options.fontSize,u=i-c/2,f=s-p/2;t.fillStyle=this.options.fontFill,t.fillRect(u,f,c,p)}t.fillStyle=this.options.fontColor||"black";for(var m=0;h>m;m++)t.fillText(a[m],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;" "==E.charAt(e)||" "==E.charAt(e);)e--;if("\n"==E.charAt(e)||""==E.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(D[i])return k=C.DELIMITER,L=i,o(),void o();if(D[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},D={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},E="",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=o&&(o=864e5),i=new Date(i.valueOf()-.05*o),s=new Date(s.valueOf()+.05*o)}if(null!==i||null!==s){var n=t&&void 0!==t.animate?t.animate:!0;this.range.setRange(i,s,n)}},s.prototype.setWindow=function(t,e,i){var s=i&&void 0!==i.animate?i.animate:!0;if(1==arguments.length){var o=arguments[0];this.range.setRange(o.start,o.end,s)}else this.range.setRange(t,e,s)},s.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,s=r.convert(t,"Date").valueOf(),o=s-i/2,n=s+i/2,a=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(o,n,a)},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){"top"==e.orientation?(r.addClassName(s.root,"top"),r.removeClassName(s.root,"bottom")):(r.removeClassName(s.root,"top"),r.addClassName(s.root,"bottom")),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.setCurrentTime=function(t){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");this.currentTime.setCurrentTime(t)},s.prototype.getCurrentTime=function(){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");return this.currentTime.getCurrentTime()},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.offsetWidth!=t.props.lastWidth||t.dom.root.offsetHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight,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(57),o=i(51),n=i(52),r=i(53),a=i(54),h=i(55),d=i(56);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.frame.appendChild(this.manipulationDiv)),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.frame.appendChild(this.editModeDiv)),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.frame.appendChild(this.closeDiv)),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,e,i){function s(t){this.active=!1,this.dom={container:t},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay,{prevent_default:!1}),this.hammer.on("tap",this._onTapOverlay.bind(this));var e=this,i=["touch","pinch","doubletap","hold","dragstart","drag","dragend","mousewheel","DOMMouseScroll"];i.forEach(function(t){e.hammer.on(t,function(t){t.stopPropagation()})}),this.windowHammer=a(window,{prevent_default:!1}),this.windowHammer.on("tap",function(i){o(i.target,t)||e.deactivate()}),this.escListener=this.deactivate.bind(this)}function o(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}var n=i(59),r=i(49),a=i(41),h=i(1);r(s.prototype),s.current=null,s.prototype.destroy=function(){this.deactivate(),this.dom.overlay.parentNode.removeChild(this.dom.overlay),this.hammer=null,this.windowHammer=null},s.prototype.activate=function(){s.current&&s.current.deactivate(),s.current=this,this.active=!0,this.dom.overlay.style.display="none",h.addClassName(this.dom.container,"vis-active"),this.emit("change"),this.emit("activate"),n.bind("esc",this.escListener)},s.prototype.deactivate=function(){this.active=!1,this.dom.overlay.style.display="",h.removeClassName(this.dom.container,"vis-active"),n.unbind("esc",this.escListener),this.emit("change"),this.emit("deactivate")},s.prototype._onTapOverlay=function(t){this.activate(),t.stopPropagation()},t.exports=s},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(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](o[0],o[1]):this[t](e))}return this._loadLatestSector(),i},e._doInSupportSector=function(t,e){var i=!1;if(void 0===e)this._switchToSupportSector(),i=this[t]();else{this._switchToSupportSector();var s=Array.prototype.splice.call(arguments,1);i=s.length>1?this[t](s[0],s[1]):this[t](e)}return this._loadLatestSector(),i},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(){this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];if(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=""+t.addNode+"
"+t.addEdge+"",1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDiv.innerHTML+="
"+t.editNode+"":1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDiv.innerHTML+="
"+t.editEdge+""),0==this._selectionIsEmpty()&&(this.manipulationDiv.innerHTML+="
"+t.del+"");var e=document.getElementById("network-manipulate-addNode");e.onclick=this._createAddNodeToolbar.bind(this);var i=document.getElementById("network-manipulate-connectNode");if(i.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit){var s=document.getElementById("network-manipulate-editNode");s.onclick=this._editNode.bind(this)}else if(1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()){var s=document.getElementById("network-manipulate-editEdge");s.onclick=this._createEditEdgeToolbar.bind(this)}if(0==this._selectionIsEmpty()){var o=document.getElementById("network-manipulate-delete");o.onclick=this._deleteSelected.bind(this)}var n=document.getElementById("network-manipulation-closeDiv");n.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{this.editModeDiv.innerHTML=""+t.edit+"";var r=document.getElementById("network-manipulate-editModeButton");r.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];this.manipulationDiv.innerHTML=""+t.back+"
"+t.addDescription+"";var e=document.getElementById("network-manipulate-back");e.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;var t=this.constants.locales[this.constants.locale];this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDiv.innerHTML=""+t.back+"
"+t.edgeDescription+"";var e=document.getElementById("network-manipulate-back");e.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();var t=this.constants.locales[this.constants.locale];this.manipulationDiv.innerHTML=""+t.back+"
"+t.editEdgeDescription+"";var e=document.getElementById("network-manipulate-back");e.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,i,s,r,a=this._getNodeAt(t);null!=a&&(a.clusterSize>1?alert(this.constants.locales[this.constants.locale].createEdgeError):(this._selectObject(a,!1),e=this.sectors.support.nodes,e.targetNode=i=new o({id:"targetNode"},{},{},this.constants),i.x=a.x,i.y=a.y,e.targetViaNode=s=new o({id:"targetViaNode"},{},{},this.constants),s.x=a.x,s.y=a.y,s.parentEdgeId="connectionEdge",this.edges.connectionEdge=r=new n({id:"connectionEdge",from:a.id,to:i.id},this,this.constants),r.from=a,r.connected=!0,r.smooth=!0,r.selected=!0,r.to=i,r.via=s,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center),i=this.sectors.support.nodes;i.targetNode.x=this._XconvertDOMtoCanvas(e.x),i.targetNode.y=this._YconvertDOMtoCanvas(e.y),i.targetViaNode.x=.5*(this._XconvertDOMtoCanvas(e.x)+this.edges.connectionEdge.from.x),i.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(this.constants.locales[this.constants.locale].createEdgeError):(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)throw new Error("The function for add does not support two arguments (data,callback)");var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.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)throw new Error("The function for connect does not support two arguments (data,callback)");var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.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)throw new Error("The function for edit does not support two arguments (data, callback)");var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(!this.triggerFunctions.edit||1!=this.editMode)throw new Error("No edit function has been bound to this button");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)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(!(this.triggerFunctions.del.length=2))throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(41));e._cleanNavigation=function(){var t=document.getElementById("network-navigation_wrapper");t&&t.parentNode&&t.parentNode.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.frame.appendChild(this.navigationDivs.wrapper);for(var i=this,o=0;o0){"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,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,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){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(t,e){return Oe.call(t,e)}function h(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function d(t){Se.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function l(t,e){var i=!0;return v(function(){return i&&(d(t),i=!1),e.apply(this,arguments)},e)}function c(t,e){_i[t]||(d(e),_i[t]=!0)}function p(t,e){return function(i){return _(t.call(this,i),e)}}function u(t,e){return function(i){return this.localeData().ordinal(t.call(this,i),e)}}function f(){}function m(t,e){e!==!1&&P(t),y(this,t),this._d=new Date(+t._d)}function g(t){var e=O(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=Se.localeData(),this._bubble()}function v(t,e){for(var i in e)a(e,i)&&(t[i]=e[i]);return a(e,"toString")&&(t.toString=e.toString),a(e,"valueOf")&&(t.valueOf=e.valueOf),t}function y(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),Fe.length>0)for(i in Fe)s=Fe[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function b(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&k(t[s])!==k(e[s]))&&r++;return r+n}function T(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=ui[t]||fi[e]||e}return t}function O(t){var e,i,s={};for(i in t)a(t,i)&&(e=T(i),e&&(s[e]=t[i]));return s}function L(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}Se[t]=function(s,o){var r,a,h=Se._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=Se().utc().set(i,t);return h.call(Se._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function k(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function N(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function I(t,e,i){return ce(Se([t,11,31+e-i]),e,i).week}function A(t){return z(t)?366:365}function z(t){return t%4===0&&t%100!==0||t%400===0}function P(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[ke]<0||t._a[ke]>11?ke:t._a[Ne]<1||t._a[Ne]>N(t._a[Le],t._a[ke])?Ne:t._a[Ie]<0||t._a[Ie]>23?Ie:t._a[Ae]<0||t._a[Ae]>59?Ae:t._a[ze]<0||t._a[ze]>59?ze:t._a[Pe]<0||t._a[Pe]>999?Pe:-1,t._pf._overflowDayOfYear&&(Le>e||e>Ne)&&(e=Ne),t._pf.overflow=e)}function R(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 F(t){return t?t.toLowerCase().replace("_","-"):t}function H(t){for(var e,i,s,o,n=0;n0;){if(s=Y(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&E(o,i,!0)>=e-1)break;e--}n++}return null}function Y(t){var e=null;if(!Re[t]&&He)try{e=Se.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Se.locale(e)}catch(i){}return Re[t]}function B(t,e){return e._isUTC?Se(t).zone(e._offset||0):Se(t).local()}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,i,s=t.match(Ge);for(e=0,i=s.length;i>e;e++)s[e]=bi[s[e]]?bi[s[e]]:W(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 j(t,e){return t.isValid()?(e=U(e,t.localeData()),mi[e]||(mi[e]=G(e)),mi[e](t)):t.localeData().invalidDate()}function U(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(je.lastIndex=0;s>=0&&je.test(t);)t=t.replace(je,i),je.lastIndex=0,s-=1;return t}function V(t,e){var i,s=e._strict;switch(t){case"Q":return ei;case"DDDD":return si;case"YYYY":case"GGGG":case"gggg":return s?oi:Xe;case"Y":case"G":case"g":return ri;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?ni:Ze;case"S":if(s)return ei;case"SS":if(s)return ii;case"SSS":if(s)return si;case"DDD":return Ve;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ke;case"a":case"A":return e._locale._meridiemParse;case"X":return Qe;case"Z":case"ZZ":return $e;case"T":return Je;case"SSSS":return qe;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?ii:Ue;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ue;case"Do":return ti;default:return i=new RegExp(ee(te(t.replace("\\","")),"i"))}}function X(t){t=t||"";var e=t.match($e)||[],i=e[e.length-1]||[],s=(i+"").match(ci)||["-",0,0],o=+(60*s[1])+k(s[2]);return"+"===s[0]?-o:o}function Z(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[ke]=3*(k(e)-1));break;case"M":case"MM":null!=e&&(o[ke]=k(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e),null!=s?o[ke]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ne]=k(e));break;case"Do":null!=e&&(o[Ne]=k(parseInt(e,10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=k(e));break;case"YY":o[Le]=Se.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[Le]=k(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"H":case"HH":case"h":case"hh":o[Ie]=k(e);break;case"m":case"mm":o[Ae]=k(e);break;case"s":case"ss":o[ze]=k(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Pe]=k(1e3*("0."+e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=X(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]=k(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=Se.parseTwoDigitYear(e)}}function q(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[Le],ce(Se(),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[Le],ce(Se(),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=pe(i,s,o,a,n),t._a[Le]=h.year,t._dayOfYear=h.dayOfYear}function K(t){var e,i,s,o,n=[];if(!t._d){for(s=J(t),t._w&&null==t._a[Ne]&&null==t._a[ke]&&q(t),t._dayOfYear&&(o=r(t._a[Le],s[Le]),t._dayOfYear>A(o)&&(t._pf._overflowDayOfYear=!0),i=ae(o,0,t._dayOfYear),t._a[ke]=i.getUTCMonth(),t._a[Ne]=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?ae:re).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm)}}function $(t){var e;t._d||(e=O(t._i),t._a=[e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond],K(t))}function J(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function Q(t){if(t._f===Se.ISO_8601)return void se(t);t._a=[],t._pf.empty=!0;var e,i,s,o,n,r=""+t._i,a=r.length,h=0;for(s=U(t._f,t._locale).match(Ge)||[],e=0;e0&&t._pf.unusedInput.push(n),r=r.slice(r.indexOf(i)+i.length),h+=i.length),bi[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),Z(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[Ie]<12&&(t._a[Ie]+=12),t._isPm===!1&&12===t._a[Ie]&&(t._a[Ie]=0),K(t),P(t)}function te(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function ee(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ie(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));v(t,i||e)}function se(t){var e,i,s=t._i,o=ai.exec(s);if(o){for(t._pf.iso=!0,e=0,i=di.length;i>e;e++)if(di[e][1].exec(s)){t._f=di[e][0]+(o[6]||" ");break}for(e=0,i=li.length;i>e;e++)if(li[e][1].exec(s)){t._f+=li[e][0];break}s.match($e)&&(t._f+="Z"),Q(t)}else t._isValid=!1}function oe(t){se(t),t._isValid===!1&&(delete t._isValid,Se.createFromInputFallback(t))}function ne(t){var e,i=t._i;i===n?t._d=new Date:D(i)?t._d=new Date(+i):null!==(e=Ye.exec(i))?t._d=new Date(+e[1]):"string"==typeof i?oe(t):C(i)?(t._a=i.slice(0),K(t)):"object"==typeof i?$(t):"number"==typeof i?t._d=new Date(i):Se.createFromInputFallback(t) -}function re(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 ae(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function he(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 de(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function le(t,e,i){var s=Se.duration(t).abs(),o=Te(s.as("s")),n=Te(s.as("m")),r=Te(s.as("h")),a=Te(s.as("d")),h=Te(s.as("M")),d=Te(s.as("y")),l=o0,l[4]=i,de.apply({},l)}function ce(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=Se(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function pe(t,e,i,s,o){var n,r,a=ae(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:A(t-1)+r}}function ue(t){var e=t._i,i=t._f;return t._locale=t._locale||Se.localeData(t._l),null===e||i===n&&""===e?Se.invalid({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),Se.isMoment(e)?new m(e,!0):(i?C(i)?ie(t):Q(t):ne(t),new m(t)))}function fe(t,e){var i,s;if(1===e.length&&C(e[0])&&(e=e[0]),!e.length)return Se();for(i=e[0],s=1;s=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(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 k(this.milliseconds()/100)},SS:function(){return _(k(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+":"+_(k(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+_(k(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},_i={},xi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];vi.length;)Ce=vi.pop(),bi[Ce+"o"]=u(bi[Ce],Ce);for(;yi.length;)Ce=yi.pop(),bi[Ce+Ce]=p(bi[Ce],2);bi.DDDD=p(bi.DDD,3),v(f.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=Se.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=Se([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 ce(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),Se=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=h(),ue(o)},Se.suppressDeprecationWarnings=!1,Se.createFromInputFallback=l("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)}),Se.min=function(){var t=[].slice.call(arguments,0);return fe("isBefore",t)},Se.max=function(){var t=[].slice.call(arguments,0);return fe("isAfter",t)},Se.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=h(),ue(o).utc()},Se.unix=function(t){return Se(1e3*t)},Se.duration=function(t,e){var i,s,o,n,r=t,h=null;return Se.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(h=Be.exec(t))?(i="-"===h[1]?-1:1,r={y:0,d:k(h[Ne])*i,h:k(h[Ie])*i,m:k(h[Ae])*i,s:k(h[ze])*i,ms:k(h[Pe])*i}):(h=We.exec(t))?(i="-"===h[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(h[2]),M:o(h[3]),d:o(h[4]),h:o(h[5]),m:o(h[6]),s:o(h[7]),w:o(h[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=w(Se(r.from),Se(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new g(r),Se.isDuration(t)&&a(t,"_locale")&&(s._locale=t._locale),s},Se.version=De,Se.defaultFormat=hi,Se.ISO_8601=function(){},Se.momentProperties=Fe,Se.updateOffset=function(){},Se.relativeTimeThreshold=function(t,e){return gi[t]===n?!1:e===n?gi[t]:(gi[t]=e,!0)},Se.lang=l("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return Se.locale(t,e)}),Se.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?Se.defineLocale(t,e):Se.localeData(t),i&&(Se.duration._locale=Se._locale=i)),Se._locale._abbr},Se.defineLocale=function(t,e){return null!==e?(e.abbr=t,Re[t]||(Re[t]=new f),Re[t].set(e),Se.locale(t),Re[t]):(delete Re[t],null)},Se.langData=l("moment.langData is deprecated. Use moment.localeData instead.",function(t){return Se.localeData(t)}),Se.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Se._locale;if(!C(t)){if(e=Y(t))return e;t=[t]}return H(t)},Se.isMoment=function(t){return t instanceof m||null!=t&&a(t,"_isAMomentObject")},Se.isDuration=function(t){return t instanceof g};for(Ce=xi.length-1;Ce>=0;--Ce)L(xi[Ce]);Se.normalizeUnits=function(t){return T(t)},Se.invalid=function(t){var e=Se.utc(0/0);return null!=t?v(e._pf,t):e._pf.userInvalidated=!0,e},Se.parseZone=function(){return Se.apply(null,arguments).parseZone()},Se.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)},v(Se.fn=m.prototype,{clone:function(){return Se(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=Se(this).utc();return 00:!1},parsingFlags:function(){return v({},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=j(this,t||Se.defaultFormat);return this.localeData().postformat(e)},add:S(1,"add"),subtract:S(-1,"subtract"),diff:function(t,e,i){var s,o,n=B(t,this),r=6e4*(this.zone()-n.zone());return e=T(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+n.daysInMonth()),o=12*(this.year()-n.year())+(this.month()-n.month()),o+=(this-Se(this).startOf("month")-(n-Se(n).startOf("month")))/s,o-=6e4*(this.zone()-Se(this).startOf("month").zone()-(n.zone()-Se(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:b(o)},from:function(t,e){return Se.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(Se(),t)},calendar:function(t){var e=t||Se(),i=B(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 z(this.year())},isDST:function(){return this.zone()+Se(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+Se(t).startOf(e)},isSame:function(t,e){return e=e||"ms",+this.clone().startOf(e)===+B(t,this).startOf(e)},min:l("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(t){return t=Se.apply(null,arguments),this>t?this:t}),max:l("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=Se.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=X(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?M(this,Se.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,Se.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?Se(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return N(this.year(),this.month())},dayOfYear:function(t){var e=Te((Se(this).startOf("day")-Se(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=ce(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=ce(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=ce(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 I(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return I(this.year(),t.dow,t.doy)},get:function(t){return t=T(t),this[t]()},set:function(t,e){return t=T(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){return t===n?this._locale._abbr:(this._locale=Se.localeData(t),this)},lang:l("moment().lang() is deprecated. Use moment().localeData() instead.",function(t){return t===n?this.localeData():(this._locale=Se.localeData(t),this)}),localeData:function(){return this._locale}}),Se.fn.millisecond=Se.fn.milliseconds=ye("Milliseconds",!1),Se.fn.second=Se.fn.seconds=ye("Seconds",!1),Se.fn.minute=Se.fn.minutes=ye("Minutes",!1),Se.fn.hour=Se.fn.hours=ye("Hours",!0),Se.fn.date=ye("Date",!0),Se.fn.dates=l("dates accessor is deprecated. Use date instead.",ye("Date",!0)),Se.fn.year=ye("FullYear",!0),Se.fn.years=l("years accessor is deprecated. Use year instead.",ye("FullYear",!0)),Se.fn.days=Se.fn.day,Se.fn.months=Se.fn.month,Se.fn.weeks=Se.fn.week,Se.fn.isoWeeks=Se.fn.isoWeek,Se.fn.quarters=Se.fn.quarter,Se.fn.toJSON=Se.fn.toISOString,v(Se.duration.fn=g.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=b(s/1e3),r.seconds=t%60,e=b(t/60),r.minutes=e%60,i=b(e/60),r.hours=i%24,o+=b(i/24),a=b(be(o)),o-=b(_e(a)),n+=b(o/30),o%=30,a+=b(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 b(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12)},humanize:function(t){var e=le(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=Se.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=Se.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=T(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=T(t),e=this._days+this._milliseconds/864e5,"month"===t||"year"===t)return i=this._months+12*be(e),"month"===t?i:i/12;switch(e+=_e(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:Se.fn.lang,locale:Se.fn.locale,toIsoString:l("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}}),Se.duration.fn.toString=Se.duration.fn.toISOString;for(Ce in pi)a(pi,Ce)&&xe(Ce.toLowerCase());Se.duration.fn.asMilliseconds=function(){return this.as("ms")},Se.duration.fn.asSeconds=function(){return this.as("s")},Se.duration.fn.asMinutes=function(){return this.as("m")},Se.duration.fn.asHours=function(){return this.as("h")},Se.duration.fn.asDays=function(){return this.as("d")},Se.duration.fn.asWeeks=function(){return this.as("weeks")},Se.duration.fn.asMonths=function(){return this.as("M")},Se.duration.fn.asYears=function(){return this.as("y")},Se.locale("en",{ordinal:function(t){var e=t%10,i=1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),He?o.exports=Se:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Ee.moment=Me),Se}.call(e,i,e,o),!(s!==n&&(o.exports=s)),we(!0))}).call(this)}).call(e,function(){return this}(),i(64)(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 D)t[e]?i=!0:D[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){D[t]=0,o||(o=f(e[0],[]));var r,a=function(){T=o,++D[t],p()},d=function(t){h(s,t),"keyup"!==o&&(E=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={},D={},E=!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){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()}},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}}])}); +},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,s){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,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}}},this.linegraphOptions=s,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","customRange"];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||void 0!==this.linegraphOptions.visibility[r]&&1!=this.linegraphOptions.visibility[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,e=0;for(var i in this.groups)this.groups.hasOwnProperty(i)&&(1!=this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&1!=this.linegraphOptions.visibility[i]||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.options.customRange[this.options.orientation]);this.step=i;var s=(this.dom.frame.offsetHeight-i.deadSpace*(this.dom.frame.offsetHeight/i.marginRange))/((i.marginRange-i.deadSpace)/i.step);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.dom.frame.offsetHeight/s-o);for(var h=0;.5*r>h;h++)i.previous();o=this.height/s}else o+=.25;this.valueAtZero=i.marginEnd;var d=0,l=1;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),l++}this.conversionFactor=0==this.master?c/(this.valueAtZero-i.current):this.dom.frame.offsetHeight/i.marginRange;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.convertValue=function(t){var e=this.valueAtZero-t,i=e*this.conversionFactor;return i},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="0",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.setData(e),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(t)})}}},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,s){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.linegraphOptions=s,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||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||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||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||(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||void 0!==this.linegraphOptions.visibility[a]&&1!=this.linegraphOptions.visibility[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,handleOverlap:"overlap",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,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},groups:{visibility:{}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1;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("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.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new c(this.body,this.options.legend,"right",this.options.groups),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];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){var d=this.body.util.toGlobalTime(-this.body.domProps.root.width),l=this.body.util.toGlobalTime(2*this.body.domProps.root.width),c={};for(this._getRelevantData(a,c,d,l),e=0;e0)for(r=0;rs){d.push(h);break}d.push(h)}}else for(a=0;ai&&h.x0)for(var s=0;s0){var n=1,r=o.length,a=this.body.util.toGlobalScreen(o[o.length-1].x)-this.body.util.toGlobalScreen(o[0].x),h=r/a;n=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=[],l=0;r>l;l+=n)d.push(o[l]);e[t[s]]=d}}},s.prototype._getYRanges=function(t,e,i){var s,o,n,r,a,h=[],d=[];if(t.length>0){for(n=0;n0)if(o=this.groups[t[n]],"line"==o.options.style||"stack"!=o.options.barChart.handleOverlap){var l=s[0].y,c=s[0].y;for(r=0;rs[r].y?s[r].y:l,c=c0&&(h.sort(function(t,e){return t.x==e.x?t.groupId-e.groupId:t.x-e.x}),p={},this._getDataIntersections(p,h),i.__barchartLeft=this._getStackedBarYRange(p,h),i.__barchartLeft.yAxisOrientation="left",t.push("__barchartLeft")),d.length>0&&(d.sort(function(t,e){return t.x==e.x?t.groupId-e.groupId:t.x-e.x}),p={},this._getDataIntersections(p,d),i.__barchartRight=this._getStackedBarYRange(p,d),i.__barchartRight.yAxisOrientation="right",t.push("__barchartRight"))}},s.prototype._getStackedBarYRange=function(t,e){for(var i,s=e[0].y,o=e[0].y,n=0;ne[n].y?e[n].y:s,o=ot[r].accumulated?t[r].accumulated:s,o=o0){for(var c=0;ci?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,-1!=t.indexOf("__barchartLeft")&&t.splice(t.indexOf("__barchartLeft"),1),-1!=t.indexOf("__barchartRight")&&t.splice(t.indexOf("__barchartRight"),1),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._drawBarGraphs=function(t,e){var i,s,o,r,a,h,d=[],l={},c=0;for(a=0;a0&&(i=Math.min(i,Math.abs(d[a-1].x-s))),o=this._getSafeDrawData(i,r,p);else{var f=a+(l[s].amount-l[s].resolved),m=a-(l[s].resolved+1);f0&&(i=Math.min(i,Math.abs(d[m].x-s))),o=this._getSafeDrawData(i,r,p),l[s].resolved+=1,"stack"==r.options.barChart.handleOverlap?(u=l[s].accumulated,l[s].accumulated+=r.zeroPosition-d[a].y):"sideBySide"==r.options.barChart.handleOverlap&&(o.width=o.width/l[s].amount,o.offset+=l[s].resolved*o.width-.5*o.width*(l[s].amount+1),"left"==r.options.barChart.align?o.offset-=.5*o.width:"right"==r.options.barChart.align&&(o.offset+=.5*o.width))}n.drawBar(d[a].x+o.offset,d[a].y-u,o.width,r.zeroPosition-d[a].y,r.className+" bar",this.svgElements,this.svg),1==r.options.drawPoints.enabled&&n.drawPoint(d[a].x+o.offset,d[a].y-u,r,this.svgElements,this.svg)}},s.prototype._getDataIntersections=function(t,e){for(var i,s=0;s0&&(i=Math.min(i,Math.abs(e[s-1].x-e[s].x))),0==i&&(void 0===t[e[s].x]&&(t[e[s].x]={amount:0,resolved:0,accumulated:0}),t[e[s].x].amount+=1)},s.prototype._getSafeDrawData=function(t,e,i){var s,o;return t0?(s=i>t?i:t,o=0,"left"==e.options.barChart.align?o-=.5*t:"right"==e.options.barChart.align&&(o+=.5*t)):(s=e.options.barChart.width,o=0,"left"==e.options.barChart.align?o-=.5*e.options.barChart.width:"right"==e.options.barChart.align&&(o+=.5*e.options.barChart.width)),{width:s,offset: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;rl;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){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.dirty=!0,this.displayed&&this.redraw()},s.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setData=function(t){this.data=t,this.dirty=!0,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)},s.prototype._updateContents=function(t){if(this.data.content instanceof Element)t.innerHTML="",t.appendChild(this.data.content);else{if(void 0==this.data.content)throw new Error('Property "content" missing in item '+this.data.id);t.innerHTML=this.data.content}},s.prototype._updateTitle=function(t){null!=this.data.title?t.title=this.data.title||"":t.removeAttribute("title")},s.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0)for(var e=0;et.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.dirty=!0),!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.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this._updateDataAttributes(this.dom.box),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,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end);-i>s&&(s=-i),o>2*i&&(o=2*i);var n=Math.max(o-s,1);switch(this.overflow?(this.left=s,this.width=n+this.props.content.width,e=this.props.content.width):(this.left=s,this.width=n,e=Math.min(o-s,this.props.content.width)),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=n+"px",this.options.align){case"left":this.dom.content.style.left="0";break;case"right":this.dom.content.style.left=Math.max(n-e-2*this.options.padding,0)+"px";break;case"center":this.dom.content.style.left=Math.max((n-e-2*this.options.padding)/2,0)+"px";break;default:t=this.overflow?Math.max(-s,0):0>s?Math.min(-s,o-s-this.props.content.width-2*this.options.padding):0,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,fontColor:"black",fontSize:14,fontFace:"verdana",fontFill:void 0,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,borderWidthSelected:void 0},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",layout:"hubsize"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},dynamicSmoothCurves:!0,maxVelocity:30,minVelocity:.1,stabilize:!0,stabilizationIterations:1e3,locale:"en",locales:_,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.stabilized=!1,this.stabilizationIterations=null,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(49),n=i(41),r=i(50),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(47),b=i(48),_=i(45);i(46),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),this.initializing=!0,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);this._putDataInSector(),0==e&&(1==this.constants.hierarchicalLayout.enabled?(this._resetLevels(),this._setupHierarchicalLayout()):this.constants.stabilize&&this._stabilize(),this.start()),this.initializing=!1},s.prototype.setOptions=function(t){if(t){var e,i=["nodes","edges","smoothCurves","hierarchicalLayout","clustering","navigation","keyboard","dataManipulation","onAdd","onEdit","onEditEdge","onConnect","onDelete","clickToUse"];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))}if("clickToUse"in t&&(t.clickToUse?(this.activator=new b(this.frame),this.activator.on("change",this._createKeyBinds.bind(this))):this.activator&&(this.activator.destroy(),delete this.activator)),t.labels)throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.')}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="vis 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(),this.constants.keyboard.enabled&&this.isActive()&&(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){var i=!1;t!=this.constants.width||e!=this.constants.height||this.frame.style.width!=t||this.frame.style.height!=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,this.constants.width=t,this.constants.height=e,i=!0):(this.frame.canvas.width!=this.frame.canvas.clientWidth&&(this.frame.canvas.width=this.frame.canvas.clientWidth,i=!0),this.frame.canvas.height!=this.frame.canvas.clientHeight&&(this.frame.canvas.height=this.frame.canvas.clientHeight,i=!0)),1==i&&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+10,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(),this._updateCalculationNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout())},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);return o>.5*this.constants.maxVelocity?!0:this._isMoving(o)}return!1},s.prototype._physicsTick=function(){if(!this.freezeSimulation&&1==this.moving){var t=!1,e=!1;this._doInAllActiveSectors("_initializeForceCalculation");var i=this._doInAllActiveSectors("_discreteStepNodes");1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&(e=this._doInSupportSector("_discreteStepNodes"));for(var s=0;s0){var i=this,s={iterations:i.stabilizationIterations};i.stabilizationIterations=0,setTimeout(function(){i.emit("stabilized",s)},0)}},s.prototype._handleNavigation=function(){if(0!=this.xIncrement||0!=this.yIncrement){var t=this._getTranslation();this._setTranslation(t.x+this.xIncrement,t.y+this.yIncrement)}if(0!=this.zoomIncrement){var e={x:this.frame.canvas.clientWidth/2,y:this.frame.canvas.clientHeight/2};this._zoom(this.scale*(1+this.zoomIncrement),e)}},s.prototype.toggleFreeze=function(){0==this.freezeSimulation?this.freezeSimulation=!0:(this.freezeSimulation=!1,this.start())},s.prototype._configureSmoothCurves=function(t){if(void 0===t&&(t=!0),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this._createBezierNodes();for(var e in this.sectors.support.nodes)this.sectors.support.nodes.hasOwnProperty(e)&&void 0===this.edges[this.sectors.support.nodes[e].parentEdgeId]&&delete this.sectors.support.nodes[e]}else{this.sectors.support.nodes={};for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.edges[i].via=null)}this._updateCalculationNodes(),t||(this.moving=!0,this.start())},s.prototype._createBezierNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic)for(var t in this.edges)if(this.edges.hasOwnProperty(t)){var e=this.edges[t];if(null==e.via){var i="edgeId:".concat(e.id);this.sectors.support.nodes[i]=new m({id:i,mass:1,shape:"circle",image:"",internalMultiplier:1},{},{},this.constants),e.via=this.sectors.support.nodes[i],e.via.parentEdgeId=e.id,e.positionBezierNode()}}},s.prototype._initializeMixinLoaders=function(){for(var t in y)y.hasOwnProperty(t)&&(s.prototype[t]=y[t])},s.prototype.storePosition=function(){var t=[];for(var e in this.nodes)if(this.nodes.hasOwnProperty(e)){var i=this.nodes[e],s=!this.nodes.xFixed,o=!this.nodes.yFixed;(this.nodesData._data[e].x!=Math.round(i.x)||this.nodesData._data[e].y!=Math.round(i.y))&&t.push({id:e,x:Math.round(i.x),y:Math.round(i.y),allowedToMoveX:s,allowedToMoveY:o})}this.nodesData.update(t)},s.prototype.focusOnNode=function(t,e){if(this.nodes.hasOwnProperty(t)){void 0===e&&(e=this._getScale());var i={x:this.nodes[t].x,y:this.nodes[t].y},s=e;this._setScale(s);var o=this.DOMtoCanvas({x:.5*this.frame.canvas.width,y:.5*this.frame.canvas.height}),n=this._getTranslation(),r={x:o.x-i.x,y:o.y-i.y};this._setTranslation(n.x+s*r.x,n.y+s*r.y),this.redraw()}else console.log("This nodeId cannot be found.")},s.prototype.isActive=function(){return!this.activator||this.activator.active},t.exports=s},function(t,e,i){function s(t,e,i){if(!e)throw"No network provided";var s=["edges","physics"],n=o.selectiveBridgeObject(s,i);this.options=n.edges,this.physics=n.physics,this.options.smoothCurves=i.smoothCurves,this.network=e,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.title=void 0,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.value=void 0,this.selected=!1,this.hover=!1,this.from=null,this.to=null,this.via=null,this.originalFromId=[],this.originalToId=[],this.connected=!1,this.widthFixed=!1,this.lengthFixed=!1,this.setProperties(t),this.controlNodesEnabled=!1,this.controlNodes={from:null,to:null,positions:{}},this.connectedNode=null}var o=i(1),n=i(36);s.prototype.setProperties=function(t){if(t){var e=["style","fontSize","fontFace","fontColor","fontFill","width","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","inheritColor"];switch(o.selectiveDeepExtend(e,this.options,t),void 0!==t.from&&(this.fromId=t.from),void 0!==t.to&&(this.toId=t.to),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.value&&(this.value=t.value),void 0!==t.length&&(this.physics.springLength=t.length),void 0!==t.color&&(this.options.inheritColor=!1,o.isString(t.color)?(this.options.color.color=t.color,this.options.color.highlight=t.color):(void 0!==t.color.color&&(this.options.color.color=t.color.color),void 0!==t.color.highlight&&(this.options.color.highlight=t.color.highlight),void 0!==t.color.hover&&(this.options.color.hover=t.color.hover))),this.connect(),this.widthFixed=this.widthFixed||void 0!==t.width,this.lengthFixed=this.lengthFixed||void 0!==t.length,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,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;case"dash-line":this.draw=this._drawDashLine;break;default:this.draw=this._drawLine}}},s.prototype.connect=function(){this.disconnect(),this.from=this.network.nodes[this.fromId]||null,this.to=this.network.nodes[this.toId]||null,this.connected=this.from&&this.to,this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this))},s.prototype.disconnect=function(){this.from&&(this.from.detachEdge(this),this.from=null),this.to&&(this.to.detachEdge(this),this.to=null),this.connected=!1},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.getValue=function(){return this.value},s.prototype.setValueRange=function(t,e){if(!this.widthFixed&&void 0!==this.value){var i=(this.options.widthMax-this.options.widthMin)/(e-t);this.options.width=(this.value-t)*i+this.options.widthMin,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier}},s.prototype.draw=function(){throw"Method draw not initialized in edge"},s.prototype.isOverlappingWith=function(t){if(this.connected){var e=10,i=this.from.x,s=this.from.y,o=this.to.x,n=this.to.y,r=t.left,a=t.top,h=this._getDistanceToEdge(i,s,o,n,r,a);return e>h}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.max(Math.min(this.widthSelected,this.options.widthMax),.3*this.networkScaleInv):1==this.hover?Math.max(Math.min(this.options.hoverWidth,this.options.widthMax),.3*this.networkScaleInv):Math.max(this.options.width,.3*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=.25*this.physics.springLength,_=this.from;return _.width>_.height?(p=_.x+.5*_.width,u=_.y-b):(p=_.x+b,u=_.y-.5*_.height),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,e){var i=this.images[t];if(void 0==i){var s=this;i=new Image,this.images[t]=i,i.onload=function(){s.callback&&s.callback(this)},i.onerror=function(){this.src=e,s.callback&&s.callback(this)},i.src=t}return i},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.hierarchyEnumerated=!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","brokenImage","radius","fontColor","fontSize","fontFace","fontFill","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("number"==typeof this.options.group||"string"==typeof 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,this.options.brokenImage)}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){var e=Math.sqrt(Math.pow(this.vx,2)+Math.pow(this.vy,2));return e>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.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;if(1==r&&(l=s+(1-h)/(2*d)),void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill){var c=t.measureText(e).width,p=this.options.fontSize,u=i-c/2,f=s-p/2;t.fillStyle=this.options.fontFill,t.fillRect(u,f,c,p)}t.fillStyle=this.options.fontColor||"black";for(var m=0;h>m;m++)t.fillText(a[m],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;" "==E.charAt(e)||" "==E.charAt(e);)e--;if("\n"==E.charAt(e)||""==E.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(D[i])return k=C.DELIMITER,L=i,o(),void o();if(D[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},D={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},E="",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=o&&(o=864e5),i=new Date(i.valueOf()-.05*o),s=new Date(s.valueOf()+.05*o)}if(null!==i||null!==s){var n=t&&void 0!==t.animate?t.animate:!0;this.range.setRange(i,s,n)}},s.prototype.setWindow=function(t,e,i){var s=i&&void 0!==i.animate?i.animate:!0;if(1==arguments.length){var o=arguments[0];this.range.setRange(o.start,o.end,s)}else this.range.setRange(t,e,s)},s.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,s=r.convert(t,"Date").valueOf(),o=s-i/2,n=s+i/2,a=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(o,n,a)},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){"top"==e.orientation?(r.addClassName(s.root,"top"),r.removeClassName(s.root,"bottom")):(r.removeClassName(s.root,"top"),r.addClassName(s.root,"bottom")),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.setCurrentTime=function(t){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");this.currentTime.setCurrentTime(t)},s.prototype.getCurrentTime=function(){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");return this.currentTime.getCurrentTime()},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.offsetWidth!=t.props.lastWidth||t.dom.root.offsetHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight,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(59),o=i(53),n=i(54),r=i(55),a=i(56),h=i(57),d=i(58);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.frame.appendChild(this.manipulationDiv)),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.frame.appendChild(this.editModeDiv)),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.frame.appendChild(this.closeDiv)),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,e,i){function s(t){this.active=!1,this.dom={container:t},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay,{prevent_default:!1}),this.hammer.on("tap",this._onTapOverlay.bind(this));var e=this,i=["touch","pinch","doubletap","hold","dragstart","drag","dragend","mousewheel","DOMMouseScroll"];i.forEach(function(t){e.hammer.on(t,function(t){t.stopPropagation()})}),this.windowHammer=a(window,{prevent_default:!1}),this.windowHammer.on("tap",function(i){o(i.target,t)||e.deactivate()}),this.escListener=this.deactivate.bind(this)}function o(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}var n=i(50),r=i(49),a=i(41),h=i(1);r(s.prototype),s.current=null,s.prototype.destroy=function(){this.deactivate(),this.dom.overlay.parentNode.removeChild(this.dom.overlay),this.hammer=null,this.windowHammer=null},s.prototype.activate=function(){s.current&&s.current.deactivate(),s.current=this,this.active=!0,this.dom.overlay.style.display="none",h.addClassName(this.dom.container,"vis-active"),this.emit("change"),this.emit("activate"),n.bind("esc",this.escListener)},s.prototype.deactivate=function(){this.active=!1,this.dom.overlay.style.display="",h.removeClassName(this.dom.container,"vis-active"),n.unbind("esc",this.escListener),this.emit("change"),this.emit("deactivate")},s.prototype._onTapOverlay=function(t){this.activate(),t.stopPropagation()},t.exports=s},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 D)t[e]?i=!0:D[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){D[t]=0,o||(o=f(e[0],[]));var r,a=function(){T=o,++D[t],p()},d=function(t){h(s,t),"keyup"!==o&&(E=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={},D={},E=!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(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,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(t,e){return Oe.call(t,e)}function h(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function d(t){Se.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function l(t,e){var i=!0;return v(function(){return i&&(d(t),i=!1),e.apply(this,arguments)},e)}function c(t,e){_i[t]||(d(e),_i[t]=!0)}function p(t,e){return function(i){return _(t.call(this,i),e)}}function u(t,e){return function(i){return this.localeData().ordinal(t.call(this,i),e)}}function f(){}function m(t,e){e!==!1&&P(t),y(this,t),this._d=new Date(+t._d)}function g(t){var e=O(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=Se.localeData(),this._bubble()}function v(t,e){for(var i in e)a(e,i)&&(t[i]=e[i]);return a(e,"toString")&&(t.toString=e.toString),a(e,"valueOf")&&(t.valueOf=e.valueOf),t}function y(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),Fe.length>0)for(i in Fe)s=Fe[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function b(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&k(t[s])!==k(e[s]))&&r++;return r+n}function T(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=ui[t]||fi[e]||e}return t}function O(t){var e,i,s={};for(i in t)a(t,i)&&(e=T(i),e&&(s[e]=t[i]));return s}function L(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}Se[t]=function(s,o){var r,a,h=Se._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=Se().utc().set(i,t);return h.call(Se._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function k(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function N(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function I(t,e,i){return ce(Se([t,11,31+e-i]),e,i).week}function A(t){return z(t)?366:365}function z(t){return t%4===0&&t%100!==0||t%400===0}function P(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[ke]<0||t._a[ke]>11?ke:t._a[Ne]<1||t._a[Ne]>N(t._a[Le],t._a[ke])?Ne:t._a[Ie]<0||t._a[Ie]>23?Ie:t._a[Ae]<0||t._a[Ae]>59?Ae:t._a[ze]<0||t._a[ze]>59?ze:t._a[Pe]<0||t._a[Pe]>999?Pe:-1,t._pf._overflowDayOfYear&&(Le>e||e>Ne)&&(e=Ne),t._pf.overflow=e)}function R(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 F(t){return t?t.toLowerCase().replace("_","-"):t}function H(t){for(var e,i,s,o,n=0;n0;){if(s=Y(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&E(o,i,!0)>=e-1)break;e--}n++}return null}function Y(t){var e=null;if(!Re[t]&&He)try{e=Se.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Se.locale(e)}catch(i){}return Re[t]}function B(t,e){return e._isUTC?Se(t).zone(e._offset||0):Se(t).local()}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,i,s=t.match(Ge);for(e=0,i=s.length;i>e;e++)s[e]=bi[s[e]]?bi[s[e]]:W(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 j(t,e){return t.isValid()?(e=U(e,t.localeData()),mi[e]||(mi[e]=G(e)),mi[e](t)):t.localeData().invalidDate()}function U(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(je.lastIndex=0;s>=0&&je.test(t);)t=t.replace(je,i),je.lastIndex=0,s-=1;return t}function V(t,e){var i,s=e._strict;switch(t){case"Q":return ei;case"DDDD":return si;case"YYYY":case"GGGG":case"gggg":return s?oi:Xe;case"Y":case"G":case"g":return ri;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?ni:Ze;case"S":if(s)return ei;case"SS":if(s)return ii;case"SSS":if(s)return si;case"DDD":return Ve;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ke;case"a":case"A":return e._locale._meridiemParse;case"X":return Qe;case"Z":case"ZZ":return $e;case"T":return Je;case"SSSS":return qe;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?ii:Ue;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ue;case"Do":return ti;default:return i=new RegExp(ee(te(t.replace("\\","")),"i"))}}function X(t){t=t||"";var e=t.match($e)||[],i=e[e.length-1]||[],s=(i+"").match(ci)||["-",0,0],o=+(60*s[1])+k(s[2]);return"+"===s[0]?-o:o}function Z(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[ke]=3*(k(e)-1));break;case"M":case"MM":null!=e&&(o[ke]=k(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e),null!=s?o[ke]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ne]=k(e));break;case"Do":null!=e&&(o[Ne]=k(parseInt(e,10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=k(e));break;case"YY":o[Le]=Se.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[Le]=k(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"H":case"HH":case"h":case"hh":o[Ie]=k(e);break;case"m":case"mm":o[Ae]=k(e);break;case"s":case"ss":o[ze]=k(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Pe]=k(1e3*("0."+e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=X(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]=k(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=Se.parseTwoDigitYear(e)}}function q(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[Le],ce(Se(),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[Le],ce(Se(),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=pe(i,s,o,a,n),t._a[Le]=h.year,t._dayOfYear=h.dayOfYear +}function K(t){var e,i,s,o,n=[];if(!t._d){for(s=J(t),t._w&&null==t._a[Ne]&&null==t._a[ke]&&q(t),t._dayOfYear&&(o=r(t._a[Le],s[Le]),t._dayOfYear>A(o)&&(t._pf._overflowDayOfYear=!0),i=ae(o,0,t._dayOfYear),t._a[ke]=i.getUTCMonth(),t._a[Ne]=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?ae:re).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm)}}function $(t){var e;t._d||(e=O(t._i),t._a=[e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond],K(t))}function J(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function Q(t){if(t._f===Se.ISO_8601)return void se(t);t._a=[],t._pf.empty=!0;var e,i,s,o,n,r=""+t._i,a=r.length,h=0;for(s=U(t._f,t._locale).match(Ge)||[],e=0;e0&&t._pf.unusedInput.push(n),r=r.slice(r.indexOf(i)+i.length),h+=i.length),bi[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),Z(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[Ie]<12&&(t._a[Ie]+=12),t._isPm===!1&&12===t._a[Ie]&&(t._a[Ie]=0),K(t),P(t)}function te(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function ee(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ie(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));v(t,i||e)}function se(t){var e,i,s=t._i,o=ai.exec(s);if(o){for(t._pf.iso=!0,e=0,i=di.length;i>e;e++)if(di[e][1].exec(s)){t._f=di[e][0]+(o[6]||" ");break}for(e=0,i=li.length;i>e;e++)if(li[e][1].exec(s)){t._f+=li[e][0];break}s.match($e)&&(t._f+="Z"),Q(t)}else t._isValid=!1}function oe(t){se(t),t._isValid===!1&&(delete t._isValid,Se.createFromInputFallback(t))}function ne(t){var e,i=t._i;i===n?t._d=new Date:D(i)?t._d=new Date(+i):null!==(e=Ye.exec(i))?t._d=new Date(+e[1]):"string"==typeof i?oe(t):C(i)?(t._a=i.slice(0),K(t)):"object"==typeof i?$(t):"number"==typeof i?t._d=new Date(i):Se.createFromInputFallback(t)}function re(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 ae(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function he(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 de(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function le(t,e,i){var s=Se.duration(t).abs(),o=Te(s.as("s")),n=Te(s.as("m")),r=Te(s.as("h")),a=Te(s.as("d")),h=Te(s.as("M")),d=Te(s.as("y")),l=o0,l[4]=i,de.apply({},l)}function ce(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=Se(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function pe(t,e,i,s,o){var n,r,a=ae(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:A(t-1)+r}}function ue(t){var e=t._i,i=t._f;return t._locale=t._locale||Se.localeData(t._l),null===e||i===n&&""===e?Se.invalid({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),Se.isMoment(e)?new m(e,!0):(i?C(i)?ie(t):Q(t):ne(t),new m(t)))}function fe(t,e){var i,s;if(1===e.length&&C(e[0])&&(e=e[0]),!e.length)return Se();for(i=e[0],s=1;s=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(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 k(this.milliseconds()/100)},SS:function(){return _(k(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+":"+_(k(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+_(k(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},_i={},xi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];vi.length;)Ce=vi.pop(),bi[Ce+"o"]=u(bi[Ce],Ce);for(;yi.length;)Ce=yi.pop(),bi[Ce+Ce]=p(bi[Ce],2);bi.DDDD=p(bi.DDD,3),v(f.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=Se.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=Se([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 ce(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),Se=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=h(),ue(o)},Se.suppressDeprecationWarnings=!1,Se.createFromInputFallback=l("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)}),Se.min=function(){var t=[].slice.call(arguments,0);return fe("isBefore",t)},Se.max=function(){var t=[].slice.call(arguments,0);return fe("isAfter",t)},Se.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=h(),ue(o).utc()},Se.unix=function(t){return Se(1e3*t)},Se.duration=function(t,e){var i,s,o,n,r=t,h=null;return Se.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(h=Be.exec(t))?(i="-"===h[1]?-1:1,r={y:0,d:k(h[Ne])*i,h:k(h[Ie])*i,m:k(h[Ae])*i,s:k(h[ze])*i,ms:k(h[Pe])*i}):(h=We.exec(t))?(i="-"===h[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(h[2]),M:o(h[3]),d:o(h[4]),h:o(h[5]),m:o(h[6]),s:o(h[7]),w:o(h[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=w(Se(r.from),Se(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new g(r),Se.isDuration(t)&&a(t,"_locale")&&(s._locale=t._locale),s},Se.version=De,Se.defaultFormat=hi,Se.ISO_8601=function(){},Se.momentProperties=Fe,Se.updateOffset=function(){},Se.relativeTimeThreshold=function(t,e){return gi[t]===n?!1:e===n?gi[t]:(gi[t]=e,!0)},Se.lang=l("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return Se.locale(t,e)}),Se.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?Se.defineLocale(t,e):Se.localeData(t),i&&(Se.duration._locale=Se._locale=i)),Se._locale._abbr},Se.defineLocale=function(t,e){return null!==e?(e.abbr=t,Re[t]||(Re[t]=new f),Re[t].set(e),Se.locale(t),Re[t]):(delete Re[t],null)},Se.langData=l("moment.langData is deprecated. Use moment.localeData instead.",function(t){return Se.localeData(t)}),Se.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Se._locale;if(!C(t)){if(e=Y(t))return e;t=[t]}return H(t)},Se.isMoment=function(t){return t instanceof m||null!=t&&a(t,"_isAMomentObject")},Se.isDuration=function(t){return t instanceof g};for(Ce=xi.length-1;Ce>=0;--Ce)L(xi[Ce]);Se.normalizeUnits=function(t){return T(t)},Se.invalid=function(t){var e=Se.utc(0/0);return null!=t?v(e._pf,t):e._pf.userInvalidated=!0,e},Se.parseZone=function(){return Se.apply(null,arguments).parseZone()},Se.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)},v(Se.fn=m.prototype,{clone:function(){return Se(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=Se(this).utc();return 00:!1},parsingFlags:function(){return v({},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=j(this,t||Se.defaultFormat);return this.localeData().postformat(e)},add:S(1,"add"),subtract:S(-1,"subtract"),diff:function(t,e,i){var s,o,n=B(t,this),r=6e4*(this.zone()-n.zone());return e=T(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+n.daysInMonth()),o=12*(this.year()-n.year())+(this.month()-n.month()),o+=(this-Se(this).startOf("month")-(n-Se(n).startOf("month")))/s,o-=6e4*(this.zone()-Se(this).startOf("month").zone()-(n.zone()-Se(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:b(o)},from:function(t,e){return Se.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(Se(),t)},calendar:function(t){var e=t||Se(),i=B(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 z(this.year())},isDST:function(){return this.zone()+Se(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+Se(t).startOf(e)},isSame:function(t,e){return e=e||"ms",+this.clone().startOf(e)===+B(t,this).startOf(e)},min:l("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(t){return t=Se.apply(null,arguments),this>t?this:t}),max:l("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=Se.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=X(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?M(this,Se.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,Se.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?Se(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return N(this.year(),this.month())},dayOfYear:function(t){var e=Te((Se(this).startOf("day")-Se(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=ce(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=ce(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=ce(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 I(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return I(this.year(),t.dow,t.doy)},get:function(t){return t=T(t),this[t]()},set:function(t,e){return t=T(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){return t===n?this._locale._abbr:(this._locale=Se.localeData(t),this)},lang:l("moment().lang() is deprecated. Use moment().localeData() instead.",function(t){return t===n?this.localeData():(this._locale=Se.localeData(t),this)}),localeData:function(){return this._locale}}),Se.fn.millisecond=Se.fn.milliseconds=ye("Milliseconds",!1),Se.fn.second=Se.fn.seconds=ye("Seconds",!1),Se.fn.minute=Se.fn.minutes=ye("Minutes",!1),Se.fn.hour=Se.fn.hours=ye("Hours",!0),Se.fn.date=ye("Date",!0),Se.fn.dates=l("dates accessor is deprecated. Use date instead.",ye("Date",!0)),Se.fn.year=ye("FullYear",!0),Se.fn.years=l("years accessor is deprecated. Use year instead.",ye("FullYear",!0)),Se.fn.days=Se.fn.day,Se.fn.months=Se.fn.month,Se.fn.weeks=Se.fn.week,Se.fn.isoWeeks=Se.fn.isoWeek,Se.fn.quarters=Se.fn.quarter,Se.fn.toJSON=Se.fn.toISOString,v(Se.duration.fn=g.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=b(s/1e3),r.seconds=t%60,e=b(t/60),r.minutes=e%60,i=b(e/60),r.hours=i%24,o+=b(i/24),a=b(be(o)),o-=b(_e(a)),n+=b(o/30),o%=30,a+=b(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 b(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12)},humanize:function(t){var e=le(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=Se.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=Se.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=T(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=T(t),e=this._days+this._milliseconds/864e5,"month"===t||"year"===t)return i=this._months+12*be(e),"month"===t?i:i/12;switch(e+=_e(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:Se.fn.lang,locale:Se.fn.locale,toIsoString:l("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}}),Se.duration.fn.toString=Se.duration.fn.toISOString;for(Ce in pi)a(pi,Ce)&&xe(Ce.toLowerCase());Se.duration.fn.asMilliseconds=function(){return this.as("ms")},Se.duration.fn.asSeconds=function(){return this.as("s")},Se.duration.fn.asMinutes=function(){return this.as("m")},Se.duration.fn.asHours=function(){return this.as("h")},Se.duration.fn.asDays=function(){return this.as("d")},Se.duration.fn.asWeeks=function(){return this.as("weeks")},Se.duration.fn.asMonths=function(){return this.as("M")},Se.duration.fn.asYears=function(){return this.as("y")},Se.locale("en",{ordinal:function(t){var e=t%10,i=1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),He?o.exports=Se:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Ee.moment=Me),Se}.call(e,i,e,o),!(s!==n&&(o.exports=s)),we(!0))}).call(this)}).call(e,function(){return this}(),i(64)(t))},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](o[0],o[1]):this[t](e))}return this._loadLatestSector(),i},e._doInSupportSector=function(t,e){var i=!1;if(void 0===e)this._switchToSupportSector(),i=this[t]();else{this._switchToSupportSector();var s=Array.prototype.splice.call(arguments,1);i=s.length>1?this[t](s[0],s[1]):this[t](e)}return this._loadLatestSector(),i},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(){this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];if(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=""+t.addNode+"
"+t.addEdge+"",1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDiv.innerHTML+="
"+t.editNode+"":1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDiv.innerHTML+="
"+t.editEdge+""),0==this._selectionIsEmpty()&&(this.manipulationDiv.innerHTML+="
"+t.del+"");var e=document.getElementById("network-manipulate-addNode");e.onclick=this._createAddNodeToolbar.bind(this);var i=document.getElementById("network-manipulate-connectNode");if(i.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit){var s=document.getElementById("network-manipulate-editNode");s.onclick=this._editNode.bind(this)}else if(1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()){var s=document.getElementById("network-manipulate-editEdge");s.onclick=this._createEditEdgeToolbar.bind(this)}if(0==this._selectionIsEmpty()){var o=document.getElementById("network-manipulate-delete");o.onclick=this._deleteSelected.bind(this)}var n=document.getElementById("network-manipulation-closeDiv");n.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{this.editModeDiv.innerHTML=""+t.edit+"";var r=document.getElementById("network-manipulate-editModeButton");r.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];this.manipulationDiv.innerHTML=""+t.back+"
"+t.addDescription+"";var e=document.getElementById("network-manipulate-back");e.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;var t=this.constants.locales[this.constants.locale];this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDiv.innerHTML=""+t.back+"
"+t.edgeDescription+"";var e=document.getElementById("network-manipulate-back");e.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();var t=this.constants.locales[this.constants.locale];this.manipulationDiv.innerHTML=""+t.back+"
"+t.editEdgeDescription+"";var e=document.getElementById("network-manipulate-back");e.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,i,s,r,a=this._getNodeAt(t);null!=a&&(a.clusterSize>1?alert(this.constants.locales[this.constants.locale].createEdgeError):(this._selectObject(a,!1),e=this.sectors.support.nodes,e.targetNode=i=new o({id:"targetNode"},{},{},this.constants),i.x=a.x,i.y=a.y,e.targetViaNode=s=new o({id:"targetViaNode"},{},{},this.constants),s.x=a.x,s.y=a.y,s.parentEdgeId="connectionEdge",this.edges.connectionEdge=r=new n({id:"connectionEdge",from:a.id,to:i.id},this,this.constants),r.from=a,r.connected=!0,r.smooth=!0,r.selected=!0,r.to=i,r.via=s,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center),i=this.sectors.support.nodes;i.targetNode.x=this._XconvertDOMtoCanvas(e.x),i.targetNode.y=this._YconvertDOMtoCanvas(e.y),i.targetViaNode.x=.5*(this._XconvertDOMtoCanvas(e.x)+this.edges.connectionEdge.from.x),i.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(this.constants.locales[this.constants.locale].createEdgeError):(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)throw new Error("The function for add does not support two arguments (data,callback)");var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.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)throw new Error("The function for connect does not support two arguments (data,callback)");var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.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)throw new Error("The function for edit does not support two arguments (data, callback)");var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(!this.triggerFunctions.edit||1!=this.editMode)throw new Error("No edit function has been bound to this button");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)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(!(this.triggerFunctions.del.length=2))throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(41));e._cleanNavigation=function(){var t=document.getElementById("network-navigation_wrapper");t&&t.parentNode&&t.parentNode.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.frame.appendChild(this.navigationDivs.wrapper);for(var i=this,o=0;o0){"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,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,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,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()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])}); //# sourceMappingURL=vis.map \ No newline at end of file diff --git a/lib/timeline/component/ItemSet.js b/lib/timeline/component/ItemSet.js index f8039252..237dfc0b 100644 --- a/lib/timeline/component/ItemSet.js +++ b/lib/timeline/component/ItemSet.js @@ -949,10 +949,8 @@ ItemSet.prototype._addItem = function(item) { ItemSet.prototype._updateItem = function(item, itemData) { var oldGroupId = item.data.group; - item.data = itemData; - if (item.displayed) { - item.redraw(); - } + // update the items data (will redraw the item when displayed) + item.setData(itemData); // update group if (oldGroupId != item.data.group) { diff --git a/lib/timeline/component/item/Item.js b/lib/timeline/component/item/Item.js index 92edb636..a93f9cc6 100644 --- a/lib/timeline/component/item/Item.js +++ b/lib/timeline/component/item/Item.js @@ -32,6 +32,7 @@ function Item (data, conversion, options) { */ Item.prototype.select = function() { this.selected = true; + this.dirty = true; if (this.displayed) this.redraw(); }; @@ -40,6 +41,18 @@ Item.prototype.select = function() { */ Item.prototype.unselect = function() { this.selected = false; + this.dirty = true; + if (this.displayed) this.redraw(); +}; + +/** + * Set data for the item. Existing data will be updated. The id should not + * be changed. When the item is displayed, it will be redrawn immediately. + * @param {Object} data + */ +Item.prototype.setData = function(data) { + this.data = data; + this.dirty = true; if (this.displayed) this.redraw(); }; @@ -140,24 +153,57 @@ Item.prototype._repaintDeleteButton = function (anchor) { } }; +/** + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @private + */ +Item.prototype._updateContents = function (element) { + if (this.data.content instanceof Element) { + element.innerHTML = ''; + element.appendChild(this.data.content); + } + else if (this.data.content != undefined) { + element.innerHTML = this.data.content; + } + else { + throw new Error('Property "content" missing in item ' + this.data.id); + } +}; + +/** + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @private + */ +Item.prototype._updateTitle = function (element) { + if (this.data.title != null) { + element.title = this.data.title || ''; + } + else { + element.removeAttribute('title'); + } +}; + /** * Process dataAttributes timeline option and set as data- attributes on dom.content + * @param {Element} element HTML element to which the attributes will be attached + * @private */ - Item.prototype._attachDataAttributes = function() { - + Item.prototype._updateDataAttributes = function(element) { if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { - - var auxiliaryData = Object.keys(this.data); + for (var i = 0; i < this.options.dataAttributes.length; i++) { + var name = this.options.dataAttributes[i]; + var value = this.data[name]; - for (var i in this.options.dataAttributes) { - var c = this.options.dataAttributes[i]; - if (auxiliaryData.indexOf(c) >= 0) { - this.dom.content.setAttribute('data-' + c, this.data[c]); + if (value != null) { + element.setAttribute('data-' + name, value); + } + else { + element.removeAttribute('data-' + name); } } } - - - }; +}; module.exports = Item; diff --git a/lib/timeline/component/item/ItemBox.js b/lib/timeline/component/item/ItemBox.js index 6bfddfcf..4a63e959 100644 --- a/lib/timeline/component/item/ItemBox.js +++ b/lib/timeline/component/item/ItemBox.js @@ -74,6 +74,8 @@ ItemBox.prototype.redraw = function() { // attach this item as attribute dom.box['timeline-item'] = this; + + this.dirty = true; } // append DOM to parent DOM @@ -97,47 +99,28 @@ ItemBox.prototype.redraw = function() { } this.displayed = true; - // update contents - if (this.data.content != this.content) { - this.content = this.data.content; - if (this.content instanceof Element) { - dom.content.innerHTML = ''; - dom.content.appendChild(this.content); - } - else if (this.data.content != undefined) { - dom.content.innerHTML = this.content; - } - else { - throw new Error('Property "content" missing in item ' + this.data.id); - } - - this.dirty = true; - } + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + // update contents + this._updateContents(this.dom.content); - // update title - if (this.data.title != this.title) { - dom.box.title = this.data.title; - this.title = this.data.title; - } + // update title + this._updateTitle(this.dom.box); - // update class - var className = (this.data.className? ' ' + this.data.className : '') + - (this.selected ? ' selected' : ''); - if (this.className != className) { - this.className = className; + // update class + var className = (this.data.className? ' ' + this.data.className : '') + + (this.selected ? ' selected' : ''); dom.box.className = 'item box' + className; dom.line.className = 'item line' + className; dom.dot.className = 'item dot' + className; - this.dirty = true; - } - - - this._attachDataAttributes(); + // update data attributes + this._updateDataAttributes(this.dom.box); - - // recalculate size - if (this.dirty) { + // recalculate size this.props.dot.height = dom.dot.offsetHeight; this.props.dot.width = dom.dot.offsetWidth; this.props.line.width = dom.line.offsetWidth; diff --git a/lib/timeline/component/item/ItemPoint.js b/lib/timeline/component/item/ItemPoint.js index c736ed7e..f9af5f6d 100644 --- a/lib/timeline/component/item/ItemPoint.js +++ b/lib/timeline/component/item/ItemPoint.js @@ -72,6 +72,8 @@ ItemPoint.prototype.redraw = function() { // attach this item as attribute dom.point['timeline-item'] = this; + + this.dirty = true; } // append DOM to parent DOM @@ -87,44 +89,27 @@ ItemPoint.prototype.redraw = function() { } this.displayed = true; - // update contents - if (this.data.content != this.content) { - this.content = this.data.content; - if (this.content instanceof Element) { - dom.content.innerHTML = ''; - dom.content.appendChild(this.content); - } - else if (this.data.content != undefined) { - dom.content.innerHTML = this.content; - } - else { - throw new Error('Property "content" missing in item ' + this.data.id); - } - - this.dirty = true; - } + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + // update contents + this._updateContents(this.dom.content); - // update title - if (this.data.title != this.title) { - dom.point.title = this.data.title; - this.title = this.data.title; - } + // update title + this._updateTitle(this.dom.point); - // update class - var className = (this.data.className? ' ' + this.data.className : '') + - (this.selected ? ' selected' : ''); - if (this.className != className) { - this.className = className; + // update class + var className = (this.data.className? ' ' + this.data.className : '') + + (this.selected ? ' selected' : ''); dom.point.className = 'item point' + className; dom.dot.className = 'item dot' + className; - this.dirty = true; - } - - this._attachDataAttributes(); + // attach HTML attributes + this._updateDataAttributes(this.dom.point); - // recalculate size - if (this.dirty) { + // recalculate size this.width = dom.point.offsetWidth; this.height = dom.point.offsetHeight; this.props.dot.width = dom.dot.offsetWidth; diff --git a/lib/timeline/component/item/ItemRange.js b/lib/timeline/component/item/ItemRange.js index 083ce4c4..63dfb30c 100644 --- a/lib/timeline/component/item/ItemRange.js +++ b/lib/timeline/component/item/ItemRange.js @@ -67,6 +67,8 @@ ItemRange.prototype.redraw = function() { // attach this item as attribute dom.box['timeline-item'] = this; + + this.dirty = true; } // append DOM to parent DOM @@ -82,46 +84,28 @@ ItemRange.prototype.redraw = function() { } this.displayed = true; - // update contents - if (this.data.content != this.content) { - this.content = this.data.content; - if (this.content instanceof Element) { - dom.content.innerHTML = ''; - dom.content.appendChild(this.content); - } - else if (this.data.content != undefined) { - dom.content.innerHTML = this.content; - } - else { - throw new Error('Property "content" missing in item ' + this.data.id); - } - - this.dirty = true; - } + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + // update contents + this._updateContents(this.dom.content); - // update title - if (this.data.title != this.title) { - dom.box.title = this.data.title; - this.title = this.data.title; - } + // update title + this._updateTitle(this.dom.box); - // update class - var className = (this.data.className ? (' ' + this.data.className) : '') + - (this.selected ? ' selected' : ''); - if (this.className != className) { - this.className = className; + // update class + var className = (this.data.className ? (' ' + this.data.className) : '') + + (this.selected ? ' selected' : ''); dom.box.className = this.baseClassName + className; - this.dirty = true; - } - - this._attachDataAttributes(); + this._updateDataAttributes(this.dom.box); - // recalculate size - if (this.dirty) { // determine from css whether this box has overflow this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; + // recalculate size this.props.content.width = this.dom.content.offsetWidth; this.height = this.dom.box.offsetHeight;